我正在考虑vehicle routing problem,这可以最大限度地减少舰队中“最慢的卡车”的成本。
所以现在目标函数应该涉及两个数量:
这些价值如何结合?我假设全局跨度系数
distance_dimension.SetGlobalSpanCostCoefficient(100)
参与了吗?这是加权和的系数
cost = w*A + (100-w)*B
其中A
是最慢卡车的成本,B
是所有卡车的总距离?
答案 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,而目标只是所有这些成本的总和乘以它们各自的系数......