版权声明:本文为博主原创文章,未经博主允许不得转载。 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