76
Introducción a los Algoritmos Genéticos y la Programación Genética Marcos Gestal Daniel Rivero Juan Ramón Rabuñal Julián Dorado Alejandro Pazos + - 1.68 % + 5.67 0.23 X Y * X * X % -3.85 - Y 6.21 4.73 +

algoritmos

Embed Size (px)

Citation preview

  • Introduccin a los Algoritmos Genticos y la Programacin Gentica

    Marcos GestalDaniel RiveroJuan Ramn RabualJulin DoradoAlejandro Pazos

    140

    Intr

    od

    ucci

    n

    a lo

    s A

    lgo

    ritm

    os

    Gen

    tic

    os

    +

    -

    1.68 %

    +

    5.67

    0.23

    X

    Y

    *

    X

    +*

    X

    %

    -3.85

    -

    Y

    6.21 4.73

    Os Algortimos Xenticos e a Programacin Xentica son tcnicas de computacin evolutiva baseadas nos procesos biolxicos, en particular, nos mecanismos de reproducin sexual e na seleccin natural. Combinan o principio de supervivencia do elemento mis apto entre estruturas de secuencias cun intercambio de informacin estruturado, anda que aleatorizado.

    Este libro, dirixido especialmente aos estudantes e investigadores interesados en procurar novas tcnicas de resolucin de problemas no mbito da Programacin, ofrece unha asequible introducin aos conceptos clave deste campo de estudos.

    ltimos ttulos publicados

    Jos Ramn Soraluce BlondHistoria de la arquitectura restaurada:de la Antigedad al Renacimiento

    Adolfo Luis Soto VzquezNovela regional inglesa y sus traducciones al espaol:Henry Fielding y Walter Scott

    Ana Iglesias GaldoEducar e castigar. Uha historia do presenteda xustuza de menores en Galicia

    Susana Mosquera MonelosEl papel de las ONG en la atencin a la dependencia

    Fernando Cabrera de AizpuruArquitectura naval europea en el siglo XVIII

    Francisco Reyes SantasAdopicn, difusin y utilizacin de laalta tecnologa mdica en Galicia

    Carlos Gmez BermdezGeorg Cantor: Sistema de nmeros y conjuntos

    Arsenio Ferraces Rodrguez (ed.)Fito-zooterapia antigua y medieval:Textos y doctrinas

    M do Amparo Tavares e Laura Tato (eds.)Estudos galego-brasileiros IV: Lingua, literatura, identidade

    Jos Ramn Soraluce BlondHistoria de la arquitectura restaurada: Del Renacimientro al Movimiento Moderno

    ISBN 978-84-9749-4

    9 789788 497493

    +

  • This page intentionally left blank

  • Introduccin a los Algoritmos Genticos y la Programacin Gentica

    Marcos GestalDaniel RiveroJuan Ramn RabualJulin DoradoAlejandro Pazos

    A Corua 2010

    Universidade da CoruaServizo de Publicacins

  • Edicin Universidade da Corua, Servizo de Publicacinshttp://www.udc.es/publicaciones

    Universidade da Corua

    Segundo as normas da coleccin de Monografas, a presente publicacin foi revisada e avaliada positivamente por dous expertos non pertencentes UDC

    Distribucin

    CONSORCIO EDITORIAL GALEGO. Estrada da Estacin 70-A, 36818, A Portela. Redondela (Pontevedra). Tel. 986 405 051. Fax: 986 404 935. Correo electrnico: [email protected]

    BREOGN. C/ Lanuza, 11. 28022, Madrid. Tel. 91-725 90 72. Fax: 91- 713 06 31. Correo electrnico: [email protected]. Web: http://www.breogan.org

    Deseo da cuberta: Servizo de Publicacins da UDCImprime: Agencia Grfica Gallega

    Reservados todos os dereitos. Nin a totalidade nin parte deste libro pode reproducirse ou transmi-tirse por ningn procedemento electrnico ou mecnico, inclundo fotocopia, gravacin magnti-ca ou calquera almacenamento de informacin e sistema de recuperacin, sen o permiso previo e por escrito das persoas titulares do copyright.

    Introduccin a los Algoritmos Genticos y la Programacin Gentica

    Gestal, Marcos; RiveRo, Daniel; Rabual, Juan Ramn; DoRaDo, Julin; Pazos, Alejandro

    A Corua, 2010Universidade da Corua, Servizo de Publicacins

    Monografas, n 140

    N de pxinas: 76ndice, pxinas: 5-6

    ISBN: 978-84-9749-422-9Depsito legal: C 3193-2010

    CDU: 519.7 Ciberntica matemtica. Algortimos genticos. Programacin gentica

  • 5ndice

    Prlogo .................................................................................................... 9

    Captulo 1. Algoritmos Genticos .......................................................... 11 1.1. Introduccin ............................................................................. 11 1.2. Orgenes ................................................................................... 11 1.3. Bases biolgicas ...................................................................... 14 1.4. Codificacin de problemas ...................................................... 14 1.5. Algoritmo Principal ................................................................. 16 1.6. Operadores genticos .............................................................. 18 1.6.1. Seleccin ....................................................................... 18 1.6.1.1. Seleccin por ruleta ......................................... 19 1.6.1.2. Seleccin por torneo ........................................ 19 1.6.2. Cruce ............................................................................. 20 1.6.2.1. Cruce de 1 punto .............................................. 21 1.6.2.2. Cruce de 2 puntos ............................................ 22 1.6.2.3. Cruce uniforme ................................................ 23 1.6.2.4. Cruces especficos de codificaciones no binarias ........................................................ 23 1.6.3. Algoritmos de Reemplazo ............................................. 24 1.6.4. Copia ............................................................................. 24 1.6.5. Elitismo ......................................................................... 25 1.6.6. Mutacin ....................................................................... 25 1.7. Evaluacin ......................................................................... 26 1.8. Ejemplos prcticos .................................................................. 28 1.8.1. Resolucin de un sistema de ecuaciones ....................... 28 1.8.1.1. Descripcin del problema ................................ 28 1.8.1.2. Codificacin del problema ............................... 29 1.8.1.3. Funcin de Evaluacin .................................... 29

  • 6 1.8.1.4. Ejemplo de resolucin paso a paso .................. 30 1.8.1.5. Implementacin en Matlab .............................. 36 1.8.2. N Reinas ........................................................................ 39 1.8.2.1. Descripcin del problema ................................ 39 1.8.2.2. Codificacin del problema ............................... 40 1.8.2.3. Funcin de Evaluacin .................................... 41 1.8.2.4. Implementacin en Matlab .............................. 42 Referencias ..................................................................................... 48

    Captulo 2. Programacin Gentica ...................................................... 51 2.1. Introduccin ......................................................................... 51 2.2. Orgenes ......................................................................... 51 2.3. Codificacin de problemas ...................................................... 53 2.3.1. Elementos del rbol ....................................................... 53 2.3.2. Restricciones ................................................................. 54 2.4. Algoritmo principal ................................................................. 55 2.5. Generacin inicial de rboles .................................................. 57 2.6. Operadores genticos .............................................................. 58 2.6.1. Cruce ............................................................................. 59 2.6.2. Mutacin ....................................................................... 62 2.7. Evaluacin ............................................................................... 63 2.8. Parmetros ............................................................................... 64 2.9. Ejemplo prctico ...................................................................... 66 2.9.1. Descripcin del problema ............................................. 66 2.9.2. Codificacin del problema ............................................ 67 2.9.3. Funcin de Evaluacin .................................................. 68 2.9.4. Ejemplo de resolucin paso a paso ............................... 69 2.9.5. Implementacin en Matlab ............................................ 71 Referencias ..................................................................................... 74

  • 7ndice de ilustraciones

    Figura 1.1: Ecuacin Evolutiva _______________________________ 12

    Figura 1.2: Soft Computing __________________________________ 13

    Figura 1.3: Individuo gentico binario _________________________ 15

    Figura 1.4: Codificacin de una red de neuronas Artificiales ________ 15

    Figura 1.5: Funcionamiento de un Algoritmo Gentico_____________ 16

    Figura 1.6: Cruce de un punto ________________________________ 21

    Figura 1.7: Cruce de dos puntos ______________________________ 22

    Figura 1.8: Cruce uniforme __________________________________ 23

    Figura 1.9: Sistema de n-ecuaciones y m incgnitas _______________ 29

    Figura 1.10: Individuo Gentico ______________________________ 29

    Figura 1.11: Sistema de ecuaciones de partida ___________________ 31

    Figura 1.12: Solucin vlida para el problema 8-Reinas ___________ 40

    Figura 1.13: Problema de las 8-Reinas: evolucin del fitness ________ 47

    Figura 2.1: rbol para la expresin 2*(3+x) _____________________ 53

    Figura 2.2: Diagrama de flujo de programacin gentica. __________ 56

    Figura 2.3: rboles seleccionados para cruce ____________________ 59

    Figura 2.4: Sub-rboles seleccionados para cruce ________________ 60

    Figura 2.5: Nodos seleccionados para cruce _____________________ 60

    Figura 2.6: Resultado del cruce _______________________________ 60

    Figura 2.7: rboles seleccionados para cruce ____________________ 61

    Figura 2.8: Resultado del cruce entre dos rboles iguales __________ 61

    Figura 2.9: Ejemplo de mutacin puntual _______________________ 62

    Figura 2.10: Ejemplo de mutacin de subrbol ___________________ 63

    Figura 2.11: rbol de ejemplo ________________________________ 68

  • This page intentionally left blank

  • 9Prlogo

    Desde un punto de vista general las tcnicas de Computacin Evolutiva, como los Algoritmos Genticos o la Programacin Gentica, pueden consi-derarse como un conjunto de tcnicas computacionales ms ligadas en sus conceptos a los procesos biolgicos que a las tcnicas computacionales tradi-cionales. Es por ello que la aproximacin a este tipo de tcnicas en ocasiones puede convertirse en un camino plagado de espinas, en donde cada paso dado parece alejarnos ms y ms del oasis prometido. Slo al final del camino, una vez introducidos los trminos y conceptos bsicos y asimiladas las analogas entre el mundo biolgico y el mundo computacional, se alcanza a ver el gran potencial que ofrecen estas tcnicas.

    Con el objetivo de guiar los pasos a lo largo de ese camino surge la idea del presente libro. Para ello se plantea una introduccin general a las tcnicas de Computacin Evolutiva ms usuales, como son los Algoritmos Genticos y la Programacin Gentica.

    Por lo tanto, este libro no debera ser entendido como un documento ex-haustivo acerca de las diferentes tcnicas aqu mostradas. Debe considerarse ms bien una referencia que sirva para introducir la terminologa, los concep-tos clave y una bibliografa de base, quedando en manos del lector profundizar en aquellos aspectos que considere de mayor inters.

    Bajo la premisa expuesta, este libro est especialmente dirigido a aque-llos estudiantes interesados en nuevas tcnicas de resolucin de problemas, as como a aquellos investigadores que pretenden comenzar su trabajo en estas o similares lneas de investigacin.

    Por ltimo, deseamos al lector una amena lectura de estas pginas y que en-cuentre de utilidad el trabajo que se ha invertido en la elaboracin de este libro.

    M. Gestal, D. Rivero, J. R. Rabual, J. Dorado, A. PazosLaboratorio de Redes de Neuronas Artificiales y Sistemas AdaptativosFacultad de Informtica. Universidade da Corua

  • This page intentionally left blank

  • 11

    Captulo 1 Algoritmos Genticos

    1.1. IntroduccinLos Algoritmos Genticos son mtodos adaptativos, generalmente usados

    en problemas de bsqueda y optimizacin de parmetros, basados en la repro-duccin sexual y en el principio de supervivencia del ms apto (Fogel, 2000) (Fogel, 2006).

    Ms formalmente, y siguiendo la definicin dada por Goldberg, los Algoritmos Genticos son algoritmos de bsqueda basados en la mecnica de seleccin natural y de la gentica natural. Combinan la supervivencia del ms apto entre estructuras de secuencias con un intercambio de infor-macin estructurado, aunque aleatorizado, para constituir as un algoritmo de bsqueda que tenga algo de las genialidades de las bsquedas humanas (Goldberg, 1989).

    Para alcanzar la solucin a un problema se parte de un conjunto inicial de individuos, llamado poblacin, generado de manera aleatoria. Cada uno de estos individuos representa una posible solucin al problema. Estos indivi-duos evolucionarn tomando como base los esquemas propuestos por Darwin sobre la seleccin natural, y se adaptarn en mayor medida tras el paso de cada generacin a la solucin requerida (Darwin, 2007).

    1.2. OrgenesSi algo funciona bien, por qu no imitarlo?. La respuesta a esta pregunta

    nos lleva directamente a los orgenes de la computacin evolutiva. Durante

  • 12 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    millones de aos las diferentes especies se han adaptado para poder sobrevivir en un medio cambiante. De la misma manera se podra tener una poblacin de potenciales soluciones a un problema, de las que se iran seleccionando las mejores hasta que se adaptasen perfectamente al medio, en este caso el proble-ma a resolver (Michalewicz & Fogel, 2000) (Bck, 1996) (Whitley, 1994). En trminos muy generales se podra definir la computacin evolutiva como una familia de modelos computacionales inspirados en la evolucin.

    Ms formalmente, el trmino de computacin evolutiva se refiere al estu-dio de los fundamentos y aplicaciones de ciertas tcnicas heursticas basadas en los principios de la evolucin natural (Tomassini, 1995). Estas tcnicas heursticas podran clasificarse en 3 grandes categoras o grupos, dando lugar a la ecuacin evolutiva recogida en la Figura 1.1.

    Figura 1.1: Ecuacin Evolutiva

    A continuacin se detallarn un poco ms los orgenes de cada una de las disciplinas participantes en la ecuacin.

    El desarrollo de los Algoritmos Genticos se debe en gran medida a John Holland, investigador de la Universidad de Michigan. A finales de la dcada de los 60 desarroll una tcnica que imitaba en su funcionamiento a la selec-cin natural. Aunque originalmente esta tcnica recibi el nombre de planes reproductivos, a raz de la publicacin en 1975 de su libro Adaptation in Natural and Artificial Systems (Holland, 1975) se conoce principalmente con el nombre de Algoritmos Genticos. A grandes rasgos un Algoritmo Gentico consiste en una poblacin de soluciones codificadas de forma similar a cro-mosomas. Cada uno de estos cromosomas tendr asociado un ajuste, valor de bondad o fitness, que cuantifica su validez como solucin al problema. En funcin de este valor se le darn ms o menos oportunidades de reproduccin. Adems, con cierta probabilidad se realizarn mutaciones de estos cromoso-mas (Goldberg, 2002).

    Este proceso har posible que los individuos genticos tiendan hacia las soluciones a un problema dado, aunque las condiciones del espacio de bs-queda varen con el transcurso del tiempo (Grefenstette, 1992)

    Las bases de las Estrategias de Evolucin fueron apuntadas en 1973 por Rechemberg en su obra Evolutionsstrategie: Optimierung Technisher Sys-teme nach Prinzipien der Biologischen Evolution (Rechenberg, 1973). Las

  • algorItmos gentIcos 13

    dos Estrategias de Evolucin ms empleadas son la (+)-ES y la (,)-ES. En la primera de ellas un total de padres producen descendientes, redu-cindose nuevamente la poblacin a individuos (los padres de la siguiente generacin) por seleccin de los mejores individuos. De esta manera los pa-dres sobreviven hasta que son reemplazados por hijos mejores que ellos. En la (,)-ES la descendencia reemplaza directamente a los padres, sin hacer ningn tipo de comprobacin.

    La Programacin Evolutiva surge principalmente a raz del trabajo Ar-tificial Intelligence Through Simulated Evolution de Fogel, Owens y Walsh, publicado en 1966 (Fogel, Ewens & Walsh, 1966). En este caso los indivi-duos, conocidos aqu como organismos, son mquinas de estado finito. Los organismos que mejor resuelven alguna de las funciones objetivo obtienen la oportunidad de reproducirse. Antes de producirse los cruces para generar la descendencia se realiza una mutacin sobre los padres.

    A su vez la computacin evolutiva puede verse como uno de los campos de investigacin de lo que se ha dado en llamar Soft Computing (ver Figura 1.2).

    Figura 1.2: Soft Computing

    Tal y como se ha comentado anteriormente, la computacin evolutiva tie-ne una fuerte base biolgica. En sus orgenes los algoritmos evolutivos consis-tieron en copiar procesos que tienen lugar en la seleccin natural. Este ltimo concepto haba sido introducido, rodeado de mucha polmica, por Charles Darwin (Darwin, 1859). A pesar de que an hoy en da no todos los detalles de la evolucin biolgica son completamente conocidos, existen algunos hechos apoyados sobre una fuerte evidencia experimental:

    La evolucin es un proceso que opera, ms que sobre los propios orga-nismos, sobre los cromosomas. Estos cromosomas pueden ser consi-derados como herramientas orgnicas que codifican la vida o, visto al revs, una criatura es creada decodificando la informacin contenida en los cromosomas.

    La seleccin natural es el mecanismo que relaciona los cromosomas (genotipo) con la eficiencia respecto al entorno de la entidad (fenoti-po) que representan. Otorga a los individuos ms adaptados al entorno un mayor nmero de oportunidades de reproducirse.

  • 14 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Los procesos evolutivos tienen lugar durante la etapa de reproduc-cin. Aunque existe una larga serie de mecanismos que afectan a la reproduccin, los ms comunes son la mutacin, causante de que los cromosomas en la descendencia sean diferentes a los de los padres, y el cruce o recombinacin, que combina los cromosomas de los padres para producir la descendencia.

    Precisamente, sobre estos hechos se sustenta el funcionamiento de la Computacin Evolutiva en general, y de los Algoritmos Genticos en particu-lar (Michalewicz, 1999).

    1.3. Bases biolgicasEn la naturaleza, los individuos de una poblacin compiten constante-

    mente con otros por recursos tales como comida, agua y refugio. Los indivi-duos que tienen ms xito en la lucha por los recursos tienen mayores proba-bilidades de sobrevivir y generalmente una descendencia mayor. Al contrario, los individuos peor adaptados tienen un menor nmero de descendientes, o incluso ninguno. Esto implica que los genes de los individuos mejor adapta-dos se propagarn a un nmero cada vez mayor de individuos de las sucesivas generaciones.

    La combinacin de caractersticas buenas de diferentes ancestros puede originar, en ocasiones, que la descendencia est incluso mejor adaptada al me-dio que los padres. De esta manera, las especies evolucionan adaptndose ms y ms al entorno a medida que transcurren las generaciones (Beasley, Bull & Martin, 1993).

    Pero la adaptacin de un individuo al medio no slo est determinada por su composicin gentica. Influyen otros factores como el aprendizaje, en ocasiones adquirido por el mtodo de prueba y error, en ocasiones adquirido por imitacin del comportamiento de los padres, la cultura, la religin, etc. aspectos no contemplados en el Algoritmo Gentico clsico, pero s en otras variantes.

    1.4. Codificacin de problemas

    Cualquier solucin potencial a un problema puede ser presentada dando valores a una serie de parmetros. El conjunto de todos los parmetros (genes en la terminologa de Algoritmos Genticos) se codifica en una cadena de va-lores denominada cromosoma (ver Figura 1.3).

  • algorItmos gentIcos 15

    El conjunto de los parmetros representado por un cromosoma particular recibe el nombre de genotipo. El genotipo contiene la informacin necesaria para la construccin del organismo, es decir, la solucin real al problema, denominada fenotipo. Por ejemplo, en trminos biolgicos, la informacin gentica contenida en el ADN de un individuo sera el genotipo, mientras que la expresin de ese ADN (el propio individuo) sera el fenotipo.

    Desde los primeros trabajos de John Holland la codificacin suele hacerse mediante valores binarios. Se asigna un determinado nmero de bits a cada parmetro y se realiza una discretizacin de la variable representada por cada gen. El nmero de bits asignados depender del grado de ajuste que se desee alcanzar. Evidentemente no todos los parmetros tienen por qu estar codifi-cados con el mismo nmero de bits. Cada uno de los bits pertenecientes a un gen suele recibir el nombre de alelo.

    En la Figura 1.3 se muestra un ejemplo de un individuo binario que codi-fica 3 parmetros.

    1 1 0 1 0 0 1 1 1 0 1 1 0

    cromosoma

    gen

    alelo

    Figura 1.3: Individuo gentico binario

    Sin embargo, tambin existen representaciones que codifican directamen-te cada parmetro con un valor entero, real o en punto flotante. A pesar de que se acusa a estas representaciones de degradar el paralelismo implcito de las representaciones binarias, permiten el desarrollo de operadores genticos ms especficos al campo de aplicacin del Algoritmo Gentico.

    En la Figura 1.4, se muestra un ejemplo tpico de la aplicacin de los Algoritmos Genticos: cmo representar una red de neuronas artificiales para posteriormente realizar el proceso de optimizacin de los pesos sinpticos.

    Codificar una red de neuronas artificiales en forma de cromosoma es tan sencillo como asignar un gen del cromosoma a cada uno de los pesos de la red. Tambin se podran aadir genes que indiquen el nmero de capas y el nmero de elementos de procesado en cada una.

  • 16 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Red de Neuronas Artificiales Codificacin Individuo Gentico

    Figura 1.4: Codificacin de una red de neuronas Artificiales

    1.5. Algoritmo PrincipalLos Algoritmos Genticos trabajan sobre una poblacin de individuos.

    Cada uno de ellos representa una posible solucin al problema que se desea re-solver. Todo individuo tiene asociado un ajuste de acuerdo a la bondad con res-pecto al problema de la solucin que representa (en la naturaleza el equivalente sera una medida de la eficiencia del individuo en la lucha por los recursos).

    Una generacin se obtiene a partir de la anterior por medio de los opera-dores de reproduccin. Existen 2 tipos:

    Cruce. Se trata de una reproduccin de tipo sexual. Se genera una des-cendencia a partir del mismo nmero de individuos (generalmente 2) de la generacin anterior. Existen varios tipos que se detallarn en un punto posterior.

    Copia. Se trata de una reproduccin de tipo asexual. Un determinado nmero de individuos pasa sin sufrir ninguna variacin directamente a la siguiente generacin.

    Inicializar poblacin actual aleatoriamenteMIENTRAS no se cumpla el criterio de terminacin crear poblacin temporal vaca SI elitismo: copiar en poblacin temporal mejores individuos MIENTRAS poblacin temporal no llena seleccionar padres cruzar padres con probabilidad Pc SI se ha producido el cruce mutar uno de los descendientes (prob. Pm) evaluar descendientes aadir descendientes a la poblacin temporal SINO aadir padres a la poblacin temporal FIN SI FIN MIENTRAS aumentar contador generaciones establecer como nueva poblacin actual la poblacin temporalFIN MIENTRAS

    Figura 1.5: Funcionamiento de un Algoritmo Gentico

  • algorItmos gentIcos 17

    El funcionamiento genrico de un Algoritmo Gentico puede apreciarse en el pseudocdigo, reflejado en la Figura 1.5.

    Si desea optarse por una estrategia elitista, los mejores individuos de cada generacin se copian siempre en la poblacin temporal, para evitar su prdida.

    A continuacin comienza a generarse la nueva poblacin en base a la apli-cacin de los operadores genticos de cruce y/o copia. Una vez generados los nuevos individuos se realiza la mutacin con una probabilidad Pm. La proba-bilidad de mutacin suele ser muy baja, por lo general entre el 0.5% y el 2%.

    Se sale de este proceso cuando se alcanza alguno de los criterios de para-da fijados. Los ms usuales suelen ser:

    Los mejores individuos de la poblacin representan soluciones sufi-cientemente buenas para el problema que se desea resolver.

    La poblacin ha convergido. Un gen ha convergido cuando el 95% de la poblacin tiene el mismo valor para l, en el caso de trabajar con codificaciones binarias, o valores dentro de un rango especificado en el caso de trabajar con otro tipo de codificaciones. Una vez que todos los genes alcanzan la convergencia se dice que la poblacin ha con-vergido. Cuando esto ocurre la media de bondad de la poblacin se aproxima a la bondad del mejor individuo.

    Se ha alcanzado el nmero de generaciones mximo especificado.Sobre este algoritmo inicialmente propuesto por Holland se han definido

    numerosas variantes. Quizs una de las ms extendidas consiste en prescindir de la poblacin

    temporal de manera que los operadores genticos de cruce y mutacin se apli-can directamente sobre la poblacin gentica. Con esta variante el proceso de cruces vara ligeramente. Ahora no basta, en el caso de que el cruce se pro-duzca, con insertar directamente la descendencia en la poblacin. Puesto que el nmero de individuos de la poblacin se ha de mantener constante, antes de insertar la descendencia en la poblacin se le ha de hacer sitio. Es decir, para ubicar a los descendientes generados previamente se han de eliminar otros individuos de la poblacin gentica. Existen para ello diversas opciones, que se comentarn con ms detalle en un punto posterior.

    Evidentemente, trabajando con una nica poblacin no se puede decir que se pase a la siguiente generacin cuando se llene la poblacin, pues siempre est llena. En este caso el paso a la siguiente generacin se producir una vez que se hayan alcanzado cierto nmero de cruces y mutaciones. Este nmero depender de la tasa de cruces y mutaciones especificadas por el usuario y del tamao de la poblacin. As, con una tasa de cruces del 90%, una tasa de

  • 18 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    mutaciones del 2% y trabajando con 100 individuos se pasar a la siguiente generacin cuando se alcanzasen 45 cruces (cada cruce genera 2 individuos con lo que se habran insertado en la poblacin 90 individuos, esto es el 90%) o 2 mutaciones.

    Otra variacin comn consiste en la modificacin del esquema de selec-cin de los individuos que sern mutados. En el esquema mostrado, slo los descendientes originados a partir de un cruce son mutados (proceso que imita los errores de transcripcin del ADN que tienen lugar en la naturaleza); otra opcin habitual es la seleccin aleatoria del individuo a mutar entre todos los que forman parte de la poblacin gentica.

    1.6. Operadores genticosPara el paso de una generacin a la siguiente se aplican una serie de ope-

    radores genticos. Los ms empleados son los operadores de seleccin, cruce, copia y mutacin. En el caso de no trabajar con una poblacin intermedia tem-poral tambin cobran relevancia los algoritmos de reemplazo. A continuacin se vern en mayor detalle.

    1.6.1. SeleccinLos algoritmos de seleccin sern los encargados de escoger qu indivi-

    duos van a disponer de oportunidades de reproducirse y cules no. Puesto que se trata de imitar lo que ocurre en la naturaleza, se ha de otorgar un mayor nmero de oportunidades de reproduccin a los individuos ms aptos. Por lo tanto, la seleccin de un individuo estar relacionada con su valor de ajuste. No se debe, sin embargo, eliminar por completo las opciones de reproduccin de los individuos menos aptos, pues en pocas generaciones la poblacin se volvera homognea.

    En cuanto a algoritmos de seleccin se refiere, estos pueden ser divididos en dos grandes grupos: probabilsticos y determinsticos. Ambos tipos de algo-ritmos basan su funcionamiento en el principio indicado anteriormente (permi-tir escoger una mayor cantidad de veces a los ms aptos). Sin embargo, como su nombre indica, el primer tipo adjudica estas posibilidades con un importante componente basado en el azar. Es en este grupo donde se encuentran los algo-ritmos de seleccin por ruleta o por torneo que, dado su importancia por ser los ms frecuentemente utilizados, se describen con detalle en esta seccin. El segundo grupo engloba una serie de algoritmos que, dado el ajuste conocido de cada individuo, permite asignar a cada uno el nmero de veces que ser

  • algorItmos gentIcos 19

    escogido para reproducirse. Esto puede evitar problemas de predominancia de ciertos individuos y cada uno de estos algoritmos presentan variaciones respec-to al nmero de veces que se tomarn los mejores y peores y, de esta forma, se impondr una presin en la bsqueda en el espacio de estados en la zona donde se encuentra el mejor individuo (en el caso de que se seleccionen ms veces los mejores), o bien que se tienda a repartir la bsqueda por el espacio de estados, pero sin dejar de tender a buscar en la mejor zona (caso de repartir ms la se-leccin). Algunos de estos algoritmos son sobrante estocstico (Brindle, 1981) (Booker, 1982), universal estocstica (Baker, 1987) o muestreo determinstico.

    Una opcin bastante comn consiste en seleccionar el primero de los in-dividuos participantes en el cruce mediante alguno de los mtodos expuestos en esta seccin y el segundo de manera aleatoria.

    1.6.1.1. Seleccin por ruleta

    Propuesto por DeJong, es posiblemente el mtodo ms utilizado desde los orgenes de los Algoritmos Genticos (Blickle & Thiele, 1995).

    A cada uno de los individuos de la poblacin se le asigna una parte pro-porcional a su ajuste de una ruleta, de tal forma que la suma de todos los porcentajes sea la unidad. Los mejores individuos recibirn una porcin de la ruleta mayor que la recibida por los peores. Generalmente, la poblacin est ordenada en base al ajuste, por lo que las porciones ms grandes se encuen-tran al inicio de la ruleta. Para seleccionar un individuo basta con generar un nmero aleatorio del intervalo [0..1] y devolver el individuo situado en esa posicin de la ruleta. Esta posicin se suele obtener recorriendo los individuos de la poblacin y acumulando sus proporciones de ruleta hasta que la suma exceda el valor obtenido.

    Es un mtodo muy sencillo pero ineficiente a medida que aumenta el tamao de la poblacin (su complejidad es O(n2)). Presenta adems el incon-veniente de que el peor individuo puede ser seleccionado ms de una vez.

    1.6.1.2. Seleccin por torneo

    La idea principal de este mtodo de seleccin consiste en escoger a los individuos genticos en base a comparaciones directas entre sus genotipos.

    Existen dos versiones de seleccin mediante torneo, el torneo determi-nstico y el torneo probabilstico, que a continuacin pasan a detallarse.

    En la versin determinstica se selecciona al azar un nmero p de indivi-duos (generalmente se escoge p=2). De entre los individuos seleccionados se selecciona el ms apto para pasarlo a la siguiente generacin.

  • 20 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    La versin probabilstica nicamente se diferencia en el paso de seleccin 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 parmetro p (fijado para todo el proceso evolutivo) se escoge el individuo ms alto y en caso contrario el menos apto. Generalmente p toma valores en el rango 0.5 < p 1

    Variando el nmero de individuos que participan en cada torneo se puede modificar la presin de seleccin. Cuando participan muchos individuos en cada torneo, la presin de seleccin es elevada y los peores individuos apenas tienen oportunidades de reproduccin. Un caso particular es el elitismo glo-bal. Se trata de un torneo en el que participan todos los individuos de la pobla-cin, con lo cual la seleccin se vuelve totalmente determinstica. Cuando el tamao del torneo es reducido, la presin de seleccin disminuye y los peores individuos tienen ms oportunidades de ser seleccionados.

    Elegir uno u otro mtodo de seleccin determinar la estrategia de bs-queda del Algoritmo Gentico. Si se opta por un mtodo con una alta presin de seleccin se centra la bsqueda de las soluciones en un entorno prximo a las mejores soluciones actuales. Por el contrario, optando por una presin de seleccin menor se deja el camino abierto para la exploracin de nuevas regiones del espacio de bsqueda.

    Existen muchos otros algoritmos de seleccin. Unos buscan mejorar la eficiencia computacional, otros el nmero de veces que los mejores o peores individuos pueden ser seleccionados. Algunos de estos algoritmos son mues-treo determinstico, escalamiento sigma, seleccin por jerarquas, estado uni-forme, sobrante estocstico, brecha generacional, etc.

    1.6.2. CruceUna vez seleccionados los individuos, stos son recombinados para pro-

    ducir la descendencia que se insertar en la siguiente generacin. Tal y como se ha indicado anteriormente, el cruce es una estrategia de reproduccin sexual.

    Su importancia para la transicin entre generaciones es elevada puesto que las tasas de cruce con las que se suele trabajar rondan el 90%.

    Los diferentes mtodos de cruce podrn operar de dos formas diferentes. Si se opta por una estrategia destructiva los descendientes se insertarn en la poblacin temporal aunque sus padres tengan mejor ajuste (trabajando con una nica poblacin esta comparacin se realizar con los individuos a reem-plazar). Por el contrario, utilizando una estrategia no destructiva la descenden-cia pasar a la siguiente generacin nicamente si supera la bondad del ajuste de los padres (o de los individuos a reemplazar).

  • algorItmos gentIcos 21

    La idea principal del cruce se basa en que, si se toman dos individuos correctamente adaptados al medio y se obtiene una descendencia que com-parta genes de ambos, existe la posibilidad de que los genes heredados sean precisamente los causantes de la bondad de los padres. Al compartir las carac-tersticas buenas de dos individuos, la descendencia, o al menos parte de ella, debera tener una bondad mayor que cada uno de los padres por separado. Si el cruce no agrupa las mejores caractersticas en uno de los hijos y la descen-dencia tiene un peor ajuste que los padres no significa que se est dando un paso atrs. Optando por una estrategia de cruce no destructiva garantizamos que pasen a la siguiente generacin los mejores individuos. Si, an con un ajuste peor, se opta por insertar a la descendencia, y puesto que los genes de los padres continuarn en la poblacin aunque dispersos y posiblemente le-vemente modificados por la mutacin, en posteriores cruces se podrn volver a obtener estos padres, recuperando as la bondad previamente perdida.

    Existen multitud de algoritmos de cruce. Sin embargo los ms empleados son los que se detallarn a continuacin:

    Cruce de 1 puntoCruce de 2 puntosCruce uniforme

    1.6.2.1. Cruce de 1 punto

    Es la ms sencilla de las tcnicas de cruce. Una vez seleccionados dos in-dividuos 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 nue-vos descendientes. De esta manera ambos descendientes heredan informacin gentica de los padres.

    Figura 1.6: Cruce de un punto

    En la Figura 1.6 se puede ver con claridad el proceso descrito anterior-mente.

  • 22 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    En la bibliografa suele referirse a este tipo de cruce con el nombre de SPX (Single Point Exchange)

    1.6.2.2. Cruce de 2 puntos

    Se trata de una generalizacin 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 1.7: Cruce de dos puntos

    Generalmente, es habitual referirse a este tipo de cruce con las siglas DPX (Double Point Crossover). En la Figura 1.7 se muestra un ejemplo de cruce por dos puntos.

    Generalizando, se pueden aadir ms puntos de cruce dando lugar a al-goritmos de cruce multipunto. Sin embargo existen estudios que desaprueban esta tcnica (DeJong & Spears, 1999). Aunque se admite que el cruce de 2 puntos aporta una sustancial mejora con respecto al cruce de un solo punto, el hecho de aadir un mayor nmero de puntos de cruce reduce el rendimiento del Algoritmo Gentico. El problema principal de aadir nuevos puntos de cruce radica en que es ms fcil que los segmentos originados sean corrom-pibles, es decir, que por separado quizs pierdan las caractersticas de bondad que posean conjuntamente. Hay que evitar, por lo tanto, romper dichos seg-mentos, denominados bloques constructivos.

    Sin embargo no todo son desventajas y aadiendo ms puntos de cruce se consigue que el espacio de bsqueda del problema sea explorado con ms intensidad.

  • algorItmos gentIcos 23

    1.6.2.3. Cruce uniforme

    El cruce uniforme es una tcnica completamente diferente de las vistas hasta el momento. Cada gen de la descendencia tiene las mismas probabilida-des de pertenecer a uno u otro padre.

    Figura 1.8: Cruce uniforme

    Aunque se puede implementar de muy diversas formas, la tcnica implica la generacin de una mscara de cruce con valores binarios. Si en una de las posiciones de la mscara hay un 1, el gen situado en esa posicin 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 intercam-bian los papeles de los padres, o bien se intercambia la interpretacin de los unos y los ceros de la mscara de cruce.

    Tal y como se puede apreciar en la Figura 1.8, la descendencia contiene una mezcla de genes de cada uno de los padres. El nmero efectivo de pun-tos de cruce es fijo pero ser por trmino medio L/2, siendo L la longitud del cromosoma (nmero de alelos en representaciones binarias o de genes en otro tipo de representaciones).

    La mscara de cruce puede no permanecer fija durante todo el proceso evolutivo. Se genera de manera aleatoria para cada cruce. Se suele referir a este tipo de cruce con las siglas UPX (Uniform Point Crossover).

    1.6.2.4. Cruces especficos de codificaciones no binarias

    Los tres tipos de cruce vistos hasta el momento son vlidos para cualquier tipo de representacin del genotipo. Si se emplean genotipos compuestos por valores enteros o reales pueden definirse otro tipo de operadores de cruce:

  • 24 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Media: el gen de la descendencia toma el valor medio de los genes de los padres. Tiene la desventaja de que nicamente se genera un des-cendiente en el cruce de dos padres.

    Media geomtrica: cada gen de la descendencia toma como valor la raz cuadrada del producto de los genes de los padres. Presenta el pro-blema aadido de qu signo dar al resultado si los padres tienen signos diferentes.

    Extensin: se toma la diferencia existente entre los genes situados en las mismas posiciones de los padres y se suma al valor ms alto o se resta del valor ms bajo. Solventa el problema de generar un nico descendiente. Una variante basada en este cruce son los Algoritmos genticos de evolucin diferencial.

    1.6.3. Algoritmos de ReemplazoCuando en vez de trabajar con una poblacin temporal se hace con una

    nica poblacin, sobre la que se realizan las selecciones e inserciones, deber tenerse en cuenta que para insertar un nuevo individuo deber de eliminarse previamente otro de la poblacin. Existen diferentes mtodos de reemplazo:

    Aleatorio: el nuevo individuo se inserta en un lugar escogido de mane-ra aleatoria en la poblacin.

    Reemplazo de padres: se obtiene espacio para la nueva descendencia liberando el espacio ocupado por los padres.

    Reemplazo de similares: una vez obtenido el ajuste de la descendencia se selecciona un grupo de individuos (entre seis y diez) de la pobla-cin con un ajuste similar. Se reemplazan aleatoriamente los que sean necesarios.

    Reemplazo de los peores: de entre un porcentaje de los peores indivi-duos de la poblacin se seleccionan aleatoriamente los necesarios para dejar sitio a la descendencia.

    1.6.4. CopiaLa copia es la otra estrategia reproductiva para la obtencin de una nue-

    va generacin a partir de la anterior. A diferencia del cruce, se trata de una estrategia de reproduccin asexual. Consiste simplemente en la copia de un individuo en la nueva generacin.

    El porcentaje de copias de una generacin a la siguiente es relativamente reducido, pues en caso contrario se corre el riesgo de una convergencia prema-

  • algorItmos gentIcos 25

    tura de la poblacin hacia ese individuo. De esta manera el tamao efectivo de la poblacin se reducira notablemente y la bsqueda en el espacio del proble-ma se focalizara en el entorno de ese individuo.

    Lo que generalmente se suele hacer es seleccionar dos individuos para el cruce y, si ste finalmente no tiene lugar, se insertan en la siguiente generacin los individuos seleccionados.

    1.6.5. ElitismoEl elitismo es un caso particular del operador de copia consistente en

    copiar siempre al mejor, o en su caso mejores, individuos de una generacin en la generacin siguiente. De esta manera se garantiza que el proceso de bsqueda nunca dar un paso atrs en cuanto a la calidad de la mejor solucin obtenida, sino que un cambio en sta siempre implicar una mejora.

    Una variacin de este proceso consiste en copiar al mejor o mejores indi-viduos de una generacin en la siguiente, nicamente cuando tras el paso de una generacin no se haya mejorado con los operadores de cruce o mutacin la mejor solucin de la generacin actual.

    1.6.6. MutacinLa mutacin de un individuo provoca que alguno de sus genes, general-

    mente uno slo, vare su valor de forma aleatoria.Aunque se pueden seleccionar los individuos directamente de la pobla-

    cin actual y mutarlos antes de introducirlos en la nueva poblacin, la muta-cin se suele utilizar de manera conjunta con el operador de cruce. Primera-mente se seleccionan dos individuos de la poblacin para realizar el cruce. Si el cruce tiene xito entonces uno de los descendientes, o ambos, se muta con cierta probabilidad Pm. Se imita de esta manera el comportamiento que se da en la naturaleza, pues cuando se genera la descendencia siempre se produce algn tipo de error, por lo general sin mayor trascendencia, en el paso de la carga gentica de padres a hijos.

    La probabilidad de mutacin es muy baja, generalmente menor al 1%. Esto se debe sobre todo a que los individuos suelen tener un ajuste menor despus de mutados. Sin embargo se realizan mutaciones para garantizar que ningn punto del espacio de bsqueda tenga una probabilidad nula de ser examinado.

    Tal y como se ha comentado, la mutacin ms usual es el reemplazo alea-torio. Este consiste en variar aleatoriamente un gen de un cromosoma. Si se trabaja con codificaciones binarias, consistir simplemente en negar un bit.

  • 26 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Tambin es posible realizar la mutacin intercambiando los valores de dos alelos del cromosoma. Con otro tipo de codificaciones no binarias existen otras opciones:

    Incrementar o decrementar a un gen una pequea cantidad generada aleatoriamente.

    Multiplicar un gen por un valor aleatorio prximo a 1.Aunque no es lo ms comn, existen implementaciones de Algoritmos

    Genticos en las que no todos los individuos tienen los cromosomas de la mis-ma longitud. Esto implica que no todos ellos codifican el mismo conjunto de variables. En este caso existen mutaciones adicionales como puede ser aadir un nuevo gen o eliminar uno ya existente.

    1.7. EvaluacinPara el correcto funcionamiento de un Algoritmo Gentico se debe de

    poseer un mtodo que indique si los individuos de la poblacin representan o no buenas soluciones al problema planteado. Por lo tanto, para cada tipo de problema que se desee resolver deber derivarse un nuevo mtodo, al igual que ocurrir con la propia codificacin de los individuos.

    De esto se encarga la funcin de evaluacin, que establece una medida numrica de la bondad de una solucin. Esta medida recibe el nombre de ajuste. En la naturaleza el ajuste (o adecuacin) de un individuo puede consi-derarse como la probabilidad de que ese individuo sobreviva hasta la edad de reproduccin y se reproduzca. Esta probabilidad deber estar ponderada con el nmero de individuos de la poblacin gentica.

    En el mundo de los Algoritmos Genticos se emplear esta medicin para controlar la aplicacin de los operadores genticos. Es decir, permitir contro-lar el nmero de selecciones, cruces, copias y mutaciones llevadas a cabo.

    La aproximacin ms comn consiste en crear explcitamente una me-dida de ajuste para cada individuo de la poblacin. A cada uno de los indivi-duos se le asigna un valor de ajuste escalar por medio de un procedimiento de evaluacin bien definido. Tal y como se ha comentado, este procedimiento de evaluacin ser especfico del dominio del problema en el que se aplica el Algoritmo Gentico. Tambin puede calcularse el ajuste mediante una manera co-evolutiva. Por ejemplo, el ajuste de una estrategia de juego se determina aplicando esa estrategia contra la poblacin entera (o en su defecto una mues-tra) de estrategias de oposicin.

    Se pueden diferenciar cuatro tipos de ajuste o fitness (Koza, 1992):

  • algorItmos gentIcos 27

    Fitness Puro: r(i,t)

    Es la medida de ajuste establecida en la terminologa natural del pro-pio problema. Por ejemplo, supngase una poblacin de hormigas que deben llenar la despensa de cara al invierno. La bondad de cada hormiga ser el nmero de piezas de comida llevadas por ella hasta el hormiguero.

    En los problemas de maximizacin, como sera el de las hormigas mencionado anteriormente, los individuos con un fitness puro elevado sern los ms interesantes. Al contrario, en los problemas de minimi-zacin interesarn los individuos con un fitness puro reducido.

    Fitness Estandarizado. s(i,t)

    Para solucionar esta dualidad ante problemas de minimizacin o maximizacin se modifica el ajuste puro de acuerdo a la siguiente frmula:

    En el caso de problemas de minimizacin se emplea directamente la medida de fitness puro. Si el problema es de maximizacin se resta de una cota superior rmax del error el fitness puro.

    Empleando esta mtrica la bondad de un individuo ser menor cuanto ms cercano est a cero el valor del ajuste. Por lo tanto, dentro de la generacin t, un individuo i siempre ser mejor que uno j si se verifica que s(i,t) < s(j,t).

    Fitness Ajustado. a(i,t)

    Se obtiene aplicando la siguiente transformacin al fitness estandari-zado:

  • 28 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    De esta manera, el fitness ajustado tomar siempre valores del interva-lo (0,1]. Cuando ms se aproxime el fitness ajustado de un individuo a 1 mayor ser su bondad.

    Fitness Normalizado. n(i,t)

    Los diferentes tipos de fitness vistos hasta ahora hacen referencia ni-camente a la bondad del individuo en cuestin. El fitness normalizado introduce un nuevo aspecto: indica la bondad de una solucin con res-pecto al resto de soluciones representadas en la poblacin. Se obtiene de la siguiente forma (considerando una poblacin de tamao M):

    Al igual que el fitness ajustado, siempre tomar valores del intervalo [0,1], con mejores individuos cuanto ms prximo est a la unidad. Pero a diferencia de antes, un valor cercano a 1 no slo indica que ese individuo represente una buena solucin al problema, sino que adems es una solucin destacadamente mejor que las proporcionadas por el resto de la poblacin.

    La suma de los valores de fitness normalizado de una poblacin da siempre 1.

    Este tipo de ajuste es empleado en la mayora de los mtodos de selec-cin proporcionales al fitness.

    1.8. Ejemplos prcticos1.8.1. Resolucin de un sistema de ecuaciones

    Un ejemplo sencillo, pero en el que se aprecia la potencia de resolucin de los algoritmos genticos, es el relativo a la resolucin de un sistema de ecuaciones.

    1.8.1.1. Descripcin del problema

    En la Figura 1.9 se muestra un sistema con n ecuaciones y un total de m incgnitas (junto con su representacin matricial). Los coeficientes de las incgnitas Xi estn representados por los valores ai,j, mientras que el trmino independiente de cada ecuacin se representa con el valor bi.

  • algorItmos gentIcos 29

    Figura 1.9: Sistema de n-ecuaciones y m incgnitas

    1.8.1.2. Codificacin del problema

    La codificacin de un sistema de ecuaciones es realmente sencilla me-diante algoritmos genticos. Deber tenerse en cuenta que cada individuo ha de proporcionar una solucin vlida al problema. Por lo tanto, si el sistema de ecuaciones presenta m incgnitas, cada individuo gentico deber codificar cada una de esas incgnitas. Podra optarse por diferentes codificaciones pero, para mostrar paso a paso la resolucin del problema propuesto, puede definir-se que cada gen represente, mediante valores reales, cada uno de los valores asignados a las incgnitas del sistema en la solucin. As, en la Figura 1.10 se muestra un individuo gentico vlido para la resolucin del citado problema.

    X1= 1.25 X2= -5.87 X3= 15.68 Xm= 258.6

    Figura 1.10: Individuo Gentico

    Tal y como se ha comentado, cada uno de los genes representar el valor asignado a cada incgnita para la resolucin del sistema planteado. Asimismo, durante la fase de codificacin se podr establecer un lmite mximo y mnimo para el valor de los genes.

    1.8.1.3. Funcin de Evaluacin

    Una vez codificado el problema, ser necesario proporcionar una funcin de evaluacin que permita determinar cmo de buena es la solucin propor-cionada por cada uno de los individuos de la poblacin gentica.

    A medida que se incrementa el nmero de ecuaciones y el nmero de incgnitas, la resolucin por mtodos puramente matemticos de este tipo de problemas se complica considerablemente. Sin embargo, trabajando con al-

  • 30 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    goritmos genticos debe tenerse en cuenta que no es necesario proporcionar un mtodo de resolucin, sino un mtodo que permita determinar si una so-lucin es buena o no, y en qu medida. As, una aproximacin perfectamente vlida para evaluar la bondad de un individuo consistira en lo siguiente. En primer lugar, debern reemplazarse las incgnitas del sistema de ecuaciones por los valores proporcionados por cada uno de los genes. A continuacin se realizaran los clculos especificados en la parte izquierda de la ecuacin para obtener un valor numrico. Dicho valor numrico podr compararse con los trminos independientes especificados en el sistema de ecuaciones. Cuanto ms cercano est (en valor absoluto) el valor obtenido al valor del trmino independiente, mejor solucin representa el individuo gentico. Evidentemen-te, la solucin ideal consistira en un conjunto de valores (las soluciones del sistema) tales que, si las incgnitas se substituyesen por ellos, los valores ob-tenidos fuesen idnticos a los trminos independientes.

    Por lo tanto, la funcin de evaluacin podra definirse como el sumatorio de las diferencias en valor absoluto entre cada uno de los trminos indepen-dientes del sistema y los trminos independientes obtenidos al sustituir los valores del genotipo en la ecuacin correspondiente. Visto en forma de pseu-docdigo se tendra la siguiente funcin:

    coef Matriz Coeficientes aijb Matriz de Trminos independientes bifitness 0

    Para cada ecuacin ihacer aux 0

    Para cada incgnita j de la ecuacin ihaceraux aux + genotipo(j) coef(i)(j)finPara

    fitness fitness + abs(b(i) aux)

    finPara

    devolver fitness

    1.8.1.4. Ejemplo de resolucin paso a paso

    Siguiendo la codificacin y mtodo de evaluacin anteriormente comen-tados, a continuacin se mostrar paso a paso la resolucin del sistema de ecuaciones planteado en la Figura 1.11.

  • algorItmos gentIcos 31

    Figura 1.11: Sistema de ecuaciones de partida

    Tal y como se ha comentado anteriormente, la fortaleza de los algorit-mos evolutivos reside en la evolucin en paralelo de mltiples soluciones. Sin embargo, con el objetivo de hacer comprensible la simulacin se escogern valores fuera del rango normal de operacin de este tipo de algoritmos, como puede ser el tamao de poblacin. As, en este caso los parmetros de configu-racin del algoritmo gentico sern los siguientes:

    Tamao de poblacin: 10 individuosElitismo: 2 individuosAlgoritmo seleccin: torneo determinstico+aleatorioAlgoritmo cruce: 1 punto Tasa de Cruce (Pc): 90%Tasa de Mutacin (Pm): 2.5%Algoritmo mutacin: puntualEl primer paso en la ejecucin del algoritmo gentico consistir en la ini-

    cializacin de la poblacin gentica. En este caso, por simplicidad podemos suponer que se restringen los valores de los genes al rango [-10..10] y que se permiten nicamente 2 valores decimales. As, la poblacin inicial junto con sus valores de aptitud (fitness puro y fitness normalizado) podra ser la siguiente:

    Individuo Fitness PuroFitness

    Normalizado

    1 -2,68 -7,68 6,53 3,57 0,0046

    2 1,36 0,02 1,62 14,64 0,0187

    3 -6,36 5,67 0,74 28,97 0,0370

    4 2,5 -3,18 2,36 32 0,0408

    5 -5,20 2,69 -1,27 33,18 0,0808

    6 2,79 9,54 1,25 63,32 0,0423

    7 9,89 1,28 7,67 91,02 0,1161

    8 4,5 0,69 -4,58 117,15 0,1495

    9 -4,08 6,25 8,63 166,04 0,2119

    10 4,68 -8,72 -6,45 233,81 0,2983

    Poblacin inicial y valores de aptitud. Generacin 0

  • 32 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Obsrvese que la poblacin aparece ordenada, tal y como suele ser habi-tual, en funcin del valor de bondad de cada individuo.

    Siguiendo las pautas mostradas en el pseudocdigo de la Figura 1.5 y, puesto que se ha establecido un valor de elitismo de 2, los dos primeros indi-viduos de la poblacin pasaran a formar parte de la poblacin temporal.

    Individuo Fitness PuroFitness

    Normalizado-2,68 -7,68 6,53 3,57 0,00461,36 0,02 1,62 14,64 0,0187

    Poblacin temporal. Paso 1

    El resto de la poblacin temporal se rellenar como resultado de los ope-radores de cruce, copia y/o mutacin. El siguiente paso consistir en selec-cionar dos individuos para la realizacin del cruce. El primero de ellos se seleccionar mediante el algoritmo de torneo determinstico (p=2), por lo que previamente debern seleccionarse al azar dos individuos de la poblacin, su-pngase que sean los individuos 3 y 8 de la poblacin. De entre estos, el que presenta mejor fitness es el individuo 3, por lo que ser seleccionado como primer padre para el algoritmo de cruce. El segundo de los padres del algorit-mo de cruce se seleccionar al azar, por ejemplo el individuo nmero 7.

    Una vez seleccionados los padres se deber determinar si se procede o no a la aplicacin del algoritmo de cruce. Para ello se genera un nmero al azar en el intervalo [0..1] y, si este es menor que la tasa de cruce Pc, se procede a la realizacin del cruce. Supngase que as ocurre en este caso. En este caso el algoritmo de cruce escogido es el cruce en un punto, por lo que deber es-cogerse un punto de cruce dentro del genotipo de los individuos. Suponiendo que el punto escogido es el 1, el resultado del cruce sera el siguiente:

    Obsrvese como el segundo descendiente originado a travs de la opera-cin de cruce posee un mejor fitness que cualquiera de los dos descendientes.

    Una vez generada la descendencia es hora de aplicar la operacin de mu-tacin. Existen varias alternativas a la hora de escoger el individuo a mutar:

  • algorItmos gentIcos 33

    seleccionar al azar uno de los individuos o bien, tal y como aqu se ilustra, mutar uno de los descendientes originados tras el cruce. En este caso, supn-gase que se va a aplicar la mutacin sobre el primer descendiente. El proceso que determina si la mutacin tiene o no lugar es anlogo al seguido con la operacin de cruce. As, se genera un valor aleatorio en el intervalo [0..1] y, si este es menor que la tasa de mutacin Pm, se procede a la realizacin de la ope-racin de mutacin. Supngase que en este caso se genera un valor de 0.013 que, al ser menor que Pm=0.025, implicar que el individuo seleccionado vea alterado al azar uno de sus genes. Por ejemplo, suponiendo que se mute el segundo gen, el resultado de dicha mutacin podra ser el siguiente:

    -6,36 3,65 7,67 128,6

    En este caso, al contrario de lo ocurrido con la operacin de cruce, el nuevo individuo presenta un peor ajuste que el original. Esta situacin no es extraa ni tiene porqu ser perjudicial, puesto que el objetivo primordial de la operacin de mutacin consiste en introducir nueva informacin en la pobla-cin gentica.

    Una vez aplicados los operadores de cruce y mutacin, los descendientes debern ser insertados en la poblacin temporal, quedando as:

    Individuo Fitness Puro

    -2,68 -7,68 6,53 3,57

    9,89 5,67 0,74 12,72

    1,36 0,02 1,62 14,64

    -6,36 3,65 7,67 128,6

    Poblacin temporal. Paso 2

    El proceso contina con la seleccin de nuevos individuos. Supngase que son los individuos nmero 9 y 8 los escogidos para la realizacin del tor-neo, resultando ganador por lo tanto el individuo 8 por presentar un mejor fit-ness. El otro individuo participante en el cruce se escoger al azar. Supngase que se escoge el individuo nmero 3. Ntese que este individuo ya haba sido escogido previamente, hecho que no lo invalida para una nueva re-eleccin.

    Una vez escogidos los individuos es hora de determinar si la operacin de cruce se aplica o no. En este caso, se genera un valor aleatorio de 0.97 que, al ser mayor que PC, conlleva que la operacin de cruce no tenga lugar. En este

  • 34 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    caso, los individuos seleccionados pasan, a travs del operador gentico de copia, directamente a la poblacin temporal.

    Individuo Fitness Puro-2,68 -7,68 6,53 3,579,89 5,67 0,74 12,721,36 0,02 1,62 14,64-6,36 5,67 0,74 28,974,5 0,69 -4,58 117,15

    -6,36 3,65 7,67 128,6

    Poblacin temporal. Paso 3

    Nuevamente es necesario seleccionar los individuos para la operacin de cruce, en este caso escogiendo los individuos 8 y 9. Al igual que en los casos anteriores ser el mejor individuo (el 8) el que finalmente participe en el cruce junto con otro escogido al azar, en este caso el 10. Una vez generado el nme-ro al azar (p.e. 0,62) se comprueba si es menor que la tasa de cruce. Al ser as en este caso, se procede a la realizacin del cruce:

    4,5 0,69 -4,58 4,5 -8,72 -6,45 233,63

    4,68 -8,72 -6,45 4,68 0,69 -4,58 117,33

    Punto de cruce

    En este caso supngase que tras la generacin del nmero aleatorio co-rrespondiente y su comprobacin con Pm no es necesario aplicar el operador de mutacin, con lo que los descendientes generados a partir del operador de cruce se insertan directamente en la poblacin temporal.

    Individuo Fitness Puro-2,68 -7,68 6,53 3,579,89 5,67 0,74 12,721,36 0,02 1,62 14,64-6,36 5,67 0,74 28,974,5 0,69 -4,58 117,15

    4,68 0,69 -4,58 117,33-6,36 3,65 7,67 128,64,5 -8,72 -6,45 233,63

    Poblacin temporal. Paso 4

  • algorItmos gentIcos 35

    Una vez ms debern seleccionarse los individuos que formarn parte de la operacin de cruce si sta llega a realizarse. Supngase que en esta ocasin se seleccionan para la participacin en el torneo los individuos 2 y 6 (con lo que el ganador ser el 2) y el individuo 8 es seleccionado aleatoriamente.

    Para determinar si finalmente se aplica o no la operacin de cruce, nueva-mente ha de generarse un valor aleatorio en el rango [0..1]. Supngase que se genera el valor 0,27 que, al ser menor que PC, determinar la realizacin del cru-ce, en este caso seleccionndose al azar como punto de cruce el segundo gen.

    1,36 0,02 1,62 1,36 0,02 -4,58 35,68

    4,5 0,69 -4,58 4,5 0,69 1,62 11,75

    Punto de cruce

    Una vez realizado el cruce deber comprobarse si es o no necesario reali-zar la operacin de mutacin. En este caso supngase que se genera un valor 0,02 que, al ser menor que Pm, determinar la necesidad de realizar la muta-cin. En esta ocasin se mutar de manera aleatoria el tercer gen del primer descendiente generado en la operacin de cruce.

    4,5 0,69 2,13 3,08

    Ambos individuos debern ser insertados en la poblacin temporal que, llegado este punto, ya se encuentra completa. Por lo tanto, la poblacin genti-ca actual se descarta y se establece como poblacin de la siguiente generacin, en este caso la 1, la actual poblacin temporal.

    Individuo Fitness PuroFitness

    Normalizado1 4,5 0,69 2,13 3,08 0,00462 -2,68 -7,68 6,53 3,57 0,00533 4,5 0,69 1,62 11,75 0,01754 9,89 5,67 0,74 12,72 0,01895 1,36 0,02 1,62 14,64 0,02186 -6,36 5,67 0,74 28,97 0,04317 4,5 0,69 -4,58 117,15 0,17458 4,68 0,69 -4,58 117,33 0,17479 -6,36 3,65 7,67 128,6 0,1915

    10 4,5 -8,72 -6,45 233,63 0,3480

    Poblacin gentica y valores de aptitud. Generacin 1

  • 36 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Obsrvese cmo tras esta primera iteracin el individuo ms adaptado obtenido ya mejora al mejor individuo previo. Es decir, la poblacin gentica se va adaptando paulatinamente al medio, en este caso, a la resolucin del sistema de ecuaciones.

    Ahora sera el momento de determinar si la ejecucin del algoritmo gen-tico contina o bien si ha de detenerse. Esta comprobacin suele realizarse en base al nmero de generaciones transcurridas o en base a la aptitud del mejor individuo. Tambin puede hacerse en base a criterios algo ms complejos, como el hecho de que la mejor solucin proporcionada por el algoritmo gen-tico vare en un porcentaje menor a uno prefijado durante determinado nmero de generaciones.

    1.8.1.5. Implementacin en Matlab

    Para la implementacin de la solucin propuesta mediante Matlab se emplear la versin 2.1 de su toolbox de algoritmos genticos. En las dos siguientes secciones se recoge el cdigo necesario para la inicializacin del algoritmo gentico y para la definicin de la funcin de evaluacin.

    1.8.1.5.1. InIcIalIzacIn algorItmo gentIcoEl fichero de inicializacin se encarga de la configuracin de los diferen-

    tes parmetros del algoritmo gentico: tamao y tipo de poblacin, definicin de los algoritmos de seleccin, cruce y mutacin, establecimiento de los cri-terios de parada, etc.

    Adems, en este fichero se establecen los coeficientes y trminos inde-pendientes del sistema de ecuaciones que desea resolverse (variable sistemaE-cuaciones). Esta variable se declara global para que sea directamente accesi-ble desde el fichero de evaluacin.

    % *****************************************************% Sistema Ecuaciones : Resolucin mediante AAGG

    % *****************************************************

    close all;clear all;

    warning('off');

    global sistemaEcuaciones;

    sistemaEcuaciones = [3 8 2 25; 1 -2 4 12; -5 3 11 4];

  • algorItmos gentIcos 37

    % *****************************************************% Configuracin Algoritmo Gentico

    % *****************************************************

    options = gaoptimset;

    % Poblacin Genticaoptions = gaoptimset(options,'PopulationSize' , 500); options = gaoptimset(options, 'PopulationType' ,

    'doubleVector');

    options = gaoptimset(options,' PopInitRange' , [-5 -5 -5; 5 5 5]);

    options = gaoptimset(options, 'CreationFcn', @gacreationuniform);

    % Criterios de parada

    options = gaoptimset(options, 'Generations', 1000); options = gaoptimset(options, 'FitnessLimit', 0.001);

    options = gaoptimset(options,'TolFun', 1e-12);options = gaoptimset(options,'StallTimeLimit', 1000);options = gaoptimset(options,'StallGenLimit', 1000);

    % *****************************************************% Operadores Genticos

    % *****************************************************

    % Elitismooptions = gaoptimset(options, 'EliteCount', 2);

    % Operador de seleccinoptions = gaoptimset(options, ' SelectionFcn',

    @selectiontournament);

    % Algoritmo de cruceoptions = gaoptimset(options, ' CrossoverFcn',

    @crossoversinglepoint);

    options = gaoptimset(options, 'CrossoverFraction', 0.9);

    % Algoritmo de mutacinoptions = gaoptimset(options, ' MutationFcn',

    @mutationuniform);

  • 38 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    % ******************************************************% Configuracion Salida

    % ******************************************************

    options = gaoptimset(options, 'Display', 'off'); options = gaoptimset(options, 'PlotInterval', 10);

    options = gaoptimset(options,'PlotFcns',[@gaplotbestf]);

    % Ejecucin algoritmo[x, fval, reason, output, population, scores]= ... ga(@fitness,length(sistemaEcuaciones)-1,options);

    disp('');disp('Mejor individuo: ');disp(x);disp('Ajuste: ');disp(fval);

    1.8.1.5.2. DefInIcIn De la funcIn De evaluacInLa funcin evaluacin es una traduccin directa a cdigo Matlab del

    pseudocdigo mostrado anteriormente.As, el valor de ajuste de un individuo sera el sumatorio de las diferencias

    en valor absoluto entre cada uno de los trminos independientes del sistema y los trminos independientes obtenidos al sustituir los valores del genotipo en la ecuacin correspondiente.

    El bucle interno reemplaza en cada una de las ecuaciones del sistema los valores proporcionados por el individuo para cada incgnita, mientras que el bucle externo acumula las diferencias en valor absoluto entre el valor obtenido tras dicha substitucin y el trmino independiente del sistema de ecuaciones.

    function [ FitnessValue ] = fitness(individuo)

    global sistemaEcuaciones;

    [f, c] = size(sistemaEcuaciones);

    diferencia = 0;

    for i=1:f

  • algorItmos gentIcos 39

    resultado = 0;

    for j=1:(c-1) resultado = resultado + sistemaEcuaciones(i,j)*individuo(j);end

    diferencia = diferencia + abs(sistemaEcuaciones(i, c) - resultado);

    end

    FitnessValue = diferencia;

    1.8.2. N ReinasA continuacin se muestra un ejemplo prctico resuelto mediante la apli-

    cacin de algoritmos genticos. El problema de las N-Reinas, debido a sus pe-culiares caractersticas, permitir observar un proceso de codificacin y confi-guracin especial de un algoritmo gentico para proceder a su resolucin. Una vez mostrados los pasos necesarios para abordar la solucin del problema, se muestra su implementacin mediante el lenguaje de programacin MATLAB (Mathworks, 2005)

    1.8.2.1. Descripcin del problema

    A grandes rasgos, el problema de las N Reinas consiste en situar N rei-nas sobre un hipottico tablero de ajedrez de NxN celdas, de tal manera que ninguna reina pueda atacar la posicin del resto de reinas. Es decir, colocar N reinas sobre el tablero NxN sin que ninguna comparta fila, columna o diagonal de dicho tablero.

    Una bsqueda secuencial de todas las posibles combinaciones implicara la bsqueda de N(N-1) 1 = N! posibilidades. Concretamente, para un ta-blero tradicional de 8x8 casillas, existiran 8! = 40.320 posibilidades, de las cuales nicamente 92 seran soluciones vlidas. En la Figura 1.12 se muestra una de estas soluciones vlidas, con la ubicacin de las 8 reinas sobre el ta-blero de ajedrez.

  • 40 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Figura 1.12: Solucin vlida para el problema 8-Reinas

    1.8.2.2. Codificacin del problema

    Si desea abordarse el problema mediante el empleo de algoritmos genti-cos, en primer lugar ser necesario codificarlo en los trminos adecuados.

    Una primera aproximacin a la codificacin del problema se podra plan-tear como una matriz de NxN elementos binarios. En este caso un valor 1 significara que se encuentra una reina en esa posicin, y un 0 que esa casilla del tablero est vaca. Se tratara de una codificacin claramente ineficiente ya que se est almacenando mucha ms informacin de la necesaria, puesto que el hecho de conocer en que posiciones se colocan las reinas implica directa-mente el conocimiento acerca de las casillas que se encuentran vacas.

    Por lo tanto puede plantearse otra codificacin, mucho ms eficiente. Para ello, hay que recordar que cada reina ha de estar en una fila y columna dife-rente. Partiendo de que en cada fila existir una reina, el problema se puede replantear de tal manera que consista en determinar la columna dentro de la fila correspondiente en la que haya que colocar la reina, de tal manera que ninguna se haga jaque. Por lo tanto, la solucin al problema podr codificarse en forma de una tupla de n valores S = (X1, X2, , Xn) en la que cada Xi repre-senta la columna en la que se coloca la reina de la fila i. Para evitar situar ms de una reina en la misma columna, los valores de S sern una permutacin de la tupla (1, 2, , N).

    Retomando la solucin mostrada en la Figura 1.12, sta se codificara segn la siguiente tupla S = (5, 3, 8, 4, 7, 1, 6, 2), de tal manera que la reina de

  • algorItmos gentIcos 41

    la primera fila se sita en la columna 5, la reina de la segunda fila se sita en la columna 3, y as sucesivamente.

    1.8.2.3. Funcin de Evaluacin

    Una vez determinada la codificacin del problema, ser necesario propor-cionar una funcin de fitness que permita determinar la validez de cada uno de los individuos generados por el algoritmo gentico.

    Para ello deber tenerse en cuenta que una solucin ser vlida cuando ninguna reina amenaza al resto. Es decir, cuando ninguna comparta fila, co-lumna o diagonal. En la codificacin escogida, cada posicin i del vector se corresponde con la posicin de la reina dentro de la fila i del tablero, con lo cual no podr haber dos reinas compartiendo fila. Por otra parte, el vector de posiciones representa posiciones de columnas, con lo que si en dicho vector no existen valores repetidos, tampoco habra conflictos en cuanto a situar ms de una reina en la misma columna. Restara por determinar si dos reinas com-parten diagonal. Ello ocurrir cuando para algn par de posiciones del vector (X1, X2, , Xn) se cumple que tienen el mismo valor para (fila-columna) o bien para (fila+columna). Es decir, expresado de manera ms formal, existir un conflicto cuando se cumpla la siguiente condicin:

    Esta expresin puede simplificarse de la siguiente manera con el objetivo de determinar si existe o no colisin en diagonal para dos reinas situadas en las columnas i y j:

    Tal y como se ha indicado, la propia codificacin del problema elimina la existencia de problemas como que una reina sea atacada por otra de la misma fila.

    Utilizando convenientemente las operaciones de cruce y mutacin es posible tambin eliminar la probabilidad de que en una misma columna se ubique ms de una reina. Ambas operaciones deben tener en cuenta que el cro-mosoma es realmente una permutacin de los valores 1 a N, y que por lo tanto, tras la aplicacin de las operaciones genticas, el cromosoma debe mantener dicha propiedad. En cuanto a la mutacin, simplemente con aplicar la muta-cin por intercambio de 2 valores comentada anteriormente se mantendra el cromosoma correctamente formado. El operador de cruce es ligeramente

  • 42 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    distinto a los explicados anteriormente. La idea es construir una operacin de cruce que mantenga el orden relativo en el que aparecen los valores dentro del vector de columnas. Una aproximacin vlida sera la siguiente, basada en el cruce en un punto:

    1.Escoger un punto aleatorio dentro del primer padre2.Copiar la primera parte del cromosoma del progenitor al primer des-

    cendiente3.Copiar en el primer descendiente los valores no incluidos en esta pri-

    mera parte, manteniendo el orden en el que aparecen en el segundo progenitor

    4.Proceder de igual manera, pero intercambiado los papeles de los pro-genitores, para generar el segundo descendiente.

    An con la codificacin escogida y los operadores genticos definidos, lo que no se elimina es la posibilidad de conflictos con respecto a que una reina sea atacada por otra que est en su misma diagonal. La funcin de fitness de-ber ser capaz de determinar lo cerca que est de una solucin vlida cada una de las soluciones proporcionadas por el algoritmo gentico. Por lo tanto, una opcin ser considerar el valor de ajuste de un individuo como el nmero de conflictos que se presentan en la diagonal. As, cuantos ms conflictos haya, ms errnea ser la solucin, mientras que si el nmero de conflictos es 0, el individuo gentico representar una solucin vlida.

    1.8.2.4. Implementacin en Matlab

    Para la implementacin de la solucin propuesta mediante Matlab se em-plear la versin 2.1 de su toolbox de algoritmos genticos. En las siguientes secciones se recogen todos los pasos necesarios. As, se incluye la implemen-tacin de la funcin de creacin de la poblacin gentica (para forzar a que los individuos sean una permutacin de valores), la implementacin de los algoritmos de cruce y mutacin que tengan en cuenta esta peculiaridad de los individuos, y, por ltimo, la funcin de evaluacin, que calcular el nmero de colisiones que se producen sobre la diagonal para determinar la bondad de cada solucin.

    1.8.2.4.1. creacIn De la poblacIn gentIcaLa funcin de creacin inicializa la poblacin mediante individuos con-

    sistentes en una permutacin de valores, manteniendo los individuos propor-cionados por el usuario (mediante el parmetro options.InitialPopulation) en caso de que estos existan.

  • algorItmos gentIcos 43

    function Population = ... PermCreation(GenomeLength, FitnessFcn, options)

    totalPopulation = options.PopulationSize; initPopulation = size(options.InitialPopulation, 1);

    individualsToCreate=totalPopulation-initPopula-tion;

    Population=zeros(individualsToCreate, Genome-Length);

    if (initPopProvided > 0) Population(1:initPopulation,:)=... options.InitialPopulation;

    end

    for individual=1:individualsToCreate Population(initPopulation+individual,:)= ... randperm(GenomeLength);end

    1.8.2.4.2. operaDor De mutacIn

    El operador de mutacin simplemente realiza el intercambio entre dos genes escogidos al azar dentro del cromosoma de los individuos genticos seleccionados para la mutacin.

    El vector parents empleado en la implementacin del operador recoge los ndices de los individuos seleccionados para la mutacin. El propio funciona-miento determina que la aplicacin del operador de mutacin no se hace de manera individual, sino en conjunto a todos aquellos individuos seleccionados para la mutacin gentica.

    function mutationChildren = PermMutation(parents, ...options, GenomeLength, FitnessFcn, state, ...thisScore, thisPopulation)

    mutationChildren = zeros(length(parents),GenomeLength);

    for i=1:length(parents)

    child = thisPopulation(parents(i),:); position1 = ceil(GenomeLength*rand());

  • 44 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    equalPosition = true;while (equalPosition)

    position2=ceil(GenomeLength*rand());if (position1 ~= position2)

    equalPosition = false; end

    end

    aux = child(position1);child(position1) = child(position2);child(position2) = aux;

    mutationChildren(i,:) = child;

    end

    1.8.2.4.3. oPeRaDoR De CRuCe

    El operador de cruce recoge el comportamiento explicado con anterio-ridad (copia de un segmento inicial de los padres y copia de los valores no incluidos en dicho segmento conservando el orden del segundo progenitor).

    En este caso, el funcionamiento del propio toolbox de Matlab fuerza a que se genere un nico descendiente por cada dos progenitores. Asimismo, los cruces se realizan tambin en bloque a partir de los ndices de los progenitores (parents) previamente seleccionados.

    function xoverKids = PermCrossover(parents, options,...GenomeLength, FitnessFcn, unused, thisPopulation)

    % Se produce un descendiente por cada dos padresnKids = length(parents)/2;

    % Reserva de espacio para la descendenciaxoverKids = zeros(nKids,GenomeLength);

    pIndex = 1;

    for i=1:nKids

    % Obtencion de los padresparent1 = thisPopulation(parents(pIndex), :);pIndex = pIndex + 1;parent2 = thisPopulation(parents(pIndex), :);pIndex = pIndex + 1;

  • algorItmos gentIcos 45

    % Paso 1: obtener punto de cruce crossoverPoint = ceil((GenomeLength-1)*rand());

    % Paso 2: copiar primera parte del primer padre % a la descendencia xoverKids(i, 1:crossoverPoint) = ... parent1(1:crossoverPoint);

    % Paso 3: copiar en descendencia valores no % incluidos en el primer segmento, manteniendo % el orden del segundo progenitor. Estos nuevos % valores se insertan a partir de la posicin % de cruce.

    initialIndex = crossoverPoint + 1;

    for j=1:GenomeLength if (isempty(... find(parent2(j)==... xoverKids(i,1:crossoverPoint)))) % gen del padre no pasado previamente a % la descendencia xoverKids(i, initialIndex) = parent2(j); initialIndex = initialIndex + 1; end end endend

    1.8.2.4.4. FunCin De evaluaCin

    Tal y como se coment anteriormente, la bondad de un individuo se de-termina en base al nmero de colisiones, o posibles ataques entre reinas, que se producen en la diagonal del tablero. Para ello es necesario comprobar cada reina con cada una de las restantes para verificar si pueden atacarse entre s.

    function [ FitnessValue ] = fitness(individuo)

    colisiones = 0;

    for i=1:(length(individuo)-1)

    for j=(i+1):length(individuo) if (abs(i-j)==abs(individuo(i)-individuo(j))) colisiones = colisiones + 1; end endend

    FitnessValue = colisiones;

  • 46 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    1.8.2.4.5. ConFiGuRaCin Del alGoRitmo GentiCo

    Una vez definidos los diferentes operadores, slo resta configurar el algo-ritmo gentico para que haga uso de ellos. Adems, es necesario configurar las dimensiones del tablero (numeroReinas), el tamao de la poblacin gentica (PopulationSize), el nmero mximo de generaciones (Generations), etc.

    % ****************************************************% N-Reinas : Resolucin mediante Algoritmos Genticos% ****************************************************

    % Configuracin Algoritmo Gentico% *****************************************************

    options = gaoptimset;

    % Poblacin Genticaoptions = gaoptimset(options,'PopulationSize' , 25); options = gaoptimset(options,'CreationFcn', ... @PermCreation);

    % Criterios de paradaoptions = gaoptimset(options, 'Generations', 100); options = gaoptimset(options, 'FitnessLimit', 0);options = gaoptimset(options,'TolFun', 1e-12);options = gaoptimset(options,'StallTimeLimit', 100);options = gaoptimset(options,'StallGenLimit', 100);

    % Operadores Genticos% *****************************************************

    % Elitismooptions = gaoptimset(options, 'EliteCount', 1);

    % Ajuste del operador de seleccinoptions = gaoptimset(options, 'SelectionFcn',... @selectionroulette);

    % Ajuste del algoritmo de cruce: options = gaoptimset(options, 'CrossoverFcn', ... @PermCrossover);

    options = gaoptimset(options, 'CrossoverFraction', 0.8);

    % Ajuste del algoritmo de mutacin:options = gaoptimset(options, 'MutationFcn', ... @PermMutation);

  • algorItmos gentIcos 47

    % Configuracin de Salida% *****************************************************

    options = gaoptimset(options, 'Display', 'diagnose'); options = gaoptimset(options, 'PlotInterval', 1);options = gaoptimset(options,'PlotFcns', ...

    [@gaplotbestindiv, @gaplotbestf]);

    % Ejecucin algoritmo

    [x, fval, reason, output, population, scores]= ... ga(@fitness,numeroReinas,options);

    disp('');disp('Mejor individuo: ');disp(x);disp('Nmero de colisiones: ');disp(fval);

    1.8.8.4.6. Ejemplo de Ejecucin

    Una vez mostrado el cdigo necesario para la resolucin del problema de las N-Reinas, se muestra una ejecucin de ejemplo. sta corresponde a la resolucin del problema para un tablero de 8x8 casillas.

    Empleando un tamao de poblacin tpico (del orden de 100 individuos) la resolucin es prcticamente instantnea, del orden de 3 o 4 iteraciones. Sin embargo, para que pueda mostrarse la evolucin del error de la Figura 1.13 se ha reducido este nmero hasta los 25 individuos. En esta figura, puede obser-varse tanto la evolucin del error del mejor individuo y la media de la pobla-cin, como la mejor solucin finalmente encontrada (5, 8, 4, 1, 7, 2, 6, 3).

    Figura 1.13: Problema de las 8-Reinas: evolucin del fitness

  • 48 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    ReferenciasBck, T. (1996). Evolutionary Algorithms in Theory and Practice: Evolution

    Strategies, Evolutionary Programming, Genetic Algorithms: Oxford University Press, USA.

    Beasley, D., Bull, D. R., Martin, R. R. (1993). An overview of genetic algorithms: Part 1, fundamentals. University Computing, 15(2):58-69.

    Blickle, T., Thiele, L. (1995). A comparison of selection schemes used in genetic algorithms. Technical Report 11, Computer Engineering and Comunnication Network Lab (TIK), Gloriastrasse 35, 8092 Zurich, Switzerland.

    Darwin, C. (1859). On the Origin of Species by Means of Natural Selection. John Murray, London.

    Darwin, C. (2007). Descent of Man: Nuvision Publications.De Jong, K. A. (1975). An analysis of the behavior of a class of genetic

    adaptive systems. PhD thesis, University of Michigan.De Jong, K. A., & Spears, W. M. (1992). A formal analysis of the role of

    multi-point crossover in genetic algorithms. Annals of Mathematics and Artificial Intelligence, 5(1), 1-26.

    Fogel, D. B. (2000). What is evolutionary computation? Spectrum, IEEE, 37(2), 26, 28-32.

    Fogel, D. B. (2006), Evolutionary Computation: Toward a New Philosophy of Machine Intelligence, IEEE Press, Piscataway, NJ. Third Edition

    Fogel, L. J., Owens, A. J., and Walsh, M. J. (1966). Artificial Intelligence through Simulated Evolution. John Wiley & Sons, New York.

    Goldberg, D. E. (1989). Genetic Algorithms in Search, Optimization and Machine Learning. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA.

    Goldberg, D. E. (2002), The Design of Innovation: Lessons from and for Competent Genetic Algorithms, Addison-Wesley, Reading, MA.

    Grefenstette, J. J. (1992). Genetic algorithms for changing environments. Paper presented at the Parallel Problem Solving from Nature, Bruselas, Blgica.

    Holland, J. H. (1975). Adaptation in Natural and Artificial Systems. University of Michigan Press, Ann Arbor. Republished by the MIT press, 1992.

    Koza, J. R. (1992). Genetic Programming: On the Programming of Computers by Means of Natural Selection (Complex Adaptive Systems). The MIT Press.

  • algorItmos gentIcos 49

    Mathworks. (2005). Genetic Algorithm and Direct Search Toolbox Users Guide version 2. Disponible online en: http://www.mathworks.com/access/helpdesk/help/pdf_doc/gads/gads_tb.pdf

    Michalewicz, Z. (1999), Genetic Algorithms + Data Structures = Evolution Programs, Springer-Verlag.

    Michalewicz, Z., & Fogel, D. B. (2000). How to Solve It: Modern Heuristics: Springer Verlag.

    Rechenberg, I. (1973). Evolutionsstrategie: Optimierung technischer Systeme nach Prinzipien der biologischen Evolution. Frommann-Holzboog, Stuttgart.

    Tomassini, M. (1995). A survey of genetic algorithms. Annual Reviews of Computational Physics, III:87-118.

    Whitley, D. (1994). A genetic algorithm tutorial. Statistics and Computing 4, 6585.

  • This page intentionally left blank

  • 51

    Captulo 2 Programacin Gentica

    2.1. IntroduccinLa Programacin Gentica surge como una evolucin de los algoritmos

    genticos tradicionales, manteniendo el mismo principio de seleccin natural. Lo que ahora se pretende es resolver los problemas mediante la induccin de programas y algoritmos que los resuelvan. Es en esta posibilidad donde reside toda la potencialidad de la Programacin Gentica, puesto que permite desa-rrollar de forma automatizada programas, entendindose stos de una forma amplia, es decir, como algoritmos en los que, a partir de una serie de entradas, se genera una serie de salidas. De esta manera, por ejemplo, una ecuacin ma-temtica podra ser inducida mediante el uso de Programacin Gentica.

    La base biolgica de la Programacin Gentica es exactamente la misma que la de los Algoritmos Genticos. Por esta razn, el funcionamiento es simi-lar. La diferencia entre una tcnica y otra consiste en la forma de codificacin de problemas, lo que permite su utilizacin en una serie de entornos donde anteriormente los Algoritmos Genticos no podan ser aplicados.

    2.2. OrgenesA pesar de que oficialmente se data la creacin de la Programacin Ge-

    ntica en 1992 tras la aparicin del libro titulado Genetic Programming por John Koza (Koza, 1992), donde se acu el trmino y se sentaron las bases formales de esta tcnica, existen trabajos previos que, sin usar explcitamente el nombre de Programacin Gentica, pueden ser considerados como precur-sores de la materia.

  • 52 IntroduccIn a los algorItmos gentIcos y la ProgramacIn gentIca

    Ya en el primer congreso sobre Algoritmos Genticos, celebrado en la Universidad de Carnegie Mellon en 1985, se present un artculo titulado "A Representation for the Adaptive Generation of Simple Sequential Programs" (Cramer, 1985), en el que se plantea un sistema adaptativo para la generacin de pequeos programas secuenciales. Con este objetivo, en dicho trabajo se hace uso de dos lenguajes: JB, que representa los programas en forma de ca-denas de nmeros, y TB. Este ltimo es una versin evolucionada del anterior, pero con estructura de rbol para representar programas, que es la estructura que utiliza la Programacin Gentica como forma de codificacin. El obje-tivo principal del artculo es conseguir una forma de representar programas que, por un lado, permita la aplicacin de los operadores genticos clsicos (mutacin, cruce, etc.) con la restriccin de que estos programas generados automticamente estn "bien formados". En dicho artculo no es importante que todos los programas que se puedan obtener sean tiles, puesto que de ello se encargaran los criterios de seleccin; slo importa que estn dentro del es-pacio de programas sintcticamente correctos.

    Este trabajo tiene una gran importancia puesto que se constata la impor-tancia que tiene la representacin de los programas para su manipulacin. Los problemas que plantea el lenguaje JB pueden ser eliminados si se usa TB y su estructuracin en forma de rboles, que es la forma de codificacin de la Programacin Gentica.

    Otro trabajo, titulado "Using the Genetic Algorithm to Generate Lisp Source Code to solve the Prisoners Dilemma" (Fujiki & Dickinson, 1987) y presentado en el Segundo congreso sobre Algoritmos Genticos, celebrado en el Massachussetts Institute of Technology en 1987, trata sobre la resolucin de un problema clsico: el dilema del prisionero. En este problema, dos prisione-ros son interrogados por separado sin posibilidad de comunicacin entre ellos. Cada uno debe decidir si delatar o no al otro y, en funcin de la declaracin de cada uno, ambos obtienen ms o menos puntos. Esta situacin se repite un nmero determinado de interrogatorios, en los cuales cada prisionero nica-mente sabe cul ha sido el resultado de las anteriores (es decir, su decisin y la del otro prisionero y, por tanto, el nmero de puntos de cada uno). Al finalizar, el que obtenga ms puntos gana. El objetivo es desarrollar una estrategia que, al ser aplicada de