clc, clear
sj0 =;?
SJ =[d 1; SJ d 1];? SJ = SJ * pi/180; porcentaje en radianes
d = cero(102);? %Valor inicial de la matriz de distancia d
¿Para qué? i=1:101
¿Para qué? j=i+1:102
d(i,j)=6370*acos(cos(sj(i,1)-sj(j,1))*cos(sj(i,2) )*cos(sj(j, 2))+sin(sj(i, 2))*sin(sj(j, 2)));
Fin
Fin
d = d+d';? w=50? gramo = 100;? %w es el tamaño de la población y g es la generación evolutiva.
rand('estado ', suma(reloj));? %Inicializar el generador de números aleatorios
¿Para qué? K=1:w% utiliza el algoritmo de círculo mejorado para seleccionar la población inicial.
c = rand permanente(100);? % produce una permutación completa de 1,..., 100.
c1=[1, c+1, 102];? %Generar solución inicial
¿Para qué? t=1:102? % ¿Este bucle de capa es un bucle de modificación?
bandera = 0;? %Modificar la bandera de salida del círculo
¿Para qué? m=1:100
¿Para qué? n=m+2:101
¿Y si? d(c1(m),c 1(n))+d(c 1(m+1),c 1(n+1))<d(c1(m),c 1(m+1)) + d(c 1(n), c1(n+1))
c 1(m+1:n)= c 1(n:-1:m+1); %Modificar círculo
Fin
Fin
Fin
¿Y si? bandera==0
J(k,c 1)= 1:102;? ¿romper? %Graba una buena solución y sale del bucle de capa actual.
Fin
Fin
Fin
j(:, 1) = 0;? J = J/102;? %Convierta la secuencia de números enteros en un número real en el intervalo [0, 1], es decir, conviértala en un código cromosómico.
¿Para qué? ¿Cuál es el funcionamiento del algoritmo genético de bucle en este nivel de K=1:g%?
a=J;? % El apareamiento produce el cromosoma inicial de la descendencia a.
c = rand permanente(w);? %Producir los siguientes pares cruzados?
¿Para qué? i=1:2:w
f = 2+piso(100*rand(1));? %Generar la dirección de la operación de cruce
temp=A(c(i),[F:102]);? %Valor guardado de la variable intermedia
A(c(i), [F:102])=A(c(i+1), [F:102]);? %Operación cruzada
A(c(i+1), F:102)=temp;
Fin
by =[]; Evite lo siguiente. Se genera una dirección vacía; inicialícela aquí primero.
¿Cuándo? ~longitud(por)
por=find(rand(1,w)<0.1);? %La dirección donde ocurre la operación de mutación.
Fin
B=A(por,);? % produce el cromosoma inicial para la operación de mutación.
¿Para qué? j=1: longitud (multiplicar)
bw = sort(2+floor(100 * rand(1, 3)));% 3 direcciones han sufrido operaciones de mutación.
B(j,)=B(j,[1:bw(1)-1,bw(2)+1:bw(3),bw(1):bw(2),bw (3)+1:102]);? %Posición cambiaria
Fin
g =[J;a;b];? %Los grupos de padres e hijos están fusionados.
[SG, ind1]=sort(G, 2);? %Traduce el cromosoma a la secuencia de 1,...,102 ind1.
núm=tamaño(G, 1);? largo=ceros(1,núm);? %Valor inicial de la longitud del camino
¿Para qué? j=1:Cantidad
¿Para qué? i=1:101
largo(j)=largo(j)+d(ind1(j,I),ind1(j,I+1));? %Calcular la longitud de cada ruta
Fin
Fin
[slong, ind 2]= sort(long);? % Ordena la longitud de los caminos de menor a mayor.
J=G(ind2(1:w),:);? %Seleccione el cromosoma correspondiente a los primeros w caminos más cortos
Fin
path=ind1(ind2(1),:),? flong=slong(1)%La ruta y la longitud de la ruta de la solución
xx=sj(path, 1 yy=sj(path, 2);
plot(xx); , yy ,'-o')? %Dibujar ruta