如何通过 optaplanner 引擎获得没有任何硬分的解决方案

How to get a solution without any hard score by optaplanner engine

我们想找到一种方法来避免 optaplanner 解决方案的硬分。

在我们的企业优化项目中,不允许生成具有硬约束分数的解决方案。但实际上 Optaplanner 引擎生成的结果总是有一些带有硬约束分数的分配。当这种情况发生时,我们将尝试将实体移动到当前的空分配,而不是清理硬分数。

上述解决方案似乎不是避免硬分的正确方法。是否有其他方法可以实现该目标?

没有任何算法配置示例和问题示例,很难知道问题出在哪里,但希望这对您有所帮助。

如果您在解决方案中遇到约束违规(因为这是硬分数),则意味着找不到可行的解决方案。这可能有几个原因: * 没有可行的解决方案 * 优化算法步进速度不够快或终止使其过早终止。

根据手头的问题,可能很难验证是否存在可行的解决方案,但可以起草一个简单的问题,由 Optaplanner 解决以验证它是否可以找到它(它应该能够).如果不是,则建模或 objective 函数有问题。

对于第二点,最好的前进方式是跟踪分数计算速度,最好是每秒数千步(> 1000 /秒)。如果不调查使用 DroolsIncrementalScoreCalculator 进行禁食计算。此外,使用 benchmarker 模块来查看您的算法是否已正确配置。

最后,你们有本地搜索阶段吗?与具有本地搜索阶段的解决方案相比,仅构建阶段更有可能 return 不可行的解决方案。

在用户指南中,请参阅过度约束规划nullable=true 的方法和对每个空分配的中分惩罚应该做你想做的。也见K88的回答。