Está en la página 1de 23

Volcado, desde hace un par de das, a la resolucin de algunos problemas de

optimizacin que me plantearon distintos lectores, decid levantar la presente entrada,


aunque el sistema que utilizar no ser un tema excluyente de Excel. Tampoco resultar
algo sencillo para aquellos que nunca oyeron hablar de esta tcnica, por cuanto habr
que prestar especial atencin e ir comprendiendo el paso a paso, analizando
cuidadosamente todos los proceso que intervienen. Por qu un preludio tan extenso?
Por que veremos la forma de realizar Algoritmos Genticos (Wikipedia), un desarrollo
mediante el cual es posible simular en nuestro ordenador el proceso evolutivo de la
naturaleza, aplicando sus pasos en la resolucin de problemas.

[+/-] Ver el resto / Ocultar


Tratar de evitar a toda costa caer en tecnicismos y funciones por dems de complejas,
como intento hacerlo siempre. Material sobre los Algoritmos Genticos (AG, a partir
de ahora) abunda en la Web, pero casi nada de cdigo resuelto puede hallarse... por
cuanto apuntar mas a lo prctico que a lo terico. Es un tema maravilloso y
sorprendente, al cual los invito a seguir a lo largo de este extenso post.

Darwin nos ense que las especies evolucionan a travs de un mecanismo de seleccin
natural, que favorece la supervivencia del mas apto. De esta forma vamos mejorando
en cada generacin, ya que de la poblacin, los mas aptos tienen mayor posibilidad de
reproducirse y llevar sus genes buenos a la descendencia. Durante el transcurso del
Siglo XX a alguien (John Henry Holland) se le ocurri que un algoritmo podra tambin
evolucionar y ser mejor, aplicando las mismas tcnicas de la naturaleza: crear una
poblacin, seleccionar a los mejores individuos, cruzarlos, mutarlos y as dar paso a una
nueva generacin, con la ventaja de que esta ltima naci sobre los cimientos de los
mejores genes de la anterior. Y as vamos evolucionando.
Todo nace a partir del gen, considerado como la unidad de almacenamiento de
informacin gentica. All ya est escrito que color de ojos tendremos, nuestra altura,
enfermedades, etc, etc, etc. Un cromosoma es, a grandes rasgos y hablando en trminos
generales, una ristra de genes. Veamos como luce un cromosoma "armado en
Excel"

ah, as de sencillo, por ahora. Un cromosoma no es mas que una matriz, donde cada
elemento es denominado gen y almacenar informacin sobre nuestro problema. El
cromosoma del ejemplo posee 10 genes

Reduciendo las cosas a la mnima expresin (y repito, obviando cualquier tecnicismo),


yo estoy escribiendo esto luego de que los cromosomas de mi mam se cruzaron con los
de mi pap, heredando genes de unos y otros. Y a Ud. que estn leyendo esto... les pas
los mismo. En medio de ese cruzamiento se produjo alguna que otra mutacin
gentica, principio fundamental para asegurar la diversidad. De esta forma se generan
las poblaciones y, segn lo expuesto por Darwin y ya recontra probado, cada
generacin avanza con respecto a la otra, proporcionando individuos mas aptos.
una clsica reproduccin sexual de los cromosomas (crossover): cromosoma pap a la
izquierda, cromosoma mam a la derecha y en el medio, el nuevo cromosoma, el cual
hereda genes de sus padres. Noten, para ir entrando en calor, que el ltimo gen no es ni
azulado o rosa: es verde... all se produjo una mutacin.

Si todo sali bien ese gen "Yo" es mejor que los genes "Pap" y "Mam", y a su vez
contribuir a la creacin de una poblacin mas evolucionada, dado que (si todo sale
bien) me cruzar con otro cromosoma que pas por la misma experiencia.
Ahora intentemos llevar toda esta parafernalia evolutiva a nuestra especialidad.

Los AG se utilizan en la resolucin de problemas que involucran muchas variables y


