TSP算法(0-1规划) ---用Matlab和Lingo联合实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hello_leiyuanyi/article/details/81867996

MATLAB处理数据的程序:

 

处理之前需要进行数据的处理,把数据转换为0和1,转化为相关的矩阵;用i表示行,用j表示列,增加一行用0表示。

 

文件名根据需要修改即可。

load 'C:\Users\Administrator\Desktop\table2.txt';
a = table2;
[m,n]=size(a);
d=zeros(n+1,n+1);  %定义距离矩阵;

for i=1:n
for j=1:n               
  for k=1:m
   d(i,j)=d(i,j)+a(k,i)*a(k,j);  %计算不同项目之间距离
  end
end
end

for i=1:n+1
    d(i,i)=0;
end    

  %输出文件
fid=fopen('C:\Users\Administrator\Desktop\table2.txt','w');

for i=1:n+1
 for j=1:n+1
   fprintf(fid,'%1d ',d(i,j));
  end
 fprintf(fid,'\n');
end   
 fclose(fid);

Lingo处理数据和得到结果的程序:

model:
sets:
  item / 1.. 71/: u;   !记得根据数据的需要,修改后面的数值
  link( item, item):dist,x;
endsets   
   n = @size( item);
data:   !距离矩阵; 
dist=@file('C:\Users\Administrator\Desktop\table2.txt'); !文件路径  修改文件的路径
 !输出为1的变量;
@text()=@writefor(link(i,j)|x(i,j)#GT#0:' x(',i,',',j,')=',x(i,j));
enddata
  MIN=@SUM(link:dist*x);
  @for(item(j):@sum(item(i)|j#ne#i:x(i,j))=1); !点j前有一个点相连;
  @for(item(i):@sum(item(j)|j#ne#i:x(i,j))=1); !点i后前有一个点;
!保证不出现子圈;
  @for(link(i,j)|i#NE#j#and#i#gt#1:u(i)-u(j)+n*x(i,j)<=n-1);
@FOR(link:@BIN(x));!定义X为0-1变量;
end

猜你喜欢

转载自blog.csdn.net/Hello_leiyuanyi/article/details/81867996
今日推荐