我正在研究将车队中“最慢卡车”的成本降至最低的车辆路线问题。
所以现在目标函数应该涉及两个量:
- 所有车辆的所有过渡的总和(总距离),以及
- 最昂贵路线的成本
这些价值观是如何结合起来的?我假设全局跨度系数
distance_dimension.SetGlobalSpanCostCoefficient(100)
参与?那是加权和的系数吗
cost = w*A + (100-w)*B
最慢的A
卡车的成本B
是多少?所有卡车的总距离是多少?
我正在研究将车队中“最慢卡车”的成本降至最低的车辆路线问题。
所以现在目标函数应该涉及两个量:
这些价值观是如何结合起来的?我假设全局跨度系数
distance_dimension.SetGlobalSpanCostCoefficient(100)
参与?那是加权和的系数吗
cost = w*A + (100-w)*B
最慢的A
卡车的成本B
是多少?所有卡车的总距离是多少?
不,这很简单:cost = B + A
B = 路线中所有边缘成本的总和(通常使用 设置routing.SetArcCostEvaluatorOfAllVehicles(arc_cost_callback)
)
和A = w * (max{end} - min{start})
注意:B
需要帮助求解器找到第一个好的解决方案(否则像 CHEAPEST_PATH 这样的策略会表现得很奇怪,因为选择最便宜的没有成本......),同时A
通过最小化 Max cumul Var 来帮助“分配”工作。但它仍然不是真正的分散激励
,例如假设一个维度cumul_start = 0
和 4 条路线的成本为 0,0,6,6 它与 2,2,2,6 一样好(或 6,6,6,6 但B
这里更高)。
即max(cumul_end) == 6
在这两种情况下。
我在文档中添加了关于 GlobalSpan 的部分。
ps:看看https://github.com/google/or-tools/issues/685#issuecomment-388503464 pps:在文档示例中,如果我记得清楚,请
尝试更改1800 或 3500 ;)
ppps:注意比您可以在多个维度上拥有多个 GlobalSpan,而目标只是所有这些成本的总和乘以它们各自的系数......maximum_distance = 3000