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=10w=10000,但我想这只是反复试验 仅以使用 1000 为例,我只是将 SpanCost 的数字从路线成本中“移位”,因此我可以在眨眼间看到/检查这两个值。否则,您需要回答这个问题相对于其他成本值增加 1 个单位的成本是多少并相应地设置系数 -> 即开始在约束之间进行权衡(例如,我应该将路线增加 w*N 公里还是使用固定成本为 M) 的其他车辆...

以上是关于GlobalSpanCoefficient 背后的直觉的主要内容,如果未能解决你的问题,请参考以下文章

ScreenPointToRay,该功能的背后是啥?

色轮背后的数学是啥

一番数据挖掘背后,他们挖出了川普账号背后性情完全不同的两个人...

主动降噪背后的理论是啥?

揭秘天猫双11背后:20万商家600万张海报,背后只有一个鹿班

揭秘天猫双11背后:20万商家600万张海报,背后只有一个鹿班