我正在开发一个用于车辆路线优化的 OptaPlanner 项目,并且我有一个特定的要求。我们面临着规划过度受限的问题,即跳过客户停靠站。我们决定采用一种可行的解决方案,即添加虚拟值以捕获文档中提到的未分配实体。我想根据优化过程自动调整我域中某些 BusStop 实体的 isVirtual 属性。
这是我的域模型的简化版本:
public class BusStop {
private boolean isVirtual;
// Other properties and getters/setters
}
我希望此更改是动态的,并影响优化过程以提高总体分数,就好像 isVirtual 属性是分数计算的一部分一样。
任何人都可以提供一些指导或示例来说明如何在 OptaPlanner 中实现此行为吗?
到目前为止已完成的工作:在优化过程中,当总线的总路线距离超过某个阈值(例如 150,000 米)时,我会在约束提供程序实现本身中自动将某些 BusStop 实体的 isVirtual 属性设置为 true,但这是也正在实施其他解决方案。
我不会将
isVirtual
作为计划变量,这会导致搜索空间爆炸。
相反,我会添加一个中等约束(在切换到 HardMediumSoftLongScore 后)来惩罚分配的虚拟车辆的数量。
这样,您就不必应对变化无常的 150,000 米阈值等问题。