Red de conocimiento informático - Aprendizaje de programación - algoritmo genético de matlab

algoritmo genético de matlab

Función m_main()

Borrar

clc

Max_gen=100; generaciones en ejecución

pop_size=100;

cromosoma=10; longitud del cromosoma

pc=0,9; probabilidad de cruce

pm=0,25; probabilidad de mutación

gen=0; p> p>

Inicialización

init=40*rand(pop_size, chromsome)-20;

pop=init

fit=obj_ fitness; (pop );

[max_fit, index_max]=max(fit); maxfit=max_fit;

[min_fit, index_min]=min(best_indiv=pop(index_max, :) ;

Operación iterativa

mientras genlt;

gen=gen 1; bt(gen)=max_fit;

if maxfitlt; maxfit=max_fit; pop(index_min,:)=pop(index_max,:); best_indiv=pop(index_max,:); fin

best_indiv_tmp(gen)=pop(index_max); /p >

newpop=ga(pop, pc, pm, chromsome, fit);

fit=obj_fitness(newpop);

[max_fit, index_max]=max( ajuste) ;

[min_fit, index_min]=min(fit);

pop=newpop

trace(1, gen)=max_fit

p>

trace(2, gen)=sum(fit)./length(fit);

end

Resultados de la ejecución

[f_max]. gen_ct] =max(bt)Valor máximo buscado y número de generaciones

maxfit

best_indiv

Dibujo

bt

espera

plot(trace(1,:),'.g:');

plot(trace(2,:),'.r- ') ;

title('Gráfico de los resultados experimentales')

xlabel('Número de iteración/generación'), ylabel('Mejor aptitud (máx.)' );

plot(gen_ct-1, 0: 0.1: f_max 1, 'c-'); trazar máximo

text(gen_ct, f_max 1, 'maximum')

esperar

función [fitness]=obj_ fitness(pop)

Fitnes

función de cálculo s

[r c]=size(pop);

x=pop;

fitness=zeros(r, 1);

para i=1:r

para j=1:c

aptitud(i,1)=aptitud(i,1) sin(sqrt(abs(40* x(i)))) 1-abs(x(i))/20.0;

end

end

función newpop=ga(pop, pc , pm, chromsome, fit);

pop_size=size(pop, 1);

selección de ruleta

ps=fit/sum(fit);

pscum=cumsum(ps); tamaño(pscum)

r=rand(1, pop_size); qw=pscum*ones(1, pop_size);

seleccionado=sum(pscum*ones(1, tamaño_pop)lt; unos(tamaño_pop, 1)*r) 1;

newpop=pop(seleccionado,:

cruz);

if pop_size/2~=0

pop_size=pop_size-1

end

for i=1:2:pop_size; -1

mientras pcgt; rand

c_pt=round(8*rand 1);

pop_tp1=newpop(i,:); pop_tp2=newpop(i 1,:);

newpop(i 1, 1: c_pt)=pop_tp1(1, 1: c_pt);

newpop(i, c_pt 1:); chromsome)=pop_tp2(1, c_pt 1:

fin

fin

variación

para i=1: pop_size

if pmgt; rand

m_pt=1 ronda(9*rand

newpop(i, m_pt)=40*rand-20; p> fin

fin