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

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值