小弟我用Lingo编了一个旅行商问题的程序,可以运行,但结果不符合约束条件,条件是:从城市O出发经过城市A,B,C,D,E,F后又回到O的过程.要求:第n个经过城市A,则第n+1或n-1个经过城市B;同理C和D,E
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/04 16:28:22
![小弟我用Lingo编了一个旅行商问题的程序,可以运行,但结果不符合约束条件,条件是:从城市O出发经过城市A,B,C,D,E,F后又回到O的过程.要求:第n个经过城市A,则第n+1或n-1个经过城市B;同理C和D,E](/uploads/image/z/11313230-14-0.jpg?t=%E5%B0%8F%E5%BC%9F%E6%88%91%E7%94%A8Lingo%E7%BC%96%E4%BA%86%E4%B8%80%E4%B8%AA%E6%97%85%E8%A1%8C%E5%95%86%E9%97%AE%E9%A2%98%E7%9A%84%E7%A8%8B%E5%BA%8F%2C%E5%8F%AF%E4%BB%A5%E8%BF%90%E8%A1%8C%2C%E4%BD%86%E7%BB%93%E6%9E%9C%E4%B8%8D%E7%AC%A6%E5%90%88%E7%BA%A6%E6%9D%9F%E6%9D%A1%E4%BB%B6%2C%E6%9D%A1%E4%BB%B6%E6%98%AF%EF%BC%9A%E4%BB%8E%E5%9F%8E%E5%B8%82O%E5%87%BA%E5%8F%91%E7%BB%8F%E8%BF%87%E5%9F%8E%E5%B8%82A%2CB%2CC%2CD%2CE%2CF%E5%90%8E%E5%8F%88%E5%9B%9E%E5%88%B0O%E7%9A%84%E8%BF%87%E7%A8%8B.%E8%A6%81%E6%B1%82%EF%BC%9A%E7%AC%ACn%E4%B8%AA%E7%BB%8F%E8%BF%87%E5%9F%8E%E5%B8%82A%2C%E5%88%99%E7%AC%ACn%2B1%E6%88%96n-1%E4%B8%AA%E7%BB%8F%E8%BF%87%E5%9F%8E%E5%B8%82B%EF%BC%9B%E5%90%8C%E7%90%86C%E5%92%8CD%2CE)
小弟我用Lingo编了一个旅行商问题的程序,可以运行,但结果不符合约束条件,条件是:从城市O出发经过城市A,B,C,D,E,F后又回到O的过程.要求:第n个经过城市A,则第n+1或n-1个经过城市B;同理C和D,E
小弟我用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
小弟我用Lingo编了一个旅行商问题的程序,可以运行,但结果不符合约束条件,条件是:从城市O出发经过城市A,B,C,D,E,F后又回到O的过程.要求:第n个经过城市A,则第n+1或n-1个经过城市B;同理C和D,E
在贴吧回答了.