or-tools - 定义不必访问的节点
问题描述
我想使用RoutingModel
包括从必须访问约束中解放出来的节点来定义路由问题,但如果访问会影响容量维度。你有什么建议如何做到这一点?
解决方案
您可以使用析取约束使您的节点成为可选的。您应该将每个节点添加到其自己的析取组中,每个节点都有一个元素:
for node in [0, 1, 2, 3, 4]:
routing.AddDisjunction(
nodes=[node],
penalty=1)
为什么这行得通?
在析取组中,求解器将尝试在解中准确包含max_cardinality
该组中的节点。
- 如果
penalty
为负,这将被视为硬约束,这意味着如果不满足约束,求解器将不会返回有效的解决方案。 - 但是,如果
penalty
是正数,这将是一个软约束,这意味着违规将对全局成本变量增加惩罚。
因此,为了最大限度地减少惩罚,求解器将尝试在解决方案中包含尽可能多的节点,同时仍然允许将其中一些节点排除在外。
推荐阅读
- javascript - 将按钮放在图像 html 的顶部
- vue.js - 本地存储?Vuejs 中的 LocalSession 或 Vuex ($store)
- python - 有没有一种方法可以将 Sendkeys 与 Xinput 一起使用?
- c++ - 为什么我收到错误:中断服务例程应该将“unsigned long int”作为第二个参数?
- xml - 使用 Razor 读取 XML 网页时出现错误的请求 400 错误
- python - Python:yahoo_fin.stock_info.get_quote_table() 不返回表
- javascript - 我的编辑/删除按钮在表格上的下一页等其他页面上不起作用。它只适用于有 10 个数据条目的第一页
- java - Arraylist setter getter 在设置后没有保留其数据?
- reactjs - Ionic / React - 在页面上刷新使页面空白而不是正确路由
- python - 如何在同一列中的 Pandas 中减去层次/多级索引中的值