【发布时间】:2019-05-24 12:00:52
【问题描述】:
我正在开发一个优化问题,它是 Traveling Salesman 的变体。在这种情况下,您不必访问所有城市,有一个必需的起点和终点,旅行长度有一个最小和最大界限,如果需要,您可以多次遍历每个弧,并且您有一个非线性与遍历的弧相关的目标函数(以及遍历每个弧的次数)。决策变量是整数,你遍历每条弧的次数。
我在 Pyomo 中开发了一个非线性整数程序,并且正在从 NEOS 服务器获取结果。但是我没有加入 subtour 约束,我的结果是两个断开连接的 subtour。
我可以找到 TSP 的整数规划公式,其中说明了如何制定 subtour 约束,但这与标准 TSP 有点不同,我正试图弄清楚如何开始。任何可以提供的帮助将不胜感激。
编辑:问题表述
50 arcs ,不是节点之间的穷举对。 50 决策变量 N_ab 是整数 >=0,对应于你从 a 遍历到 b 的次数。每个 N_ab 都有一个长度和利润。所有 ab 的 length_ab * N_ab 之和在最小和最大距离之间有两个约束。我有一个约束,即每个节点的 N_ab 总和等于节点外的 N_ab 总和,您可以根本不访问节点,也可以多次访问它。目标函数是非线性的,并且与弧对之间的相互作用有关(与 subtour 无关)。
Subtours:查看 math.uwaterloo.ca/tsp/methods/opt/subtour.htm ,该公式不适用,因为我不需要访问所有城市,并且可能无法访问。例如,假设我有 20 个节点和 50 条弧(所有弧长均为 10)。距离限制适用于长度为 30 的游览,这意味着我最多可以访问三个节点(从 A -> B -> C ->A = 长度 30 开始)。所以我根本不会访问其他节点。 TSP 子巡回消除将要求我有从节点子组 ABC 到未访问节点子组的边 - 这不是我的问题所需要的
【问题讨论】:
标签: traveling-salesman integer-programming