OptaPlanner:与分数相关的 "constraint match" 只是语义上的东西吗?

OptaPlanner: Is the "constraint match" associated with a score just a semantical thing?

我对 OptaPlanner 约束流有疑问 API。约束匹配仅用于计算总分,旨在帮助用户查看分数结果,还是该信息用于寻找更好的解决方案?

“用于找到更好的解决方案”是指信息用于在局部搜索阶段获得下一步行动。

那么我惩罚哪个规划实体有关系吗?

目前,我正在研究一个考试调度程序。一个要求是最佳地分配单个学生的考试。 每个学生的考试次数各不相同。因此,我写了一个成本函数,给出了一个归一化的值,表示学生的考试分布情况。

假设图片中的考试日程成本为 80。现在,我需要将这个值分解为个别考试。有两种不同的方法可以做到这一点:

显然,选项 B 在语义上是正确的。但是选项的选择会影响求解过程吗?

约束匹配有助于向人类解释分数。它们不会以任何方式影响求解器的移动方式或您将获得的解决方案。事实上,ScoreManager 能够在求解器完成后计算约束匹配,或者计算以前从未通过求解器的解决方案。

(注意:不过,约束匹配确实会影响性能。由于所有的对象迭代和创建,它们都会减慢一切。)

关于你的第二个问题:是的,你惩罚哪个实体并不重要。事实上,您想惩罚每个违反约束的实体。理想情况下,如果它比其他实体更多地打破约束,它应该受到更多惩罚 - 这样,您就可以避免得分陷阱。

根据对问题的编辑进行编辑:

在这种情况下,既然你想实现每个学生的公平,我建议你的约束不要惩罚考试,而是惩罚学生。每个学生,将您的考试分组并应用一些公平性 ConstraintCollector。如果你这样做,你将能够创建一个每个学生的公平函数并将其值用作你的惩罚。

OptaPlanner Tennis example shows one way of doing fairness. You may also be interested in a larger fairness discussion on the OptaPlanner blog.