【问题标题】:Defining nodes that do not have to be visited定义不必访问的节点
【发布时间】:2018-11-01 15:24:01
【问题描述】:

我想使用RoutingModel 定义一个路由问题,包括从必须访问约束中释放出来但如果访问会影响容量维度的节点。您对如何做到这一点有任何建议吗?

【问题讨论】:

    标签: or-tools


    【解决方案1】:

    您可以使用析取约束使您的节点成为可选的。您应该将每个节点添加到其自己的析取组中,每个节点都有一个元素:

        for node in [0, 1, 2, 3, 4]:
            routing.AddDisjunction(
                nodes=[node],
                penalty=1)
    

    为什么会这样?

    在析取组中,求解器将尝试将来自该组的 max_cardinality 节点准确地包含在解中。

    • 如果penalty 为负数,这将被视为硬约束,这意味着如果不满足约束,求解器将不会返回有效解。
    • 但是,如果penalty 是正数,这将是一个软约束,这意味着违规将对全局成本变量增加惩罚。

    因此,为了最大程度地减少惩罚,求解器将尝试在解决方案中包含尽可能多的节点,同时仍允许将其中一些节点排除在外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      相关资源
      最近更新 更多