restricciones, en donde existe una gran cantidad de elementos a combinar. Por ejemplo,
son utilizados para los sistema satelitales de los GPS, calculando la ruta entre X
cantidad de puntos. Jaja, si, parece mentira, pero una de sus funciones puede ser esa.
Brindo ese ejemplo para que se comprenda la complejidad de resolver el mismo caso
mediante la fuerza bruta: imaginen probar todas las combinaciones posibles de todas
las ciudades de un pas para calcular la ruta mas corta. Seran trillones y trillones de
alternativas a evaluar... as que para cuando el GPS nos de la solucin, probablemente la
ruta o ciudad no existan mas. As de sencillo.

Empecemos. Cmo trabaja un Algoritmo Gentico? Primero vamos a un ejemplo "en


blanco", similar a las imgenes ya mostradas. Nuestro AG debe:
1) Generar una poblacin de cromosomas: esto se realiza de forma aleatoria, al igual
que en la naturaleza.
creamos 6 cromosomas (los colores son solo para ilustrar)
noten que ya empezamos: cada gen tiene un valor: 1 0 , que es la forma mas habitual
de codificar un AG.
nuestros cromosomas contienen informacin, y sobre ella trabajaremos

Cada 1 / 0 que se observa fu colocado de forma aleatoria: como tirar una moneda al
aire, si sale "cara" coloco un 1, si sale cruz, un 0.

2) Seleccionar los mas aptos: aplicando una funcin de ajuste (fitness) que evale los
6 cromosomas y, por ejemplo, seleccione a los dos mejor dotados, es decir, los mas
aptos para reproducirse. Ej: nuestra macro, por s sola, no puede decir cuales de esos 6
cromosomas son "los mejores"; ah es donde debemos crear una "funcin de ajuste" que
los analice y sobre la base de nuestras premisas, sepa seleccionarlos. Supongamos, por
ahora, que los mejores cromosomas son aquellos que poseen mas genes codificados con
1. Entonces:
de acuerdo a nuestro "fitness" el primer, segundo y sexto cromosoma son los mas
aptos, ya que contienen mas cantidad genes con valores iguales a 1.

3) Cruzamiento (crossover): aqu se inicia la reproduccin sexual de los dos mejores


cromosomas. Tomemos el primero y segundo, los cruzamos y vemos como nos queda el
hijo. Existen muchsimas formas de realizar el crossover, pero no me explayar sobre
las mismas por que si no esta entrada sera por dems de extensa. Voy a elegir (tambien
de forma aleatoria) dos nmeros entre 1 y 10, es decir, la cantidad total de genes de cada
cromosoma. Supongamos que salieron el 4 y el 8, a los cuales llamaremos "puntos de
cruce" y ser la porcin del cromosoma que herede genes de los dos padre
seleccionados. Observen la siguiente imagen (quit tantos colores para evitar
confusiones):
esta es nuestra poblacin original. Conservan los genes 1, 2, 3, 9 y 10. Los genes 4,5,6,7
y 8 sern completados con informacin de sus padres.

Y este pase de genes tambin ser aleatorio: vamos a recorrer cromosoma x cromosoma
(los 6 de la poblacin actual) y cada vez que nos hallemos entre el gen 4 y el 8
lanzaremos la moneda: si sale cara, hereda de un padre, si sale cruz, hereda del otro. No
es nada mas ni nada menos que un bucle recorriendo una matriz. Hice todo a mano (ya
veremos la codificacin), obteniendo el siguiente resultado:

Bien, arriba tenemos a la nueva generacin, luego de haber combinado los genes de los
dos mejores cromosomas seleccionados. Parece todo igual, pero no es as: la suma de
todos los 1 de la primer generacin arroja un total de 30.... en esta segunda
generacin 33. Es decir, claramente, que nuestra poblacin evolucion hacia sujetos
con mas genes codificados con 1, que es lo que requerimos en nuestra "funcin de
ajuste" Y si repito la operacin, me voy a 38 y luego a 45 y as sucesivamente, hasta
encontrar un valor ptimo. Se entendieron los pasos y observaron como en realidad
esos cromosomas evolucionaron hacia una respuesta mejor?

Bueno, para alegra de todos, ese mecanismo se emplea en resolver problemas


