% Travelling salesman problem % Create random city distribution n=20; x=random('unif',-1,1,n,1) y=random('unif',-1,1,n,1) gam=1; mu=sign(x); % End up where you start x=[x' x(1)]'; y=[y' y(1)]'; mu=[mu' mu(1)]'; figure(1); hold off; g=plot(x,y,'.r'); set(g,'MarkerSize',20); c0=cost(x,y,mu,gam) k=1; nt=50; nr=200; cp=zeros(nr,nt); iran=inline('round(random(d,1.5001,n+0.4999))','d','n'); for i=1:nt T=1.0 -(i-1)/nt for j=1:nr % switch two random cities ic1=iran('unif',n); ic2=iran('unif',n); xs=x(ic1); ys=y(ic1); ms=mu(ic1); x(ic1)=x(ic2); y(ic1)=y(ic2); mu(ic1)=mu(ic2); x(ic2)=xs; y(ic2)=ys; mu(ic2)=ms; p=random('unif',0,1); c=cost(x,y,mu,gam); if (c < c0 | p < exp(-(c-c0)/(k*T))) % accept c0=c; else % reject and switch back xs=x(ic1); ys=y(ic1); ms=mu(ic1); x(ic1)=x(ic2); y(ic1)=y(ic2); mu(ic1)=mu(ic2); x(ic2)=xs; y(ic2)=ys; mu(ic2)=ms; c=c0; end cp(j,i)=c0; end figure(2) plot(reshape(cp,nt*nr,1)); drawnow; figure(1); hold off; g=plot(x,y,'.r'); set(g,'MarkerSize',20); hold on; plot(x,y,'b'); g=plot(x(1),y(1),'.g'); set(g,'MarkerSize',30); p=plot([0 0],[-1 1],'r--'); set(g,'LineWidth',2); drawnow; end