【发布时间】:2018-11-01 15:24:01
【问题描述】:
我想使用RoutingModel 定义一个路由问题,包括从必须访问约束中释放出来但如果访问会影响容量维度的节点。您对如何做到这一点有任何建议吗?
【问题讨论】:
标签: or-tools
我想使用RoutingModel 定义一个路由问题,包括从必须访问约束中释放出来但如果访问会影响容量维度的节点。您对如何做到这一点有任何建议吗?
【问题讨论】:
标签: or-tools
您可以使用析取约束使您的节点成为可选的。您应该将每个节点添加到其自己的析取组中,每个节点都有一个元素:
for node in [0, 1, 2, 3, 4]:
routing.AddDisjunction(
nodes=[node],
penalty=1)
在析取组中,求解器将尝试将来自该组的 max_cardinality 节点准确地包含在解中。
penalty 为负数,这将被视为硬约束,这意味着如果不满足约束,求解器将不会返回有效解。penalty 是正数,这将是一个软约束,这意味着违规将对全局成本变量增加惩罚。因此,为了最大程度地减少惩罚,求解器将尝试在解决方案中包含尽可能多的节点,同时仍允许将其中一些节点排除在外。
【讨论】: