我想通过过度约束的计划为VRP创建增量分数。我创建了一个aditional虚拟车辆,其中包括所有未计划的客户。
问题在于,当optaplanner将客户转移到其他车辆时,它会调用afterVariableChanged并使用变量名称previousStandstill,并且该客户的车辆不会刷新。然后,我不知道该客户的车辆,我不知道我是否需要增加软成本或没有(对于虚拟车辆,我无法增加成本)。
如何解决这个问题?
示例:
Optaplanner将Customer1从Vehicle1移至Vehicle2:
beforeVariableChanged: previousStandstill(Customer1), customer.GetVehicle() = Vehicle1
beforeVariableChanged: nextCustomer(Customer0), customer.GetVehicle() = Vehicle1
afterVariableChanged: nextCustomer(Customer0), customer.GetVehicle() = Vehicle1
afterVariableChanged: previousStandstill(Customer1), customer.GetVehicle() = Vehicle1
beforeVariableChanged: vehicle(Customer1), customer.GetVehicle() = Vehicle1
afterVariableChanged: vehicle(Customer1), customer.GetVehicle() = Vehicle2
当我得到afterVariableChanged:previousStandstill(Customer1),在customer.GetVehicle()中我有旧的车辆价值,我不知道是否需要增加软成本(虚拟车辆成本被忽略)。 有没有什么方法可以在afterVariableChanged中获得实际车辆 - previousStandstill而不是afterVariableChanged - vehicle。
答案 0 :(得分:1)
检查是否使用AnchorShadowVariable注释了vechicle字段:
@AnchorShadowVariable(sourceVariableName = "previousStandstill")
public VehicleNode getVehicleNode() {
return vehicleNode;
}
该注释告诉Optaplanner更新vechicle字段。