23
ALGORITMOS GENETICOS Análisis de un Algoritmo genético simple o Canónico Curso: Introducción a la Inteligencia Artificial Docente: Ing. Víctor Hugo Valle Ríos Alumnos: Dosantos Ocmin Jecri Rey Lozada Madrid Cesar Bismark Villegas Farfán Leonardo Manuel 2015 Piura - Perú “Año de la Diversificación Productiva y del Fortalecimiento de la Educación” Universidad Nacional de Piura Facultad de Ingeniería Industrial Escuela Profesional de Ingeniería Informática

Algoritmo Genetico - Inteligencia Artificial

Embed Size (px)

DESCRIPTION

AG SIMPLE BINARIO FUNCION CUADRATICA

Citation preview

Page 1: Algoritmo Genetico - Inteligencia Artificial

ALGORITMOS GENETICOS Análisis de un Algoritmo genético simple o Canónico

Curso: Introducción a la Inteligencia Artificial Docente: Ing. Víctor Hugo Valle Ríos

Alumnos:

Dosantos Ocmin Jecri Rey

Lozada Madrid Cesar Bismark

Villegas Farfán Leonardo Manuel

2015

Piura - Perú

“Año de la Diversificación Productiva y del Fortalecimiento de la Educación”

Universidad Nacional de Piura

Facultad de Ingeniería Industrial

Escuela Profesional de Ingeniería Informática

Page 2: Algoritmo Genetico - Inteligencia Artificial

1

Contenido

1. Introducción ............................................................................................... 2

2. Objetivos del Trabajo ................................................................................ 3

2.1. Objetivo General.................................................................................. 3

2.2. Objetivos Específicos ......................................................................... 3

3. Marco Teórico ............................................................................................ 4

3.1. Historia ................................................................................................. 4

3.2. Algoritmo genético .............................................................................. 5

3.3. Algoritmo genético simple ................................................................. 5

3.4. Función de Adaptación ....................................................................... 6

3.5. Selección ............................................................................................. 6

3.5.1. Selección por ruleta ..................................................................... 7

3.5.2. Selección por torneo .................................................................... 7

3.7. Operador de Cruce .............................................................................. 8

3.7.1. Cruce de 1 punto .......................................................................... 9

3.7.2. Cruce de 2 puntos ........................................................................ 9

3.7.3. Cruce uniforme ........................................................................... 10

3.8. Fase Reproductiva ............................................................................ 10

3.9. Mutación ............................................................................................ 11

3.10. Convergencia ................................................................................. 11

4. Desarrollo ................................................................................................. 12

4.1. Descripción inicial............................................................................. 12

4.2. Valores iniciales ................................................................................ 13

4.3. Ejecución ........................................................................................... 15

4.3.1. Población inicial: ........................................................................ 15

4.3.2. Selección ..................................................................................... 16

4.3.3. Cruce ........................................................................................... 16

4.3.4. Mutación ...................................................................................... 17

4.3.5. Resultados de convergencia ..................................................... 19

5. Conclusiones ........................................................................................... 21

6. Bibliografía ............................................................................................... 22

Page 3: Algoritmo Genetico - Inteligencia Artificial

2

1. Introducción

Los Algoritmos Genéticos son métodos adaptativos que pueden usarse para

resolver problemas de búsqueda y optimización. Estos algoritmos están

basados en el proceso genético de los organismos vivos.

A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza

de acorde con los principios de la selección natural y la supervivencia de los

más fuertes, postulados por Darwin (1859). Imitando este proceso, los

algoritmos genéticos son capaces de ir creando soluciones para problemas

del mundo real.

Este trabajo se centrará de manera específica en los algoritmos genéticos

simples o canónicos, de tal manera que se pueda analizar el funcionamiento

de los mismos de acuerdo a los elementos que participan en el mismo

permitiéndonos conocer como varían las adaptaciones promedio de cada

generación respecto a la solución de convergencia, así como el

comportamiento del mismo.

Para ello se desarrollará una pequeña aplicación que nos facilitará estas

tareas, así como el análisis del mismo.

Page 4: Algoritmo Genetico - Inteligencia Artificial

