GlobalSpanCoefficient背后的直觉

时间:2018-05-15 13:06:24

标签: python-3.x or-tools

我正在考虑vehicle routing problem,这可以最大限度地减少舰队中“最慢的卡车”的成本。

所以现在目标函数应该涉及两个数量:

  1. 所有车辆的所有过渡的总和(总距离)和
  2. 最昂贵路线的费用
  3. 这些价​​值如何结合?我假设全局跨度系数

    distance_dimension.SetGlobalSpanCostCoefficient(100)

    参与了吗?这是加权和的系数

    cost = w*A + (100-w)*B
    

    其中A是最慢卡车的成本,B是所有卡车的总距离?

1 个答案:

答案 0 :(得分:0)

不,它只是: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 here的部分。

ps:看看https://github.com/google/or-tools/issues/685#issuecomment-388503464
pps:在doc示例中,如果我记得很清楚,请尝试将maximum_distance = 3000更改为1800或3500;)
ppps:注意,你可以在几个维度上拥有几个GlobalSpan,而目标只是所有这些成本的总和乘以它们各自的系数......