Red de conocimientos turísticos - Conocimientos sobre calendario chino - Acerca de la implementación del algoritmo genético en MATLAB

Acerca de la implementación del algoritmo genético en MATLAB

función [x fx string]=fun_SuiJiSuanFa2(N, genLenth, Pc, Pm, descendente, ascendente, generación)

[x fx string]=fun_SuiJiSuanFa2(6, 16, 0.7, 0.01, -3, 3 , 100)

f representa la función

N representa el tamaño del grupo de cromosomas

genLenth representa la longitud del cromosoma

Pc representa el cruce probabilidad

Pm representa la probabilidad de mutación

Enlace descendente

Enlace ascendente

Álgebra del ciclo de generación

Codificación decimal, escrita en binario aquí

num=2;

initdata=randi([0 num-1], N, genLenth);

Peso codificado en binario

peso =(num).^(genLenth/2-1:-1:0);

pesos=repmat(peso, N, 1);

Guardar el valores mejores y promedio para cada generación,

meanally=zeros(1,generación);

maxally=zeros(1,generación);

Nowx=zeros (generación,genLenth );

para k=1: generación

Decodificar entero

allx1=sum(initdata(:, 1.genLenth/2). *weights, 2 );

allx2=sum(initdata(:, genLenth/2 1: end).*weights, 2

Asignar al rango numérico

delt =(ascendente-descendente)/(num^(genLenth/2)-1);

allx1=allx1.*delt descendente;

allx2=allx2.* delt hacia abajo;

Aptitud cromosómica

ally=f(allx1, allx2);

Valor máximo promedio

medialmente(k) =mean (ally);

maxally(k)=max (ally);

Encuentra el índice para determinar qué cromosoma

index=find(ally= =maxally (k));

Nowx(k,:)=initdata(index(1),:);

El valor máximo no aumenta, toma el último

if (kgt;=2amp;amp;maxally(k)lt;maxally(k-1))

maxally(k)=maxally(k-1);

Nowx (k,:)=Nowx(k-1,:);

end

Tasa de aptitud cromosómica

ratio=ally./ sum(ally);

Cruce, mutación

Cuántas veces cruzar, comenzando desde la primera.

Aquí solo hay 1 crossover (de 6 en total), y uno se da al azar.

sumRatio=cumsum(ratio);

data=zeros(N, genLenth

para i=1:N/2

<); p> Seleccionar1=buscar(sumRatiogt;=rand);

Seleccionar2 =buscar(sumRatiogt;=rand);

datos(2*i-1,:)=initdata(Select1 (1),:);

data(2*i,:)=initdata(Select2(1),:);

if(randlt.Pc)

cruz

ubicación=randi([1, genLenth]);

temp=data(2*i-1, ubicación: fin

datos(2*i-1, ubicación: fin)=datos(2*i, ubicación: fin

datos(2*i, ubicación: fin)=temp; p> else

variante

if(randlt;Pm)

ubicación=randi([1, genLenth]);

datos (2*i-1, ubicación)=1-data(2*i-1, ubicación);

end

if (randlt; Pm)

ubicación=randi([1, genLenth]);

datos(2*i, ubicación)=1-datos(2*i, ubicación

fin

fin

fin

initdata=datos;

fin

fx=max(maxally);

lastIndex=find(maxally==fx);

string=Nowx(lastIndex(1),:);

x(1)=sum(string(1: genLenth/2).*peso).*(arriba-descendente)/(num^(genLenth/2)-1) descendente;

x(2)=sum(string(1 genLenth/2: end).*weight).*(upbound-downbound)/(num^(genLenth/2)-1) downbound;

rendimiento de la trama

cifra, espera;

figura p>

clf; figura(1), espera;

plot((1. k)', es decir, 'b.-');

plot(( 1: k)', maxally, 'r.:');

fin

función fun=f(x, y)

diversión=(1 -x).^2.*exp(-x.^2-(1 y).^2)-(x-x.^3-y.^3).*exp(-x.^ 2-y.^2 );

diversión=-(x-1).^2-3.*(y-2).^2 100;

fin