我正在使用OR-Tool解决VRP问题。我已经对文档中的示例性问题做了一些实验,并设法编写了一个可运行的程序,但是,我不了解SetGlobalSpanCostCoefficient的目的以及如何正确设置它。根据此站点,它是所有路径中全局跨度成本与最大和最小尺寸值之差之间的系数。因此,此全局成本是所有路线成本的总和,并且是根据“维度”的“容量”参数计算得出的,并像最大容量限制器一样使用。
我的代码中的问题是,除非我在AddDimension函数中调整容量(最大路径距离)并手动调整globalSpanCostcoefficient,否则不会使用somme容器。我有1000个节点:看起来像这样的距离分布(以米为单位):
# Add Distance constraint.
distance_dimension_name = 'Distance'
routing.AddDimension(
transit_callback_index,
0, # no slack
25000, # vehicle maximum travel distance
True, # start cumul to zero
distance_dimension_name)
distance_dimension = routing.GetDimensionOrDie(distance_dimension_name)
distance_dimension.SetGlobalSpanCostCoefficient(100)
在这里,我得到了5辆和6辆汽车的最大路线距离为2610m,它分为两条路线。我尝试添加像它描述的维数这里却变得太慢,即使是100个节点,结果与5辆相同。
跨度成本用于衡量空闲时间。
请参阅:SetGlobalSpanCostCoefficient doc条目
它与弧度成本不同,因为(1)它在节点处合并了松弛部分,并且(2)不计算在仓库的初始等待时间。
在您的示例中,您都禁止懈怠,并且将第一个累计数强制为0。因此SpanCost是无用的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句