OptaPlanner:与分数相关的 "constraint match" 只是语义上的东西吗?
OptaPlanner: Is the "constraint match" associated with a score just a semantical thing?
我对 OptaPlanner 约束流有疑问 API。约束匹配仅用于计算总分,旨在帮助用户查看分数结果,还是该信息用于寻找更好的解决方案?
“用于找到更好的解决方案”是指信息用于在局部搜索阶段获得下一步行动。
那么我惩罚哪个规划实体有关系吗?
目前,我正在研究一个考试调度程序。一个要求是最佳地分配单个学生的考试。
每个学生的考试次数各不相同。因此,我写了一个成本函数,给出了一个归一化的值,表示学生的考试分布情况。
假设图片中的考试日程成本为 80。现在,我需要将这个值分解为个别考试。有两种不同的方法可以做到这一点:
- 选项 A:用 10 (10*8 = 80) 惩罚每个考试。
- 选项B:根据每次考试的实际影响进行处罚=>只有最后一周的考试被处罚,因为第一周和第二周的考试分布是好的。
显然,选项 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.
我对 OptaPlanner 约束流有疑问 API。约束匹配仅用于计算总分,旨在帮助用户查看分数结果,还是该信息用于寻找更好的解决方案?
“用于找到更好的解决方案”是指信息用于在局部搜索阶段获得下一步行动。
那么我惩罚哪个规划实体有关系吗?
目前,我正在研究一个考试调度程序。一个要求是最佳地分配单个学生的考试。 每个学生的考试次数各不相同。因此,我写了一个成本函数,给出了一个归一化的值,表示学生的考试分布情况。
假设图片中的考试日程成本为 80。现在,我需要将这个值分解为个别考试。有两种不同的方法可以做到这一点:
- 选项 A:用 10 (10*8 = 80) 惩罚每个考试。
- 选项B:根据每次考试的实际影响进行处罚=>只有最后一周的考试被处罚,因为第一周和第二周的考试分布是好的。
显然,选项 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.