3

2. Objetivos del Trabajo

2.1. Objetivo General

Analizar el comportamiento de un algoritmo genético simple

2.2. Objetivos Específicos

Definir los conceptos básicos de un algoritmo genético simple

Definir los elementos y operadores que componen un algoritmo

genético.

Comprender la teoría de convergencia en un algoritmo genético

simple.

Diseñar un algoritmo genético simple

Page 5: Algoritmo Genetico - Inteligencia Artificial

4

3. Marco Teórico

3.1. Historia

Los primeros ejemplos de lo que hoy podríamos llamar algoritmos

genéticos aparecieron a finales de los 50 y principios de los 60,

programados por biólogos evolutivos que buscaban realizar modelos de

aspectos de la evolución natural. A ninguno de ellos se le ocurrió que

esta estrategia podría aplicarse de manera más general a los problemas

artificiales, pero ese hecho no tardaría en llegar.

John Holland se preguntaba cómo lograba la naturaleza, crear seres

cada vez más perfectos. No sabía la respuesta, pero tenía una cierta idea

de cómo hallarla: tratando de hacer pequeños modelos de la naturaleza,

que tuvieran alguna de sus características, y ver cómo funcionaban, para

luego extrapolar sus conclusiones a la totalidad.

Fue a principios de los 60, en la Universidad de Michigan en Ann Arbor,

donde, dentro del grupo Logic of Computers, sus ideas comenzaron a

desarrollarse y a dar frutos. Y fue, además, leyendo un libro escrito por

un biólogo evolucionista, R. A. Fisher, titulado La teoría genética de la

selección natural, como comenzó a descubrir los medios de llevar a cabo

sus propósitos de comprensión de la naturaleza. De ese libro aprendió

que la evolución era una forma de adaptación más potente que el simple

aprendizaje, y tomó la decisión de aplicar estas ideas para desarrollar

programas bien adaptados para un fin determinado.

En esa universidad, Holland impartía un curso titulado Teoría de sistemas

adaptativos. Dentro de este curso, y con una participación activa por

parte de sus estudiantes, fue donde se crearon las ideas que más tarde

se convertirían en los algoritmos genéticos.

Por tanto, cuando Holland se enfrentó a los algoritmos genéticos, los

objetivos de su investigación fueron dos:

Imitar los procesos adaptativos de los sistemas naturales, y

Diseñar sistemas artificiales (normalmente programas) que

retengan los mecanismos importantes de los sistemas naturales.

Page 6: Algoritmo Genetico - Inteligencia Artificial

5

Unos 15 años más adelante, David Goldberg conoció a Holland, y se

convirtió en su estudiante. Goldberg, ingeniero industrial, fue uno de los

primeros que trató de aplicar los algoritmos genéticos a problemas

industriales. Aunque Holland trató de disuadirle, Goldberg consiguió lo

que quería, escribiendo un algoritmo genético en un ordenador personal

Apple II. Estas y otras aplicaciones creadas por estudiantes de Holland

convirtieron a los algoritmos genéticos en un campo con base suficiente

como para celebrar la primera conferencia en 1985, ICGA´85.

3.2. Algoritmo genético

A grandes rasgos un Algoritmo Genético consiste en una población de

soluciones codificadas de forma similar a cromosomas. Cada uno de

estos cromosomas tendrá asociado un ajuste, valor de bondad o fitness,

que cuantifica su validez como solución al problema. En función de este

valor se le darán más o menos oportunidades de reproducción. Además,

con cierta probabilidad se realizarán mutaciones de estos cromosomas.

3.3. Algoritmo genético simple

El Algoritmo Genético Simple, también denominado Canónico, se

necesita una codificación o representación del problema, que resulte

adecuada al mismo. Además, se requiere una función de ajuste o

adaptación al problema, la cual asigna un número real a cada posible

solución codificada.

El Pseudocódigo utilizado en el cual se basó la aplicación que se ha

realizado en este trabajo se puede ver en la Figura 1.

Page 7: Algoritmo Genetico - Inteligencia Artificial

6

