Este es el informe que entregue para obetener la cursada de la materia optativa llamada Intruducción a la Computación Evolutiva de la Universidad Nacional del Centro de la Provincia de Buenos Aires.
Int. a la Computación Evolutiva - Informe para cursada
1. Introducción a la Computación Evolutiva
Facultad de Cs. Exactas, Universidad Nacional del Centro de la Pcia. de Buenos Aires
Trabajo Práctico para Cursada 2010 - Profesora: Dra. Virginia Yanibelli
Alumno: Martín Ignacio Pacheco, L.U.: 245214, {mpacheco@alumnos.exa.unicen.edu.ar}
2. Contenido
Resumen ................................................................................................................................. 2
1. Introducción.................................................................................................................... 2
2. Solución Algorítmica...................................................................................................... 4
2.1. Representación de las soluciones .......................................................................... 4
2.2. Función de fitness ................................................................................................... 6
2.3. Proceso de generación de la población inicial ...................................................... 7
2.4. Proceso de selección de los padres ........................................................................ 7
2.5. Operadores de cruce genético ................................................................................ 8
2.6. Operadores de mutación genética ......................................................................... 9
2.7. Proceso de reinserción ............................................................................................ 9
3. Conclusiones ................................................................................................................. 10
Índice de figuras
Figura 1 - Movimientos validos de la dama. ........................................................................ 2
Figura 2 - Estructura general del algoritmo genético. ......................................................... 4
Figura 3 – Ejemplo de la representación en un tablero de 4 x 4. ........................................ 5
Figura 4 - Representación de los conceptos biológicos. ...................................................... 6
Figura 5 - Esquema de selección. .......................................................................................... 7
Figura 6 - Ejemplo de cruce genético. ................................................................................... 8
Figura 7 - Ejemplo sin mutación. .......................................................................................... 9
1
3. Resumen
El presente es un trabajo práctico para la aprobación de la cursada de la materia
optativa Introducción a la Computación Evolutiva. El objetivo del mismo consiste en
presentar una solución al problema de las n-reinas mediante el diseño de un algoritmo
evolutivo.
1. Introducción
El problema de las n-reinas propuesto en el siglo XIX se ha transformado en un
estándar para probar algoritmos de resolución heurísticos.
Este problema consiste en colocar n reinas de ajedrez en un tablero de n por n casillas,
de tal manera que ninguna de ellas pueda atacar a otra usando los movimientos del
juego-ciencia provistos para esta pieza.
Recordar que la reina se puede mover en el tablero en forma horizontal, vertical y
diagonal la cantidad de escaques deseados, como se observa en la figura 1.
Figura 1 - Movimientos validos de la dama.
Este tipo de problema es fácil de abordar con los algoritmos que se podrían denominar
como “clásicos”. Un ejemplo son los recursivos o de tipo voraz (Greedy, Backtracking,
etc), sin embargo hay otro tipo de problemas mucho mas complicados como los NP
completos cuya complejidad crece con el tamaño del problema de forma exponencial
(por ejemplo O (2n), O (n!), …).
Debido a su elevada complejidad deben ser resueltos en una cantidad de tiempo
razonable empleando métodos heurísticos. Los algoritmos evolutivos son métodos de
este estilo muy poderosos, capaces de realizar búsquedas en grandes espacios de
soluciones de forma muy eficiente.
El algoritmo evolutivo que se propone es un algoritmo genético, debido a que la
representación de las soluciones candidatas es más favorable, ya que evita ciertos
conflictos que se explicaran mas adelante. Además han demostrado tener una buena
2
4. heurística para problemas combinatorios. Como contrapartida es que no son
demasiado veloces.
¿Qué es un algoritmo genético?
Pueden verse como una familia de procedimientos de búsqueda adaptativos. Están
basados en modelos de cambio genético en una población de individuos. Es decir, que
un algoritmo genético es una técnica de programación que imita a la evolución
biológica como estrategia para resolver problemas.
Esto es:
Evolución Darwiniana: El éxito de los individuos en el ambiente depende de
cuan bien se adaptan al ambiente (aptitud o fitness).
Apareamiento o cruzamiento que produce descendientes en generaciones
futuras.
Operadores genéticos que determinan la configuración genética de los
descendientes.
Como entrada el algoritmo genético serán un conjunto de soluciones potenciales del
problema a resolver que estarán codificadas de alguna manera. Se tiene una función de
fitness que permite evaluar cada solución candidata y se obtiene un resultado
cuantitativo de aptitud.
Las soluciones mas aptas se conservan y se les permite reproducirse. Luego se
producen copias de ellas que no son perfectas, es decir que se les producen cambios
aleatorios durante este proceso de copia. Estas a su vez generaran una descendencia
para la próxima generación que serán sometidas a una evaluación de aptitud. Este
proceso se repite con cada generación.
La idea es que la aptitud media (fitness medio) vaya mejorando a lo largo de las
generaciones en las cuales se pueden producir soluciones muy novedosas como la
encontrada a las estructuras de los satélites para sostener las antenas de transmisión.
Esto parece anti intuitivo, pero los algoritmos genéticos han demostrado ser una
estrategia muy poderosa y exitosa para resolver problemas y también encontrar
soluciones muy peculiares.
3
5. 2. Solución Algorítmica
El esquema general de ejecución del algoritmo genético a usar se puede observar en la
figura 2.
Inicializar Población Inicialización
Seleccionar Padres Selección
Crear Hijos Cruce
Mutar Hijos Mutación
Generación n + 1
Insertar Hijos en la Población Inserción
No ¿Condición Si Devolver el mejor
de Corte? individuo
Figura 2 - Estructura general del algoritmo genético.
En un principio se inicializa el algoritmo con una población con diversas soluciones
(validas o no) creadas aleatoriamente lo que permite tener una diversidad de
individuos.
Después se seleccionan algunos padres que tendrán hijos. A su vez los hijos podrán
tener o no pequeñas mutaciones permitiendo explorar nuevos lugares en el espacio de
soluciones.
La nueva generación de individuos estará conformada por hijos y padres (abuelos a
partir de la tercera iteración) y se volverá a repetir este mecanismo evolutivo hasta que
se cumpla una cierta condición de aptitud o cantidad de generaciones limite.
A continuación se explicaran más detalladamente las funciones que le competen a cada
etapa del algoritmo.
2.1. Representación de las soluciones
4
6. Como cada reina debe estar en una columna o fila diferente se puede asumir que cada
reina se colocara en una columna distinta. Es decir, que la reina i se situara en la
columna i. Con esto se evita que no se ataquen por las columnas.
Ahora para evitar que se ataquen vía alguna fila cada una deberá estar en una fila
distinta. Por lo tanto la mejor forma de representar esto en con una estructura de
ventores de tamaño n. Cada posición del vector se corresponderá a cada columna
mientras que el valor que contiene dicha posición es la fila correspondiente en donde
se posiciona la dama dentro de esa columna. En la figura 3 se pueden observar como
es el mapeo de esta idea con un par de ejemplos en un tablero de 4 por 4.
Tablero 1 Tablero 2
[1, 4, 2, 3] [3, 1, 4, 2]
Figura 3 – Ejemplo de la representación en un tablero de 4 x 4.
Entonces teniendo en cuenta esta representación, el espacio de soluciones, en donde el
conflicto sobre las filas y las columnas se ha eliminado, debe ser encontrado para poder
eliminar los conflictos que surgen producto de las diagonales. Serán soluciones
incorrectas aquellas en donde las reinas se ataquen diagonalmente unas con otras.
Cada vector de solución se compone de una permutación de números enteros que van
desde 1 a n. En el ejemplo de la figura 3 serian permutaciones de los números enteros 1,
2, 3 y 4.
Aquí podemos decir que el espacio fenotípico queda definido por el tablero con las
damas y el espacio genotípico esta definido por el vector. Este vector conforma el
cromosoma de una solución que a su vez esta compuesta como una combinación de
genes cuya combinación es única y que podría verse como el ADN de cada individuo.
Para esto ultimo teniendo en cuenta que no se generan vectores repetidos. El valor del
gen podríamos verlo como alelo.
Tener un cromosoma aislado no brinda mucha información por ello es necesario un
proceso de decodificación, ya que primero se codifica el cromosoma del individuo. Es
decir, biológicamente lo trato como cromosoma en el algoritmo, pero si lo quiero ver
debo decodificarlo para llevarlo a espacio fenotípico.
5
7. Esta analogía entre conceptos biológicos y conceptos computacionales se resume mejor
en la figura 4.
Espacio Genotípico Espacio Fenotípico
Codificación Decodificación
1 4 2 3
Alelo
Gen
Cromosoma
Figura 4 - Representación de los conceptos biológicos.
2.2. Función de fitness
Con la representación explicada previamente se eliminaron conflictos en las filas y
columnas. Por tanto las soluciones incorrectas serán aquellas en las cuales se
produzcan amenazas entre las damas en las diagonales.
De esta manera una función de aptitud de los individuos podría ser la cantidad de
conflictos de este contiene. Lo ideal es que se tengan cero conflictos entonces cuanto
mas cercano a cero sea menos incorrecta será la aptitud.
De acuerdo a la representación planteada en el punto anterior y considerando en
vector genotípico [R1, R2,…, Ri, Ri+1,..., Rj,…, Rn] la reina (también llamada dama en la
jerga ajedrecística) en la posición i y la reina de la posición j compartirán una diagonal
si:
o
Lo que se reduce a considerar:
De esta manera se pude ver si ocurre o no un conflicto entre la dama en Ri y la dama en
Rj.
6
8. Entonces el fitness a considerar será el fitness medio de cada generación.
2.3. Proceso de generación de la población inicial
Para la creación de la población inicial se utiliza una matriz cuyo tamaño será de la
cantidad de reinas por la cantidad de individuos iniciales con el que se desean partir
desde un principio.
Para la generación de los cromosomas se usaran números aleatorios enteros dentro del
rango establecido al número de reinas. En este paso no se contemplaran números
repetidos en los cromosomas.
2.4. Proceso de selección de los padres
EL proceso de selección de padres se decidió utilizar la selección por torneo. En esta se
eligen subgrupos de individuos de la población, y los miembros de cada subgrupo
compiten entre ellos. Luego se elige a un solo individuo de cada subgrupo para la
reproducción.
Se cree más apto este mecanismo de selección porque brinda más diversidad en la
población lo que permite a su vez los máximos locales en lo que seria la superficie
adaptativa. Para este problema de las n-reinas seria una línea adaptativa si se puede
llamar de esta manera.
Entonces se elige un 80 % de la población actual para seleccionar a los padres. Después
se generas subgrupos de cromosomas de dos individuos (torneo de tamaño 2) de los
cuales solo quedara el más apto, es decir, el que tiene mayor nivel de fitness. De cada
torneo se elegirá un solo cromosoma por grupo para realizar el cruce.
En la figura 5 se puede observar un esquema del mecanismo de selección.
1 4 1
4 4
10 5 3
2 10 9
5 9 4
1ro
7 6 7 2do
3 6
9
8 9
Población actual Selección del 80 % Torneo de 2 Ganó el
concursantes individuo 4
Figura 5 - Esquema de selección.
7
9. 2.5. Operadores de cruce genético
Esta parte consiste en el intercambio de material genético entre dos cromosomas.
En el caso de emparejar dos individuos de los mismos padres no sucedería nada; esto
garantizaría que se propaguen individuos con buena aptitud. Sin embargo, si esto
sucede muy a menudo puede crear problemas. Puede suceder que toda una generación
de descendientes quede dominada por algún gen, que además puede tener
características no deseadas o que van en contra del objetivo que se desea alcanzar.
El intercambio genético se llevara a cabo por cruce en un punto. Este punto se elegirá
en forma aleatoria. Posteriormente se intercambian entre ambos cromosomas el
material genético a la derecha de dicho punto.
Adicionalmente se tiene otro parámetro probabilístico que indica con que frecuencia se
va a aplicar el cruce genético. La frecuencia de este operador deberá estar en función
del problema.
En general la frecuencia del operador no varia durante la ejecución del algoritmo, sin
embargo hay que tener presente que cada uno de los operadores en más efectivo en un
momento determinado de la ejecución.
Para este problema se propone una probabilidad de cruce de 0,8 ya que este operador
es mas predominante en la evolución. En la figura 6 se puede ver un ejemplo de
mutación con un punto de cruce. Tener en cuenta que el cromosoma generado no es
valido, sino que es a modo de ejemplo del funcionamiento del cruce.
[1, 4, 2, 3] [3, 1, 4, 2] [1, 4, 4, 2]
Figura 6 - Ejemplo de cruce genético.
8
10. 2.6. Operadores de mutación genética
En la teoría de la evolución la mutación es un suceso poco común. Suele suceder una
de cada mil replicaciones. Es verdad, que una mutación puede resultar fatal, pero como
contra partida provoca diversidad genética sin ser letal. La mutación actúa sobre un
único cromosoma produciendo una modificación valida.
La diversidad puede venir bien cuando el algoritmo genético tiende a estancarse (ver
ejemplo de la figura 7), pero también reduciría al algoritmo genético a una búsqueda
aleatoria.
Otras formas de evitar, si se desea, la mutación es aumentar el tamaño de la población
o garantizar aleatoriedad en la población inicial; donde esto último es lo que se
propuso.
Por las características mencionadas hasta aquí sobre la mutación y teniendo en cuenta
el problema en particular, se cree que es mejor usar la variante de mutación que realiza
el intercambio de dos genes aleatorios. De esta manera se evita aumentar la
probabilidad de que surjan duplicados. Esto con una probabilidad pequeña del 0,2
puesto que las mutación surgen muy pocas con respecto al cruce.
Sin mutación no se llegaría a una solución
Individuo 1 Individuo 2 Individuo 3 Individuo n
Figura 7 - Ejemplo sin mutación.
2.7. Proceso de reinserción
Cuando arranca el algoritmo se tiene una población inicial definida de ante mano.
Luego de aplicar los operadores genéticos anteriores la población crece en número
dado que se cruzaron, es decir, hay más cantidad de cromosomas.
Para realizar la re inserción se realiza un ranking por fitness de los mejores individuos
y se seleccionan los n mejores individuos, con n igual al tamaño de población definida
inicialmente.
9
11. 3. Conclusiones
He podido observar que la principal ventaja de los algoritmos genéticos radica en su
sencillez. Se requiere poca información sobre el espacio de búsqueda ya que se trabaja
sobre un conjunto de soluciones o parámetros codificados. Una de las desventajas
puede ser que se necesite mucho ensayo de prueba y error para adquirir experiencia;
también en lograr un buen diseño de la función de fitness.
Se busca una solución por aproximación de la población, en lugar de una aproximación
punto a punto. Con un control adecuado se puede mejorar la aptitud media de la
población, obteniendo nuevos y mejores individuos y por ende mejores soluciones.
Otro aspecto interesante de los algoritmos es la relación que hay entre la eficiencia y la
eficacia. Ya que manipulando los parámetros y operadores del algoritmo permite
balancear el equilibrio que hay en esta relación.
Principalmente lo que mas me motivo de la materia es que contiene temas que nunca
había tratado (computacionalmente hablando) ya que los problemas se encaran desde
una postura distinta a los que se ven a lo largo de las cursadas obligatorias donde se
ven algoritmos mas clásicos.
10