0

我仍在使用 OptaPlanner 来优化类似于 VehicleRoutingExample 的链式规划问题。我的计划实体有一个计划变量,它是另一个计划实体。分数是 HardSoftScores。

我已经初始化了一个 IncrementalScore 来解决我的运行时问题,但是有些东西不能正常工作,我无法找到原因。(带调试、system.out……等……)

问题是求解器没有使用 IncrementalScore 创建我的测试数据集的可行解决方案。我知道有可能找到一个可行的解决方案,因为求解器使用我的 EasyScore 创建了一个。

EasyScore 创建的最佳解决方案给了我分数:(0hard/-151763soft) 当 IncrementalScore 解决我得到一些奇怪的值。

solver.getBestsolution().getScore() 给出的分数是 (-25hard/-207111soft),当我实例化一个额外的 IncrementalScoreCalculator 并让它计算 bestSolution 的分数时,我得到的值是 (-34hard/-207111soft)。我检查了解决方案,发现第一个值是错误的,但第二个值是“正确的”(但不可行)。

有人知道错误在哪里吗?还是有其他方法可以找到原因?

4

1 回答 1

1

在手册中,请参阅“5.3.6. 无效分数检测”一章,了解简单和增量分数计算何时不同步。

<environmentMode>FULL_ASSERT</environmentMode>
...
<scoreDirectorFactory>
  <scoreDefinitionType>...</scoreDefinitionType>
  <incrementalScoreCalculatorClass>...IncrementalScoreCalculator</incrementalScoreCalculatorClass>
  <assertionScoreDirectorFactory>
    <easyScoreCalculatorClass>...EasyScoreCalculator</easyScoreCalculatorClass>
  </assertionScoreDirectorFactory>
</scoreDirectorFactory>

然后将两个实现中的约束类型注释为零,以不同方式实现的约束。看起来这是您计算无效的硬约束之一。

于 2014-10-24T13:31:11.487 回答