entorno de trabajo computacional para el desarrollo de algoritmos genéticos

129
Entorno de trabajo computacional para el desarrollo de algoritmos genéticos S. González Uzcanga * , E. Pérez Pérez ** Escuela de Ingeniería Industrial, Facultad de Ingeniería, Universidad de Carabobo. Bárbula, Venezuela junio de 2013 Resumen Este trabajo consiste en el diseño e implementación de un entorno de tra- bajo computacional (mejor conocido por su nombre en ingles, framework de software) para desarrollar algoritmos genéticos escrito en el lenguaje de programación Java. La arquitectura del framework consiste en una librería de 23 clases dividida en dos paquetes. La implementación del entorno se logra al heredar de la clase Individuo y definir la estructura del cromosoma, la función del aptitud, el cruce y la mutación. Se pueden escoger entre varios tipos de individuos pre configurados y varios tipos de selección y otras reglas como elitismo o selección post-cruce, aunque el usuario puede diseñar sus propios métodos de selección. Con la finalidad de describir cómo implementar la librería, se explica paso a paso el diseño (código) de una aplicación, además de cómo modificar sus distintos pará- metros. El proyecto de software derivado de este Trabajo se encuentra en: http://saulguillermo.github.io/agapi Palabras claves: algoritmos genéticos, entorno java algoritmos genéticos, interfaz de programación algoritmos genéticos. * Autor < [email protected]> ** Tutor Académico

Upload: alberto-berroteran

Post on 18-Dec-2015

17 views

Category:

Documents


3 download

DESCRIPTION

Este trabajo consiste en el diseño e implementación de un entorno de trabajo computacional (mejor conocido por su nombre en ingles, frameworkde software) para desarrollar algoritmos genéticos escrito en el lenguajede programación Java. La arquitectura del framework consiste en unalibrería de 23 clases dividida en dos paquetes. La implementación delentorno se logra al heredar de la clase Individuo y definir la estructuradel cromosoma, la función del aptitud, el cruce y la mutación. Se puedenescoger entre varios tipos de individuos pre configurados y varios tipos deselección y otras reglas como elitismo o selección post-cruce, aunque elusuario puede diseñar sus propios métodos de selección.

