You are on page 1of 8

ESCUELA POLITCNICA DEL EJRCITO CONTROL INTELIGENTE Autores: Alex Correa, Israel Iza, Ricardo Prez Nivel: X EAC

Tema: ALGORITMOS GENTICOS

TEMA: Solucin de un problema de optimizacin de un controlador PI Realizar un programa para obtener la respuesta ms optima para un controlador PI. 1. Para el presente ejercicio se debe realizar el lazo cerrado del sistema para lo cual se ha utilizado una planta de segundo orden. Para el sistema el parmetro que se desea optimizar es el siguiente:

Simulacin en SimuLink
1 s Product Integrator 1

e_cuadr To Workspace

ki Step ganancia integral

1 s Integrator

1 s2 +3s+1 Transfer Fcn

salida To Workspace 3

kp Gain 1

tiempo Clock To Workspace 1

Desarrollo del Algoritmo Gentico (creacin de individuos, obtencin cdigo gentico, reproduccin, mutacin, seleccin)

Codigo Matlab
clc clear all tsim=10; kimax=100; kpmax=100; gene=0; error_=0; %% NUMERO DE INDIVIDUOS nind=input('Ingrese numero de individuos ='); ngene=input('Ingrese el numero de generaciones ='); while (gene<=ngene) %% CREACION DE INDIVIDUOS ALEATORIAMENTE x=0:1:100; kp_ind=x(1)+(x(100)-x(1)).*rand(nind,1) ki_ind=x(1)+(x(100)-x(1)).*rand(nind,1) %% OBTENCION DEL CODIGO GENETICO DE LOS INDIVIDUOS for a=1:nind kp_yentero=fix(kp_ind(a)); ki_yentero=fix(ki_ind(a));%Saca el entero del valor kp_binent=dec2bin(kp_yentero,5);%%Transforma en binario al nmero entero______ ki_binent=dec2bin(ki_yentero,5); kp_ydecimal= kp_ind(a) - kp_yentero;%%Deja solo el valor decimal___ ki_ydecimal= ki_ind(a) - ki_yentero; %%Saca el nmero binario del valor decimal for b=1:5 kp_ydecimal=kp_ydecimal*2; kp_bindec(b)=fix(kp_ydecimal); kp_ydecimal=kp_ydecimal - kp_bindec(b); ki_ydecimal=ki_ydecimal*2; ki_bindec(b)=fix(ki_ydecimal); ki_ydecimal=ki_ydecimal - ki_bindec(b); end kp_auxbindec{a}=num2str(kp_bindec); ki_auxbindec{a}=num2str(ki_bindec); end for z=1:nind kp_repro=str2num(kp_auxbindec{z}); ki_repro=str2num(ki_auxbindec{z}); for y=1:length(kp_repro) kp_auxz(z,y)=kp_repro(y); ki_auxz(z,y)=ki_repro(y); end end kp_bin=kp_auxz; ki_bin=ki_auxz; for i=1:nind j=1; for z=1:10 if z<=5 pi_codg(i,z)=kp_bin(i,z); else

pi_codg(i,z)=ki_bin(i,j); j=j+1; end end end %% Seleccion Mejor Padre for i=1:nind kp=kp_ind(i); ki=ki_ind(i); sim('lazo_pi',tsim) auxe_ecuad(i)=1/e_cuadr; indiv(i,1:10)=pi_codg(i,1:10); indiv(i,11)=kp; indiv(i,12)=ki; indiv(i,13)=1/e_cuadr; end indiv mejor=max(auxe_ecuad) for i=1:nind if mejor==indiv(i,13) mejor_kp=indiv(i,11) mejor_ki=indiv(i,12) end end kp=mejor_kp; ki=mejor_ki; sim('lazo_pi',tsim) figure(1) plot(tiempo,salida) title('Mejor Padre') %% Reproduccin if mod(nind,2)~=0 nind=nind-1 end auxz=pi_codg; hijos=auxz; disp('Punto de Cruce') ptoc=round(1+8.*rand(1,1)) i=1; m=nind; j=ptoc+1; while (i<=m) pr=0.1+(1-0.1).*rand(1,1) %Lanzamiento de rueda para cada pareja if pr<=0.8 for j=ptoc+1:10 hijos(i,j)=auxz(i+1,j); hijos(i+1,j)=auxz(i,j); end i=i+2 else i=i+2 end end

hijos %% Seleccion Mejor Hijo for i=1:nind long_crom=10; kp_codg=hijos(i,1:5); ki_codg=hijos(i,6:10); vector_pesos=2.^((long_crom/2)-1:-1:0); ki=sum((ki_codg).*vector_pesos)./(2.^(long_crom/2)-1)*kimax; kp=sum((kp_codg).*vector_pesos)./(2.^(long_crom/2)-1)*kpmax; sim('lazo_pi',tsim) auxe_ecuad(i)=1/e_cuadr; mat_hijos(i,1:10)=hijos(i,1:10); mat_hijos(i,11)=kp; mat_hijos(i,12)=ki; mat_hijos(i,13)=1/e_cuadr; end mat_hijos mejor_hij=max(auxe_ecuad) for i=1:nind if mejor_hij==mat_hijos(i,13) mejor_kp_hij=mat_hijos(i,11) mejor_ki_hij=mat_hijos(i,12) end end kp=mejor_kp_hij; ki=mejor_ki_hij; sim('lazo_pi',tsim) figure(2) plot(tiempo,salida) title('Mejor Hijo') %% Mutacin mutacion=hijos disp('Punto de Mutacin') n=10; ptom=round(1+(n-1).*rand(1,1)) for i=1:nind pm=0.01+(0.1-0.01).*rand(1,1) %Lanzamiento de rueda para mutacion if pm<=0.02 if hijos(i,ptom)==0 mutacion(i,ptom)=1; else mutacion(i,ptom)=0; end end end disp('Hijo Proceso de Mutacin') mutacion disp('Epoca') gene=gene+1 disp('Error') error_=1/max(auxe_ecuad) pause end

Graficas: las graficas se actualizaran conforme se pase de poca a poca para la simulacin se ingreso 100 individuos y 30 generaciones obteniendo los siguientes resultados

Mejor Padre 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0

10

Mejor Hijo 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0

10

You might also like