OptaPlanner return 最好的分数但不是它的相关解决方案

OptaPlanner return the best score but not its associated solution

我正在使用 OptaPlanner 7.33.0 解决类似 CloudBalancing 的问题。

returned PlanningSolution 对象包含最佳计算分数,但解决方案不匹配。 我用一个非常小的数据集调试了所有解决方案,returned 解决方案似乎是最新的,它没有 returned 分数。

示例:

这是我的规划方案class

@PlanningSolution
public class GroupSolution
{
    @PlanningEntityCollectionProperty
    private List<Request> request;

    @ValueRangeProvider(id = "groupRange")
    @ProblemFactCollectionProperty
    private List<Group> proposedGroups;

    @PlanningScore
    private HardMediumSoftScore score;

    // Others planning fact that I use in my EasyScoreCalculator
}

请求class

@PlanningEntity
public class Request
{
    @PlanningVariable(valueRangeProviderRefs = {
        "groupRange"
    }, nullable = false)
    private Group group;

    // Other properties
}

配置

<?xml version="1.0" encoding="UTF-8"?>
<solver>
  <scanAnnotatedClasses>
    <packageInclude>my.package.domain</packageInclude>
  </scanAnnotatedClasses>

  <!-- Score configuration -->
  <scoreDirectorFactory>
    <initializingScoreTrend>ONLY_DOWN</initializingScoreTrend>
    <easyScoreCalculatorClass>my.package.MyEasyScoreCalculator</easyScoreCalculatorClass>
  </scoreDirectorFactory>

  <constructionHeuristic />

  <termination>
    <minutesSpentLimit>5</minutesSpentLimit>
  </termination>
</solver>

我正在使用具有 3 个评分级别的 EasyScoreCalculator,我是这样使用它们的:

我将继续对此进行调查,但如果您有任何建议以获得正确的结果,请告诉我。

但主要问题是,您知道这是否是正常的 OptaPlanner 行为吗? 如果正常,在哪种情况下他会 return 一个不匹配的分数和解决方案?

1) 听起来像是乐谱损坏。鉴于 FAST_ASSERT "fixes it"(不是),运行 和 <environmentMode>NON_INTRUSIVE_FULL_ASSERT</environmentMode>,如果它抛出异常,它可能会指出真正的问题,因为它检测到早前的问题。

2) 也可能是由于计划实体克隆腐败。这更难被发现。您是否使用自定义解决方案克隆器?是否有任何域 classes 引用了规划实体 class(es) 或规划解决方案(因此引用 RequestGroupSolution)?任何 class 具有包含 RequestGroupSolution 实例的集合或地图的实体?