Figura 1. Pseudocódigo Algoritmo Genético Simple

3.4. Función de Adaptación

La función de adaptación debe ser diseñada para cada problema de

manera específica. Dado un cromosoma particular, la función de

adaptación le asigna un número real, que se supone refleja el nivel de

adaptación al problema del individuo representado por el cromosoma.

3.5. Selección

Los algoritmos de selección serán los encargados de escoger qué

individuos van a disponer de oportunidades de reproducirse y cuáles no.

Puesto que se trata de imitar lo que ocurre en la naturaleza, se ha de

otorgar un mayor número de oportunidades de reproducción a los

individuos más aptos. Por lo tanto, la selección de un individuo estará

relacionada con su valor de ajuste.

Page 8: Algoritmo Genetico - Inteligencia Artificial

7

No se debe, sin embargo, eliminar por completo las opciones de

reproducción de los individuos menos aptos, pues en pocas

generaciones la población se volvería homogénea.

3.5.1. Selección por ruleta

Propuesto por DeJong, es posiblemente el método más utilizado

desde los orígenes de los Algoritmos Genéticos.

A cada uno de los individuos de la población se le asigna una parte

proporcional a su ajuste de una ruleta, de tal forma que la suma de

todos los porcentajes sea la unidad. Los mejores individuos

recibirán una porción de la ruleta mayor que la recibida por los

peores. Generalmente, la población está ordenada en base al

ajuste, por lo que las porciones más grandes se encuentran al inicio

de la ruleta.

Para seleccionar un individuo basta con generar un número

aleatorio del intervalo [0...1] y devolver el individuo situado en esa

posición de la ruleta. Esta posición se suele obtener recorriendo los

individuos de la población y acumulando sus proporciones de ruleta

hasta que la suma exceda el valor obtenido.

Es un método muy sencillo pero ineficiente a medida que aumenta

el tamaño de la población.

3.5.2. Selección por torneo

La idea principal de este método de selección consiste en escoger

a los individuos genéticos en base a comparaciones directas entre

sus genotipos.

Existen dos versiones de selección mediante torneo, el torneo

determinístico y el torneo probabilístico, que a continuación pasan

a detallarse.

Page 9: Algoritmo Genetico - Inteligencia Artificial

8

En la versión determinística se selecciona al azar un número p de

individuos (generalmente se escoge p=2). De entre los individuos

seleccionados se selecciona el más apto para pasarlo a la siguiente

generación.

La versión probabilística únicamente se diferencia en el paso de

selección del ganador del torneo. En vez de escoger siempre el

mejor se genera un número aleatorio del intervalo [0...1], si es

mayor que un parámetro p (fijado para todo el proceso evolutivo)

se escoge el individuo más alto y en caso contrario el menos apto.

Generalmente p toma valores en el rango 0.5 < p ≤ 1.

3.6. Selección de Padres

La selección de padres se efectúa al azar usando un procedimiento que

favorezca a los individuos mejor adaptados, ya que a cada individuo se

le asigna una probabilidad de ser seleccionado que es proporcional a su

función de adaptación. Este procedimiento se dice que está basado en

la ruleta sesgada.

Según dicho esquema, los individuos bien adaptados se escogerán

probablemente varias veces por generación, mientras que los

pobremente adaptados al problema, no se escogerán más que de vez

en cuando.

3.7. Operador de Cruce

El operador de cruce, coge dos padres seleccionados y corta sus ristras

de cromosomas en una posición escogida al azar, para producir dos

subristras iniciales y dos subristras finales. Después se intercambian las

subristras finales, produciéndose dos nuevos cromosomas completos.

(Figura 2).

Figura 2. Operador de cruce basado en un punto

Page 10: Algoritmo Genetico - Inteligencia Artificial

9

Existen multitud de algoritmos de cruce. Sin embargo, los más empleados

son los que se detallarán a continuación:

Cruce de 1 punto

Cruce de 2 puntos

Cruce uniforme

3.7.1. Cruce de 1 punto

Es la más sencilla de las técnicas de cruce. Una vez seleccionados

dos individuos se cortan sus cromosomas por un punto