financieros, de fsica, de logstica, biologa, inversiones y de casi todo lo que se les
pueda imaginar.
Para ir cerrando la teora: los AG en si mismo son todo un universo aparte, del cual
podrn encontrar mucha informacin en la web. Para cada una de las cosas que detall
existen cientos de formas de hacerlas distintas y esas formas dependern en gran medida
de las caractersticas de nuestro proyecto. Aqu trato de exponer lo bsico y
fundamental:
1) generamos una poblacin de cromosomas, en donde cada uno de ellos es una
posible solucin a nuestro problema. Cabe destacar que se hace aleatoriamente: cada
gen del cromosoma tomar un valor al azar, obviamente, dentro del rango de valores
que ocupa nuestro problema a resolver (en el ejemplo de arriba, unos y ceros)
2) seleccionamos los mejores individuos, en base a una funcin "de ajuste" (fitness)
que evala cual de ellos cumple con las condiciones ideales. Esta funcin puede ser algo
tan sencillo como una suma o una resta, o bien poseer complicados mecanismos de
evaluacin (depende del proyecto)
3) sobre la base de los genes de los cromosomas seleccionados en el paso anterior
mejoramos la poblacin, en la fase denominada reproduccin sexual o combinacin
(crossover), definiendo, tambien al azar, los "puntos de cruce" es decir, a partir de
"donde" y "hasta" que genes se intercambiarn. Aqu se produce tambin (al azar y en
porcentajes muy bajos) la "mutacin", indispensable para que exista la diversidad.
Ampliar este concepto en la codificacin del AG.
4) volvemos sobre el punto 2 y 3, hasta encontrar una solucin ptima.

A medida que vayamos desarrollando el cdigo ir explicando otras cosas que aqu se
me complica hacerlo, aunque "la base est" y ya tenemos todo listo para empezar.
Cuantas generaciones hacen falta para llegar a nuestro "cromosoma ideal", o sea,
nuestra solucin? No se sabe, por ello es conveniente ir "guardando" los resultados para
un posterior anlisis.
Larguemos.

Han odo hablar del "Problema de la Mochila"? Este nos plantea lo siguiente: " existe
una mochila con, por ejemplo, una capacidad mxima de 20 kg de carga. A esa mochila
debemos llenarla con distintos objetos (imaginemos que nos vamos de campamento) los
cuales tienen un peso y una utilidad determinada. Cual es la forma ptima de cargar
esa mochila? Que combinacin de elementos me dar el mximo beneficio (utilidad)
sin pasarme de los 20 kg mximos permitidos?"
Como podrn ir imaginando pueden existir cientos de miles de combinaciones distintas,
de acuerdo a la cantidad de objetos existentes. Si bien el Problema de la Mochila es
vlido en si mismo, les aclaro que estamos ante algo "terico", dado que en realidad ese
tipo de planteamientos es utilizado, por ejemplo, en situaciones como fabrico camisas,
pantalones y remeras, las cuales me representan un costo ("peso" en la mochila) de
$10, 15 y 8, con una utilidad ("beneficio" en la mochila) de $3, 4, y 5
respectivamente. Si tengo 2600 mts de tela cuantas unidades de cada artculo me
conviene producir para obtener el mximo beneficio?
A ese tipo de problemas apunta en forma terica nuestra Mochila, pero nos quedaremos
con ella, para hacer mas fcil la comprensin y aplicacin de los AG. Como digo
siempre: para complicarla, sobra tiempo.

Nuestra mochila es sencilla y contendr elementos bsicos para irnos de campamento.


Los valores utilizados son irreales y con fines meramente descriptivos, pero nos
permitirn apreciar el peso de cada uno (que pueden ser expresados en kilos y cualquier
otra unidad) y un beneficio:
nuestra querida mochila. Como vemos, no podemos incluir todos los elementos, ya que
totalizan un peso total de 27, y esta tiene una capacidad mxima de 20.

Para no ir perdiendo "la pisada" y "enganchar" con la teora repasada hasta el momento,
les mostrar la misma tabla, pero a la derecha observarn tres "cromosomas" (posibles
soluciones) al problema:
Codifiqu de forma binaria el problema y ah tiene 3 cromosomas: cada gen posee un 1
o un 0, que significan: incluyo el objeto (1) no lo incluyo (0).
Antes de seguir, analicemos esos 3 individuos: veamos que peso y utilidad tienen cada
uno de ellos:

