图论中TSP问题的LINGO求解与应用

巡回旅行商问题(Traveling Salesman Problem,TSP),也称为货郎担问题。该问题可简单描述为走遍n个城市的最短路。几十年来,出现了很多近似优化算法。如近邻法、贪心算法、最近插入法、最远插入法、模拟退火算法以及遗传算法。

问题1 设有一个售货员从10个城市中的某一个城市的出发,去其他9个城市推销产品。10个城市的距离已经给出。10个城市相互距离如下表。要求每个城市到达一次仅以此后,回到原出发城市。问:他如何选择旅行路线,使总路程最短。

图论中TSP问题的LINGO求解与应用_第1张图片

 

 

 图论中TSP问题的LINGO求解与应用_第2张图片

 

 

 图论中TSP问题的LINGO求解与应用_第3张图片

 

 

 

model:
sets:
city/1..10/:u;
link(city,city):d,x;
endsets
data:
d=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 13
  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 13 18 12 16 0;
@text()=@writefor(link(i,j)|x(i,j)#GT#0:'x(',i,',',j,')=',x(i,j));
enddata
min=@sum(link:d*x);
@for(city(j):@sum(city(i)|j#ne#i:x(i,j))=1);
@for(city(i):@sum(city(j)|j#ne#i:x(i,j))=1);
@for(link(i,j)|i#ne#j#and#i#gt#1:u(i)-u(j)+10*x(i,j)<=9);
@for(link:@BIN(x));
end

  

x(1,4)=1 x(2,7)=1 x(3,2)=1 x(4,3)=1 x(5,6)=1 x(6,8)=1 x(7,5)=1 x(8,10)=1 x(9,1)=1 x(10,9)=1

1 4 3 2 7 5 6 8 10 9 1

你可能感兴趣的:(图论中TSP问题的LINGO求解与应用)