seleccionado aleatoriamente para generar dos segmentos

diferenciados en cada uno de ellos: la cabeza y la cola. Se

intercambian las colas entre los dos individuos para generar los

nuevos descendientes. De esta manera ambos descendientes

heredan información genética de los padres.

Figura 3. Cruce de un punto

3.7.2. Cruce de 2 puntos

Se trata de una generalización del cruce de 1 punto. En vez de

cortar por un único punto los cromosomas de los padres, como en

el caso anterior, se realizan dos cortes. Deberá tenerse en cuenta

que ninguno de estos puntos de corte coincida con el extremo de

los cromosomas para garantizar que se originen tres segmentos.

Para generar la descendencia se escoge el segmento central de

uno de los padres y los segmentos laterales del otro padre.

Figura 4. Cruce de 2 puntos

Page 11: Algoritmo Genetico - Inteligencia Artificial

10

3.7.3. Cruce uniforme

El cruce uniforme es una técnica completamente diferente de las

vistas hasta el momento. Cada gen de la descendencia tiene las

mismas probabilidades de pertenecer a uno u otro padre.

Figura 5. Cruce Uniforme

Aunque se puede implementar de muy diversas formas, la técnica

implica la generación de una máscara de cruce con valores

binarios. Si en una de las posiciones de la máscara hay un 1, el gen

situado en esa posición en uno de los descendientes se copia del

primer padre. Si por el contrario hay un 0 el gen se copia del

segundo padre. Para producir el segundo descendiente se

intercambian los papeles de los padres, o bien se intercambia la

interpretación de los unos y los ceros de la máscara de cruce.

3.8. Fase Reproductiva

Durante la fase reproductiva se seleccionan los individuos de la población

para cruzarse y producir descendientes, que constituirán, una vez

mutados, la siguiente generación de individuos.

Page 12: Algoritmo Genetico - Inteligencia Artificial

11

3.9. Mutación

El operador de mutación se aplica a cada hijo de manera individual, y

consiste en la alteración aleatoria (normalmente con probabilidad

pequeña) de cada gen componente del cromosoma. La Figura 6 muestra

la mutación del quinto gen del cromosoma.

Figura 6. Operador de mutación

3.10. Convergencia

El concepto de convergencia está relacionado con la progresión hacia la

uniformidad: un gen ha convergido cuando al menos el 95 % de los

individuos de la población comparten el mismo valor para dicho gen. Se

dice que la población converge cuando todos los genes han convergido.

Se puede generalizar dicha definición al caso en que al menos un % de

los individuos de la población hayan convergido.

Page 13: Algoritmo Genetico - Inteligencia Artificial

12

4. Desarrollo

4.1. Descripción inicial

Como parte final del presente trabajo desarrollamos una aplicación en el

lenguaje de programación java que nos permite simular el

comportamiento de un algoritmo genético simple basado en el algoritmo

mostrado en el marco teórico, manejando los parámetros de entrada

como:

Tamaño de la población (m)

Fenotipo de cromosoma

Número de competidores para el torneo (El torneo es utilizado

como método de selección de parejas) (c)

Probabilidad de cruce

Probabilidad de mutación

Convergencia

Este ejemplo sencillo será trabajado con una función de la forma 𝑓(𝑥) =

𝑥2 . para poder entender básicamente el funcionamiento de este

algoritmo.

Page 14: Algoritmo Genetico - Inteligencia Artificial

13

4.2. Valores iniciales

El primer paso de la ejecución de este algoritmo consiste en determinar

el tamaño de la población inicial ‘m’ para así generar aleatoriamente el

valor de los individuos de la población. Los valores de los individuos de

la población varían entre 0 y 2n-1 donde n es el número de genes del

cromosoma del individuo al cual se le conoce como fenotipo de

cromosoma, los cuales serán representados en forma binaria.

M=100, N=5 (En este caso como el valor de ‘n’ es 5 el máximo valor que

encontraremos es 11111=31 en sistema decimal).

Luego de generar la población inicial, se realiza la selección de parejas

para la reproducción, en este caso utilizamos el método del torneo, que

