¿Se utiliza un algoritmo genético para resolver el problema del programa de crucero de aviones?

El algoritmo genético resuelve el código del programa de cruceros de aviones, solo como referencia:

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