TRANSCRIPT

  • Entorno de trabajo computacionalpara el desarrollo de algoritmos

    genticosS. Gonzlez Uzcanga*, E. Prez Prez**

    Escuela de Ingeniera Industrial, Facultad de Ingeniera,Universidad de Carabobo. Brbula, Venezuela

    junio de 2013

    Resumen

    Este trabajo consiste en el diseo e implementacin de un entorno de tra-bajo computacional (mejor conocido por su nombre en ingles, frameworkde software) para desarrollar algoritmos genticos escrito en el lenguajede programacin Java. La arquitectura del framework consiste en unalibrera de 23 clases dividida en dos paquetes. La implementacin delentorno se logra al heredar de la clase Individuo y definir la estructuradel cromosoma, la funcin del aptitud, el cruce y la mutacin. Se puedenescoger entre varios tipos de individuos pre configurados y varios tipos deseleccin y otras reglas como elitismo o seleccin post-cruce, aunque elusuario puede disear sus propios mtodos de seleccin. Con la finalidadde describir cmo implementar la librera, se explica paso a paso el diseo(cdigo) de una aplicacin, adems de cmo modificar sus distintos par-metros. El proyecto de software derivado de este Trabajo se encuentraen:

    http://saulguillermo.github.io/agapi

    Palabras claves: algoritmos genticos, entorno java algoritmos genticos,interfaz de programacin algoritmos genticos.*Autor < [email protected]>

    **Tutor Acadmico

  • ndice general

    Resumen 1

    Introduccin 5

    1. El Problema 71.1. Planteamiento del Problema . . . . . . . . . . . . . . . . 7

    1.1.1. Formulacin del Problema . . . . . . . . . . . . . 101.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.2.1. Objetivo General . . . . . . . . . . . . . . . . . . 101.2.2. Objetivos Especficos . . . . . . . . . . . . . . . . 11

    1.3. Justificacin . . . . . . . . . . . . . . . . . . . . . . . . . 111.4. Alcance y Limitaciones . . . . . . . . . . . . . . . . . . . 12

    1.4.1. Alcance . . . . . . . . . . . . . . . . . . . . . . . 121.4.2. Limitaciones . . . . . . . . . . . . . . . . . . . . . 13

    2. Marco de Referencia 142.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . 142.2. Marco Terico . . . . . . . . . . . . . . . . . . . . . . . . 15

    2.2.1. Algoritmos Genticos . . . . . . . . . . . . . . . . 152.2.2. Programacin Orientada a Objetos . . . . . . . . 202.2.3. Java . . . . . . . . . . . . . . . . . . . . . . . . . 222.2.4. Entorno de Trabajo Computacional . . . . . . . . 26

    3. Marco Metodolgico 273.1. Tipo de Investigacin . . . . . . . . . . . . . . . . . . . . 283.2. Mtodo de Investigacin . . . . . . . . . . . . . . . . . . 29

    2

  • 3.3. Fuentes de Investigacin . . . . . . . . . . . . . . . . . . 293.4. Tratamiento de la Informacin . . . . . . . . . . . . . . . 30

    4. Estructura y Funcionamiento 314.1. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    4.1.1. Paquete agapi . . . . . . . . . . . . . . . . . . . . 334.1.2. Paquete impl . . . . . . . . . . . . . . . . . . . . 36

    4.2. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . 39

    5. Documentacin 435.1. Paquete agapi . . . . . . . . . . . . . . . . . . . . . . . . 44

    5.1.1. Clase Individuo . . . . . . . . . . . . . . . . . . . 445.1.2. Clase Poblacion . . . . . . . . . . . . . . . . . . . 485.1.3. Clase Generacion . . . . . . . . . . . . . . . . . . 555.1.4. Clase Ejecucion . . . . . . . . . . . . . . . . . . . 625.1.5. Clase Proceso . . . . . . . . . . . . . . . . . . . . 655.1.6. Clase Configuracion . . . . . . . . . . . . . . . . . 695.1.7. Clase Generador . . . . . . . . . . . . . . . . . . 775.1.8. Interfaz Selector . . . . . . . . . . . . . . . . . . . 785.1.9. Interfaz SelectorPostCruce . . . . . . . . . . . . . 80

    5.2. Paquete impl . . . . . . . . . . . . . . . . . . . . . . . . 815.2.1. Clase IndividuoBinario . . . . . . . . . . . . . . . 815.2.2. Clase IndividuoCombinatorio . . . . . . . . . . . 835.2.3. Clase CrucePMX . . . . . . . . . . . . . . . . . . 865.2.4. Clase SelectorTorneo . . . . . . . . . . . . . . . . 875.2.5. Clase SelectorTodos . . . . . . . . . . . . . . . . . 895.2.6. Clase SelectorEstocastico . . . . . . . . . . . . . . 915.2.7. Clase SelectorRuleta . . . . . . . . . . . . . . . . 945.2.8. Clase SelectorSUS . . . . . . . . . . . . . . . . . . 965.2.9. Interfaz Funcion . . . . . . . . . . . . . . . . . . . 975.2.10. Clase FuncionClasico . . . . . . . . . . . . . . . . 995.2.11. Clase FuncionRanking . . . . . . . . . . . . . . . 1005.2.12. Clase FuncionTanese . . . . . . . . . . . . . . . . 1015.2.13. Clase SelectorPostCruceSoloHijos . . . . . . . . . 102

    3

  • 5.2.14. SelectorPostCruceTaigeto . . . . . . . . . . . . . 103

    6. Implementacin 1056.1. Problema . . . . . . . . . . . . . . . . . . . . . . . . . . 1056.2. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . 107

    6.2.1. Paso 1 - Instalacin de la librera . . . . . . . . . 1076.2.2. Paso 2 - Creacin de clase IndividuoEjemplo . . . 1086.2.3. Paso 3 - Ejecucin del algoritmo . . . . . . . . . . 1106.2.4. Paso 4 - Manipulacin de los parmetros . . . . . 111

    6.3. Un mayor nivel de complejidad . . . . . . . . . . . . . . 114

    Conclusiones 115

    Recomendaciones 117

    A. Autorizacin del uso de licencia 118

    B. Contenido del archivo saulguillermo-agapi-xxxxxx.zip 120

    C. Salida de la aplicacin implementada 121

    Referencias 126

    4

  • Introduccin

    Los algoritmos genticos son tcnicas de bsqueda y optimizacin basadasen el principio de la gentica y la seleccin natural inventados en losaos 70 por John Holland. Actualmente y, gracias a los avances de lacomputacin, los algoritmos genticos se han vuelto herramientas tilespara la resolucin de un amplio espectro de problemas que van desde laBiologa hasta la Ingeniera.

    El desarrollo de aplicaciones computacionales que utilizan algoritmos ge-nticos se realiza en funcin de las caractersticas especficas del problemaa resolver, sin embargo un marco de trabajo general de programacin,en muchos casos, brindara muchas ventajas principalmente desde elpunto de vista del desarrollo del cdigo en lenguaje de programacin.Este Trabajo propone un entorno de trabajo computacional escrito enlenguaje Java capaz de cumplir con ese deseo de estandarizacin delproceso de implementacin de aplicaciones basadas en algoritmos genti-cos.

    En el captulo 1 se plantea el problema descrito en el prrafo anterior y sebusca responder la pregunta Es posible elaborar un entorno de trabajocomputacional que permita el desarrollo de Algoritmos Genticos, escritoen un lenguaje de alto nivel y con una estructura que permita su usopor parte de estudiantes de pre-grado de Ingeniera y carreras afines?Esta interrogante conduce al plantear el objetivo general de este trabajo:la elaboracin de un entorno de trabajo computacional reutilizable quepermita el desarrollo de algoritmos genticos escrito en un lenguaje dealto nivel.

    5

  • El segundo captulo describe proyectos que se han desarrollado en elrea de libreras para algoritmos genticos como JGAP y JAGA. Se hacereferencia trabajos conocidos a partir de los cuales se ha creado un marcoterico que explica como funcionan los algoritmos genticos y sus caracte-rsticas. Adems se describe el funcionamiento del lenguaje de programa-cin Java y la estructura de un framework de software.

    El siguiente captulo describe la metodologa utilizada, planteada comoun proyecto de software con caractersticas como documentacin en textoy formato html y suministro de cdigo fuente.

    La estructura y funcionamiento del framework se describe en el capitulo4. Dicha estructura esta basada en 23 clases de Java, distribuidas en dospaquetes: un paquete con el ncleo donde tiene lugar la ejecucin delalgoritmo gentico, y otro con clases opcionales disponibles con el objetode facilitar el desarrollo de aplicaciones.

    La documentacin de las clases del framework es el tema del quintocapitulo. Esta documentacin es una adaptacin del formato electrnicohtml conocido como javadocs. Aqu se describe cada mtodo de cadaclase a modo referencia rpida para cuando se este desarrollando un nuevaaplicacin basada en el framework.

    Por ltimo, en el capitulo 6, se plantea un problema matemtico simpleque se busca resolver con una aplicacin basada en el framework. Aquse explica paso a paso cmo implementar el framework llamado agapi(API para algoritmos genticos), desde su descarga web hasta la corridaexitosa del programa.

    6

  • Captulo 1.

    El Problema

    1.1. Planteamiento del Problema

    El advenimiento de las computadoras electrnicas ha sido uno de losinventos ms revolucionarios en la historia de la ciencia y la tecnologa.Esta revolucin ha incrementado profundamente nuestra habilidad deprediccin y control de la naturaleza en formas que eran impensableshace menos de cien aos. Para muchos (Mitchell, 1998) la cspide de loslogros de esta revolucin es el desarrollo de inteligencia en la forma deprogramas de computadoras, lo que ms tarde se denomin InteligenciaArtificial (Russell y Norvig, 2009).

    Dentro de este nuevo campo de estudios se encuentra un rea deno-minada Computacin Evolutiva que se ha ido desarrollando desde losaos cincuenta por cientficos que, de forma independiente, han estu-diado sistemas evolutivos (copiados de la naturaleza) con la idea quepueden ser utilizados como herramientas de optimizacin en problemasde ingeniera.

    La optimizacin, entendida como el proceso de hacer algo cada vezmejor (Haupt y Haupt, 2004) tenia como finalidad buscar de formaiterativa alguna solucin ptima sin importar el desempeo del mtodoutilizado (algoritmo), ello debido a sus orgenes en el Clculo (Goldberg,

    7

  • 1. El Problema

    1989). Actualmente el enfoque presta igual atencin al desempeo ya queexisten problemas donde es muy difcil, sino imposible hallar una solucinptima.

    En los aos sesenta John Holland y sus estudiantes desarrollaron unatcnica conocida como Algoritmos Genticos que, junto a las EstrategiasEvolutivas y la Programacin Evolutiva, se convirtieron en los pilares dela Computacin Evolutiva y son actualmente herramientas claves parala resolucin de un amplio espectro de problemas en campos que vandesde la Biologa hasta la Ingeniera pasando por infinidad de reas tantosociales como cientficas.

    Los Algoritmos Genticos son tcnicas de bsqueda y optimizacin basa-das en el principio de la gentica y la seleccin natural. Un AlgoritmoGentico permite a una poblacin compuesta por muchos individuosevolucionar bajo unas reglas especificas de seleccin a un estado quemaximiza su aptitud. Los individuos de dicha poblacin representan dis-tintas soluciones del problema y son evaluadas por medio de la funcinde aptitud que es una adaptacin de la funcin objetivo. Luego bajo uncriterio especifico de seleccin (Ej. Los individuos con mayor aptitud)son seleccionados para cruzarse y mutarse, esto con el objeto de obte-ner nuevas soluciones que puedan mejorar en promedio la aptitud de lapoblacin anterior.

    Las caractersticas de los problemas aptos para ser resueltos por mediode Algoritmos Genticos incluyen: Problemas con espacios de solucionesmuy grandes, no unimodales y poco comprendidos. Problemas con fun-ciones objetivos con mucho ruido, donde no se requiera estrictamentede una solucin ptima global, donde una bsqueda rpida sea suficien-te.

    Haupt y Haupt (2004) presentan algunas de las ventajas que ofrece un Al-goritmo Gentico sobre otros mtodos exactos o heursticos:

    Optimiza tanto variables discretas como continuas.

    8

  • Captulo 1

    Realiza una bsqueda de gran amplitud y de forma simultnea delespacio de soluciones.

    Optimiza variables con funciones objetivos muy complejas (puedeliberarse de ptimos locales).

    En cada iteracin provee una lista de soluciones en vez de una a lavez.

    Puede codificar las variables de modo que la optimizacin no serelacione con el tipo de variable.

    Funciona con datos generados numricamente, con datos experimen-tales y con funciones analticas.

    Se adapta perfectamente a la Computacin Paralela.

    Desarrollar un Algoritmo Gentico para resolver un problema especficoimplica escribir algn programa de computadora en algn lenguaje deprogramacin (Ej. C, C++, Java, Python) o seudocdigo(Ej. Matlab) yluego ejecutarlo para obtener los resultados. Esto a su vez supone queel programa debe ser especifico para el tipo de problema que se estaabordando y no puede ser aplicado a otro problema.

    El mundo de la programacin de computadoras ha lidiado con esteproblema de particularizacin en aplicaciones (Riehle, 2000) con unasolucin muy ventajosa: un entorno de trabajo computacional, (softwareframework en ingles).

    Un entorno de trabajo computacional es una estructura de software dealto grado de abstraccin que provee funcionalidad genrica para que seamodificada por el usuario con el propsito de desarrollar una aplicacinde software concreta.

    En la actualidad existen pocos frameworks para desarrollar AlgoritmosGenticos, algunos escasamente documentados y otros muy documentadospero con un nivel de complejidad ms apto para estudios de postgrado.

    9

  • 1. El Problema

    Otros estn enfocados a toda clase de problemas incluyendo la Progra-macin Gentica, que representa una sub-rea muy especifica dentro delos Algoritmos Genticos y es poco prctica para el resto de especiali-dades de la Ingeniera. La mayora esta documentado en idioma ingles,aunque esto no debera representar un inconveniente propiamente seriadeseable la existencia de un entorno de trabajo computacional escrito enespaol.

    En la Universidad de Carabobo existen pocos trabajos en el rea de losAlgoritmos Genticos y todos ellos estn desarrollados de forma ad-hoc,programados de principio a fin para resolver un problema especifico loque amerita un tiempo considerable en el diseo del algoritmo cuandoese tiempo debera ser utilizado en la obtencin y anlisis de resultadosprovenientes de dicho algoritmo.

    1.1.1. Formulacin del Problema

    Este planteamiento lleva a la pregunta Es posible elaborar un entorno detrabajo computacional que permita el desarrollo de Algoritmos Genticos,escrito en un lenguaje de alto nivel y con una estructura que permitasu uso por parte de estudiantes de pregrado de Ingeniera y carrerasafines?

    1.2. Objetivos

    1.2.1. Objetivo General

    Elaborar un entorno de trabajo computacional que permita el desarrollode algoritmos genticos, escrito en un lenguaje de alto nivel y con unaestructura que permita su uso por parte de estudiantes de pregrado deIngeniera y carreras afines.

    10

  • Captulo 1

    1.2.2. Objetivos Especficos

    Determinar qu conceptos relacionados con los Algoritmos Genticosdeben ser incluidos dentro del entorno de trabajo computacional.

    Evaluar las caractersticas de la plataforma Java en funcin de lasventajas que ofrece y el nivel de complejidad que puede planteara estudiantes de pre grado de ingeniera, todo ello con la finalidadde ser el lenguaje de programacin utilizado para la escritura de lalibrera de clases.

    Disear dos conjuntos de elementos de programacin: primero, dise-ar las clases, interfaces, mtodos y constantes que integran el ncleodel entorno, y luego, disear sub implementaciones que agilicen eltiempo de desarrollo de un algoritmo gentico. Ambos conjuntosdeben estar claramente diferenciados, es decir, separados en paquetes.Cada uno de estos elementos debe estar documentado en formatoelectrnico as como en texto.

    Desarrollar un aplicacin de ingeniera basada en una implementacinque sirva de ejemplo para demostrar el desempeo del entorno detrabajo computacional.

    1.3. Justificacin

    Un entorno de trabajo computacional ofrece la ventaja de programar apartir de una serie de clases pre-escritas lo que resulta en una gananciade tiempo de desarrollo. Para el caso de Algoritmos Genticos impli-ca dedicar ms tiempo al anlisis de resultados que a los detalles delalgoritmo en si. Adems crea un marco estndar a partir del cual sepueden comparar distintas implementaciones de distintos problemas deAlgoritmos Genticos.

    11

  • 1. El Problema

    El valor practico del presente trabajo es calculable en la medida deluso que tenga por parte de la comunidad de usuarios a los que estaorientado. La carencia de un entorno de trabajo computacional paradesarrollar Algoritmos Genticos orientado a estudiantes de pregradoescrito en espaol es una buena razn para llevar a cabo este Trabajosin embargo, lo ms importante es la aplicabilidad del entorno comoherramienta til en el desarrollo de Algoritmos Genticos para resolverproblemas de ingeniera.

    El valor terico se distingue al ofrecer a la comunidad de estudiantesde pregrado de ingeniera y carreras afines un punto de partida en el reade Algoritmos Genticos dado que no se hace nfasis a ningn problemaespecifico sino que los conocimientos se resumen en un compendio bsicosobre el tema. Puede ser una buena gua de referencia inicial cuandose desee abordar una investigacin ms especifica sobre un problemaconcreto de ingeniera.

    1.4. Alcance y Limitaciones

    1.4.1. Alcance

    El presente trabajo establece utilizar un compendio de conocimientos dela Computacin Evolutiva, especficamente del rea de los AlgoritmosGenticos, y adaptarlos a un entorno de trabajo computacional escritoen lenguaje de programacin Java en su 7ma versin.

    Este compendio considera incluir la capacidad de disear un individuode forma especfica, definiendo la estructura de su cromosoma, cruce,mutacin y generacin de poblaciones aleatorias. Adems permite disearuna funcin objetivo positiva especifica para el individuo en cuestin, deforma que pueda ser de maximizar o minimizar.

    12

  • Captulo 1

    Se considera abarcar varios tipos de criterios de seleccin para determinarqu individuos tendrn posibilidad de cruzarse, y varios tipos de selec-cin post cruce para determinar qu individuos pasarn a la siguientegeneracin. Considera las probabilidades de cruce y mutacin, as comola opcin de una regla de elitismo que pasa a al individuo ms apto a lasiguiente generacin.

    Se considera documentar, tanto de forma escrita (este Trabajo) como enformato html (javadocs) todas las clases, interfaces, mtodos y constan-tes.

    Se establece realizar la construccin del framework utilizando el Entornode Desarrollo Integrado (IDE por sus siglas en ingles) Eclipse versin3.8 y el lenguaje Java en su versin 6 (compilacin 1.6.0 6b27). Dadala capacidad de la multiplataforma Java, el entorno de trabajo compu-tacional puede ser utilizado en sistemas operativos Windows, Linux yMac.

    1.4.2. Limitaciones

    No se consideran todos los criterios de seleccin y seleccin post-cruceconocidos en la literatura de Algoritmos Genticos.

    No se considera el rea especfica de Algoritmos Genticos conocidacomo Programacin Gentica.

    No se considerada el uso de cluster de computacin ni supercompu-tadoras, esta diseado para computadoras personales convencionalesque soporten el lenguaje Java.

    Aunque no se puede determinar qu tipo de computadoras personalespueden correr con xito un Algoritmo Gentico implementado, seconsidera, al menos, el uso de computadoras personales con procesa-dores de doble ncleo con ms de 2 gb de memoria ram, fabricadasaproximadamente desde el ao 2008 en adelante.

    13

  • Captulo 2.

    Marco de Referencia

    2.1. Antecedentes

    Meffert Klaus (2012) desde el ao 2002 ha mantenido un entorno detrabajo computacional para Algoritmos Genticos llamado JGAP - JavaGenetic Algorithms and Genetic Programming Package (Paquete de Algo-ritmos Genticos y Programacin Gentica en Java) escrito en lenguajeJava bajo las licencias GNU General Public License (GPL) versin 2.1 yMozilla Public License (MPL) ver 2.0 Su arquitectura esta conformadapor ms de 500 clases, la mayora muy bien documentada en idiomaingles. El entorno incluye una amplia y profunda base de conocimiento enAlgoritmos Genticos incluyendo Programacin Gentica. Su arquitecturamodular es compleja y extensa, sin embargo es flexible y adaptable. Apesar de estar bien documentada la curva de aprendizaje puede crecer conlentitud ya que considera muchos elementos para la configuracin de unAlgoritmo Gentico. La arquitectura del entorno de trabajo computacio-nal del presente Trabajo se sustento en una simplificacin de la estructurade JGAP.

    Melanie Mitchell (1998) del Massachusetts Institute of Technology esautora del libro An Introduction to Genetic Algorithms (Una Introduccina los Algoritmos Genticos) que sirve como buen soporte terico ya quese trata de un resumen de muchos trabajos importantes realizados en

    14

  • Captulo 2

    materia de Algoritmos Genticos, tambin explica de forma clara muchosconceptos bsicos relacionados al tema.

    David Goldberg (1989) alumno del John Holland, el padre de los Al-goritmos Genticos. Su libro Genetic Algorithms in Search, Optimization,and Machine Learning (Algoritmos Genticos en Bsqueda, Optimiza-cin y Aprendizaje de Mquinas) es la referencia obligada en materiade Algoritmos Genticos, en l se encuentran los principios bsicos deseleccin, cruce y mutacin as como algunos ejemplos concretos escritosen lenguaje de programacin Pascal.

    Greg Paperin (2004) de la University College London desarroll unentorno de trabajo computacional escrito en Java llamado JAGA - JavaAPI for Genetic Algorithms (API de Java para Algoritmos Genticos).Esta amparado por la licencia GNU General Public License (GPL) versin2.1. Est conformado por unas 100 clases por lo que es significativamentemenos extenso que JGAP, adems el mantenimiento del proyecto desde2004 ha sido muy escaso y su documentacin esta incompleta. A pesar de loanterior, su estructura tambin se utiliz como referencia para el diseo deentorno de trabajo computacional del presente Trabajo.

    2.2. Marco Terico

    2.2.1. Algoritmos Genticos

    Los Algoritmos Genticos son tcnicas de bsqueda y optimizacin basa-das en el principio de la gentica y la seleccin natural (Goldberg, 1989;Haupt y Haupt, 2004). Son algoritmos estocsticos cuyo mtodo debsqueda modela algunos fenmenos naturales: la herencia gentica y labatalla Darwiniana del ms apto (Michalewicz, 1992).

    La invencin (Mitchell, 1998) de los Algoritmos Genticos se debe aJohn Holland junto con sus alumnos y colegas de la Universidad de Michi-

    15

  • 2. Marco de Referencia

    gan durante los aos 60 y 70. En contraste con las Estrategias Evolutivas yla Programacin Evolutiva, el objetivo original de Holland no era disearalgoritmos para resolver problemas especficos, sino estudiar formalmenteel fenmeno de la adaptacin que ocurre en la naturaleza y desarrollarformas por medio de las cuales mecanismos de adaptacin natural pudie-ran ser importados a sistemas de computadoras. En el libro de Hollandde 1975, Adaptation in Natural and Artificial Systems (Adaptacin enSistemas Naturales y Artificiales) se presenta el Algoritmo Gentico comouna forma de abstraccin de la evolucin biolgica y ofrece un marcoterico para la adaptacin bajo el Algoritmo Gentico.

    El mtodo (Holland, 1975) utilizado por Holland consiste en moverse(evolucionar) desde un poblacin de individuos a una nueva poblacinusando algn tipo de seleccin natural junto con operadores inspiradosen la Gentica como cruce y mutacin. Cada individuo esta representadopor un cromosoma, por ejemplo una cadenas de unos y ceros que consistede genes (bits). El valor de un gen es conocido como alelo (un 0 o un1). La seleccin natural ocurre en la forma de un operador de seleccin queescoge individuos de la poblacin para ser cruzados. Esta seleccin utilizaalgn criterio basado en la idea Darwiniana que los individuos ms aptosproducirn ms descendientes que los menos aptos. El cruce intercambiasub partes de dos cromosomas, imitando primitivamente la recombinacinbiolgica que ocurre entre dos cromosomas de distintos organismos. Lamutacin aleatoriamente cambia el valor de un alelo ubicado en algunaposicin.

    Goldberg (1989) utiliza una terminologa de Algoritmos Genticosque hace distincin entre la naturaleza y los sistemas artificiales (Ej.cromosoma vs cadena) sin embargo en trabajos posteriores (Coello, 2010;Haupt y Haupt, 2004; Maneiro, 2001; Michalewicz, 1992; Mitchell,1998) y el Presente se maneja el mismo lenguaje de la biologa pero consignificados acordes a la matemtica y la computacin.

    Un individuo es un simple miembro de una poblacin que consiste de uncromosoma y el valor de su respectiva aptitud. Un individuo representa

    16

  • Captulo 2

    una solucin a un problema y la forma de medir que tan apta, o seaque tan buena, es dicha solucin se consigue con el clculo de su aptitud.Un conjunto de individuos que interactan entre si se conoce como unapoblacin.

    Un cromosoma es una cadena de genes y un gen es la codificacinde un parmetro o variable, dicha codificacin pertenece a un alfabetoespecfico. Por ejemplo, un cromosoma de dos genes donde cada gen esuna cadena binaria (ceros y unos) de 2 bits, esto significa que si se tieneel cromosoma 0110 la primera variable corresponde a la segmento 01y la segunda variable a 10.

    Un alelo es el valor de un gen; en el ejemplo anterior, para el primer gen,se tena el alelo 01 de los cuatro alelos posibles que puede tener dichogen (00, 11, 01, 10). Un locus es la posicin de un gen; en elejemplo se tenan dos locus que corresponden al primer y segundo genrespectivamente.

    Se denomina aptitud al valor que se asigna a cada individuo y que indicaqu tan bueno es este con respecto a los dems. La aptitud se calcula atravs de una funcin de aptitud que generalmente es una funcin positivade maximizar.

    Un operador gentico es una funcin crea o modifica un nuevo cromo-soma. El cruce es un operador gentico que forma un nuevo cromosoma,llamado hijo, intercambiando segmentos de dos cromosomas padres. Lamutacin es un operador gentico que forma un nuevo cromosoma pormedio de alteraciones (usualmente pequeas) en la estructura de otrocromosoma.

    Se llama elitismo al mecanismo utilizado en algunos Algoritmos Genti-cos para asegurar que los individuos ms aptos de una poblacin pasen ala siguiente generacin sin ser alterados por ningn operador gentico.Asegura que la aptitud mxima de la poblacin nunca se reducir deuna generacin a la siguiente. Sin embargo, no necesariamente mejora laposibilidad de localizar el ptimo global de una funcin.

    17

  • 2. Marco de Referencia

    Una generacin es una iteracin de un Algoritmo Gentico. Consisteen crear una poblacin nueva a partir de una anterior, aplicando losoperadores genticos, mecanismos y reglas.

    La seleccin es el proceso de escoger individuos aptos para el cruce bajoalgn criterio especfico. La seleccin no garantiza que el individuo se crucepero le da una oportunidad basada en una probabilidad (probabilidad decruce). Existen muchos criterios para la seleccin pero generalmente sebasan en el principio de Darwin: individuos con mayor aptitud tendrnms oportunidades de cruzarse.

    Mtodos de Seleccin

    A continuacin se mencionan algunos de los mtodos de seleccin msutilizados en la bibliografa de Algoritmos Genticos:

    La Ruleta (Goldberg, 1989, p. 11) es un tipo de seleccin proporcionalque consiste en asignar una rebanada de una rueda de ruletade casino a un individuo, dicha rebanada es proporcional a laaptitud de este individuo. La ruleta se hace girar (generando unnumero aleatorio) N veces. El valor de N representa el tamao dela poblacin. En cada giro, el individuo asignado a la rebanadaseleccionada es elegido como un padre.

    Muestreo Estocstico Universal (Baker, 1987) tambin es un tipo deseleccin proporcional que utiliza la misma ruleta dividida en espaciosproporcionales a la aptitud como en el mtodo de La Ruleta pero slorealiza un giro. La seleccin de los N individuos se logra asignandopuntos equidistantes a partir del numero aleatorio obtenido en elnico giro.

    Truncamiento (Haupt y Haupt, 2004, p. 250) se seleccionan los individuoscuya aptitud se encuentre por encima de un valor especifico (puntode truncamiento), esto implica realizar ajustes en el tamao de lapoblacin para mantenerla constante.

    18

  • Captulo 2

    Por Jerarquas (Goldberg, 1989, p. 124) no es una tcnica de seleccin,sino una variacin que se puede hacer a cualquier mtodo de seleccinproporcional como el de la ruleta o el estocstico universal. Consisteen ordenar los individuos en base a su aptitud y asignarles jerarquas,esto es, a mayor aptitud, mayor valor de la funcin de jerarqua. Elvalor esperado puede ser tanto una funcin lineal como no lineal,para un caso lineal usualmente se utiliza la ecuacin 2.1 planteadapor James Baker (1985).

    V alesp(i, t) = Min+ (MaxMin)jerarquia(i, t) 1N 1 (2.1)

    Donde E(i, t) es el valor esperado de un individuo i en una ge-neracin t; Min y Max son valores arbitrarios con Max > Min;jerarquia(i, t) determina la posicin del individuo i en la generacint; y N es el tamao de la poblacin.

    Por Jerarquas Elitista (Mitchell, 1998, p. 127) como el mtodo ante-rior ordena la poblacin, pero en lugar de utilizar un Valor Esperado,se seleccionan los primeros M individuos y se descartan los restantes.

    Equiprobable (Maneiro, 2001, p. 94) consiste en asignar una probabilidadigual a cada individuo, por tanto no depende de la aptitud. Laprobabilidad viene dada por la ecuacin 2.2.

    p(i) = 1N

    (2.2)

    Donde p(i) es la probabilidad del individuo i y N el tamao de lapoblacin.

    Torneo (Mitchell, 1998, p. 127) toma dos individuos de la poblacinescogidos al azar. Se genera un numero aleatorio r entre 0 y 1. Sir < k (donde k es un parmetro, por ejemplo 0,75) se selecciona elindividuo de mayor aptitud, de lo contrario se selecciona el de menoraptitud.

    19

  • 2. Marco de Referencia

    Escalamiento Sigma de Tanese (Coello, 2010, p. 120; Mitchell, 1998,p. 125) presentado por Reiko Tanese (1989), al igual que la tcnicapor jerarquas no es una tcnica de seleccin, sino una variacin quese puede hacer a cualquier mtodo de seleccin proporcional comoel de la ruleta o el estocstico universal. Consiste en modificar elclculo del valor esperado, en vez de utilizar una funcin proporcionalbasada solo en la funcin de aptitud, emplea una ecuacin (2.3) queadems de la variable anterior, tambin tiene como parmetros lamedia y la desviacin estndar de la poblacin.

    V alesp(i, t) =

    1 + f(i) f(t)2(t) si (t) 6= 01 si (t) = 0

    (2.3)

    Donde V alesp(i, t) es el valor esperado de un individuo i en unageneracin t; f(i) representa la funcin de aptitud del individuo i; yf(t) y (t) son la media y la desviacin estndar de las funciones deaptitudes de la poblacin en la generacin t respectivamente.

    El proceso evolutivo de bsqueda presenta dos grandes inconvenientes:La diversidad de la poblacin y la presin selectiva (Michalewicz, 1992).Estos dos factores estn estrechamente relacionados: un incremento en lapresin selectiva hace decrecer la diversidad de la poblacin y viceversa.En otras palabras, una presin selectiva fuerte conduce a una convergen-cia prematura en el espacio de bsqueda; y una presin selectiva dbilhace el proceso lento e ineficiente. Por tanto es imperativo lograr algnbalance entre estos dos factores con una buena combinacin de operadoresgenticos (cruce, mutacin, seleccin).

    2.2.2. Programacin Orientada a Objetos

    Actualmente los dos paradigmas de programacin de software ms uti-lizados son por procedimientos (tambin conocido como procedural oimperativo) que es el enfoque clsico; y el orientado a objetos, que es ms

    20

  • Captulo 2

    moderno. Las ventajas de este ltimo sobre el primero estn extensiva-mente demostradas en teora y practica (Harrison, Samaraweera, Dobie,y Lewis, 1996) principalmente en lo concerniente a la reusabilidad delcdigo.

    La programacin orientada a objetos (Post, 2006) es una metodolo-ga de programacin donde el cdigo se encapsula dentro de la definicinde los diversos objetos (o clases). Los sistemas se desarrollan a partir deobjetos (que se esperan que sean) reutilizables. El sistema se controlaal manipular las propiedades de un objeto y al solicitar lo mtodos delmismo.

    Lo programacin orientada a objetos introduce una serie de conceptos(Post, 2006) que amplan o superan conceptos ya conocidos:

    Una clase es un descriptor para un conjunto de objetos con estructura,comportamiento y relaciones similares. Es decir, una clase es la descripcindel modelo de la entidad de negocio. Un modelo de negocio puede teneruna clase Empleado, en donde un empleado especifico es objeto de esaclase.

    Un objeto es una instancia o ejemplo especifico de una clase. Por ejemplo,en una clase Empleado, un empleado individual(Sr. Pedro Prez) seria unobjeto.

    Un mtodo es una funcin u operacin que puede efectuar una clase. Porejemplo, una clase Empleado puede tener un mtodo agregarNuevo() quese llama cuando se agrega un objeto Empleado nuevo.

    Una variable de instancia define las propiedades o caractersticas deuna clase y por tanto los atributos de cada objeto de esa clase. Porejemplo, una clase Empleado puede tener entre sus variables de instancianombre, cedula y cargo.

    Una variable local es definida dentro de un mtodo o subrutina y sumbito acaba cuando acaba dicho mtodo o subrutina.

    21

  • 2. Marco de Referencia

    Entre las principales caractersticas que describen a la programacinorientada a objetos se tienen:

    La abstraccin es una estrategia de resolucin de problemas en la cualel programador se concentra en resolver una parte del problemaignorando completamente los detalles sobre cmo se resuelven elresto de las partes. En este proceso de abstraccin se considera queel resto de las partes ya han sido resueltas y por lo tanto puedenservir de apoyo para resolver la parte que recibe la atencin.

    El encapsulado consiste en definir atributos y mtodos dentro de unaclase comn. Por ejemplo, se podran juntar todas las caractersticasy opciones de la clase Empleado.

    La modularidad es la capacidad de fraccionar el cdigo en subrutinasrelacionadas con un propsito comn.

    El polimorfismo. En una jerarqua de clases, cada clase nueva heredalos mtodos de las clases anteriores. Mediante el polimorfismo, seinvalidan esas definiciones y se asigna un mtodo nuevo(con el mismonombre) a la clase nueva.

    La herencia es la capacidad de definir clases nuevas derivadas de clasesde nivel superior. Las clases nuevas heredan todas las propiedades ymtodos anteriores, de modo que el programador solo necesita definirlas propiedades y los mtodos nuevos.

    2.2.3. Java

    Java son dos cosas: un lenguaje de programacin y una plataforma (OracleCorporation, 1995, 2012). El lenguaje Java es el lenguaje orientadoa objetos ms utilizado en el mundo y el segundo ms utilizado engeneral despus del Lenguaje C (TIOBE Software BV, 2012), poseeuna comunidad de desarrolladores que supera los 9 millones de personasy su ambiente de ejecucin esta instalado en ms de 1.100 millones de

    22

  • Captulo 2

    Figura 2.1.: Funcionamiento de Java2.

    computadoras personales y 3.000 millones de telfonos celulares (OracleCorporation, 2012a). Java es un lenguaje de alto nivel caracterizado porser:

    simple orientado a objetos distribuido multihilos dinmico

    arquitecturalmente neutro porttil de alto rendimiento robusto seguro

    Cada una de estas caractersticas son detalladamente explicadas en el docu-mento electrnico The Java Language Environment (El Ambiente del Len-guaje Java) de James Gosling y Henry McGilton (1996).

    En el lenguaje de programacin Java, todo el cdigo fuente es escritoprimero en un archivo de texto que termina con la extensin .java, luego losarchivos de cdigo fuente se compilan en archivos .class por el compiladorjavac. Un archivo .class no contiene cdigo que es comprendido por elprocesador, sino que en su lugar contiene bytecodes, que es el lenguaje demquina de la Maquina Virtual de Java, JVM1. A continuacin, la JVMtraduce el bytecodes a lenguaje de maquina (ceros y unos) y ejecuta laaplicacin (ver la figura 2.1).

    La Maquina Virtual de Java es una simulacin de un computador capazde ejecutar el bytecode y esta disponible para diferentes sistemas operati-vos. Esto significa que un mismo archivo .class puede ser ejecutado en1Siglas en ingles para java virtual machine.

    23

  • 2. Marco de Referencia

    Figura 2.2.: Con la JVM, la misma aplicacin se puede ejecutar en dife-rentes plataformas.

    Microsoft Windows, Linux, Mac OS y Android (ver la figura 2.2).

    Una plataforma es el ambiente de software en el que se ejecutan programas.Ya se han mencionado algunas de las plataformas ms populares comoMicrosoft Windows, Solaris OS, Linux, Mac OS y Android. Lamayora de las plataformas pueden ser descritas como una combinacin desistema operativo y hardware subyacente. La plataforma Java difierede la mayora en que es una plataforma de software exclusivamente que seejecuta encima de otras plataformas hardware-software. Esto trae como2Todas las figuras de este Trabajo son de elaboracin propia

    24

  • Captulo 2

    Figura 2.3.: La API y la JVM aslan el programa del hardware subyacente.

    ventaja una gran capacidad de portabilidad ya que puede desempearsesobre muchos tipos de hardware.

    La plataforma Java esta compuesta por dos componentes: La mquina virtual de java (JVM) La interfaz de programacin de aplicaciones (API3)

    Ya se ha mencionado la JVM como la base de la plataforma, la cual estainstalada en ms de 4 millardos de equipos entre computadoras, celularesy electrodomsticos.

    La API es una gran coleccin de componentes de software prefabricadosque ofrecen muchas funciones tiles. Se agrupan en bibliotecas de clasese interfaces relacionadas; estas bibliotecas son conocidos como paquetes(ver la figura 2.3).

    Como un entorno independiente de la plataforma, la plataforma Javapuede ser un poco ms lenta que el cdigo nativo, sin embargo, los avancesen las tecnologas de compilador y la mquina virtual estn acercando eldesempeo con el del cdigo nativo sin representar una amenaza para laportabilidad.

    3Siglas en ingles para application programming interface.

    25

  • 2. Marco de Referencia

    2.2.4. Entorno de Trabajo Computacional

    Mejor conocido por su nombre en ingles, software framework, o simple-mente framework, un entorno de trabajo computacional (MAXXESSSystems, Inc., 2012) es una plataforma de software universal y reuti-lizable empleado para desarrollar aplicaciones, productos y soluciones.Pueden incluir programas de apoyo, compiladores, libreras de cdigo,interfaces de programacin de aplicaciones (API), sets de herramientasque en conjunto renen los componentes necesarios para desarrollar unproyecto de software.

    Su diseo facilita el proceso de desarrollo permitiendo a diseadores(de software) y programadores invertir ms tiempo en el anlisis queen los detalles tediosos del cdigo. Permite a los programadores pasarmenos tiempo escribiendo cdigo y depurando errores y ms tiem-po para actividades de mayor valor agregado enfocadas al problemaespecifico.

    Un framework orientado a objetos (Riehle, 2000) es un diseo re-utilizable junto con una implementacin. El diseo representa un modeloabstracto de la aplicacin y la implementacin define como este modelodebe ser ejecutado, al menos parcialmente. Un buen diseo e implemen-tacin de un framework es el resultado de un profundo entendimiento deldominio de la aplicacin y debe dejar suficiente espacio para la personali-zacin con el fin de resolver un problema particular.

    26

  • Captulo 3.

    Marco Metodolgico

    En los Captulos 1 y 2 se ha venido definiendo el diseo de investigacinque sirve de base en el proceso de planeacin del trabajo que se quiereabordar (desarrollo de un framework para Algoritmos Genticos) en laperspectiva del conocimiento cientfico (Mndez, 2001, p. 57, 60, 65). Estediseo tiene tres componentes claramente definidas:

    1. Elementos de contenido y alcance: seleccin y definicin del tema,planteamiento y formulacin del problema, objetivos de la investi-gacin, justificacin y marco de referencia. Estos elementos fuerondesarrollados en el captulo 1 y 2.

    2. Elementos de apoyo metodolgico: tipo de investigacin, mtodo deinvestigacin, fuentes y tcnicas para la recoleccin de informacin,y tratamiento de la informacin, son definidos en el presente cap-tulo. Los elementos tabla de contenido y bibliografa se encuentra alprincipio y al final del presente Trabajo respectivamente.

    3. Elementos de soporte administrativo: cronograma de trabajo explica-do en forma de diagrama de Gantt en la seccin 8 del Plan de Trabajoprevio a este Trabajo de Grado. Finalmente el elemento presupuestode la investigacin no es considerado debido a la insignificancia delimpacto en el desarrollo de la investigacin.

    27

  • 3. Marco Metodolgico

    3.1. Tipo de Investigacin

    Los estudios exploratorios se efectan, normalmente, cuando el objetivoes examinar un tema o problema de investigacin poco estudiado o queno ha sido abordado antes. Es decir cuando la revisin de la literaturarevela que nicamente hay guas no investigadas e ideas vagamenterelacionadas con el problema de estudio (. . . ) Sirven para familiarizarnoscon fenmenos relativamente desconocidos (Sampieri, Collado, y Lucio,1998).

    La investigacin descriptiva tiene como objetivos describir el estado, lascaractersticas, factores y procedimientos presentes en los fenmenos yhechos que ocurren en forma natural, sin explicar las relaciones que seidentifiquen. Su alcance no permite la comprobacin de hiptesis ni laprediccin de resultados (Lerna, 2004).

    Segn las definiciones descritas en los dos ltimos prrafos, el presenteTrabajo sigue una investigacin principalmente exploratoria conalgunos elementos descriptivos. Es exploratoria por la escasa dis-ponibilidad de trabajos relacionados con framework para AlgoritmosGenticos, lo que conduce a observar la estructura de unos pocos entornoscomputacionales disponibles pero no desarrollados en el marco de unestudio formal.

    Los elementos de investigacin descriptiva se encuentran en la bsquedade los extensos conocimientos sobre Algoritmos Genticos que se handesarrollado en las ultimas dcadas. Resumir y describir las formas mscomunes que puede adquirir un Algoritmo Gentico es algo relativamentesencillo dada la amplia bibliografa sobre el tema.

    28

  • Captulo 3

    3.2. Mtodo de Investigacin

    El mtodo de investigacin es el procedimiento riguroso, formulado deuna manera lgica, que el investigador debe seguir en la adquisicin deconocimiento (Mndez, 2001).

    El mtodo ms conveniente a los intereses de esta investigacin es laobservacin, definida como el proceso mediante el cual se percibendeliberadamente ciertos rasgos existentes en la realidad por medio deun esquema conceptual previo y con base en ciertos propsitos defini-dos generalmente por una conjetura que se quiere investigar (Ladrn,1978).

    En este Trabajo se desea observar la estructura y composicin deframeworks sobre Algoritmos Genticos como JAGA y JGAP, este ltimoprincipalmente. Como ya se ha mencionado antes no se conocen trabajosacadmicos sobre este tema, lo que deja como una nica va la observacinde las frameworks informales ya existentes.

    3.3. Fuentes de Investigacin

    Las fuentes son hechos o documentos a los que acude el investigador yque le permiten obtener informacin (Mndez, 2001). Las tcnicas pararecoleccin de informacin son los medios empleados para recolectar lainformacin (Mndez, 2001).

    Este Trabajo se refiere exclusivamente a fuentes secundarias de in-formacin, las cuales suministran informacin bsica disponible en bi-bliotecas e internet y se encuentran contenidas en libros, documentoselectrnicos tanto personales como corporativos.

    29

  • 3. Marco Metodolgico

    3.4. Tratamiento de la Informacin

    El tratamiento de la informacin es la determinacin de los procedimien-tos para la tabulacin y codificacin de la informacin para el recuento,clasificacin y ordenamiento de la informacin en tablas o cuadros (Mn-dez, 2001).

    Presentacin de la informacin. El contenido de la investigacin sepresenta de forma escrita disponible tanto en papel impreso como enarchivo electrnico pdf. Adicionalmente la documentacin del entorno detrabajo computacional referente a la arquitectura del mismo se presenta enun formato electrnico (archivo html) estndar conocido como javadocscon caractersticas definidas por la herramienta de software Javadoc Tool(Oracle Corporation, 2012b). Como el entorno de trabajo computacionales una aplicacin de software, lgicamente se presenta en formato electr-nico definido como un archivo java de extensin .class.

    30

  • Captulo 4.

    Estructura y Funcionamiento

    El framework est escrito en el lenguaje de programacin Java y estcompuesto, en total, de 23 clases agrupadas en dos paquetes: el paqueteagapi1 con 9 clases, y el paquete impl con 14.

    La palabra agapi es un acrnimo para API de Algoritmos Genticos, yes el nombre del proyecto de software adems del nombre del paqueteprincipal. El proyecto est amparado por la licencia GPL versin 3 de laFundacin del Software Libre. Para ms informacin acerca del uso de lalicencia, ver apndice A.

    Las clases del ncleo del framework, donde ocurre la ejecucin de corridasde algoritmos genticos, se encuentran en el paquete agapi mientras queen impl slo hay implementaciones de las clases de agapi y su utilizacines de carcter opcional.

    El funcionamiento del framework se explica en la forma en que las clasesdel paquete agapi interactan entre si: Todo comienza por la configura-cin de los parmetros de un proceso en la clase Configuracion, luegoesta dispara el algoritmo gentico con el mtodo iniciarProceso que1Los nombres de clases, mtodos, y otros elementos del lenguaje de programacinestn escritos en fuente tipo monoespaciado similar a la de las mquinas de escribirantiguas. Tambin se respecta la convencin del lenguaje Java respecto al uso deminsculas y maysculas en dichos elementos por lo que no debe ser raro ver el usode una minscula despus de un punto y seguido o al inicio de un prrafo.

    31

  • 4. Estructura y Funcionamiento

    llama a procesar, este llama a ejecutar que llama a generar y es aqudonde se aplican los operadores genticos y los mtodos de seleccin.Adems generar crea poblaciones (clase Poblacion) que contiene indivi-duos (clase Individuo) que se cruzan (mtodo cruce), mutan (mtodomutacion) y generan individuos con cromosomas aleatorios (mtodoaleatorio).

    4.1. Estructura

    La estructura del entorno de trabajo computacional esta basada en elparadigma de la programacin orientada a objetos, es decir, el cdigoesta encapsulado en una serie de clases y objetos que se interrelacionan.La caracterstica principal del framework es su capacidad de abstraccin,enfocndose en los detalles bsicos de la corrida de un algoritmo gentico,sin prestar atencin a detalles especficos de algn problema de algoritmosgenticos en particular. El framework est escrito en el lenguaje deprogramacin Java, de uso universal tanto en el mundo acadmico comoen el de los negocios.

    El entorno consta de un total de 23 clases organizadas en dos paquetes,es decir en dos directorios:

    el paquete agapi con 9 clases,

    el paquete impl con 14 clases.

    Los divisin de clases entre estos paquetes se basa en la funcin que tienendichas clases dentro del framework. Unas clases, las ubicadas en agapi,son indispensables para cualquier ejecucin de un problema y otras, las deimpl, se ofrecen de forma opcional con el propsito de agilizar el procesode desarrollo del cdigo.

    32

  • Captulo 4

    4.1.1. Paquete agapi

    Dentro del paquete agapi se encuentran las clases del motor del frame-work, donde ocurre la ejecucin de corridas de algoritmos genticos, porlo tanto son indispensables para el desarrollo del cualquier problema. Eneste paquete se encuentran una clase abstracta e interfaces que dan elcarcter abstracto al framework, y deben ser implementadas por clasesconcretas diseadas por el usuario para la ejecucin de un problemaespecfico.

    El paquete agapi esta conformado por 9 clases, interrelacionadas comose observa en el diagrama2 de la figura 4.1. En el captulo 5 se describecon detalle la funcin de cada clase, a continuacin se hace una brevedescripcin de estas:

    Individuo (abstracta) es la clase que el usuario debe heredar ya que enella de encuentran mtodos que describen un problema especfico co-mo calcFA donde se define la funcin de aptitud, y cruce y mutaciondonde se determinan el cruce y la mutacin respectivamente.

    Poblacion consiste en un arreglo de objetos tipo Individuo que repre-senta a una poblacin de individuos. Tambin aloja variables parael mejor y peor individuo, la media y desviacin estndar de lasfunciones de aptitud de los individuos de dicha poblacin.

    Generacion es donde ocurren la evolucin de una poblacin a otra pormedio de la accin de los operadores genticos. Esta clase toma unobjeto de tipo Poblacion y aplica los mtodos cruce y mutacionde la clase Individuo. Tambin aplica los mtodos de las interfa-ces Selector y SelectorPostCruce. Adems, Generacion aloja lasvariables probabilidadCruce y probabilidadMutacion correspon-dientes a los valores de las probabilidades de cruce y mutacin.

    2Los diagramas de clases siguen los estndares del Lenguaje de Modelado Unificado(UML, Unified Modeling Language) versin 2.0 (IBM Corporation, 2004; Ja-mes Rumbaugh, 2004)

    33

  • 4. Estructura y Funcionamiento

    Configuracion

    Proceso

    Ejecucion

    Generacion

    Poblacion

    Individuo

    Generador

    Selector

    SelectorPostCruce

    1

    1..?

    1..?

    1

    2..?

    1

    1

    1

    Figura 4.1.: Estructura del paquete agapi.

    34

  • Captulo 4

    Ejecucion es un proceso evolutivo completo, consiste en un arreglo deobjetos de tipo Generacion. En esta clase se crea una generacin ia partir de una generacin i 1, esto se realiza tantas veces comola variable numeroGeneraciones lo indique.

    Proceso es un conjunto de ejecuciones, es decir, de evoluciones indepen-dientes una de la otra. Esta formado por un arreglo de objetos tipoEjecucion. El propsito de esta clase es simplemente facilitar alinvestigador la recoleccin de datos, esto se logra corriendo tantasejecuciones como lo indique la variable numeroEjecuciones.

    Configuracion es una especie de tablero de control desde el cual se puedeconfigurar todos los parmetros de un proceso haciendo llamados amtodos estticos ubicados en distintas clases del entorno. Para lacorrida de cualquier aplicacin es necesario crear un objeto de estaclase y hacer llamados a todos sus mtodos estticos.

    Generador es una clase auxiliar de Generacion y su nica funcin esalojar el mtodo generar que contiene el cdigo que hace evolucionaruna poblacin. generar es llamado desde el mtodo homnimoubicado en Generacion.

    Selector (interfaz) se encarga de la seleccin de individuos que tendrnposibilidad de cruzarse. Contiene dos mtodos abstractos: seleccionencargado de ejecutar la seleccin segn el criterio establecido yprepararSeleccion que permite aplicar clculos adicionales a todala poblacin que luego puedan ser utilizados por seleccion. Estainterfaz puede ser implementada por el usuario directamente encaso de no utilizar alguna de las implementaciones facilitadas por elframework en la clase impl.

    SelectorPostCruce (interfaz) se encarga de determinar qu individuos,entre padres e hijos, pasarn a la siguiente generacin despus delcruce y la mutacin; esto se logra con la implementacin del m-todo seleccionPostCruce. Puede ser implementada por el usuario

    35

  • 4. Estructura y Funcionamiento

    directamente en caso de no utilizar alguna de las implementacionesfacilitadas por el framework en la clase impl.

    4.1.2. Paquete impl

    El paquete impl contiene clases concretas y abstractas que correspondencon implementaciones de las clases del paquete agapi. Aunque no sonindispensables para la ejecucin de un algoritmo, sirven como apoyoopcional al facilitar clases que describen varios tipos de individuos ymtodos de seleccin pre configurados que pueden ahorrar tiempo dedesarrollo al investigador.

    El paquete impl est integrado por 14 clases que heredan directamentede las clases del paquete agapi como se observa en la figura 4.2. Estacompuesto por 2 implementaciones de la clase Individuo, adems deuna clase con el tipo de cruce pmx (CrucePMX) utilizada por uno de estosindividuos; varias implementaciones de la interfaz Selector que hacenuso de otras clases que en total suman 9; y 2 implementaciones de lainterfaz SelectorPostCruce. En el captulo 5 se describe con detalle lafuncin de cada clase, a continuacin se hace una breve descripcin deestas:

    IndividuoBinario (clase abstracta) es una implementacin de la claseIndividuo con un cromosoma formado por una secuencia de cerosy unos. Implementa los mtodos cruce, mutacion y aleatorio ydeja abstracto calcFA. cruce consiste en una sustitucin de los bitsde la madre por los del padre. mutacion simplemente invierte elvalor de un bit en una posicin aleatoria. calcFA se deja sin cuerpo(abstracto) para que el usuario la implemente.

    IndividuoCombinatorio (clase abstracta) al igual que la anterior, esuna implementacin de Individuo cuyo cromosoma es una secuencia(arreglo) de nmeros enteros de 1 a N (donde N Z y N > 0)que luego es desordenada aleatoriamente. cruce utiliza el mtodo de

    36

  • Captulo 4

    Configuracion

    Proceso

    Ejecucion

    Generacion

    Poblacion

    Individuo

    Generador

    Selector

    SelectorPostCruce

    IndividuoBinario

    IndividuoCombinatorio CrucePMX

    SelectorTorneo

    SelectorTodos

    SelectorEstocastico SelectorRuleta

    SelectorSUS

    Funcion

    FuncionClasico

    FuncionRanking

    FuncionTanese

    SelectorPostCruceSoloHijos

    SelectorPostCruceTaigeto

    1

    1..?

    1..?

    1

    2..?

    1

    1

    1

    1

    1

    Figura 4.2.: Estructura del entorno de trabajo computacional.

    37

  • 4. Estructura y Funcionamiento

    cruce pmx (Goldberg y Lingle, 1985) apoyado en la clase CrucePMXy, mutacion simplemente intercambia dos nmeros en un mismocromosoma de forma aletoria. calcFA se mantiene abstracto.

    CrucePMX tiene como nica funcin suministrar un mtodo cruce detipo pmx para la clase IndividuoCombinatorio. Esto se debe a lacomplejidad del proceso de cruce tipo pmx, lo que amerita toda unaclase para su desarrollo.

    SelectorTorneo implementa la interfaz Selector de forma que selec-ciona individuos usando una tcnica por torneo de tipo binaria(compiten dos individuos) y probabilstica (el ganador se determinapor un numero aleatorio) (Goldberg y Deb, 1991).

    SelectorTodos es una implementacin de la interfaz Selector y su nicopropsito es ser utilizada en corridas de prueba ya que realmente noselecciona a ningun individuo, simplemente deja pasar a uno por unogarantizando al final que todos los individuos tenga la posibilidadde cruzarse.

    SelectorEstocastico (clase abstracta) define un esquema de seleccinprobabilsticos que simula una rueda de ruleta de casino con reba-nadas en funcin de los valores esperados de los individuos de la po-blacin. Esta clase es heredada por SelectorRuleta y SelectorSUSque comparten dicho esquema.

    SelectorRuleta implementa la interfaz SelectorEstocastico que apli-ca la tcnica de la ruleta (Goldberg, 1989) que hace rodar la ruleta(generando un nmero aleatorio) N veces, donde N representa elnmero de individuos seleccionados con chance de reproducirse.

    SelectorSUS implementa la interfaz SelectorEstocastico que aplicael muestreo estocstico universal (Baker, 1987) donde la ruleta sehace girar una vez (se genera solo un nmero aleatorio) utilizandoN apuntadores espaciados equidistantemente que determinan losindividuos seleccionados con chance de reproducirse.

    38

  • Captulo 4

    Funcion (clase abstracta) es utilizada por los selectores estocsticos (porejemplo, SelectorSUS) para la definicin de la funcin de valoresperado de los individuos.

    FuncionClasico es una implementacin de la interfaz Funcion que re-presenta la funcin clsica de valor esperado utilizado por DavidGoldberg (1989). Dicha funcin no es ms que la funcin de la aptitudde cada individuo de la poblacin.

    FucionRanking es una implementacin de la interfaz Funcion que per-mite el clculo de valores esperados en funcin de las jerarquas(ranking)de los individuos dentro de la poblacin segn la ecuacin2.1) propuesta por James Baker (1985).

    FuncionTanese es una implementacin de la interfaz Funcion que plan-tea la funcin de valor esperado con escalamiento sigma (ver ecuacin2.3) presentada por Reiko Tanese (1989).

    SelectorPostCruceSoloHijos es una implementacin de la interfazSelectorPostCruce y est encargada de pasar a la siguiente ge-neracin slo los dos hijos productos de un cruce, es decir, los padresson desechados independientemente de sus aptitudes.

    SelectorPostCruceTaigeto como la anterior, es una implementacin dela interfaz SelectorPostCruce y su funcin es pasar a la siguientegeneracin slo a los mejores dos individuos entre padres e hijos.

    4.2. Funcionamiento

    Una corrida se inicia con la ejecucin del mtodo iniciarProceso dela clase Configuracion. Como se dijo anteriormente Configuraciones un tablero de control general de los parmetros de un problema dealgoritmos genticos donde se pueden modificar desde valores como lasprobabilidades de cruce y mutacin hasta los mtodos de seleccin y el tipo

    39

  • 4. Estructura y Funcionamiento

    de individuo a utilizar, todo ello por medio de llamados a mtodos estticos(exclusivamente) que al mismo tiempo llaman a mtodos ubicados endistintas clases. Adicionalmente, iniciarProceso, hace un llamado almtodo procesar de Proceso lo que inicia un proceso.

    Un proceso es una sucesin de ejecuciones, por ello la clase Proceso con-tiene un arreglo de objetos tipo Ejecucion desde los que se llama el m-todo ejecutar. Se realizan tantas ejecuciones como lo indique la variablenumeroEjecuciones configurable desde Configuracion.

    Una ejecucin es una sucesin de generaciones que son creadas una a partirde la otra, por ello, la clase Ejecucion contiene un arreglo de objetostipo Generacion. El mtodo ejecutar ubicado en Ejecucion crea unapoblacin inicial de individuos con cromosomas aleatorios utilizando elmtodo aleatoria de Poblacion. Esta poblacin inicial es introducidaen el constructor de la primera generacin del arreglo y, a partir de estemomento, comienza un ciclo en el que una nueva generacin (geni) escreada a partir de una generacin anterior (geni-1) por medio del mtodogenerar de Generacion hasta alcanzar una cantidad de generacionesigual a numeroGeneraciones.

    En el paso anterior (ejecutar) se logra una evolucin completa de unproblema especfico lo que explica cmo la ejecucin es la unidad principalde recoleccin de datos. Todo problema debe correr al menos una ejecucinpara llegar a una buena solucin y producir todos los datos de interscomo medias y desviaciones de las funciones de aptitudes, mejor y peorindividuo, y tiempos de corridas.

    El mtodo generar de Generacion llamado desde el ejecutar de Ejecuciones el encargado de convertir una generacin en una nueva, aplicando losoperadores genticos correspondientes. Para ello, generar se apoya en laclase Generador pues facilita la organizacin del cdigo al dedicar todauna clase al desarrollo de lo que ocurre en una generacin, esto es, aplicaroperadores genticos, mtodos de seleccin y seleccin post cruce, utilizarprobabilidades de cruce y mutacin, almacenar los valores de medias ydesviaciones estndar de las funciones de aptitud, almacenar todas las

    40

  • Captulo 4

    caractersticas de los individuos implicados, almacenar al mejor y peorindividuo de cada generacin, etctera.

    En la clase Generacion se dan otras relaciones de composicin: unaGeneracion bsicamente tiene un Selector, un SelectorPostCruce yuna Poblacion; todos elementos imprescindibles en una corrida con susmtodos llamados desde generar. Selector y SelectorPostCruce soninterfaces utilizadas antes y despus del cruce y la mutacin, respectiva-mente. Poblacion contiene a los individuos y sus mtodos correspondien-tes.

    Cuando se produce una nueva generacin tambin se produce una nuevapoblacin correspondiente a la primera. Este objeto de tipo Poblaciones construido individuo por individuo dentro del mtodo generar, dondeal mismo tiempo se van calculando los valores de la media y la desviacinestndar y evaluando las aptitud de los individuos para determinar almejor y al peor de ellos.

    Adicionalmente en generar se hacen los llamados a los mtodos crucey mutacion (ubicados en Individuo) encargados de los procesos ho-mnimos determinados por la implementacin del usuario. Estos m-todos son llamados luego de generar nmeros aleatorios y compararloscon las probabilidades de cruce y mutacin establecidas desde la claseConfiguracion.

    Cuando se realiza la primera generacin se debe partir de una pobla-cin inicial generada de forma aleatoria por el mtodo aleatoria dePoblacion que realiza una construccin de individuos de forma iterativallamando al mtodo fabricaIndividuo (de Individuo). Luego, por ca-da individuo recin construido, se generan cromosomas aleatorios con elmtodo aleatorio, tambin de Individuo.

    fabricaIndividuo es el nico mtodo que debe ser modificado en suestructura interna por el usuario ya que se encarga de crear objetosconcretos de clases que heredan de Individuo.

    41

  • 4. Estructura y Funcionamiento

    Los mtodos de Individuo son utilizados por otras clases, como calcFAque es llamado por los mtodos generar en Generador y aleatoriaen Poblacion, en ambos casos para el clculo de la funcin objetivo decada individuo y el clculo de la media y la desviacin estndar de unapoblacin. cruce y mutacion son utilizados en generar (Generador) yaleatorio en aleatoria de Poblacion.

    Aunque ya se ha mencionado, es importante destacar que los mtodoscalcFA, cruce, mutacion y aleatorio son abstractos y por lo tanto nocontienen ningn cdigo dentro de ellos, su propsito es ser implementa-dos.

    42

  • Captulo 5.

    Documentacin

    Este captulo es una adaptacin de la documentacin disponible enformato electrnico html conocida como javadocs. Dicha documentacinse encuentra como comentarios de prembulo en las clases, interfaces ymtodos en el cdigo java del framework. La documentacin hace uso demacros html y javadocs siguiendo la convencin de Oracle Corporation(1999).

    Para adaptar el formato javadocs al presente texto se deben tomar alalgunas consideraciones:

    Ligera modificacin la redaccin dado que no se pueden usar hiper-vnculos.

    Redundancia de definiciones de algunos conceptos. Esto se debe alcarcter de manual de consulta rpida de esta documentacin

    Traduccin de algunos trminos como Field (Constantes), Return(Retorna), Parameters (Parmetros), Throws (Arroja), Overrides(Sobrescribe), See Also (Ver tambin)

    La Javadoc Tool (Herramienta Javadoc) es un programa que conviertelos comentarios del cdigo fuente java en formato html para ser pre-sentado como pgina web siguiendo el diseo de la API de Java (OracleCorporation, 1993, 2013).

    43

  • 5. Documentacin

    Los nombres de clases, mtodos, y otros elementos del lenguaje de progra-macin estn escritos en fuente tipo monoespaciado similar a la de lasmquinas de escribir antiguas y respectando la convencin del lenguajeJava respecto al uso de minsculas y maysculas (Oracle Corporation,1999).

    Los figuras de diagramas de clases siguen los estndares del Lenguaje deModelado Unificado (UML, Unified Modeling Language) versin 2.0(IBM Corporation, 2004; James Rumbaugh, 2004).

    5.1. Paquete agapi

    5.1.1. Clase Individuo (abstracta)

    public abstract class Individuo.extends java.lang.Object.Es la clave del framework (ver figura 5.1). Esta clase se debe heredarpara disear un individuo de forma especifica. Contiene cuatro mtodosque deben ser implementados y que definen la estructura del problema aresolver:

    1. calcFA define la funcin de aptitud a utilizar. Es muy importanteque dicha funcin sea positiva y de maximizar, para lo cual sedeben utilizar los artificios matemticos necesarios.

    2. aleatorio transforma el cromosoma de este individuo en un cro-mosoma aleatorio. Es utilizado por la clase Poblacion para generaruna poblacin aleatoria en el inicio de una ejecucin.

    3. cruce ejecuta un cruce entre este individuo (padre) y otro (madre).El cruce debe ser algn tipo de combinacin entre el cromosoma delpadre y el de la madre.

    44

  • Captulo 5

    Individuo

    tipoIndividuo: Individuo tamanoCromosoma: int fA: double+ aleatorio()+ getTipoIndividuo(): Individuo+ setTipoIndividuo(Individuo)+ fabricaIndividuo(): Individuo+ getTamanoCromosoma(): int+ setTamanoCromosoma(int)+ getFA(): double+ setFA(double)+ calcFA()+ aleatorio()+ cruce(Individuo): Individuo[]+ mutacion()

    Figura 5.1.: Diagrama - Clase abstracta Individuo1.

    4. mutacion modifica la estructura del cromosoma de este individuo.Esta modificacin generalmente es pequea, por ejemplo, cambiar elvalor de un nico gen.

    Mtodos

    getTipoIndividuo

    public static Individuo getTipoIndividuo().Devuelve el tipo de individuo del algoritmo. tipoIndividuo es una va-riable esttica y es, adems, un objeto que hereda de la clase Individuo.Retorna: el tipo de individuo del algoritmo.

    1Todas las figuras de este Trabajo son de elaboracin propia

    45

  • 5. Documentacin

    setTipoIndividuo

    public static void setTipoIndividuo(Individuo tipoIndividuo).

    Establece el tipo de individuo especfico a utilizar en el problema. Estemtodo es llamado por setTipoIndividuo de Configuracion para laestablecer el tipo de individuo concreto a utilizar.Parmetros: tipoIndividuo - el tipo de individuo a utilizar en el pro-

    blema.Arroja: NullPointerException - si tipo es null.

    fabricaIndividuo

    public static Individuo fabricaIndividuo().Devuelve un objeto del tipo correspondiente a tipoIndividuo. Esto per-mite utilizar individuos concretos dentro de un contexto abstracto, dondesolo haya variables de tipo Individuo (clase abstracta).Retorna: un individuo concreto (objeto) del tipo establecido en

    tipoIndividuo.

    getTamanoCromosoma

    public static int getTamanoCromosoma().Devuelve el tamao del cromosoma utilizado por este individuo. El pa-rmetro tamanoCromosoma debe utilizarse con cuidado ya que en ciertoscasos el valor del tamao del cromosoma esta ntimamente relacionadocon la funcin de aptitud del problema, tal es el caso de los cromosomasbinarios en donde, generalmente, se debe usar un tamao fijo de cromoso-ma que no debe ser modificado, de lo contrario se debe modificar tambinla funcin de aptitud.Retorna: el tamao del cromosoma del individuo.

    46

  • Captulo 5

    setTamanoCromosoma

    public static void setTamanoCromosoma(int tamanoCromosoma).Establece el tamao del cromosoma a utilizar por este individuo. Es-te mtodo es llamado por setTamanoCromosoma de Configuracion pa-ra la establecer el tamao del cromosoma del individuo del algorit-mo.

    El parmetro tamanoCromosoma debe utilizarse con cuidado ya que enciertos casos el valor del tamao del cromosoma esta ntimamente re-lacionado con la funcin de aptitud del problema, tal es el caso de loscromosomas binarios en donde, generalmente, se debe usar un tamaofijo de cromosoma que no debe ser modificado, de lo contrario se debemodificar tambin la funcin de aptitud.Parmetros: tamanoCromosoma - el tamao del cromosoma.Arroja: IllegalArgumentException - si tamanoCromosoma es menor a

    1.

    getFA

    public double getFA().Devuelve el valor de la funcin de aptitud del individuo.Retorna: el valor de la funcin de aptitud del individuo.

    setFA

    public void setFA(double fA).Establece el valor de la funcin de aptitud del individuo.Parmetros: fA - la funcin de aptitud a utilizar.

    calcFA

    public abstract void calcFA().Calcula el valor de la funcin de aptitud . Dicho clculo es especfi-co del problema a tratar y es una funcin cuya variable independien-te es el cromosoma del individuo. Este cromosoma puede ser disea-

    47

  • 5. Documentacin

    do por el usuario o proveniente de alguna clase pre configurada comoimpl.IndividuoBinario o impl.IndividuoCombinatorio. Esmuy im-portante que dicha funcin sea positiva y de maximizar, para lo cualse deben utilizar los artificios matemticos necesarios.Retorna: el valor de la funcin de aptitud calculado.

    aleatorio

    public abstract void aleatorio().Transforma el cromosoma de un Individuo en un cromosoma aleatorio. Esutilizado por el mtodo aleatoria de Poblacion cuando se debe generaruna poblacin aleatoria para el inicio de una ejecucin.

    cruce

    public abstract Individuo[] cruce(Individuo madre).Ejecuta un cruce entre este individuo (padre) y otro (madre). El crucedebe ser algn tipo de combinacin entre el cromosoma del padre y el dela madre.Parmetros: madre - el individuo madre.Retorna:Un par individuos (hijos).

    mutacion

    public abstract void mutacion().Modifica la estructura del cromosoma de este individuo. Esta modifi-cacin generalmente es pequea, como cambiar el valor de un nicogen.

    5.1.2. Clase Poblacion

    public class Poblacionextends java.lang.Object.Esta clase contiene variables que caracterizan a una poblacin (ver figura

    48

  • Captulo 5

    5.2). Una poblacin es un conjunto de individuos organizados en unarreglo de tamao igual a tamanoPoblacion ms las variables media,desviacin estndar, mejor y peor individuo:

    media es la media de los valores dados por la funcin de aptitud de losindividuos de la poblacin.

    desviacin es la desviacin estndar de los valores dados por la funcinde aptitud de los individuos de la poblacin.

    mejorIndividuo es el individuo con el mayor valor dado por la funcinde aptitud de la poblacin.

    peorIndividuo es el individuo con el menor valor dado por la funcinde aptitud de la poblacin.

    Constantes

    ALEATORIA

    public static final int ALEATORIA.Especifica al constructor Poblacion(int opcion) crear un objeto conuna poblacin de individuos con cromosomas aleatorios.

    Constructores

    Poblacion

    public Poblacion().Constructor por defecto.

    49

  • 5. Documentacin

    Poblacion individuos: Individuo[] mejorIndividuo: Individuo peorIndividuo: Individuo media: double desviacion: double tamanoPoblacion: int+ Poblacion()+ Poblacion(int)+ setTamanoPoblacion(int)+ getTamanoPoblacion(): int+ getIndividuos(): Individuo[]# setIndividuos(Individuo[])+ getMejorIndividuo(): Individuo# setMejorIndividuo(Individuo)+ getPeorIndividuo(): Individuo# setPeorIndividuo(Individuo)+ getMedia(): double# setMedia(double)+ getDesviacion(): double# setDesviacion(double)+ aleatoria()+ calcMejorPeorMediaDesviacion()+ toString(): String

    Figura 5.2.: Diagrama - Clase Poblacion.

    50

  • Captulo 5

    Poblacion

    public Poblacion(int opcion).Crea una poblacin de tamao tamanoPoblacion (ubicado en la cla-se Configuracion) segn las opciones indicadas. Las opciones vlidasson:

    ALEATORIA crea un objeto con una poblacin de individuos con cromoso-mas aleatorios.

    Parmetros: opcion - puede ser ALEATORIA.Arroja: IllegalArgumentException - si no se selecciona alguna de las

    opciones vlidas.

    Mtodos

    getTamanoPoblacion

    public static int getTamanoPoblacion().Retorna un valor entero que representa el tamao de la poblacin. Esdecir, devuelve el numero de individuos que existe en una poblacin.Retorna: el tamao de la poblacin.

    setTamanoPoblacion

    public static void setTamanoPoblacion(int tamanoPoblacion).Establece el tamao de la poblacin. Es decir, establece el numero deindividuos que existe en una poblacin.Parmetros: tamanoPoblacion - el tamao de la poblacin a utilizar.Arroja: IllegalArgumentException - si tamanoPoblacion es menor a

    2.

    51

  • 5. Documentacin

    getIndividuos

    public Individuo [] getIndividuos().Retorna un arreglo con los individuos de la poblacin. Los individuosdeben ser individuos especficos, es decir, objetos de una clase que haheredado de Individuo y ha implementado todos sus mtodos.Retorna: un arreglo con los individuos de la poblacin.

    setIndividuos

    protected void setIndividuos(Individuo[] individuos).Establece el arreglo de individuos de la poblacin. Los individuos debenser individuos especficos, es decir, objetos de una clase que ha heredadode Individuo y ha implementado todos sus mtodos.Parmetros: individuos - el arreglo de individuos a establecer.

    getMejorIndividuo

    public Individuo getMejorIndividuo().Devuelve el mejor individuo de la poblacin. Es decir, el individuo conel mayor valor de la funcin de aptitud entre todos los miembros de lapoblacin.Retorna: el mejor individuo de la poblacin.

    setMejorIndividuo

    protected void setMejorIndividuo(Individuo mejorIndividuo).Establece el mejor individuo de la poblacin. Este mtodo es utilizado porel mtodo generar de la clase Generador donde se determina el indivi-duo con la funcin de aptitud ms alta de los individuos de esta poblacin.Parmetros: mejorIndividuo - el mejor individuo de la poblacin a

    establecer.

    52

  • Captulo 5

    getPeorIndividuo

    public Individuo getPeorIndividuo().Devuelve el peor individuo de la poblacin. Es decir, el individuo conel menor valor de la funcin de aptitud entre todos los miembros de lapoblacin.Retorna: el peor individuo de la poblacin.

    setPeorIndividuo

    protected void setPeorIndividuo(Individuo peorIndividuo).Establece el peor individuo de la poblacin. Este mtodo es utilizado porel mtodo generar de la clase Generador donde se determina el indivi-duo con la funcin de aptitud ms baja de los individuos de esta poblacin.Parmetros: peorIndividuo - el peor individuo de la poblacin a esta-

    blecer.

    getMedia

    public double getMedia().Retorna la media de las aptitudes de los individuos de la poblacin. Estamedia viene dada por la ecuacin 5.1 (Montgomery y Runger, 1996,p. 18).

    =

    Ni=1

    xi

    N(5.1)

    Donde es la media de la poblacin, xi el valor de la funcin de aptitudde un individuo i y N es el tamao de la poblacin.

    Este valor es calculado en el mtodo generar de la clase Generador yasignado a cada individuo de cada poblacin en cada generacin.Retorna: la media de los valores de las funciones de aptitud de los

    individuos de esta poblacin.

    53

  • 5. Documentacin

    setMedia

    protected void setMedia(double media).Establece la media de las aptitudes de los individuos. Este mtodo esutilizado por el mtodo generar de la clase Generador donde se calculala media de los valores de las funciones objetivos de los individuos de estapoblacin.Parmetros: media - la media a establecer.

    getDesviacion

    public double getDesviacion().Devuelve la desviacin estndar de la poblacin. Esta desviacin viene porla ecuacin 5.2 (Montgomery y Runger, 1996, p. 28).

    =

    Ni=1

    (xi )2

    N(5.2)

    Donde es la desviacin estndar de la poblacin, la media de lapoblacin, xi el valor de la funcin de aptitud de un individuo i y N esel tamao de la poblacin.

    Este valor es calculado en el mtodo generar de la clase Generador yasignado a cada individuo de cada poblacin en cada generacin.Retorna: la desviacin estndar de la poblacin.

    setDesviacion

    protected void setDesviacion(double desviacion).Establece la desviacin estndar de las aptitudes de los individuos. Estemtodo es utilizado por el mtodo generar de la clase Generador dondese calcula la desviacin estndar de los valores de las funciones objetivosde los individuos de esta poblacin.Parmetros: desviacion - la desviacin estndar de la poblacin a

    establecer.

    54

  • Captulo 5

    aleatoria

    public void aleatoria().Genera una poblacin de individuos con cromosomas aleatorios. Paraello crea una arreglo de individuos utilizando fabricaIndividuo deIndividuo encargado de producir individuos especficos. Luego, por cadaindividuo, se hace un llamado al mtodo aleatorio de Individuo que ge-nera cromosomas aleatorios y finalmente se clcula la media, desviacin es-tndar, mejor y peor individuo utilizando el mtodo calcMejorPeorMediaDesviacion.

    calcMejorPeorMediaDesviacion

    public void calcMejorPeorMediaDesviacion().Calcula la media, la desviacin estndar, el mejor y peor individuo dela poblacin. La media viene dada por la ecuacin 5.1 y la desviacinestndar por la ecuacin 5.2. El mejor y el peor individuo correspondena aquellos con la funcin de aptitud de mayor y menor valor, respectiva-mente.

    Todos estos clculos se realizan en un mismo mtodo con la finalidadde optimizar el desempeo del algoritmo. Si se realizaran en mtodosseparados se debera hacer un recorrido de todo el arreglo de individuospor cada mtodo, lo cual no es conveniente.

    5.1.3. Clase Generacion

    public class Generacionextends java.lang.Object.Es una poblacin ms un conjunto de operadores genticos y otras varia-bles (ver figura 5.3). Una generacin esta formada por:

    1. Una poblacin, a la que se aplicarn los operadores genticos.

    2. Un selector, encargado de determinar que individuos (de la poblacin)tendrn oportunidad de cruzarse.

    55

  • 5. Documentacin

    3. Un selector post cruce, que determina que individuos pasan a lasiguiente generacin.

    4. La probabilidad de cruce, que determina de forma aleatoria que parejade individuos se va a cruzar.

    5. La probabilidad de mutacin, que determina de forma aleatoria quedescendientes van a mutar sus cromosomas.

    6. Un boolean, indica si se va a utilizar elitismo.

    7. Un generador, que acciona el proceso evolutivo utilizando todas lasvariables anteriores.

    Cabe destacar que la diferencia entre una generacin y otra es la pobla-cin y el generador que tengan asociados, el resto de las caractersticasestn dadas por variables estticas que comparten todas las generacio-nes.

    Constructores

    Generacion

    public Generacion(Poblacion poblacion).Crea una generacin con una poblacin.Parmetros: poblacion - poblacin a asociar.

    Mtodos

    getPoblacion

    public Poblacion getPoblacion().Devuelve la poblacin asociada a esta generacin. Esta poblacin es nica

    56

  • Captulo 5

    Generacion poblacion: Poblacion selector: Selector selectorPostCruce: SelectorPostCruce probabilidadCruce: double probabilidadMutacion: double elitismo: boolean generador: Generador+ Generacion()+ Generacion(Poblacion)+ getPoblacion(): Poblacion+ setPoblacion(Poblacion)+ getSelector(): Selector+ setSelector(Selector)+ getSelectorPostCruce(): SelectorPostCruce+ setSelectorPostCruce(SelectorPostCruce)+ getProbabilidadCruce(): double+ setProbabilidadCruce(double)+ getProbabilidadMutacion(): double+ setProbabilidadMutacion(double)+ isElitismo(): boolean+ setElitismo(boolean)+ generar(): Generacion+ toString(): String# toStringConPoblaciones(): String

    Figura 5.3.: Diagrama - Clase Generacion.

    57

  • 5. Documentacin

    para esta generacin.Retorna: la poblacin de esta generacin.

    setPoblacion

    public void setPoblacion(Poblacion poblacion).Establece la poblacin asociada a esta generacin.Parmetros: poblacion - la poblacin con la que se va a asociar esta

    generacin.

    getSelector

    public static Selector getSelector().Devuelve el selector utilizado por todas las generaciones.Retorna: el selector utilizado por todas las generaciones.

    setSelector

    public static void setSelector(Selector selector).Establece el selector a utilizar por todas las generaciones.Parmetros: selector - el selector que ser utilizado por todas las

    generaciones.Arroja: NullPointerException - si selector es null.

    getSelectorPostCruce

    public static SelectorPostCruce getSelectorPostCruce().Retorna el selector post cruce utilizado por todas las generaciones.Retorna: el selector post cruce utilizado por todas las generaciones.

    setSelectorPostCruce

    public static void setSelectorPostCruce(SelectorPostCruce selectorPostCruce).

    Establece el selector post cruce a utilizar por todas las generaciones.

    58

  • Captulo 5

    Parmetros: selectorPostCruce - el selector post cruce que ser utili-zado por todas las generaciones.

    Arroja: NullPointerException si selectorPostCruce es null.

    getProbabilidadCruce

    public static double getProbabilidadCruce().Retorna el valor de la probabilidad de cruce utilizado en todas las gene-raciones. Esta probabilidad determina de forma aleatoria que pareja deindividuos se va a cruzar.Retorna: la probabilidad de cruce utilizada por todas las generaciones.

    setProbabilidadCruce

    public static void setProbabilidadCruce(double probabilidadCruce).

    Establece el valor de la probabilidad de cruce utilizado en todas las gene-raciones. Esta probabilidad determina de forma aleatoria que pareja deindividuos se va a cruzar.Parmetros: probabilidadCruce - la probabilidad de cruce a utilizar

    por todas las generaciones.Arroja: IllegalArgumentException - si probabilidadCruce sale del

    rango (0,1).

    getProbabilidadMutacion

    public static double getProbabilidadMutacion().Retorna el valor de la probabilidad de mutacin utilizado en todas lasgeneraciones. Esta probabilidad determina de forma aleatoria que descen-dientes van a mutar sus cromosomas.Retorna: la probabilidad de mutacin utilizada por todas la generacio-

    nes.

    59

  • 5. Documentacin

    setProbabilidadMutacion

    public static void setProbabilidadMutacion(double probabilidadMutacion).

    Establece el valor de la probabilidad de mutacin utilizado en todas lasgeneraciones. Esta probabilidad determina de forma aleatoria que descen-dientes van a mutar sus cromosomas.Parmetros: probabilidadMutacion - la probabilidad de mutacin a

    utilizar por todas las generaciones.Arroja: IllegalArgumentException - si probabilidadMutacion sale

    del rango (0,1).

    isElitismo

    public static boolean isElitismo().Devuelve un boolean que indica si se va a utilizar elitismo. El elitismo esun mecanismo utilizado en algunos algoritmos genticos para asegurar quelos individuos ms aptos de una poblacin pasen a la siguiente generacinsin ser alterados por ningun operador gentico.

    El elitismo asegura que la aptitud mxima de la poblacin nunca sereducir de una generacin a la siguiente. Sin embargo, no necesariamentemejora la posibilidad de localizar el optimo global de una funcin.Retorna: un boolean, true si se utiliza elitismo.

    setElitismo

    public static void setElitismo(boolean elitismo).Establece si aplica o no el elitismo. Se llama elitismo al mecanismoutilizado en algunos algoritmos genticos para asegurar que los individuosms aptos de una poblacin pasen a la siguiente generacin sin seralterados por ningun operador gentico.

    El elitismo asegura que la aptitud mxima de la poblacin nunca sereducir de una generacin a la siguiente. Sin embargo, no necesariamente

    60

  • Captulo 5

    mejora la posibilidad de localizar el optimo global de una funcin.Parmetros: elitismo - un boolean, true si se desea utilizar elitismo.

    generar

    public Generacion generar().Inicia la evolucin de una generacin a otra por medio de la accin delos operadores genticos. Este mtodo crea un objeto de tipo Generadory hace un llamado al mtodo auxiliar generar donde son aplicados losoperadores genticos a la poblacin haciendo uso de las probabilidadesde cruce (probabilidadCruce) y mutacin (probabilidadMutacion).Retorna: una nueva generacin producto de esta.

    toString

    public String toString().Devuelve una cadena de caracteres con datos de la generacin. Estosdatos consisten en variables de la poblacin asociada a esta genera-cin:

    Media es la media de la funcin de aptitud de los individuos de la pobla-cin.

    Desviacin Estndar es la desviacin estndar de la funcin de aptitudde los individuos de la poblacin.

    Mejor Individuo es el individuo con la mayor funcin de aptitud de lapoblacin.

    Peor Individuo es el individuo con la menor funcin de aptitud de lapoblacin.

    Sobrescribe: toString en la clase java.lang.Object.Retorna: una cadena de caracteres con datos de la generacin.

    61

  • 5. Documentacin

    toStringConPoblaciones

    protected String toStringConPoblaciones().Devuelve una cadena de caracteres con datos de la generacin incluyendoa los individuos de la poblacin. Devuelve los mismos datos que el mto-do toString y adems muestra a todos los individuos de la poblacinasociada a esta generacin.Retorna: una cadena de caracteres con datos de la generacin incluyendo

    a los individuos de la poblacin.

    5.1.4. Clase Ejecucion

    public class Ejecucion.extends java.lang.Object.Es una corrida independiente de un algoritmo gentico (ver figura 5.4).Es un proceso evolutivo completo, consiste en un arreglo de objetos detipo Generacion. En esta clase se crea una generacin i a partir de unageneracin i-1, esto se realiza tantas veces como se indique en el mtodosetNumeroGeneraciones.

    Mtodos

    getNumeroGeneraciones

    public static int getNumeroGeneraciones().Devuelve el numero de generaciones por ejecucin.Retorna: el numero de generaciones por ejecucin.

    setNumeroGeneraciones

    public static void setNumeroGeneraciones(int numeroGeneraciones).

    Establece el numero de generaciones por ejecucin. Una generaciones

    62

  • Captulo 5

    Ejecucion generaciones: Generacion[] numeroGeneraciones: int tiempoEjecucion: long+ Ejecucion()+ getNumeroGeneraciones(): int+ setNumeroGeneraciones(int)+ getGeneraciones(): Generacion[]+ getTiempoEjecucion(): double+ ejecutar()+ toString(): String+ toStringConPoblaciones(): String

    Figura 5.4.: Diagrama - Clase Ejecucion.

    consiste en una poblacin ms un conjunto de operadores genticos yotras variables que son aplicadas a dicha poblacin para crear una nuevageneracin.

    Una generacin produce otra generacin y esta a la siguiente y as sucesi-vamente hasta alcanzar una cantidad igual al valor establecido en estemtodo. Una vez se llega a la ultima generacin se detiene la ejecucin yse pasa a la siguiente si lo permite el parmetro numeroEjecuciones.Parmetros: numeroGeneraciones - el numero de generaciones a esta-

    blecer.Arroja: IllegalArgumentException - si numeroGeneraciones es me-

    nor a 1.

    getGeneraciones

    public Generacion[] getGeneraciones().Devuelve las generaciones de una ejecucin. A partir de estas generacionesse pueden obtener otros datos de inters como la poblacin asociada acada generacin, los individuos, media y desviacin de las funciones de

    63

  • 5. Documentacin

    aptitud.Retorna: la generaciones de la ejecucin.

    getTiempoEjecucion

    public double getTiempoEjecucion().Devuelve el tiempo que tarda la ejecucin en completarse. Es decir,devuelve el tiempo que tardan en ejecutarse todas las generacionesdel algoritmo gentico. Esta mtodo debe llamarse despus del mtodoejecutar de esta misma clase, de lo contrario se genera un excepcinIllegalStateException.Retorna: el tiempo de la ejecucin.Arroja: IllegalStateException - si no se llama previamente al mtodo

    ejecutar.

    ejecutar

    public void ejecutar().Inicia la corrida de un algoritmo gentico. Este mtodo crea una poblacininicial de individuos con cromosomas aleatorios utilizando el constructorPoblacion(int) con la opcin ALEATORIA. Esta poblacin inicial esintroducida en el constructor de la primera generacin del arreglo y apartir de este momento, comienza un ciclo en el que una nueva generacin(i) es creada a partir de una anterior (i-1 ) por medio del mtodo generarde Generacion hasta alcanzar una cantidad de generaciones igual anumeroGeneraciones.

    toString

    public String toString().Devuelve una cadena de caracteres con datos de la ejecucin. La cadenamuestra el numero de cada generacin y muestra los datos de esta. Estemtodo no muestra a los individuos de las poblaciones asociadas a cadageneracin.

    64

  • Captulo 5

    Sobrescribe: toString en la clase java.lang.Object.Retorna: una cadena de caracteres con datos de la ejecucin.

    toStringConPoblaciones

    public String toStringConPoblaciones().Devuelve una cadena de caracteres con datos de la ejecucin incluyendoa los individuos de la poblacin. La cadena muestra el numero de cadageneracin y muestra los datos de esta. Este mtodo muestra a losindividuos de las poblaciones asociadas a cada gene