问题描述
您好,感谢您的时间! (英语不是我的母语,所以希望你能理解)
我在 IBM ILOG CPLEX 中对以下 VRP 建模时遇到问题:
- 有一定数量的货车(约 1300 辆)和一定数量的订单(约 2500 辆)。
- 每个订单都有自己的时间窗口、完成时间和完成收入。
- 每辆货车可以完成 >= 0 个订单。
- 有些订单可能仍未完成。
- 空的转换(从订单到订单)有完成的时间和转换的成本。
- 禁止一些空的过渡(例如,从订单的加载点到订单的 5 点)
- 有些货车无法完成某些订单。
目标 -> 最大化收入(完成订单的收入 - 空转成本)
我已经针对 1-6 个条件解决了这个问题,但我无法处理条件 7。
两者:允许使用 CP 和 CPLEX 引擎。
下面我附上一个带有注释的源数据示例。
我很乐意获得完整模型,或此类模型的示例,或任何建议和参考, 提前致谢!
附言欢迎您更改数据结构和名称。也可以有成组的货车,这对于特定的顺序是不允许的,而不是每对都有一个矩阵。
// number of wagons
wagons = 3;
// number of orders
orders = 4;
// income of each order
orderIncome = [20000 10000 20000 2500];
// duration of each order
orderDuration = [55 70 65 110];
// end of time window for each order
orderWindowEnd = [100 250 100 300];
// matrix of size (orders x wagons),where 0 means wagon j can NOT take order i
WagonToOrderBan = [
[0 1 1]
[0 1 0]
[1 0 1]
[1 1 0]
];
// matrix of size (orders x orders ),where 0 means empty transition between
// order i to order j is NOT allowed
OrderToOrderBan = [
[1 1 1 0]
[1 0 1 1]
[1 1 0 1]
[1 1 1 1]
];
// transition from order to order cost
emptyRate = [
[550 1100 1100 300]
[550 1150 500 900]
[1200 600 800 350]
[1200 600 750 300]
[840 1200 200 350]
];
// длительность порожнего рейса
emptyDuration= [
[55 110 115 30 195]
[55 115 50 95 160]
[120 60 85 185 35]
];
解决方法
您说您不能对约束 7 进行建模,但它似乎并不是最难制定的。你的约束 1 到 6 的模型是什么? 如果您想使用 CP Optimizer 调度建模(如果货车和订单的数量不是太高),您可以查看 OPL sched_setup.mod 示例(不是路由,而是 machine=wagons 上的调度问题,设置时间和禁止过渡)……但是如果订单可以由几辆货车完成,这将完全改变问题。您还可以查看 sched_trolley2 以获取用于运输物品的手推车示例(在车间环境中)。而且,如果每辆货车只会执行几次移动(2 或 3,货车上的订单比例为 2500/1300),也许可以使用更好的模型来决定,从货车的角度来看,哪些是提供 2 或 3 个订单…… 干杯,