Para que se entienda: multiplico cada gen del cromosoma por el peso del objeto, si es 1
me devuelve el peso y si es 0.... queda en 0. Luego sumo los resultados de esas
multiplicaciones. Y luego hago lo propio con la utilidad. Para ambas apliqu
=SUMAPRODUCTO(matriz1, matriz2).
Ya tenemos un panorama mucho mas claro: el primer y segundo cromosoma no pasan
nuestra prueba, ya que exceden los 20 kg que soporta la mochila. El tercero es el apto y
nos servir para mejorar la poblacin e ir arrimndonos a la solucin mas ptima Se va
entendiendo la lgica?

Lo arriba desarrollado nos permite inferir cual ser nuestra "funcin de ajuste" (fitness)
y as indicarle a nuestra macro que cromosoma "sirve" y cual no. Lo principal ser
evaluar que la suma de los pesos de los objetos no superen los 20 kg y, a su vez, tengan
la utilidad o beneficio mas alta. Podrn ir imaginando tambin que existirn varias
soluciones posibles: luego determinaremos si dejamos la eleccin final a un criterio mas
"humano" o desarrollamos algn cdigo que seleccione la mejor.

Pasemos a un rudimentario pseudocdigo:


Procedimiento AlgoritmosGeneticos()
generar una poblacion de 10 cromosomas, asignando de forma aleatoria a cada gen un 1
o un 0
repetir
seleccionar los 2 mejores cromosomas, en base a nuestro "fitness" (funcin de ajuste)
cruzar los 2 cromosomas con la poblacin, generando una nueva
fin repetir
Fin Procedimiento

Aprovecharemos las bondades de Excel, haciendo uso de sus rangos y ah crear los
cromosomas, tal como lo fui mostrando hasta el momento. En una hoja aparte ir
guardando los cromosomas "padres", es decir, los mejores, as tenemos un historial de
las mejores selecciones y posteriormente decidir con cual de ellas nos quedamos No
olvidemos que las combinaciones posibles son muchas y si nos ajustamos estrictamente
al problema de la mochila... quizs para algunas ser mas conveniente llevar mantas o
para otros reemplazar dicho objeto por una linterna, siempre y cuando no supere los 20
kgs de capacidad.

Lo que visualizan en la imagen superior lo realic para facilitar las cosas. Dise el
"esqueleto" de los 10 cromosomas que se formarn en cada generacin y desde el
cuadro de nombres (arriba a la izquierda) los nombr, para luego identificarlos desde
VBA (cromosoma_1, cromosoma_2..... cromosoma_10).
Si no estamos en Excel, o bien no queremos hacer uso de rangos o el tamao de la
poblacin necesite ser mas flexible, todo esto se reemplaza por una comn y corriente
matriz bidimensional:
Dim Poblacin (1 to 10, 1 to 10) as Variant

En lo personal siempre agrego un par de "genes" a cada cromosoma, para guardar


informacin adicional sobre el individuo. De esta forma s que las soluciones llegan al
gen nro 10, pero a partir de all almaceno datos sobre distintos aspectos de ese
cromosoma en particular. Me resulta imprescindible en proyectos de mayor
complejidad, como seguramente alcanzarn a realizar luego de descubrir esta increble
forma de trabajo.
Generemos la primer poblacin, de 10 cromosomas y asignemos a cada gen, de forma
aleatoria, un valor (entre 1 y 0, para este caso):
Bien, ya tenemos a cada individuo (cromosoma) de la poblacin con sus genes
completos:
Ahora viene un tema delicado: el "fitness", ya que debemos seleccionar a los dos
mejores individuos de la poblacin, aspecto que ser decisivo para llegar a buen puerto.
Por un lado es fcil: solo sern aptos aquellos cuyo peso no supere los 20 kgs de nuestra
mochila: los cromosomas 2, 3 y 6 quedan descartados de la seleccin. Pero por el otro
lado.... cual es mejor, el primero con un peso muy liviano de 11 y una utilidad muy alta
de 19, o el dcimo, con mucho peso y alta utilidad? Yo dira que el primero, ya que me
permitir seguir agregando elementos a la mochila y as ir incrementando la utilidad
total.
Mi "funcin de ajuste" es la que se observa en la fila correspondiente a "puntuacin" y
utilizo a las funciones =SI() y COINCIDIR() para lograrla. En el libro que les dejo al
pi del post podrn analizarla, pero en principio les aclaro:
1) primero solo tengo en cuenta los cromosomas de peso <= 20
2) luego me fijo cual es la utilidad mas alta de dichos cromosomas
3) sumo el resultado del punto 1 + el resultado del punto 2, obteniendo una
"puntuacin"... mientras mas alta, mas apto el individuo y con mas posibilidades de ser
elegido como padre.
segn mi funcin de ajuste, los mas aptos son el primer y cuarto cromosoma, ya que con
poco peso reportan una utilidad alta.

