我们想找到一种方法来避免optaplanner解决方案的硬分。
在我们的企业优化项目中,不允许生成具有严格约束分数的解决方案。但是实际上,由Optaplanner引擎生成的结果始终具有一些带有硬约束分数的分配。当发生这种情况时,我们将尝试将实体移至当前的空分配,而不是清除硬分。
上述解决方案似乎不是避免硬分的正确方法。还有其他方法可以实现该目标吗?
答案 0 :(得分:1)
在没有任何算法配置示例和问题示例的情况下,很难知道问题出在哪里,但是希望这会有所帮助。
如果在解决方案中遇到约束违规(这就是硬分),则意味着找不到可行的解决方案。这可能有两个原因: *首先没有可行的解决方案 *优化算法的步速不够快或终止会导致终止时间过早。
根据眼前的问题,可能很难验证是否存在可行的解决方案,但是可以提出一个简单的问题,由Optaplanner解决,以验证它是否可以找到它(应该可以)。如果不是,则建模或目标函数出了点问题。
对于第二点,最好的前进方法是跟踪分数计算速度,最好应每秒几千步(> 1000 / sec)。如果没有进行调查,请使用Drools
或IncrementalScoreCalculator
进行禁食计算。另外,使用基准测试器模块查看您的算法是否配置正确。
最后,您有本地搜索阶段吗?与具有局部搜索阶段的解决方案相比,仅在建设阶段更可能返回不可行的解决方案。
答案 1 :(得分:1)
在用户指南中,请参阅过度约束的计划。 nullable=true
的方法和对每个空作业的中等分数惩罚应该可以满足您的要求。也请参阅K88的答案。