or-tools - 如何分配累积变量的最小值和最大值?
问题描述
我创建了一个路由问题并为其添加了一些维度。找到了解决方案分配,我想知道每个索引处的累积值。我注意到CumulVar
分配的 不仅有Value
方法,而且还有Min
方法Max
。显然,累积变量是以它们可以表示间隔的方式实现的。我可以看到如何设置
slack_max>0
fix_start_cumul_to_zero=False
为累积变量引入了歧义,因为它们是如何开始以及在每次停止时添加多少松弛的选择。但
问题:每个索引的Min
and是如何计算的?Max
解决方案
您可以从中获取给定节点索引的最小和最大范围solution.Min(dimension.Cumulvar(index))
slack_max=0
请注意,除非您知道我不知道的东西,否则您会得到完全相同的 Min 和 Max ;)假设您使用的是输出解决方案对象solution
和时间维度time_dimension
,这会将 em 存储为带有 min-max 元组的 dict,您可以希望根据需要调整输出格式:
time_dict = {}
for vehicle_id in range(num_vehicles):
vehicle_time_dict={}
index = routing.Start(vehicle_id)
start_time = solution.Min(time_dimension.CumulVar(index))
vehicle_time_dict[index]=(index_min,index_max)
while not routing.isEnd(index):
previous_index = index
index = solution.Value(routing.NextVar(index))
index_min = solution.Min(time_dimension.CumulVar(index))
index_max = solution.Max(time_dimension.CumulVar(index))
vehicle_time_dict[index]=(index_min,index_max)
time_dict[vehicle_id]=vehicle_time_dict
routing.IsEnd(index)
True
如果它是该车辆路线的最后一个索引(或最后一个索引之后的任何位置,因此如果它是 10 个节点长,则返回:
routing.IsEnd(8)
会回来False
,routing.IsEnd(9)
会回来True
,routing.IsEnd(10)
也将返回True
,等等)
推荐阅读
- python - Plotly:如何使用按钮以交互方式设置热图色阶?
- ios - 存储的身份是否对系统可见?
- python - 有没有办法将 csv 文件中的标记化文本添加到同一个文件但在 Python 的新列中?
- reactjs - React-Redux:未正确触发操作
- c# - LINQ XML - 在 Null 异常中添加元素
- swift - 如何在 HStack 的开头添加固定宽度的空间?
- javascript - Vuetify 自动完成同时激活的两个菜单
- ruby-on-rails - 如何将具有相同键的新哈希中的两个哈希合并
- javascript - Vue + Element UI:如何在表格中使用动态工具提示
- python - pandas 中的 df.align() 是插入缺失日期行同时保留重复日期行的最佳解决方案吗