Can anyone suggest me to write a correct and working code for traveling salesman problem using simulated annealing? I got this but there are so many errors:

4 visualizaciones (últimos 30 días)
% Travellingsalesman 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. Add starting point to end
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; % Boltzmanconstant
nt=50; nr=200; % nt: temp steps. nr: city switches each T 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;
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
  2 comentarios
Sanuj Shukla
Sanuj Shukla el 25 de Feb. de 2013
??? Undefined function or method 'random'
for input arguments of type 'char'.
Error in ==> salesman at 3
n=20; x=random('unif',-1,1,n,1);
y=random('unif',-1,1,n,1);

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 25 de Feb. de 2013
That version of a random number routine is part of the Statistics Toolbox; see http://www.mathworks.com/help/stats/random.html
The Statistics Toolbox is optional extra cost for Academic and Professional licenses. It is, though, included in Student Version licenses, but the toolbox might not be installed by default.
  16 comentarios
Sanuj Shukla
Sanuj Shukla el 27 de Feb. de 2013
I want to generate a random number between 0 and 1. Which function i can use?

Iniciar sesión para comentar.

Más respuestas (1)

Sanuj Shukla
Sanuj Shukla el 26 de Feb. de 2013
Editada: Sanuj Shukla el 26 de Feb. de 2013
Instead of using this routine (ie not using uniform distribution or random function) what else can I change in my code to eliminate errors and make code running. However if I use other function instead of 'random' then I get 'error using ==> ctranspose.. Transpose on ND array is not defined' in following lines:
x=[x' x(1)]';
y=[y' y(1)]';
mu=[mu' mu(1)]';
Thanks for your reply. Please help me because i have my presentation in few days.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by