当前位置: 首页 > 知识库问答 >
问题:

OptaPlanner:与分数相关的“约束匹配”只是语义上的东西吗?

汪欣德
2023-03-14

我有一个关于OptaPlanner约束流API的问题。约束匹配是否仅用于计算总分,并用于帮助用户查看分数结果,还是这些信息用于找到更好的解决方案?

“用于找到更好的解决方案”我的意思是,这些信息用于在局部搜索阶段获得下一步。

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

目前,我正在开发一个考试时间表。一个要求是优化单个学生的考试分配。每个学生的考试次数各不相同。因此,我写了一个成本函数,给出了一个归一化值,表示学生的考试分布得有多好。

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

  • 选项A:每次考试罚10分(10*8=80分)

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

共有1个答案

苗学民
2023-03-14

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

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

关于你的第二个问题:是的,你处罚哪个实体很重要。事实上,你想惩罚每一个打破你约束的实体。理想情况下,如果它比其他实体更容易打破约束,那么它应该受到更多的惩罚——这样,你就可以避免得分陷阱。

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

在这种情况下,由于您希望实现每个学生的公平,我建议您的约束不会惩罚考试,而是惩罚学生。每个学生,将考试分组,并应用一些公平性约束收集器。如果你这样做,你将能够创建每个学生的公平函数,并使用其值作为惩罚。

OptaPlanner网球的例子展示了一种实现公平的方法。您可能还对OptaPlanner博客上的更大公平性讨论感兴趣。

 类似资料:
  • 我在单元格A1和B1中放置了两个日期时间值。约会时间精确41703.0416666667。一个是从SQL数据库输出,另一个是手工编写的。 =if(A1=B1,1,0)的结果为1。=匹配(B1,A1,0)的结果为#N/A。 有人对为什么会发生这种情况有什么理论吗?

  • 我试图解决一个调度问题,它围绕着以下安排: 是否可以使用和实现约束?我尝试过以下路线: 我认为应该没有问题,但不确定如何获得这个来实现我想要的。这里是否需要?还是有一个不同的、更好的整体方法? 作为参考,ShiftAssignment类可以很容易地拥有如下所示的方法:

  • 我想为VRP创建一个过度约束规划的增量分数。我创建了一个传统的虚拟车辆,其中包括所有计划外的客户。 示例: Optaplanner将Customer1从Vehicle1移动到Vehicle2: 当我得到AfterVariableChanged:previousStandstill(Customer1)时,在Customer.getVehicle()中,我有旧车辆的价值,我不知道是否需要添加软成本(

  • 我正在评估OptaPlanner的一个规划问题。我已经看到了几个关于这个话题的回应,但没有一个完全像我正在寻找的。 似乎OptaPlanner在求解时需要静态数量的实体/变量。 如有任何指示,将不胜感激。

  • 我正在使用MS Visual Studio Professional 2012,版本:11.0.51106.01。因为过去几天意识到我不再能够使用模板JavaScript创建新项目。我以前能够做到这一点。我猜这可能是由于一些系统更新而发生的。 以下是我尝试创建新项目时的错误日志: 没有找到与约束匹配的导出:ComptName Microsoft。VisualStudio。文本。ITextDocum

  • 通常,要关闭Android设备的电源,当然要通过电源按钮。 您还可以执行和。 但在Android系统中,我看不到关闭设备的方法。如果没问题的话,我很想把树莓圆周率的功率切断,但这可以接受吗?它会损坏SD卡吗?