algoritmo genético de matlab
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 p>
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.)' ); p>
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