Está en la página 1de 22

c c 

c 
 c   ccY
Y 
Y Y
Y

‘   Y› 

  YY

‘ Y Y   Y

  

 Y
    ! "
 


Se implementara un algoritmo genético para obtener el valor mínimo de la siguiente función:

 YY YY
Las restricciones serán las siguientes:

0”x”15
0”y”15
Nipop = 32
Reproducción= Rank
Weighting
Cruce Libre
Convergencia Libre
Sin mutación

El algoritmo será realizado en Microsoft office Excel 2007.

En la hoja numero 1 se generaran los números aleatorios para generar los cromosomas
utilizados en el algoritmo. Con la formula ´=ALEATORIO.ENTRE (0,1)µ se llenaran las
columnas necesarias para generar un numero binario con las restricciones antes
mencionadas, y así será para generar los 32 que serán los valores de x en el cromosoma, así
mismo se realizara el procedimiento para generar los números binarios para y.

Se insertaran dos botones los cuales copiaran los números binarios de 4 digitos generados y
los pegara en la hoja siguiente, ( este procedimiento se realiza dado a que los números
aleatorios se recalculan cada vez que se realiza una acción y hay que hacer un pegado
especial para que esto no ocurra)
El código de los botones será el siguiente:

" #$%  %!!% &'

(! )
*
 
 )
+

 !
     )


  ,

  &-.-/-00-1+ ', )2

3 &-3 4 0-',  ! 

  &-!-',5  ) ! 5  678  

))!  ,  )29  6:


 

3 &-3 4 $-',  ! 

;

" #%  %!!% &'

(! )
*
 
 )
+

 !
       
  ,

  &-0-/--1+ ', )2

3 &-3 4 0-',  ! 

  &--',5  ) ! 5  678  

))!  ,  )29  6:


 

;

Se creara una tabla en la siguiente hoja para calcular los valores en decimal y sacar el costo
con la función dada en las restricciones para el algoritmo.
Para sacar el valor decimal de x y de y se usara la siguiente fórmula:

´ =BIN.A.DEC (C4)µ y µ =(4*E4^2)+(7*((F4-4)^2))-4*E4+3*F4µ para calcular el costo.

El código para los botones mostrados en la imagen es el siguiente:

 4 0%" #.%  %!!% &'

(! )
  ,

  &--/-0-', )2

(!  3 ,< 7 ,  ! 

3 &-3 4 -',  ! 

  &-$-',5  ) ! 

;

" #0%  %!!% &'

=<) ),
  &-
$-', )2

  &- $-',5  ) ! 5  678  

))!  ,  )29  6:


 

  &-!-',  ! 

› 


›


6  &-$-',8  

6  &-$-',8  

3 &-3 4 -',  ! 

  &-$-/1+ ', )2

  &-3$-',5  ) ! 5  678  

))!  ,  )29  6:


 

(  &-!$-',  ! 

;

" #%  %!!% &'

(< ,

  &-$-', )2

  &-7$-',5  ) ! 5  678  

))!  ,  )29  6:


 

  &-!-',  ! 

› 


›


6  &-3$-',8  

6  &-2$-',8  

3 &-3 4 -',  ! 
  &-3$-/1+ ', )2

  &-$-',5  ) ! 5  678  

))!  ,  )29  6:


 

(  &-!$-',  ! 

;

En el botón ejecutar se encuentra el siguiente código en el cual se encuentran los


procedimientos anteriores para que se ejecuten con solo presionarlo y no tener que hacerlo
botón por botón.

En la hoja siguiente se tendrán botones con el siguiente código que al igual que los
anteriores van a ejecutarse también en el botón ejecutar.

 4 %" #%  %!!% &'

› > 


› 


›4 


›? 


6$

 6$

?6$

 >6  &--',8  

@
6$:  >

+ & A$/$',8  B6 &A$/$',8  :3 

 &A$/$',8  6 & A$/$C',8  

 6$



; 

 6 A$


6D$

;+

< 7 

;

 4 %" #%  %!!% &'

  &-$-/-C-1+ ', )2

  &- $-',5  ) ! 5  678  

( 
 )
!
! 

  &- $-', )2

  &- !$-',5  ) ! 5  678  

;

" #0%  %!!% &'

(! )
  34 ,

  &- $-/-C-', )2

3 &-3 4 -',  ! 

  &- $-',5  ) ! 5  678  

;

" #.%  %!!% &'

(
 
,

3 &-3 4 -',  ! 

  &- $4C-',  ! 

  !  ,
E 2$6  &-$-'/

$67! / 
67 /%



 6$/9 !3  6@  /
   67: ): " /%

› )  $67
<
 

