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

使用OptaPlanner对VRP解决方案中的分数进行优先排序

徐学潞
2023-03-14

我正在使用optaplanner来解决我的VRP问题。我有几个约束提供程序,例如:一个用于强制功能,另一个用于强制关于到达时间的TW,两者都很难。在优化结束时,它返回一个负分数的路线,当我分析约束时,我发现它是车辆容量约束的产物。然而,我认为在我的问题中,如果车辆不能满足客户的需求,就不能以车辆准时到达(满足TW的约束)为目标。这就是为什么我要求我定义的容量约束(重量和体积)比时间窗约束有更多的权重/优先级。

问题:我如何配置求解器,或者我应该考虑什么来应用所有的硬约束,但是使一些像容量的约束比其他的更有权重?

永远感激你的建议和帮助

共有1个答案

郜杰
2023-03-14

我并不是OptaPlanner方面的专家,但如果您使用penalizeConfigurable(...)而不是penalize(...),那么每个约束惩罚(或奖励)都分为两部分。然后,每个约束分数将被计算为您在ConstrainConfig文件中声明的ConstraintWeight乘以MatchWeight,这就是您如何实现与期望结果的偏差。比如,失败止损的数量可能是平方,变成指数惩罚,而不仅仅是线性惩罚。

ConstaintWeights可以在解决方案之间重新配置,以调整惩罚的重要性,将其设置为零将完全否定它。MatchWeight是一个实现细节,即使在我看来,您在开发时也要进行调整。至少我是这么看的。

 类似资料:
  • 基于这个来自云平衡问题的示例,我尝试将客户从工作解决方案中删除,如下所示: 结果我得到了这个例外: java.lang.IllegalStateException:实体(Customer--6361356485874019865)有一个值为(Customer--902742678799526425)的变量(previousStandstill),该变量有一个值为(null)的sourceVaria

  • 我正在尝试解决类似于员工名册的问题。我面临的问题是,每次我运行求解器时,它都会生成不同的任务。这使得更难调试为什么选择特定案例而不是另一个案例。为什么会这样? 附注:我的任务有许多硬性限制,可能无法全部满足(大多数情况下,我仍然看到一些负面的硬性评分)。所以我的终止策略是基于< code > unimprovedSecondsSpentLimit 。会不会是这个原因?

  • 我有以下CVRPTW问题,我正在尝试使用OptaPlanner找到一个好的解决方案。时间为hh: mm: ss格式。 我的DRL文件是这样的。此外,我还定义了一个与准备时间之前到达相关的硬约束。我的解算器配置如下,但终止标记不同: 这是问题陈述: 我有2辆车,容量为10件物品和1个仓库。 这是解决方案(客户按车辆分组,按到达时间排序): (D=需求,Ar.T=到达时间,上一个D=与上一个位置的距离

  • 我的优先级队列有问题,无法正确排序对象值。 我的代码获取一个文本字符串,并获取唯一字符的数量,同时计算每个唯一字符的频率。然后将其放入字符和整数类型的映射中,并分别指定键和值。 然后,它获取映射的每个条目,并将其放入一个PQNode对象中,该对象也是Character、Integer类型,然后将其提供给优先级队列。 优先级队列是通过PQN中的comareTo方法按频率(值)从最低到最高对PQNod

  • 强大的textHello Optaplanner专家, 爱丽丝