用lingo求旅行商中的短距离问题中的Xij表示什么意思(城市i到城市j 的路线?还是排列啊,不懂)

痴情鱼2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
jayf 共回答了10个问题 | 采纳率80%
看x是不是0-1变量 按习惯用法来说应该是表示ij两点之间是不是直接联系的 1表示是 0表示否
你可以画个图看一下 把所有xij=1的i和j连起来 看看最后是不是一个闭环
1年前

相关推荐

旅行商的匈牙利算法A,B,C,D四城市之间的距离表如下:[∞ 8 5 6][6 ∞ 8 5]D= [7 9 ∞ 5][9
旅行商的匈牙利算法
A,B,C,D四城市之间的距离表如下:
[∞ 8 5 6]
[6 ∞ 8 5]
D= [7 9 ∞ 5]
[9 7 8 ∞]
求从某一城市出发遍历各城市各一次的最短路径~
*
答案是有4个O 路径是A--C--D--B--A!
我想请问的是:答案A--C--D--B--A这个顺序是怎么从矩阵里判断出来~我求得出矩阵,但是不知道这个顺序是怎么来判断的~我是自学物流数学~是个女生有点笨~怎么从最后的那个矩阵中判断顺序!
两点间距离1年前1
优优天使 共回答了17个问题 | 采纳率100%
设一个Shortest_Path变量
先说用穷举法求解,待会再介绍匈牙利算法
用for循环,
默认是从A出发遍历,
那么有A-B-C-DA,A-B-D-CA,ACBDA,ACDBA,ADBCA,ADCBA(还有从BCD出发的等等等等)
然后就是一个个求
例如ABCD,那么就是6+9+8+6(我猜A-B是6哪个,如果不是那就是8,反正方向是你自己设的)
就这么一个个的求出来所有最短路径,每次当有更小的时候就记录到Shortest_Path,最后就能得到了~
至于匈牙利算法我没做过.但是其实本质是一样的,只不过相当于做一个分支分别求解,这样地算法效率更高而已,具体的匈牙利程序百度百科里有很多
如果我讲的不清楚你可以在百度hi上直接问我
同一个lingo旅行商程序为什么对小矩阵可以 矩阵变大之后就会报错?
同一个lingo旅行商程序为什么对小矩阵可以 矩阵变大之后就会报错?
model:
sets:
city / 1..5/:u;
link( city,city):
dist, 距离矩阵;
x;
endsets
n = @size( city);
data: 距离矩阵,它并不需要是对称的;
dist=0 7 4 5 8 6 12 13 11 18
7 0 3 10 9 14 5 14 17 17
4 3 0 5 9 10 21 8 27 12
5 10 5 0 14 9 10 9 23 16
8 9 9 14 0 7 8 7 20 19
6 14 10 9 7 0 13 5 25 12
12 5 21 10 8 13 0 23 21 18
13 14 8 9 7 5 23 0 18 12
11 17 27 23 20 25 21 18 0 16
18 17 12 16 19 12 18 12 16 0;
enddata
目标函数;
min = @sum( link:dist * x);
@FOR( city( K):
进入城市K;
@sum( city( I)| I #ne# K:x( I,K)) = 1;
离开城市K;
@sum( city( J)| J #ne# K:x( K,J)) = 1;
);
保证不出现子圈;
@for(city(I)|I #gt# 1:
@for( city( J)| J#gt#1 #and# I #ne# J:
u(I)-u(J)+n*x(I,J)<=n-1);
);
限制u的范围以加速模型的求解,保证所加限制并不排除掉TSP问题的最优解;
@for(city(I) | I #gt# 1:u(I)<=n-2 );
定义X为01变量;
@for( link:@bin( x));
End
程序报错

但是将距离矩阵换为
dist=0 70 115 90 95
70 0 46 21 50
115 46 0 30 32
90 21 30 0 48
95 50 32 48 0;程序反倒可以运行 对于10行10列 的矩阵该怎么求?
小梅飘雪1年前1
joanneluo 共回答了16个问题 | 采纳率93.8%
city / 1..5/:u; 这个地方要改成city / 1..10/:u;才可以啊
小弟我用Lingo编了一个旅行商问题的程序,可以运行,但结果不符合约束条件,
小弟我用Lingo编了一个旅行商问题的程序,可以运行,但结果不符合约束条件,
条件是:从城市O出发经过城市A,B,C,D,E,F后又回到O的过程.要求:第n个经过城市A,则第n+1或n-1个经过城市B;同理C和D,E和F皆是如此.
程序如下,运行结果不正确,感谢大侠路过赐教!
MODEL:
旅行商问题:从城市O出发经过城市A,B,C,D,E,F后又回到O的过程;
SETS:
CITY / O A B C D E F/:P;
PRED( CITY,CITY)/A,B C,D E,F/;!旅行优先顺序;
STEP/1..7/;!STEP(I)表示第I个经过的城市;
LINK( CITY,CITY):
T,时间矩阵;
X; X( I,J);
TXS( CITY,STEP):Y;
ENDSETS
DATA:时间矩阵;
T = 0 1.7 1.5 1.4 3 1.9 2.8
1.7 0 3 2.6 4 3 3.5
1.5 3 0 1.5 3.7 2.6 2.8
1.4 2.6 1.5 0 11.5 3 3.2
3 4 3.7 11.5 0 3.6 3.3
1.9 3 2.6 3 3.6 0 15.6
2.8 3.5 2.8 3.2 3.3 15.6 0;
ENDDATA
城市个数;
N = @SIZE( CITY);
MIN = @SUM( LINK:T * X);
第K个经过城市I;
@FOR( CITY( I):@SUM( STEP( K):Y( I,K)) = 1);
城市A和B经过的次序相邻,同理C和D,E和F;
@FOR( PRED( I,J):@SUM( STEP( K):P(K) * Y( J,K) - P(K) * Y( I,K)) =1#OR#-1);
@FOR( CITY( K):
进入城区;
@SUM( CITY( I)| I #NE# K:X( I,K)) = 1;
离开城区;
@SUM( CITY( J)| J #NE# K:X( K,J)) = 1;
@FOR( CITY( J)| J #GT# 1 #AND# J #NE# K:
P( J) >= P( K) + X ( K,J) -
( N - 2) * ( 1 - X( K,J)) +
( N - 3) * X( J,K)
);
);
使X、Y取0或1;
@FOR( LINK:@BIN( X));
@FOR( TXS:@BIN( Y));
出发点和终点;
@FOR( CITY( K)| K #GT# 1:
P( K) = 1 + ( N - 2) * X( K,1)
);
END
蓓蓓198111261年前1
skyone_hbyc 共回答了18个问题 | 采纳率83.3%
在贴吧回答了.