GlobalSpanCoefficient 背后的直觉
Posted
技术标签:
【中文标题】GlobalSpanCoefficient 背后的直觉【英文标题】:The intuition behind the GlobalSpanCoefficient 【发布时间】:2018-05-15 13:06:24 【问题描述】:我正在关注vehicle routing problem,它可以最大限度地降低车队中“最慢卡车”的成本。
所以现在目标函数应该涉及两个量:
-
所有车辆的所有过渡的总和(总距离),以及
最昂贵路线的成本
这些值是如何组合的?我假设全局跨度系数
distance_dimension.SetGlobalSpanCostCoefficient(100)
参与?那是加权和的系数吗
cost = w*A + (100-w)*B
A
是最慢卡车的成本,B
是所有卡车的总距离?
【问题讨论】:
【参考方案1】:不,只是:cost = B + A
其中 B = 路线中所有边缘成本的总和(通常使用 routing.SetArcCostEvaluatorOfAllVehicles(arc_cost_callback)
设置)
和A = w * (maxend - minstart)
注意:B
需要帮助求解器找到第一个好的解决方案(否则,像 CHEAPEST_PATH 这样的策略会表现得很奇怪,因为选择最便宜的没有成本......),而 A
有助于“分发" 通过最小化 Max cumul Var 来工作。 但这仍然不是真正的分散激励
例如假设具有cumul_start = 0
的维度和成本为 0,0,6,6 的 4 条路线与 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:在文档示例中,如果我记得清楚,请尝试将 maximum_distance = 3000
更改为 1800 或 3500 ;)
ppps:请注意,您可以在多个维度上拥有多个 GlobalSpan,而目标只是所有这些成本的总和乘以它们各自的系数......
【讨论】:
对w
的大小有什么想法吗?另外,求解器可能会尝试增加minstart
以减少A
对目标函数的贡献,如果fix_start_cumul_to_zero=False
,是吗?
我认为有可能,前提是这种增加也不会增加 maxend。此外,您可能会影响 B 成本,这可能会阻止这种情况。
幅度?抱歉没明白。如果我记得很清楚,所有成本都存储为 int64 并且 w 只是您应用于维度的标量,例如B 以公里为单位,您有 4 辆车分别行驶 1、2、3、4 公里,因此 B 将是10
。现在假设 A 成本在 秒 所有车辆从 0 开始,最长路线需要 30 分钟 A 将是 w * 1800
(如果您以秒为单位存储您的值)。不幸的是 w 是一个 int 所以你不能“除”(即乘以 0.something 等)
我想知道为什么选择w=100
而不是w=10
或w=10000
,但我想这只是反复试验
仅以使用 1000 为例,我只是将 SpanCost 的数字从路线成本中“移位”,因此我可以在眨眼间看到/检查这两个值。否则,您需要回答这个问题相对于其他成本值增加 1 个单位的成本是多少并相应地设置系数 -> 即开始在约束之间进行权衡(例如,我应该将路线增加 w*N 公里还是使用固定成本为 M) 的其他车辆...以上是关于GlobalSpanCoefficient 背后的直觉的主要内容,如果未能解决你的问题,请参考以下文章
一番数据挖掘背后,他们挖出了川普账号背后性情完全不同的两个人...