我们正在使用 optaplanner 来尝试使用时间窗口改进我们当前的车辆路线。我们有一些小问题,我们不确定如何克服:
我们目前对第二个问题的想法是创建两个新类:
public class ReturningCustomer extends TimeWindowedCustomer {
protected int returningId;
Run Code Online (Sandbox Code Playgroud)
和
public class ReturnToDepot extends TimeWindowedCustomer {
protected int returningId;
Run Code Online (Sandbox Code Playgroud)
其中第一个为客户建模特殊包裹,这些包裹将被退回。第二个是代表司机返回车厂的“假”客户。ReturnToDepot 将与仓库本身具有相同的位置。在 Drools 中比较他们的 id 将确保他们在同一辆车的路径上。将 ReturnToDepot 视为另一个客户有望确保规划人员找到将其放入路线的最佳方式。
但是,对于午休建模,我们不太确定该怎么做。
有没有更好的方法来建模?模拟午休时间的最佳方式是什么?是否有任何样本可以为我们指明正确的方向?
谢谢。
从 TimeWindowed VRP 示例开始,您可以像这样执行这 2 个请求:
午休时间:调整 中的VariableListener到达时间计算,以便在第 3 小时之后的任何到达将在到达时间上再增加 30 分钟。根据您的业务需求 - 例如,他们只能在不同地点之间休息,而不是在不同地点休息 - 可选择添加硬约束以确保在第 3 小时和第 5 小时之间到达。
及时返回 depot:在 Vehicle 上添加一个 shadow 变量调用arrivalBackToDepotTime并使用它variableListenerRef来重用ArrivalTimeUpdateVariableListener然后还需要更新该字段。添加硬约束以检查每个客户的车辆arrivalBackToDepotTime是否少于客户到达站点所需的时间。
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |