我正在探索optaplanner,我发现它给了我一个最好的解决方案以及一些得分值,如-4Hard / -3hard。
我希望获得有关此分数的更多信息,例如列出在给定解决方案中不满足的硬约束和软约束,以便用户能够稍微更改约束以获得更好的解决方案。
是否有可能在optaplanner中,如果可以,怎么样?
答案 0 :(得分:0)
您的硬/软分数取决于您的实施。
从Optaplanner中的示例中获取 CloudBalancingEasyScoreCalculator (see docs)。 你看到分数实际上是累积的总和。 Optaplanner没有机会知道该总和中考虑的每个约束的细节。 无处定义一组约束。我们只是将它们作为全球目标收集起来。
解决方案1 :在这种情况下,解决方案是在计算分数时跟踪自己不受尊重的约束。
在同一个例子中,您可以在此处插入此处理:
// Hard constraints
int cpuPowerAvailable = computer.getCpuPower() - cpuPowerUsage;
if (cpuPowerAvailable < 0) {
hardScore += cpuPowerAvailable;
cloudbalance.trackUnrespectedHardConstraint(...)
}
而不是
// Hard constraints
int cpuPowerAvailable = computer.getCpuPower() - cpuPowerUsage;
if (cpuPowerAvailable < 0) {
hardScore += cpuPowerAvailable;
}
我没有根据您的需要探索可能是解决方案2 的Drools得分配置。
希望这有帮助。