Pueden ver ahora lo que les quera decir con "agregar genes para almacenar
informacin"? Bien podra ahora extender la cantidad de genes a 13 y guardar en los
ultimos 3 el peso, la utilidad y la puntuacin. Por que ahora la cosas se simplifican al
utilizar rangos de Excel, pero de lo contrario debera ser mas cuidadoso con el armado
de las matrices. Pero bueno, lo veremos en futuras entradas, hoy el tema es aprender a
manejar los AG. Sigamos.
En la ltima fila (fila nro 15) tengo las puntuaciones, las recorro con un bucle y
selecciono las dos mejores, que pasarn a ser los futuros "padres" de la siguiente
generacin.
Con este cdigo recorro toda la poblacin de cromosomas y elijo a los dos mejores, en
base al fitness:
view plainprint?

1. Sub SeleccionarPadres()
2. Dim X, C As Byte
3. Dim Cromosoma, CromoPadre1, CromoPadre2 As Range
4. Dim Optimo, Optimo2
5.
6. Optimo = 0
7. Optimo2 = 0
8. 'recorro todos los cromosomas, para identificar en que columna
9. 'de la planilla estn cada uno de ellos:
10. For X = 1 To 10
11. Set Cromosoma = Range("cromosoma_" & X)
12. 'tomo la columna
13. C = Cromosoma.Column
14. 'si el peso es menor o igual a 20
15. If Cells(13, C).Value <= 20 Then
16. 'guardo el fitness del mas apto
17. If Cells(15, C).Value > Optimo Then
18. Optimo = Cells(15, C).Value
19. Set CromoPadre1 = Cromosoma
20. End If
21. End If
22. Next X
23. 'copio el cromosoma padre 1 en un rango, para dejarlo
24. 'guardado y usarlo en el cruzamiento:
25. CromoPadre1.Copy Range("padre_1")
26.
27. 'ahora voy por el segundo padre. es igual a lo anterior,
28. 'salvo que Optimo2 debe ser menor a Optimo, por que ahora
29. 'hablamos del segundo padre:
30. For X = 1 To 10
31. Set Cromosoma = Range("cromosoma_" & X)
32. C = Cromosoma.Column
33. If Cells(13, C) < 20 And Cells(15, C) < Optimo Then
34. If Cells(15, C) > Optimo2 Then
35. Optimo2 = Cells(15, C)
36. Set CromoPadre2 = Cromosoma
37. End If
38. End If
39. Next X
40. 'guardo el segundo padre:
41. CromoPadre2.Copy Range("padre_2")
42.
43. 'llevo ambos padres a un backup, para ir viendo los
44. 'mejores de cada generacion
45. With Sheets("mejores")
46. fila = .Cells(Cells.Rows.Count, 1).End(xlUp).Row + 2
47. CromoPadre1.Copy .Range("a" & fila)
48. CromoPadre2.Copy .Range("c" & fila)
49. 'coloco los totales
50. Range("tot_padre_1").Copy
51. .Range("a" & (fila + 10)).PasteSpecial xlPasteValues
52. Range("tot_padre_2").Copy
53. .Range("c" & (fila + 10)).PasteSpecial xlPasteValues
54. 'coloco los nombres de los objetos seleccionados
55. For X = fila To (fila + 9)
56. i = i + 1
57. If .Range("a" & X) = 1 Then
58. .Range("b" & X) = Range("objetos").Cells(i)
59. End If
60. If .Range("c" & X) = 1 Then
61. .Range("d" & X) = Range("objetos").Cells(i)
62. End If
63. Next X
64. End With
65.
66. 'destruyo los objetos:
67. Set CromoPadre1 = Nothing
68. Set CromoPadre2 = Nothing
69. Set Cromosoma = Nothing
70. End Sub

