谁能帮我用等效的数学公式
这段代码行?
地点:
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,涉及对称旅行商问题(从i 到j 的成本与从j 到i 的成本相同)。因此,变量 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是一个数组,对于每个城市i,subtour[i]是i的后继。所以,给定一个子旅游,这条线总结了所有有后继城市的城市。
x[<minl(i, s.subtour[i]), maxl(i, s.subtour[i])>] <= s.size-1;
这指的是变量xij,但要注意i < j这一事实,因为在对称TSP中没有必要同时为i < j和j < i定义变量。
subtour 消除约束是在源代码中动态添加的(在大多数实现中,因为它们的数量是指数的,2^(n-1 + n - 2),所以O(2^n))。
从逻辑上讲,约束表明任何给定的城市集都应该连接起来,并且不允许进行子旅游。
我希望这会有所帮助!