我尝试使用 ORTOOL 和 Python 生成交付计划。我的限制如下:
- 每辆车都有一个开始时间和一个结束时间
- 每辆车都有自己的存储物品容量,在仓库取走
- 每辆车都有自己的速度。
对于 1 和 3,使用 AddDimensionWithVehicleTransits 可以正常工作。对于第二个约束,如果车辆是空的,它必须返回仓库取回物品并重新开始。
我已经看过 refuel 示例,因此设置容量 < 0 的节点可以正常工作。但在我的情况下,仓库是加油点,求解器不会让车辆返回它。
我的维度是这样设置的:
routing.AddDimensionWithVehicleCapacity(
capacity_evaluator,
0,
[capacity[vehicle].get('capacity', dataconfig.default_capacity) for vehicle in data.vehicles],
True,
'Capacity'
)
基本上,最大容量为 4:
Route for Vehicle1
[LOCATION, START, CAPACITY]
['Depot', '4:0', 0]
[u'7', '9:0', 1]
[u'6', '10:0', 4]
['Depot', '11:00', 4]
我需要的:
Route for Vehicle1
[LOCATION, START, CAPACITY]
['Depot', '4:0', 0]
[u'Location1', '9:0', 1]
[u'Location2', '10:0', 4]
['Depot', '11:00', 0]
[u'Location3', '12:0', 1]
[u'Location4', '13:0', 2]
[u'Location5', '14:0', 4]
['Depot', '15:00', 0]
关于如何将加油点放到仓库的任何想法?
问候