Logrando esto:

la macro recorrio y, a la derecha, coloco los dos mejores... los mas aptos para
reproducirse.

Sobre la base de lo mencionado hasta el momento, el cdigo para cruzar la poblacin


actual con los padres es el siguiente:

view plainprint?

1. Sub Cruzamiento()
2. Dim Desde, Hasta, X, Muta, J As Byte
3. Dim Cromosoma As Range
4.
5. Randomize
6. 'gen de inicio
7. Desde = CByte(Application.WorksheetFunction.RandBetween(1, 9))
8. 'gen de fin
9. Hasta = CByte(Application.WorksheetFunction.RandBetween(Desde, 10))
10.
11. 'recorro los cromosomas
12. For X = 1 To 10
13. Set Cromosoma = Range("cromosoma_" & X)
14. 'intercambio los genes de los padres con los genes
15. 'de los cromosomas, entre los puntos aleatorios:
16. For J = Desde To Hasta
17. 'si sale 1 pongo el gen del padre1, si sale 0
18. 'pongo el gen del padre2
19. If CByte((1) * Rnd) = 1 Then
20. Cromosoma.Cells(J) = Range("padre_1").Cells(J)
21. Else
22. Cromosoma.Cells(J) = Range("padre_2").Cells(J)
23. End If
24. 'y la mutacin (la explico mas abajo). si el gen
25. 'tiene valor 1 le pongo 0, si tiene 0, le pongo 1
26.
27. 'primero genero un valor aleatorio, entre 1 y 100
28. Z = Application.WorksheetFunction.RandBetween(1, 100)
29. 'y le doy un 1% de probabilidad. si se cumple, hay
30. 'mutacin:
31. If CByte(Z) = 50 Then
32. If Cromosoma.Cells(J) = 1 Then
33. Cromosoma.Cells(J) = 0
34. Else
35. Cromosoma.Cells(J) = 1
36. End If
37. End If
38. Next J
39. Next X
40.
41. Set Cromosoma = Nothing
42. End Sub

Como habrn visto todo es bastante aleatorio, tal cual los postulados de nuestra madre
naturaleza.
Notarn que gener un nmero al azar, entre 1 y 100... si ese nmero es igual a 50,
cambio el valor de uno de los genes, deliberadamente. Por que hago eso? All estamos
frente a la indispensable mutacin, que nos asegura una sola cosa: diversidad. Si no
existiera un factor de mutacin (del 1% en este caso, que generalmente es lo
aconsejable) nuestra poblacin tendera a igualarse, sin generar soluciones nuevas.
Factores de mutacin muy altos tambin nos perjudicaran, dado que crearamos nuevos
"seres", totalmente distintos a sus padres y poblacin original. Se comprende?
Un ejemplo bien prctico: mis padres se reprodujeron, yo soy la combinacin de sus
genes. Existi una mutacin que dio origen a un nuevo ser (el que ahora escribe esto),
igual a sus padres... pero distinto, por que ciertos genes cambiaron (mutaron) en el
proceso. Pero (y aunque la mayora de mis amigos no este de acuerdo) mutaron dentro
de parmetros normales, ya que caso contrario tendra 3 piernas, 4 brazos o mi cabeza
sera de color verde con cerdas amarillas. "Mucha mutacin" habra generado un nuevo
ser, hasta quizs de otra especie, que nos alejara del concepto de ser humano que
tenemos. Bien... con los AG sucede exactamente lo mismo. Factores de mutacin muy
altos nos generaran cromosomas que no estaran acordes a la "poblacin" de
soluciones. Y muy bajos haran que padres e hijos sean totalmente iguales,
homogeneizando la poblacin ("convergiendo", en nuestra jerga), estandarizando as las
soluciones y no proponiendo nada nuevo.