consiste en seleccionar un grupo aleatorio de ‘C’ (Número de

competidores menor que tamaño de la población) individuos que

competirán entre sí, siendo el más adaptado el ganador que pase a la fila

de reproducción. Existen muchas teorías y métodos de selección, el

método de torneo que aplicamos es determinista, en este caso se escoge

aleatoriamente a los competidores, el número de competidores ‘C’ que

ingresemos no debe ser ni 1 ni muy elevado, mientras más grande sea

el número de competidores más probabilidades hay de escoger siempre

a los mejores adaptados dejando sin variedad a la población a no escoger

individuos con menor adaptación.

El valor que le daremos a ‘C’ en esta demostración será 2.

Este proceso de selección continuará hasta contar con m/2 parejas, que

serán los padres de la siguiente generación.

El siguiente paso consiste en determinar la probabilidad de cruce de cada

pareja, esta probabilidad está fijada en 0.5 y se aplicara aleatoriamente

a cada pareja. Una vez terminado este proceso, las parejas cuya

Page 15: Algoritmo Genetico - Inteligencia Artificial

14

probabilidad de cruce sea mayor o igual a 0.5 se le aplicarán el cálculo

de un punto de cruce aleatoriamente. Este punto de cruce determinara la

posición a partir de la cual la pareja cruce sus genes que posteriormente

formaran los hijos (En este caso aplicamos solo un punto de cruce, pero

se pueden aplicar según el criterio y el problema a resolver).

En caso de que la probabilidad de cruce de una pareja sea menor a 0.5

los hijos generados serán copias idénticas de los padres, de esta manera

se mantiene el tamaño de la población en todas las generaciones. Hasta

este punto, a la nueva generación se le aplicara aleatoriamente una

probabilidad de mutación entre {0,1}, esta probabilidad la fijaremos en 2%

(por lo que el individuo deberá tener una probabilidad menor a 0.02 para

ser mutado), de este modo cada individuo si es que obtiene la

probabilidad de mutación se escogerá aleatoriamente uno de sus genes

para ser mutado, esto consiste en cambiar el valor de 0 a 1 o viceversa

según corresponda. (Ya que nuestro ejemplo trabaja con una codificación

binaria).

Estos procesos de cruce y mutación permitirán tener una población más

variada para lograr el camino de convergencia.

Una vez teniendo lista esta nueva generación, esta reemplazara a la

población inicialmente generada para llevar a cabo nuevamente el

proceso.

Para llegar a la solución de un algoritmo genético se buscará una

convergencia de la población la cual consiste en que el 95% de los genes

sea compartido por toda la población.

Valores iniciales con las que trabajara el programa

Page 16: Algoritmo Genetico - Inteligencia Artificial

15

4.3. Ejecución

4.3.1. Población inicial:

Como nuestra función es de la forma 𝑓(𝑥) = 𝑥2, y nuestra población

tiene un número de genes binarios de N=5, seria sencillo llegar al

valor optimo con cálculos simples, siendo este 31 con una función de

adaptación de 961. Pero por fines de ejemplo, diseñamos de este

modo el problema para observar el comportamiento del algoritmo

genético.

Este es el valor máximo de

la población, como parte

de la solución este debe

aumentar

Page 17: Algoritmo Genetico - Inteligencia Artificial

16

Nuestra población de 100 individuos inicial fue generada

aleatoriamente, teniendo un valor total de 35290 y promedio de

359.2.

4.3.2. Selección

Una vez realisado el metodo del torneo se obtiene las parejas

para la reproduccion:

Podemos observar las 10 primeras parejas, cada individuo de la

población dividida A será pareja en la misma posición de un

individuo de la población dividida B.

4.3.3. Cruce

Luego de aplicar la probabilidad de cruce y el punto de cruce

obtenemos los siguientes valores para las primeras 10 parejas:

Ejemplo de cruce:

Pareja 0: tiene una probailidad de cruce mayor de 0.5 por lo que

se le puede aplicar el punto de cruce.

Page 18: Algoritmo Genetico - Inteligencia Artificial

17

Genotipo Valor del individuo Punto de cruce =

4

Hijos

