如何通过 optaplanner 引擎获得没有任何硬分的解决方案
How to get a solution without any hard score by optaplanner engine
我们想找到一种方法来避免 optaplanner 解决方案的硬分。
在我们的企业优化项目中,不允许生成具有硬约束分数的解决方案。但实际上 Optaplanner 引擎生成的结果总是有一些带有硬约束分数的分配。当这种情况发生时,我们将尝试将实体移动到当前的空分配,而不是清理硬分数。
上述解决方案似乎不是避免硬分的正确方法。是否有其他方法可以实现该目标?
没有任何算法配置示例和问题示例,很难知道问题出在哪里,但希望这对您有所帮助。
如果您在解决方案中遇到约束违规(因为这是硬分数),则意味着找不到可行的解决方案。这可能有几个原因:
* 没有可行的解决方案
* 优化算法步进速度不够快或终止使其过早终止。
根据手头的问题,可能很难验证是否存在可行的解决方案,但可以起草一个简单的问题,由 Optaplanner 解决以验证它是否可以找到它(它应该能够).如果不是,则建模或 objective 函数有问题。
对于第二点,最好的前进方式是跟踪分数计算速度,最好是每秒数千步(> 1000 /秒)。如果不调查使用 Drools
或 IncrementalScoreCalculator
进行禁食计算。此外,使用 benchmarker 模块来查看您的算法是否已正确配置。
最后,你们有本地搜索阶段吗?与具有本地搜索阶段的解决方案相比,仅构建阶段更有可能 return 不可行的解决方案。
在用户指南中,请参阅过度约束规划。 nullable=true
的方法和对每个空分配的中分惩罚应该做你想做的。也见K88的回答。
我们想找到一种方法来避免 optaplanner 解决方案的硬分。
在我们的企业优化项目中,不允许生成具有硬约束分数的解决方案。但实际上 Optaplanner 引擎生成的结果总是有一些带有硬约束分数的分配。当这种情况发生时,我们将尝试将实体移动到当前的空分配,而不是清理硬分数。
上述解决方案似乎不是避免硬分的正确方法。是否有其他方法可以实现该目标?
没有任何算法配置示例和问题示例,很难知道问题出在哪里,但希望这对您有所帮助。
如果您在解决方案中遇到约束违规(因为这是硬分数),则意味着找不到可行的解决方案。这可能有几个原因: * 没有可行的解决方案 * 优化算法步进速度不够快或终止使其过早终止。
根据手头的问题,可能很难验证是否存在可行的解决方案,但可以起草一个简单的问题,由 Optaplanner 解决以验证它是否可以找到它(它应该能够).如果不是,则建模或 objective 函数有问题。
对于第二点,最好的前进方式是跟踪分数计算速度,最好是每秒数千步(> 1000 /秒)。如果不调查使用 Drools
或 IncrementalScoreCalculator
进行禁食计算。此外,使用 benchmarker 模块来查看您的算法是否已正确配置。
最后,你们有本地搜索阶段吗?与具有本地搜索阶段的解决方案相比,仅构建阶段更有可能 return 不可行的解决方案。
在用户指南中,请参阅过度约束规划。 nullable=true
的方法和对每个空分配的中分惩罚应该做你想做的。也见K88的回答。