Cómo utilizar MATLAB para resolver problemas de transferencia de estado (como el problema del empresario que cruza el río)
función jueche=guohe
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%
Necesario para iniciar el programa Conocer el número de comerciantes y servidores
n; =input('Ingrese el número de comerciantes:','12');
nn=input('Ingrese el número de sirvientes:','12' );
nnn =input('Ingrese la capacidad máxima del barco:','20');
if nn>n
n=input(' Ingrese el número de comerciantes:', '23');
nn=input('Ingrese el número de servidores:','23');
nnn=input('Ingrese el tamaño máximo de la capacidad del barco :','34');
fin
%%%%%%%%%%%%%%%%%%%%% %%%% %%%%%%%%%%%%%%%%%%% Generación de decisiones
jc=1 %El vector de decisión se coloca en la matriz d, jc es para insertar nuevo El índice de fila de; el elemento es inicialmente 1;
for i=0:nnn
for j=0:nnn
if (i+j<=nnn) &( i+j>0) % satisface la condición D={(u,v)|1<=u+v<=nnn,u,v=0,1,2}
d(jc , 1:3)=; %Generar conjunto de matrices de estado D `
A(kx+1,1:3)=;
kx=kx+2;
fin
fin
j=nn;
end;
%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Generar vectores de estado abstractos Matrix
k=(1/2)*tamaño(A,1);
CX=ceros(2*k,2*k);
a=tamaño(d ,1);
para i=1:2*k
para j=1:a
c=A(i, :)+d( j,:) ;
x=buscar((A(:,1)==c(1))&(A(:,2)==c(2)) &(A(: ,3)==c(3))) ;
v(i,x)=1; %x estando vacío no cambiará el valor de v
end
fin
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%% algoritmo dijstra
x=1; y=size(A,1);
m=size(v,1);
T=ceros(m,1);
T=T.^-1;
lmd=T
P=T
S=ceros(m, 1);
S(x)=1
P(x)=0;
k=x;
mientras(1)
a=buscar(S==0);
aa=buscar(S==1);
si tamaño(aa,1)==m
descanso;
fin
para j=1: tamaño(a,1)
pp=a(j,1);
si v(k,pp)~=0
si T(pp)>(P(k)+v( k,pp))
T(pp)=(P(k)+v(k,pp));
lmd(pp)=k;
fin
fin
fin
mi=min(T(a));
si mi==inf p> p>
romper;
else
d=find(T==mi);
d=d(1); p>
P(d)=mi;
T(d)=inf;
k=d;
S(d)=1;
end
end
if lmd(y)==inf
jueche='no se puede alcanzar';
retorno;
fin
jueche(1)=y;
g=2;h=y;
while( 1)
if h==x
break;
end
jueche(g)=lmd(h);
p>g=g+1;
h=lmd(h);
end
jueche=A(jueche, :);
jueche(:,3)=[];