cruzados

11000 24 1100|0 1100|1

10111 23 1011|1 1011|0

Primeros 20 hijos cruzados

4.3.4. Mutación

En la imagen podemos observar como el individuo hijo numero 84

logro una probabilidad de mutación, tenemos un punto de mutacion

en la posición 3, los individuos que tengan punto de mutacion -1

son los que no lograron probabilidad de mutacion.

Page 19: Algoritmo Genetico - Inteligencia Artificial

18

Se puede observar como cambia el gen en la posicion 3, en este

caso el individuo disminuyo su valor, esto no perjudica la busqueda

pues agrega variedad a la poblacion, y siempre guardan los genes

de los padres.

Todos estos procesos continuaran hasta que exista convergencia

en la población.

Page 20: Algoritmo Genetico - Inteligencia Artificial

19

4.3.5. Resultados de convergencia

Lo que podemos observar es que la población convergió en 9

generaciones y con un valor total de 95795, lo que quiere decir

que la población aumento su valor en 60505 (restando del valor

de la población inicial).

Observamos el valor de la

generación solución y el

número de generación

por las que se pasó

Page 21: Algoritmo Genetico - Inteligencia Artificial

20

Estadísticas de solución

Aquí podemos identificar por cada generación el individuo mejor

adaptado y la adaptación promedio de la población, Esto nos

permite observar el trabajo del algoritmo genético como va

encontrando la solución, como mencionamos en este ejemplo es

fácil llegar a la solución que seria 961 por las restricciones ya

mencionadas. A medida que el número de generaciones aumenta

se observa que la adaptación media de la población se aproxime a

la del mejor individuo.

0

200

400

600

800

1000

1200

1 2 3 4 5 6 7 8 9 10

Ad

aptc

ion

Numero de generaciones

Medidas de adaptacion de un Algoritmo Genético SImple

Mejor Media

Page 22: Algoritmo Genetico - Inteligencia Artificial

21

5. Conclusiones

Los algoritmos genéticos son una rama de la inteligencia artificial que

busca optimizar distintos tipos de funciones en diversas aplicaciones,

por lo que constituyen herramientas de amplia aplicación, esta

metodología puede ser muy generalizada adaptándolo a diversos

problemas e incluso a otras herramientas de inteligencia artificial como

lógica difusa, sistemas expertos y redes neuronales, formando nuevos

campos muy prometedores en la inteligencia artificial. Por otro lado, la

programación de un algoritmo genético resulta sencilla al tratar de

imitar el proceso de selección natural propuesto por Darwin, radicando

su complejidad en la correcta adaptación al problema y la correcta

aplicación de los operadores que la constituyen.

En este trabajo logramos desarrollar un programa en el lenguaje de

programación Java con IDE NetBeans, que se puede adaptar a

cualquier función expresado sus individuos en forma binaria. En este

caso como medio practico optamos por una función de la forma 𝑓(𝑥) =

𝑥2 en un algoritmo genético simple. Esto nos permite comprender el

funcionamiento de este tipo de algoritmos conociendo al mismo tiempo

sus partes y operadores hasta alcanzar un punto de convergencia, en

este caso nuestra convergencia requiere que al menos el 95% de la

población comparta el mismo gen.

Los elementos que forman parte de un algoritmo genético son Tamaño

de la población, Fenotipo de cromosoma, Número de competidores

para el torneo, Probabilidad de cruce, Probabilidad de mutación,

Convergencia, los cuales deben ser aplicados correctamente según

sea el problema a resolver.

La convergencia en un algoritmo genético es la aproximación del valor

medio de la población al valor óptimo de la solución.

Page 23: Algoritmo Genetico - Inteligencia Artificial

22

6. Bibliografía

Gestal, M., Rivero, D., Ramón Rabuñal, J., Dorado, J., & Pazos, A. (2010).

Introducción a los Algoritmos Genéticos y a la Programación Genética.

Madrid: Digitalia.

Vasco, U. d. (Setiembre de 2008). Campus de Gipuzkoa - Universidad del

Pais Vasco. Obtenido de

http://www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/t2geneticos.pdf