【问题标题】:Subtour elimination constraints of a symmetric Travelling Salesman in IBM CplexIBM Cplex 中对称 Traveling Salesman 的 Subtour 消除约束
【发布时间】:2014-08-13 21:15:31
【问题描述】:

IBM Cplex 中有一个关于旅行商问题的示例代码。它将 subtour 消除约束定义为:

   forall (s in subtours)
   sum (i in Cities : s.subtour[i] != 0)
      x[<minl(i, s.subtour[i]), maxl(i, s.subtour[i])>]
       <= s.size-1;

有人可以帮我解决此代码行的等效数学公式吗?

【问题讨论】:

标签: combinatorics cplex traveling-salesman


【解决方案1】:

谁能帮我用等效的数学公式 这段代码行?

地点:

xij = 1 if the the salesman traverses the link from city i to city j, 0 otherwise
S = a subtour, which is a subset of cities (which in turn is an ordered set).
i, j = two cities that belong to the subtour

公式取自here,涉及对称旅行商问题(从ij 的成本与从ji 的成本相同)。因此,变量 xij 仅针对 i j 定义。

我不是OPL 期望的,但将代码解释如下:

subtours 是一个元组,类似于 C/C++ struct

tuple Subtour { int size; int subtour[Cities]; }
{Subtour} subtours = ...;

我知道subtours 被定义为Subtour 类型,它包含一个数组,在城市上定义,但大小由size 变量指向(因为并非所有城市都可能是给定子旅游的一部分)。

forall (s in subtours) 是不言自明的,对应于公式的每个部分。

sum (i in Cities : s.subtour[i] != 0)

我在源代码中看到subtour是一个数组,对于每个城市isubtour[i]i的后继。所以,给定一个子旅游,这条线总结了所有有后继城市的城市。

x[&lt;minl(i, s.subtour[i]), maxl(i, s.subtour[i])&gt;] &lt;= s.size-1;

这指的是变量xij,但要注意i &lt; j这一事实,因为在对称TSP中没有必要同时为i &lt; jj &lt; i定义变量。

subtour 消除约束是在源代码中动态添加的(在大多数实现中,因为它们的数量是指数的,2^(n-1 + n - 2),所以O(2^n))。

从逻辑上讲,约束表明任何给定的城市集都应该连接起来,并且不允许进行子旅游。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多