ÒÅ´«Ëã·¨Çó½âTSPÎÊÌâʵÑ鱨¸æ ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/1/23 0:24:22ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

s=smnew; %²úÉúÁËеÄÖÖȺ

[f,p]=objf(s,dislist); %¼ÆËãÐÂÖÖȺµÄÊÊÓ¦¶È %¼Ç¼µ±Ç°´ú×îºÃºÍƽ¾ùµÄÊÊÓ¦¶È [fmax,nmax]=max(f); ymean(gn)=1000/mean(f); ymax(gn)=1000/fmax; %¼Ç¼µ±Ç°´úµÄ×î¼Ñ¸öÌå x=s(nmax,:);

drawTSP(Clist,x,ymax(gn),gn,0); gn=gn+1; %pause; end gn=gn-1; figure(2);

plot(ymax,'r'); hold on; plot(ymean,'b');grid; title('ËÑË÷¹ý³Ì'); legend('×îÓŽâ','ƽ¾ù½â'); end

%------------------------------------------------

%¼ÆËãÊÊÓ¦¶Èº¯Êý function [f,p]=objf(s,dislist);

inn=size(s,1); %¶ÁÈ¡ÖÖȺ´óС for i=1:inn

f(i)=CalDist(dislist,s(i,:)); end f=1000./f'; %¼ÆËãÑ¡Ôñ¸ÅÂÊ fsum=0; for i=1:inn

fsum=fsum+f(i)^15; end for i=1:inn

ps(i)=f(i)^15/fsum; end

%¼ÆËãÀÛ»ý¸ÅÂÊ p(1)=ps(1); for i=2:inn

p(i)=p(i-1)+ps(i); end p=p';

%¼ÆË㺯ÊýÖµ£¬¼´ÊÊÓ¦¶È end

%-------------------------------------------------- function pcc=pro(pc);

test(1:100)=0; l=round(100*pc); test(1:l)=1;

n=round(rand*99)+1; pcc=test(n); end

%-------------------------------------------------- %¡°Ñ¡Ôñ¡±²Ù×÷ function seln=sel(s,p);

inn=size(p,1);

%´ÓÖÖȺÖÐÑ¡ÔñÁ½¸ö¸öÌå for i=1:2

r=rand; %²úÉúÒ»¸öËæ»úÊý prand=p-r; j=1;

while prand(j)<0 j=j+1; end

seln(i)=j; %Ñ¡ÖиöÌåµÄÐòºÅ end end

%------------------------------------------------ %¡°½»²æ¡±²Ù×÷

function scro=cro(s,seln,pc);

bn=size(s,2);

pcc=pro(pc); %¸ù¾Ý½»²æ¸ÅÂʾö¶¨ÊÇ·ñ½øÐн»²æ²Ù×÷£¬1ÔòÊÇ£¬0Ôò·ñ

scro(1,:)=s(seln(1),:); scro(2,:)=s(seln(2),:); if pcc==1

c1=round(rand*(bn-2))+1; %ÔÚ[1,bn-1]·¶Î§ÄÚËæ»ú²úÉúÒ»¸ö½»²æÎ»

c2=round(rand*(bn-2))+1; chb1=min(c1,c2); chb2=max(c1,c2);