Y ahora... a los bifes se ha dicho. Agregu cierto cdigo que va guardando en otra hoja
los "mejores padres", as con posterioridad los analizamos, junto a una celda que me va
diciendo cuantas generaciones tengo realizadas.
Veamos en imgenes que sucede:
1) Genero la poblacin aleatoria:

a la derecha los mejores cromosomas de la poblacin: 19 de peso con 26 de utilidad


(cromosoma nro 10) y 17 de peso con 21 de utilidad (cromosoma nro 3)

Presiono el botn para cruzar los "padres" con la poblacin y obtengo esto:
Bingooooo!!! quiero decir... ciencia. Ya tenemos una solucin factible: el cuarto
cromosoma, alcanz el peso de 20 con una utilidad de 23.

Sigamos creando generaciones de cromosomas e intercambiando sus genes con los


mejores padres:

en la sptima generacin el primer padre sigue igual, pero el segundo "salt" a un peso
de 19 y utilidad de 21. Bien, vamos evolucionando.

Y seguimos. La generacin 23 me trae esto:


bajamos un poco el peso y subimos las utilidades por mochila

Y en la generacin 67:

esooooo !!!!! una mochila de peso 20 con utilidad de 27. Jeje, mis pequeos han
evolucionado de forma excelente.

La macro se encargar de hacer esto:


nos ir guardando el historial de los "mejores padres", para que al final sepamos como
combinar los objetos dentro de la mochila, junto al peso, utilidad y puntuacin
obtenidas por los padres en cuestin.

Abren el libro, presionan "generar poblacion", luego "seleccionar padres" y finalmente


"cruzar cromosomas". Los botones se irn ocultando/mostrando para guiarlos, ya que
como habrn visto podemos llegar a necesitar varios "bucles" hasta llegar a una de las
posibles soluciones. Quizs lo ideal sera colocar todo dentro de un bucle, pero lo dejo
as por que cada vez que presionen un botn tendrn la posibilidad de ir viendo como
evolucionan los padres, y es bastante interesante observarlo en "camara lenta".

Como ya mencion, existen cientos de formas de seleccin y cruzamiento (por


ponderacin, totalmente aleatoria, de la ruleta sesgada, etc, etc, etc, etc), pero mi
intencin no es embrollar las cosas. Nunca pude encontrar el cdigo en VBA de un
algoritmo gentico, por cuanto ese fue mi objetivo: mostrar en forma prctica (y lo mas
sencillamente posible) como se programa un AG y para que se utiliza.
Recuerden que "La Mochila" puede ser una empresa, mientras que los objetos la
produccin, junto a sus costes y beneficios individuales... y de esta forma sabremos que
y como fabricarlo.
Prueben cambiando los pesos y utilidades de los objetos de la mochila, o bien asignando
un factor de mutacin mas alto.... vern como las cosas cambian; es un buen ejercicio
para saber lo importante que se tornan el correcto manejo de las variables en juego.
Otra cosa mas, antes de despedirme. A cada cromosoma lo codifiqu con nmeros
binarios, que por lo general es la forma mas habitual de hacerlo. Pero podemos ir mucho
mas all, y les tiro la idea para que la piensen y analicen, saliendo un poco de los 1 y 0.
Supongamos que tenemos un criadero de perros, dedicndonos a la cruza de distintas
razas. Como codificaramos el cromosoma de un perro? Aqu va una:

Si: cada gen de ese cromosoma (perro) es una caracterstica: pelaje, color, altura, etc,
etc, etc. Los valores utilizados para el ejemplo son referenciales y, obviamente, debern
guardar relacin con una tabla lgica que tengamos armada. Podramos decir que este es
un caniche:
Chico, con mucho pelo, buen caracter, blanco (color=0), liviano.... si, casi un
"excel_caniche".
Y este un Gran Danes:

Entonces que nos priva de generar diez perros (cromosomas) con valores aleatorios y
luego combinarlos, hasta encontrar "el perro ideal" (gris, mediano, de caracter agresivo,
etc, etc) para saber como cruzarlos? Nada, no tenemos nada de privativo en esto, y sera
un buen ejercicio para ir entrando en el mundo de los AG. Y este tipo de trabajos es
vlido para realizar proyecciones empresariales, cientficas o casi de cualquier
ndole. Espero que les sea de utilidad.

También podría gustarte