;
El siguiente botón contiene el código encargado de generar cada iteración en el algoritmo
hasta encontrar el valor mínimo de la función.

" #%  %!!% &'

›
 


@

6$: $

 &
A$/F',8  6 &$/',8  

 &
A$/',8  6 &$/',8  

 &
A$/$',8  6 &$/',8  

(! )
  ,

(

3 ,

!  3 ,< 7 ,  ! 

  &- $-/-C$-', )2

!  3 ,5
 ,  ! 

(!  3 ,5
 ,  ! 

(3 &-3 4 -',  ! 

  &- $-',5  ) ! 

!  3 ,< 7 ,  ! 

(  &- $-/-4C$-', )2

!  3 ,5
 ,  ! 

(  &-!$-',5  ) ! 

((((((((((


((((((((((((((((((((((

((((((((((((((((((((((

(((! )
  34 ,

6  &-$-',8  

6  &-.-',8  

(3 &-3 4 -',  ! 

  &- $-/-4C-', )2

  &',5  ) ! 5  678  

))!  ,  )29  6:


 

  &-C-/-$-',


(((((

((((

  &-$-/-C-', )2

  &->$-/->C-',5  ) ! 5  678  

))!  ,  )29  6:


 

((((((((((((((((((((((

((((((((((((((((((((((

((((((((((((((((((((((

(
 
    

  &-$C-',  ! 

  !  ,
E 2$6  &-$-'/

$67! / 
67 /%


 6$/9 !3  6@  /
   67: ): " /%

› )  $67
<
 

((((((((((((((((((((((

((((((((((((((((((((((

(! )
 
 

  &-
$-', )2

  &- $-',5  ) ! 5  678  

))!  ,  )29  6:


 

((((((((((

(((((((((

(! )
 
 ,

  &-$-', )2

  &-7$-',5  ) ! 5  678  

))!  ,  )29  6:


 

((((((((((((((((((((((

() )

› 


›+


›++



6  &-$-',8  

+6  &-$-',8  

++6  &-0-',8  

(3 &-3 4 -',  ! 

  &-$-/+1+ ', )2

  &-3$-',5  ) ! 5  678  

))!  ,  )29  6:


 

  &++/-3-',
   

(  &-!$-',  ! 

(< ,

›!


›


›


!6  &-3$-',8  

6  &-2$-',8  

6  &-2.-',8  

(3 &-3 4 -',  ! 

  &-3$-/1+ ', )2

  &-$-',5  ) ! 5  678  

))!  ,  )29  6:


 

  &/--',
   

(  &-!$-',  ! 
((((((((((((

(((((((((((((((

(((((((((((((((((((

  &-$-/-C-1+ ', )2

  &- $-',5  ) ! 5  678  

( 
 )
!
! 

  &- $-', )2

  &- !$-',5  ) ! 5  678  

(  
?> 3 

› > 


› 


›4 


›? 




6$

46$

?6$



 >6  &--',8  



@
6$:  >



+ &4A$/$',8  B6 &A$/$',8  :3 


 &A$/$',8  6 &4A$/$C',8  





46$



; 

464A$

6D$



;+



< 7 

›


6  &--',8  

  &/-)-',
   

((((((((((((((

(! )
  34 ,

  &- $-/-C-', )2

  &- $-',5  ) ! 5  678  

((((((((((((

((((((((((((((((

(
 
,

  &- $4C-',  ! 

  !  ,
E 2$6  &-$-'/

$67! / 
67 /%


 6$/9 !3  6@  /
   67: ): " /%

› )  $67
<
 



+  &-$-'6  &-$-':3 

  &- $-/-C$-', )2

3 ,

  &- $-',5  ) ! 

 ;


  < 7 

( !   )
!   

))!  ,!
G) 6@  

(! )   3 4  !     




!  3 , )2

(! )  2)     




 ,  ! 

  !  , )2

  !  ,5  ) ! 5  675  

(<    !   


 

(+!3
2 
     H

+!3
6:3I
? ?,<  

 6:3I
? ?,5 3

(J    7 7#  7! 

+!3
6 ) ! &+!3
/-,77-/--'

+!3
6 ) ! &+!3
/-,7-/--'

(  !!    3 4  !  

!  3 ,  ! 
(      4    

))!  ,›) 2


6@  

(
   +!3
  7  !    

(   
!
       

(+!3
  7! 
 

!  I
? ?,  @   6
 1-K-1-  -1-, 7 -/@ @
 67: 7 

(!

  +!3
  7 

!  I
? ?,  

(9 
  )
!   

))!  ,!
G) 6:
 

;+

+  &-$-'6  &-$-':3 ;7 @






< 7 

((((((((((

;

Algunas de las celdas van a tener formulas para agilizar el trabajo del algoritmo, (hay
columnas auxiliares). A continuación se enlistara la columna con la formula insertada en cada
una de sus celdas.
Nbada. =SI(H17<>I17,H17)

Nbad =K.ESIMO.MENOR($J$17:$J$48,R17)

Ngood*al =ALEATORIO()

Pn formula =($L$6-R17+1)/SI(R17<=$L$6,((($L$6+1)/2)*$L$6))

PN acumulado =M17

Ngood =I:I

X =BUSCAR(S17,I:I,C:C)

Y =BUSCAR(S17,I:I,D:D)

Col v =ALEATORIO.ENTRE(2,7)

Col x =SI(R17*2<=$L$6,2*R17-1,FALSO)

Padre =BUSCAR(X17,R:R,P:P)

x =BUSCAR(Y17,R:R,T:T)

y =BUSCAR(Y17,R:R,U:U)

col AB =SI(R17*2<=$L$6,2*R17,FALSO)

Padre2 =BUSCAR(AB17,R:R,P:P)
X =BUSCAR(AC17,R:R,T:T)

Y =BUSCAR(AC17,R:R,U:U)

Padre1 =Z17&AA17

Padre2 =AD17&AE17

Padre1a =EXTRAE(AF17,1,W17-1)

Padre1b =EXTRAE(AF17,W17,8)

Padre2a =EXTRAE(AG17,1,W17-1)

Padre2b =EXTRAE(AG17,W17,8)

Hijo1 =AH17&AK17

Hijo2 =AJ17&AI17

Xhijo1 =EXTRAE(AM17,1,4)

Yhijo1 =EXTRAE(AM17,5,8)

Decimalx1 =BIN.A.DEC(AO17)

Decimaly2 =BIN.A.DEC(AP17)

Xhijo2 =EXTRAE(AN17,1,4)

Yhijo2 =EXTRAE(AN17,5,8)

Decimalx1 =BIN.A.DEC(AS17)

Decimaly2 =BIN.A.DEC(AT17)
Costo1 =(4*AQ17^2)+(7*((AR17-4)^2))-4*AQ17+3*AR17

Costo2 =(4*AU17^2)+(7*((AV17-4)^2))-4*AU17+3*AV17

Xhijo1 =AO17

Yhijo1 =AP17

Decimalx1 =AQ17

Decimaly2 =AR17
Costo1 =AW17

Col BJ =SI.ERROR(BI17,FALSO)

Número menor =K.ESIMO.MENOR(BJ17:BJ81,BK17)

Col BM =SI.ERROR(SI(G17=0,"",G17),"")

Promedio =PROMEDIO(BM:BM)

Col BO =SI(BQ17>0,DEC.A.BIN(BQ17,4),SI(BQ17=0,""))

Col BP =SI(BR17>0,DEC.A.BIN(BR17,4),SI(BR17=0,""))

Todos los métodos de los botones anteriores sirven para realizar paso por paso el algoritmo.

Para ejecutar el algoritmo desde que abrimos el documento y para que sean creados los
archivos .txt se agregan en un botón que se muestra con un mensaje justo al activar los
macros de Excel. El código del botón principal es el siguiente:

  % ) &'

›9  4 /;  /:L  /2 / 7 / )  /9   

9  4 6-M›  !  
N-(› +    4 ,

;  6O < A


 ! A› +  " .(› +    ,

:L  6-›  
!# 9" 7-(› +   L  ,

2 6-›;9 ,P5-(› +  


!3   2 ,

 7 6$(› +    
( !  7 

(9 
   4 ,

 )  69" 7&9  4 /;  /:L  /2 / 7 '

+ )  6O :3 

((((

(! )

 
 )
+

 !
     )


  ,

  &-.-/-00-1+ ', )2

3 &-3 4 0-',  ! 

  &-!-',5  ) ! 5  678  

))!  ,  )29  6:


 

3 &-3 4 $-',  ! 

(((

(! )

 
 )
+

 !
       
  ,

  &-0-/--1+ ', )2

3 &-3 4 0-',  ! 

  &--',5  ) ! 5  678  

))!  ,  )29  6:


 

(((

;


  < 7 

( !   )
!   

))!  ,!
G) 6@  

(! )   3 4  !     




!  3 , )2

(! )  2)     




 ,  ! 
  !  , )2

  !  ,5  ) ! 5  675  

(<    !   


 

(+!3
2 
     H

+!3
6:3I
? ?,<  

 6:3I
? ?,5 3

(J    7 7#  7! 

+!3
6 ) ! &+!3
/-,77-/--'

+!3
6 ) ! &+!3
/-,7-/--'

(  !!    3 4  !  

!  3 ,  ! 

(      4    

))!  ,›) 2


6@  

(
   +!3
  7  !    

(   
!
       

(+!3
  7! 
 

!  I
? ?,  @   6
 1-K-1-)  ! ! -1-, 7 -/
@ @
 67: 7 

(!

  +!3
  7 

!  I
? ?,  

(9 
  )
!  

))!  ,!
G) 6:
 

))!  , : < >A: 8  &-$-'/- 4 0%" #.%  %!!% -

))!  , : < >A: 8  &-.-'/- 4 0%" #$%  %!!% -

))!  , : < >A: 8  &-0-'/-" #0%  %!!% -


))!  , : < >A: 8  &--'/-" #%  %!!% -

))!  , : < >A: 8  &--'/- 4 %" #%  %!!% -

))!  , : < >A: 8  &--'/- 4 %" #%  %!!% -

))!  , : < >A: 8  &--'/-" #0%  %!!% -

))!  , : < >A: 8  &-C-'/-" #.%  %!!% -

))!  , : < >A: 8  &-F-'/- 4 %" #0%  %!!% -

))!  , : < >A: 8  &-$-'/-" #%  %!!% -

((((((((

; 

  &-$-',  ! 

;+

;

Al terminar las iteraciones se generaran dos archivos de texto, el primero con el nombreµ
poblacionInicialµ, en el se encontrara la tabla con los primeros cromosomas y sus costos que
fueron creados con la unión de números aleatorios entre 0 y 1. El segundo archivo de texto se
llamara ´Salidaµ y en él se encontraran los cromosomas con el menor costo de cada iteración.

En conclusión se obtiene que al generar nuevos descendientes de una población aleatoria


podemos encontrar el resultado que estemos buscando, ya sea el mínimo de una ecuación, el
máximo de una ecuación u otros resultados que estemos buscando.

También podría gustarte