【发布时间】:2020-03-27 12:42:01
【问题描述】:
我正在使用 OptaPlanner 7.33.0 解决 CloudBalancing 之类的问题。
返回的 PlanningSolution 对象包含计算得出的最佳分数,但解决方案不匹配。 我用非常小的数据集调试了所有解决方案,返回的解决方案似乎是最新的,它没有返回的分数。
例子:
- 1:得分最高的方案得分为0hard/-1197medium/4soft
- 2:返回的解决方案得分为0hard/-1198medium/2soft
- 求解器返回一个 PlanningSolution 对象,其中包含解决方案 1 的分数,但包含解决方案 2 的内容
这是我的计划解决方案课程
@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
}
请求类
@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,我像这样使用它们:
- hard : 我只设置为 0 或 -1。如果 -1 我不计算其他分数,因为 -1 表示该解决方案不适用
- medium : 价格,例如如果解决方案成本为 100 欧元,我的中等分数将为 -100
- soft :如果 2 个价格相同,我会使用此分数来选择具有更多空组的解决方案(每个组的请求数最多)。这个分数永远不会是负数
我将继续对此进行调查,但如果您有任何建议以获得正确的结果,您可以告诉我。
但主要问题是,您知道这是否是正常的 OptaPlanner 行为吗? 如果正常的话他会返回一个不匹配的分数和解决方案?
【问题讨论】:
-
通过在我的求解器配置中添加
<environmentMode>FAST_ASSERT</environmentMode>进行修复,但我认为这不是最佳方式。我将在我的项目中使用它,等待任何建议或解释
标签: optaplanner