CBI. Licenciatura en Computación APRENDIENDO AUTOMATAS ACICLICOS CON ALGORITMOS GENETICOS. Torres Hernández Yazmín Yahaira. Hernández García Humberto

Documentos relacionados
ALGORITMOS GENÉTICOS

Son una clase particular de los algoritmos evolutivos.

ALGORITMOS GENÉTICOS. En lugar de envidiar la naturaleza debemos emularla Holland

Tutorías: 10:00 a 14:00 de lunes a viernes en el L (Solicitud mediante )

Inteligencia Artificial

3. Algoritmo genético

TEMA 3: Áreas de la IA: Ejemplos de investigación actual.

Algoritmos genéticos

1. Introducción 2. Esquema básico 3. Codificación 4. Evaluación 5. Selección 6. Operadores 7. Ejemplo. Algoritmos genéticos

09 Análisis léxico V Compiladores - Profr. Edgardo Adrián Franco Martínez

II Unidad EL ALGORITMO GENETICO BINARIO. Rafael Vazquez Perez

SISTEMAS INTELIGENTES

Minería de datos (Algoritmos evolutivos)

Lenguajes y Gramáticas

Clase 07: Autómatas. Solicitado: Ejercicios 05: Autómatas

Lenguajes y Compiladores Análisis Léxico

Algoritmos Genéticos. Introducción a la Robótica Inteligente. Álvaro Gutiérrez 20 de abril de

ALGORITMOS GENÉTICOS

TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY

INDICE. Procedimiento 4. Mutación Paramétrica. 8

Tema 2: Algoritmos Genéticos

Máquinas de estado finito y expresiones regulares

Tema 5: Algoritmos Genéticos

Máquina de estado finito con salida sin salida

Algunas ventajas asociados comúnmente a ellos son:

Universidad Tecnológica Nacional Facultad Regional Buenos Aires Introducción a la Inteligencia Artificial. Algoritmos Geneticos

Mejoras a algoritmos genéticos. Inteligencia Computacional Blanca A. Vargas Govea Sep 25, 2012

Programación Evolutiva

Ciencias de la Computación I

Tema 2: Lenguajes Formales. Informática Teórica I

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

SSL Guia de Ejercicios

COMPUTACIÓN BIOLÓGICA

CAPITULO 2: LENGUAJES

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

COMPUTACIÓN BIOLÓGICA

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down).

CONTADORES Y SECUENCIADORES

Análisis de algoritmos

ALGORITMOS GENÉTICOS: ALGUNOS RESULTADOS DE CONVERGENCIA

Tema: Autómatas de Estado Finitos

Igualdad de cadenas. Las nociones de sufijo y prefijo de cadenas sobre un alfabeto son análogas a las que se usan habitualmente.

TEMA 3 Elementos de la teoría de los conjuntos. *

ANÁLISIS LÉXICO AUTÓMATAS FINITOS

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Procesadores de Lenguajes. Análisis sintáctico. Gramáticas libres de contexto

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

ALGORÍTMICA

Prof. María Alejandra Quintero. Informática Año

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Se pueden agrupar las reglas que tienen la misma parte izquierda:

Estructuras de Datos. Practica 06: Codificación de Huffman

El tiempo estimado para realizar la prueba es de 3 horas y media

Carlos J. Zapata G Carlos A. Ramirez V

Conceptos. Generales ALGORITMOS

Análisis de algoritmos

CAPITULO 2: MARCO TEÓRICO. En el desarrollo de este capítulo se presentan descripciones generales,

Capítulo 9. Introducción a los lenguajes formales. Continuar

COMPRESIÓN DE MENSAJES

BÚSQUEDA DE RUTAS DE METRO

localizar de un dato con un acceso directo y en una sola comparación de la llave. HASH

RECONOCIMIENTO DE PATRONES DRA. LETICIA FLORES PULIDO

Algoritmos y Complejidad

Metaheurísticas. Seminario 3. Problemas de optimización con técnicas basadas en poblaciones

ALGORITMOS GENÉTICOS EN LA SOLUCIÓN DE ECUACIONES DIOFÁNTICAS LINEALES

OCW-V.Muto Sistemas de numeración Cap. III CAPITULO III. SISTEMAS DE NUMERACION 1. REPRESENTACION DE LA INFORMACION

Análisis y síntesis de sistemas digitales combinacionales

IN34A - Optimización

Metaheurísticas

Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación.

La resolución de problemas es una tarea únicamente humana comprobable en todos los casos con los mismos resultados.

TAD CONJUNTOS Y MULTICONJUNTOS

APRENDIZAJE Práctica 1 Implementación de un generador de muestras aleatorias para lenguajes regulares

INTRODUCCION A LA SIMULACION DE MODELOS. Simulación es la descripción de un sistema a través de modelos que se pueden aplicar a varias disciplinas.

TEORIA DE AUTOMATAS.

Algoritmos y Estructuras de Datos Ingeniería en Informática

TEMA 1. PROGRAMACIÓN DE UN COMPUTADOR

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Conceptos básicos de álgebra relacional

Gramáticas tipo 0 o Estructura de frase En este tipo de gramáticas no hay restricción en su producciones y tienen la forma siguiente.

INSTITUTO TECNOLOGICO DE NUEVO LAREDO ING. BRUNO LÓPEZ TAKEYAS INTELIGENCIA ARTIFICIAL ALGORITMOS GENETICOS

Introducción a la Teoría de Autómatas, Lenguajes y Computación

Algorítmica y Lenguajes de Programación. Algoritmos voraces y divide y vencerás

Convertir un AFND a un AFD

MODELOS DE KRIPKE. Lógicas para la Informática y la Inteligencia Artificial

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

EKIPO 5 ALGORITMOS GENETICOS

Computación Evolutiva Algoritmos Genéticos

OPTIMIZACIÓN DE MODELOS

UNIDAD DE APRENDIZAJE I

TEORÍA DE CONJUNTOS: Conceptos básicos

Transcripción:

División: CBI Grado: Licenciatura en Computación Título del Trabajo: APRENDIENDO AUTOMATAS ACICLICOS CON ALGORITMOS GENETICOS Lugar de realización: Laboratorio de Acústica y Fonética UAMI Nombre de los participantes: Torres Hernández Yazmín Yahaira Hernández García Humberto Nombre y firma del asesor: Dr. Jhon Charles Goddard Close

INDICE. INTRODUCCIÓN...6 CAPITULO 1...9 LENGUAJES Y EXPRESIONES REGULARES...9 1.1 Símbolos...9 1.2 Alfabeto...9 1.3 Cadena... 10 1.4 Longitud de cadena... 10 1.5 Cadena vacía...11 1.6 Universo del discurso...11 1.7 Lenguaje... 12 1.8 Lenguaje vació... 13 CAPÍTULO 2... 15 AUTÓMATAS... 15 2.1 Introducción... 15 2.2 Definición Autómata finito deterministico... 16 2.3 Representación de autómatas... 17 2.3.1 Tabla de transiciones... 17 2.3.2 Diagramas de transiciones... 17 2.4 Autómata Finito No Deterministico... 19 CAPITULO 3... 21 ALGORITMOS GENÉTICOS... 21 3.1 Introducción... 21 3.2 Algoritmos Genéticos... 21 3.2.1 Orígenes... 21 3.2.2 Descripción... 22 3.3 Funcionamiento... 22 3.3.1 Bases biológicas... 22 3.4 Algoritmo Genético...24 3.5 Descripción algorítmica... 25 3.6 Cómo saber si es posible usar el Algoritmo Genético?... 27 3.7 Selección... 28 3.7.1 Selección por la Regla de la Ruleta... 28 3.7.2 Selección por Ranking... 29 3.7.3 Selección de Estado Fijo... 30 3.8 Elitismo... 30 3.9 Operadores de un AG... 31 3.9.1 Operador de cruce... 31

3.9.2 Cruce en un punto... 31 3.9.3 Cruce en dos puntos... 31 3.9.4 Cruce uniforme... 32 3.9.5 Cruce aritmético... 32 3.10 Operador de mutación... 32 3.10.1 Inversión de genes... 32 3.10.2 Cambio de orden... 33 3.10.3 Modificación de genes... 33 3.11 Parámetros de los AGs... 33 3.11.1 Porcentaje de Cruce (Pc)... 33 3.11.2 Porcentaje de Mutación (Pm)... 34 3.11.3 Tamaño de la Población (tampob)... 34 3.11.4 Número de Generaciones (nrogen)... 34 3.11.5 Tamaño del Individuo (tamind)... 34 3.12 Representación del genotipo... 34 3.12.1 Representación Binaria... 35 3.12.2 Representación Directa... 35 3.13 Ejemplo de un Algoritmo Genético... 35 3.14.1 El problema... 39 3.14.2 Implementación... 39 3.14.3 Funciones que se utilizaron... 40 3.14.3.7 report();... 41 3.14.3.8 evaluate();... 41 3.14.3.9 elitist():... 41 3.14.3.10 Resultados...41 CAPITULO 4... 44 APLICACIÓN DE ALGORITMOS GENÉTICOS PARA EL APRENDIZAJE DE AUTÓMATAS FINITOS.... 44 4.1 Introducción... 44 4.2 Estructura de la población... 46 4.3 Inicialización... 50 4.4 Selección y reemplazo... 50 4.5 Función de evaluación (fitness)... 50 4.5.1 Consistencia (C1):...51 4.5.2 Tamaño (C2):... 52 4.5.3 Generalización (C3):... 52 4.6 Operador de Cruzamiento.... 53 4.7 Operador de Mutación.... 56 4.8 Otros Operadores...57 4.8.1 Validación... 57 4.8.2 Operador State Merge... 58 4.8.3 Operador State Split... 58 CAPITULO 5... 61

CODIFICACIÓN PARA EL APRENDIZAJE DE AUTÓMATAS FINITOS QUE RECONOZCAN CADENAS... 61 5.1 Descripción y estructuras de datos del programa... 61 5.2 Procedimiento Principal del programa... 62 5.3 Descripción de cada función... 62 5.3.1 Genera_pob_inicial:... 62 5.3.2 Validar_población:... 62 5.3.3 Evalúa_población:... 63 5.3.4 Carga_archivo:... 65 5.3.5 Algoritmo_genético:... 65 5.3.6 Encuentra_mejor:... 66 5.3.7 Visualiza_población:... 66 5.3.8 Genera_archivo:... 66 5.3.9 Cruzamiento:... 66 5.3.10 Mutación:... 68 5.3.11 State_Merge:... 68 5.3.12 State_Split:... 69 CAPITULO 6... 72 PRUEBAS Y RESULTADOS... 72 6.1 Descripción de la prueba 1... 72 6.1.1. Primer prueba utilizando el lenguaje 1... 73 6.1.2 Segunda prueba utilizando el lenguaje 1... 77 6.1.3 Tercer prueba utilizando el lenguaje 1... 78 6.2. Descripción de la prueba utilizando otro lenguaje... 79 6.2.1. Primer prueba utilizando el lenguaje 2... 80 6.2.2 Segunda prueba utilizando el lenguaje 2... 83 6.2.2 Tercer prueba utilizando el lenguaje 2... 83 6.3 Prueba con los datos utilizados por Anja Belz... 84 CONCLUSION... 88 BIBLIOGRAFIA... 89 ANEXO... 90 A) MANUAL DE USUARIO... 90 B) FORMATO DE ARCHIVOS... 92 a) Formato archivo cadenas... 92 b) Formato archivo result.txt... 92 c) Formato archivo generado.txt... 93 C) CÓDIGO FUENTE... 93 D) PRUEBA DE DIGITOS...128

INTRODUCCION INTRODUCCIÓN Durante las dos últimas décadas el campo de la computación ha tenido diversas aplicaciones en todas las áreas de conocimiento. Una aplicación es la computación evolutiva que se basa en la naturaleza, todo se lleva a cabo a base de interacciones locales entre individuos, y entre estos y lo que les rodea, haciendo pequeños modelos de la naturaleza, que tuvieran alguna de sus características, y ver cómo funcionaban, para luego extrapolar sus conclusiones a la totalidad. La Computación evolutiva ha sido recientemente reconocida como campo de investigación. Su campo de aplicación se extiende desde los problemas de optimización hasta e l aprendizaje de m quinas. Bajo esta denominación se engloban distintos enfoques de simulación de la evolución: l os algoritmos genéticos, las estrategias evolutivas y la programación evolutiva. Todos ellos tienen en comparación la reproducción las modificaciones aleatorias, la competencia y la selección de individuos en una población. El Profesor Michalewicz ofrece, en su libro, una introducción al tema abarcando cada uno de los enfoques evolutivos aunque con preferencia hacia los algoritmos genéticos y sus extensiones: los programas evolutivos. La comunidad científica internacional ha mostrado un creciente interés en una nueva técnica de búsqueda basada en la teoría de la evolución y que se conoce como el algoritmo genético. Esta técnica se basa en los mecanismos de selección que utiliza la naturaleza, de acuerdo a los cuales los individuos más aptos de una población son los que sobreviven, al adaptarse más fácilmente a los cambios que se producen en su entorno. Ahora bien, a pesar de que el algoritmo es un proceso lógico e innato del hombre no es tan común meditar los pasos que se deben seguir para resolver un problema. Esto se debe en gran medida a que en la escuela sólo nos transmiten conocimientos sin enseñarnos a pensar, no nos enseñan a analizar los problemas. Un Algoritmo Genético es un procedimiento de resolución de problemas que se basa en los métodos de Evolución Genética de los seres vivos para solucionar problemas de búsqueda y optimización, debido a que el problema a resolver se trata de una búsqueda se utilizó un algoritmo genético para darle solución. El reporte esta organizado por definiciones de componentes de un autómata deterministico finito, y la partes que forma un algoritmo genético como algunos de sus operadores que existen, seguimos por entender un algoritmo genético con el ejemplo que fue tomado del libro de Michalewicz minimiza la función que es x 2 x*y+z donde se

observa el funcionamiento y comportamiento de funciones como selección, cruzamiento, mutación, la función de evaluación en este caso fue codificada para números reales. Se continúo con hacer modificaciones al programa que fueron cambiar la función fitness, lo cual consistió en codificar las entradas de números reales en números binarios para trabajar con los binarios en las funciones de cruzamiento y mutación, y observar el comportamiento el cual se comprueba que converge más rápido a la solución. La parte final de este trabajo es una aplicación importante hacia el aprendizaje de un autómata finito para un conjunto de cadenas, esta aplicación esta basada en el diseño de Anja Belz (Computational Learning of FiniteState Models for Natural Language Processing), se toman las constantes que el articulo propone. Al final se obtiene una tabla de transición del mejor autómata encontrado.

CAPITULO 1 LENGUAJES Y EXPRESIONES REGULARES CAPITULO 1 LENGUAJES Y EXPRESIONES REGULARES En este capitulo se describen y definen los diferentes componentes que forman un lenguaje. 1.1 Símbolos Es una entidad abstracta, que no se va a definir, pues se dejará como axioma. Al igual que no se define punto en Geometría. Normalmente los símbolos son letras (a, b, c,...,z), dígitos (O, 1,..., 9) y otros caracteres (+,, *, /,?,...). Los símbolos también pueden estar formados por varias letras o caracteres, así por ejemplo las palabras reservadas de un lenguaje de programación son símbolos de dicho lenguaje. Ejemplo 1. Un conjunto de símbolos. a, b, c, #, O, 1, +, *,then, begin, end, else 1.2 Alfabeto Es un conjunto finito de símbolos, no vació. Para definir que un símbolo a pertenece a un alfabeto V. Los alfabetos se definen por enumeración de los símbolos que contienen, así por ejemplo se presentan a continuación varios alfabetos. Ejemplo 2. Se muestran algunos tipos de alfabetos. V 1 = {A, B, C, D, E, F, G, H,..., X, Y, Z V 2 = {a, b, c, d, 0, J, 2, 3, 4, *, #, + V 3 = { 0, 1 V 4 = {if, then, begin, end, else, a, b,.., =, >, ; También se puede definir las tablas ASCII y EBCDIC como los alfabetos de distintos ordenadores.

CAPITULO 1 LENGUAJES Y EXPRESIONES REGULARES 1.3 Cadena Una cadena es una secuencia finita de símbolos de un determinado alfabeto. Ejemplo 3. Para estas cadenas hacemos referencia a los alfabetos definidos en ejemplo 2. ABCD es una cadena del alfabeto V 1 a+2*b es una cadena del alfabeto V 2 000111 es una cadena del alfabeto V 3 if a>b then b=a; es una cadena del alfabeto V 4 1.4 Longitud de cadena La longitud de una cadena es el número de símbolos que contiene. La notación empleada es la que se indica en los siguientes ejemplos. Una cadena o palabra de longitud k de un alfabeto V, es una secuencia de K símbolos. Y se denota de la siguiente manera. Tenemos la cadena V 1 V 2 V 3 V 4 V k la longitud para esta cadeana es K. Se representa V 1 V 2 V 3 V 4 V k = K Ejemplo 4. Longitud de cadenas, se utilizan las cadenas del ejemplo 3. abcb =4 a +2*b =5 I 000 111 =6 if a > b then a = b ; =9

CAPITULO 1 LENGUAJES Y EXPRESIONES REGULARES Ejemplo 5. En este ejemplo a partir del alfabeto se muestran algunas cadenas que se pueden formar con diferente longitud. Alfabetos Cadenas {a a, aa, aaa, aaaa {a,b a,b,aabab, donde ab ba {a,b,c abcabc,acb {0,1 100011,11110 Ejemplo 6.Longitud de cadenas. Encontrar todas las cadenas con longitud 1, 2, 3 en los alfabetos. Alfabeto Cadenas longitud 1 longitud 2 longitud 3 {a a aa aaa {0,1 0,1 01,10,00,11 000,001,010,100 011,101,110,111 1.5 Cadena vacía Introducimos la cadena única que no contiene símbolos llamada cadena vacía, por : ε y su longitud es ε =0 1.6 Universo del discurso Cerradura de Kleene o Universo de discurso Usamos el símbolo V * para denotar el conjunto de todas las cadenas de V incluyendo a ε. El operador * se llama la cerradura de Kleene.

CAPITULO 1 LENGUAJES Y EXPRESIONES REGULARES Ejemplo 7. Sea un alfabeto con una sola letra V = { a, entonces el universo del discurso es : V* = { ε, a, aa, aaa, aaaa,... que contiene infinitas cadenas. 1.7 Lenguaje Se denomina lenguaje sobre un alfabeto V a un subconjunto del universo del discurso. También se puede definir como un conjunto de palabras de un determinado alfabeto. Alguien puede pensar que los lenguajes se pueden definir por enumeración de las cadenas que pertenecen a dicho lenguaje, pero este método además de ineficiente, es en muchos casos imposible (habitualmente un lenguaje tiene infinitas cadenas). Así los lenguajes se definen por las propiedades que cumplen las cadenas del lenguaje. Ejemplo 7.El conjunto de palíndromos (cadenas que se leen igual hacia adelante, que hacia atrás) sobre el alfabeto {Ø,l. Evidentemente este lenguaje tiene infinitas cadenas. Algunas cadenas de este lenguaje son: ε 0 1 00 11 010 0110 000000 01101 111111 100001 001100 1101011

CAPITULO 1 LENGUAJES Y EXPRESIONES REGULARES 1.8 Lenguaje vació Existe un lenguaje denominado el lenguaje vacío, que es un conjunto vacío y que se denota por { Ø. El lenguaje vacío no debe confundirse con un lenguaje que contenga una sola cadena, y que ésta sea la cadena vacía, es decir { ε, ya que el número de elementos (cardinalidad) de estos dos conjuntos es diferente. donde ε no nada mas puede ser vacía, puede ser cualquier cadena. Cardinal ({Ø ) = O Cardinal ({ε ) = 1

CAPITULO 2 AUTÓMATAS CAPÍTULO 2 AUTÓMATAS En este capitulo se explica que es un autómata, así como los diferentes componentes que lo forman. 2.1 Introducción La palabra autómata evoca algo que pretende imitar las funciones propias de los seres vivos, especialmente relacionadas con el movimiento. En el campo de los Traductores, Procesadores, Compiladores e Intérpretes, lo fundamental no es la simulación del movimiento, sino la simulación de procesos para tratar información. La información se codifica en cadenas de símbolos, y un autómata es un dispositivo que manipula cadenas de símbolos que se le presentan a su entrada, produciendo otras tiras o cadenas de símbolos a su salida. El autómata recibe los símbolos de entrada, uno detrás de otro, es decir secuencialmente. El símbolo de salida que en un instante determinado produce un autómata, no sólo depende del último símbolo recibido a la entrada, sino de toda la secuencia o cadena, que ha recibido hasta ese instante. Todo lo anterior conduce a definir un concepto fundamental: estado de un autómata. El estado de un autómata es toda la información necesaria en un momento dado, para poder deducir, dado un símbolo de entrada en ese momento, cual será el símbolo de salida. Es decir, conocer el estado de un autómata, es lo mismo que conocer toda la historia de símbolos de entrada, así como el estado inicial, estado en que se encontraba el autómata al recibir el primero de los símbolos de entrada. El autómata tendrá un determinado número de estados (este numero es finito), y se encontrará en uno u otro según sea la historia de símbolos que le han llegado. Si un autómata se encuentra en un estado determinado, recibe un símbolo también determinado y efectuará un cambio o transición a otro estado (también puede quedarse en el mismo estado).

CAPITULO 2 AUTÓMATAS El campo de estudio de los Traductores, Procesadores e Intérpretes son los lenguajes y las gramáticas que los generan. Los elementos del lenguaje son sentencias, palabras, etc. formadas a partir de un alfabeto o vocabulario, que no es otra cosa que un conjunto finito de símbolos. Establecidas las reglas gramaticales, una cadena de símbolos pertenecerá al correspondiente lenguaje si tal cadena se ha formado obedeciendo esas reglas. Entonces un autómata reconocedor de ese lenguaje, funciona de tal forma que cuando reciba a su entrada una determinada cadena de símbolos indica si dicha cadena pertenece o no al lenguaje. También se mostrará como existe un tipo de autómata para reconocer cada uno de los tipos de lenguajes generados por las correspondientes gramáticas. 2.2 Definición Autómata finito deterministico Un autómata consiste en una quíntupla (S, V, δ, i, F) donde: V =conjunto de entradas o alfabeto de entrada S = conjunto finito de estados δ: S x V S es una función llamada la función de transición i є S: es el estado inicial F є S es el conjunto (posiblemente vació) de estados finales donde: V es un conjunto finito, y sus elementos se llaman entradas o símbolos de entrada. S es el conjunto de estados finitos δ es la función de transición o función del estado siguiente, y para un par del conjunto S x V devuelve un estado perteneciente al conjunto S. S x V es el conjunto producto cartesiano de V por S. i es el estado inicial siempre el inicio del lenguaje a analizar comienza en este estado. F Es el estado final que indica que el ultimo símbolo del lenguaje llego e este, entonces el lenguaje se dice que es aceptado este estado puede o no tener transición.

CAPITULO 2 AUTÓMATAS 2.3 Representación de autómatas Los autómatas se pueden representar mediante: Tabla de transiciones Diagrama de transiciones 2.3.1 Tabla de transiciones Las función δ puede representarse mediante una tabla, con tantas filas como estados y tantas columnas como entradas. Así por ejemplo se puede representar el autómata, donde : V = {a, b, S = {q 1 q 2, q 3, i=q 1, F={ q 1, q 2,q 3 y las funciones δ se puede representar por la siguiente tabla la cual se llama tabla de transición: f a b q 1 q 1 q 2 q 2 q 3 q 2 δ (a, q 1 )= q 1 δ (b, q 1 )= q 2 Así se tiene que δ (a, q 2 )= q 3 δ (b, q 2 )= q 2 δ (a, q 3 )= q 3 δ (b, q 3 )= q 1 q 3 q 3 q 1 2.3.2 Diagramas de transiciones Los diagramas de transiciones son otra forma de representar las funciones de transición de un autómata. El diagrama de transición es un grafo orientado en el que cada nodo corresponde a un estado: Nodo inicial o nodo intermedio Nodo Final

CAPITULO 2 AUTÓMATAS Y si δ (a, q i ) = q j existe un arco dirigido del nodo q j al correspondiente q j sobre el que se pone la etiqueta, tal y como se muestra en la figura. a q i q j Fig. : Diagrama de transición. Ejemplo 1. V = {a,b, S = {q 1 q 2, q 3, i=q 1, F={ q 1, q 2,q 3 y las funciones δ representar por la siguiente tabla de transición: se puede b Tabla de transición f a b q 1 q 1 q 2 a b q 2 a q 2 q 3 q 2 q 3 q 3 q 1 q 1 a b q 3 Diagrama de transición El lenguaje que podría aceptar este autómata a, ab,aab,aaa, bb,bba,b,babababababa,... es infinito.

CAPITULO 2 AUTÓMATAS 2.4 Autómata Finito No Deterministico Un Autómata Finito No Determinista, que se denotara como AFN, se caracteriza porque en un estado puede haber mas de una transicion posible para un mismo sımbolo de entrada. donde: Un Autómata Finito No Deterministico (AFD) en una quíntupla (S, V, δ, i, F) V =conjunto de entradas o alfabeto de entrada S = conjunto finito de estados y no vacio δ: S x V 2S es una función llamada la función de transición i є S: es el estado inicial F є S es el conjunto (posiblemente vació) de estados finales Donde el autómata solo acepte un lenguaje finito tal que decimos que una cadena es aceptada si empezamos en un estado inicial y terminamos en el estado final. Ejemplo 2. V = {a, b, S = {q 1, q 2, q 3, i=q 1, F={q 3 y las funciones δ se puede representar por la siguiente tabla de transición: Tabla de transición f a b a q 1 q 2, q 1 q 2 q 2 q 3 a,b q 1 q 2 a q 3 q 3 En este caso las cadenas que son aceptadas por el autómata son las siguientes: a*aa, a*ba

CAPITULO 3 ALGORITMOS GENÉTICOS CAPITULO 3 ALGORITMOS GENÉTICOS En este capitulo se explica que es un algoritmo genético, así como su funcionamiento. También se muestra una aplicación de estos. 3.1 Introducción El algoritmo genético es una técnica de búsqueda basada en la teoría de la evolución de Darwin, que ha cobrado tremenda popularidad alrededor del mundo durante los últimos años. Se presentan aquí los conceptos básicos que se requieren para abordarla, así como un sencillo ejemplo que permita comprender cómo aplicarla al problema de su elección. 3.2 Algoritmos Genéticos 3.2.1 Orígenes. En los últimos años, la comunidad científica internacional ha mostrado un creciente interés en una nueva técnica de búsqueda basada en la teoría de la evolución y que se conoce como el algoritmo genético. Esta técnica se basa en los mecanismos de selección que utiliza la naturaleza, de acuerdo a los cuales los individuos más aptos de una población son los que sobreviven, al adaptarse más fácilmente a los cambios que se producen en su entorno. Hoy en día se sabe que estos cambios se efectúan en los genes (unidad básica de codificación de cada uno de los atributos de un ser vivo) de un individuo, y que los atributos más deseables (i.e., los que le permiten a un individuo adaptarse mejor a su entorno) del mismo se transmiten a sus descendientes, cuando éste se reproduce sexualmente. Un investigador de la Universidad de Michigan llamado John Holland estaba consciente de la importancia de la selección natural, y a fines de los 60 s desarrolló una técnica que permitió incorporarla en un programa de computadora. Su objetivo era lograr que las computadoras aprendieran por sí mismas. A la técnica que inventó Holland se le llamó originalmente "planes reproductivos", pero se hizo popular en 1975.

CAPITULO 3 ALGORITMOS GENÉTICOS 3.2.2 Descripción Los algoritmos genéticos son, a groso modo, un método de optimización: dada una función objetivo, el AG lleva a cabo una búsqueda en el espacio de soluciones intentando encontrar la solución que minimiza dicha función objetivo. Por lo tanto, los algoritmos genéticos están indicados para resolver todo tipo de problemas que puedan ser expresados como un problema de optimización: basta con encontrar la representación adecuada para las soluciones y la función a optimizar. Básicamente, los algoritmos genéticos funcionan como sigue: dada una población de soluciones, y en base al valor de la función objetivo para cada una de los individuos (soluciones) de esa población, se seleccionan los mejores individuos (los que minimizan la función objetivo) y se combinan para generar otras nuevos. Este proceso se repite cíclicamente. Como se pude ver, el proceso es similar al que se da en la naturaleza: una serie de individuos compiten por su supervivencia; los mejor adaptados al medio (los que optimizan la función objetivo) sobreviven y tienen más posibilidades de aparearse, transmitiendo así parte de su material genético "mejor adaptado" a las generaciones siguientes. De esta manera, generación tras generación, la especie consigue una mayor y mejor adaptación al medio en el que vive. 3.3 Funcionamiento 3.3.1 Bases biológicas Como ya se ha dicho, los algoritmos genéticos están inspirados en la naturaleza, en la evolución de las especies. Por ello, para comprender su funcionamiento es aconsejable conocer primero cómo funcionan los mecanismos de la evolución desde un punto de vista meramente biológico. En primer lugar, hay que percatarse de que el primer factor clave en el proceso evolutivo es la presión selectiva que ejerce el medio sobre las poblaciones que lo habitan. Básicamente, ni el espacio vital ni el alimento son suficientes para todos, de modo que algunos individuos, concretamente aquéllos más débiles (o más correctamente, peor adaptados), tienen menos probabilidades de sobrevivir y de aparearse.

CAPITULO 3 ALGORITMOS GENÉTICOS Se genera así un mecanismo de selección que filtra el conjunto de la población. Este filtro, el de la adaptación al medio, permite seleccionar a aquellos individuos cuyas características se ajustan mejor a las vicisitudes que plantea la supervivencia en el entorno natural en el que se desarrolla su existencia. Así mismo, se desechan las "soluciones" inadecuadas, esto es, las características de los individuos no adaptados. Se dijo antes que el primer factor clave en la evolución es la presión selectiva del medio. Pues bien, el segundo factor clave es la información genética y su transmisión entre generaciones. La información genética, codificada en el ADN, describe a un individuo concreto de forma completa, determinando las características que dicho individuo desarrollará a lo largo de su vida. De esta manera, el que un individuo se adapte o no al medio depende básicamente de la información contenida en su material genético. La transmisión de dicha información mediante la reproducción es la que articula el proceso evolutivo, el cual se vale de la recombinación del material genético aportado por los progenitores para "ensayar" nuevos conjuntos de características, generando así una descendencia que hereda en lo posible todas aquéllas que resultan ventajosas. Todos los seres vivos están formados por células. En cada célula hay el mismo número de cromosomas. Los cromosomas son cadenas de ADN y definen cómo es un ser vivo. Un cromosoma se divide en genes (bloques de ADN). Cada gen codifica una proteína particular. Se puede decir que cada gen codifica una característica de un ser vivo (Por ejemplo el color de ojos). Al conjunto de todos los cromosomas se denomina genoma. Cada ser vivo posee un conjunto de cromosomas particular, diferente en mayor o menor medida del resto de seres vivos, incluso de su especie. A este conjunto se denomina genotipo. A la manifestación externa (Color de ojos, inteligencia...) del genotipo en un ser vivo se llama fenotipo. Al reproducirse los seres vivos ocurre en primer lugar el proceso que se denomina cruce: los genes de los padres se combinan para generar un nuevo cromosoma (retoño o offspring). Este nuevo cromosoma puede sufrir ahora el proceso llamado mutación. Los genes sufren cambios, normalmente por errores al ser copiados de sus padres. Otro concepto interesante es el fitness (grado de adaptación al entorno) de un ser vivo: El fitness es una medida de lo bueno que es un individuo según su grado de adaptación al entorno. Si es adapta bien, se puede asegurar su supervivencia y por tanto tendrá un fitness mayor.

CAPITULO 3 ALGORITMOS GENÉTICOS De este modo, a lo largo de generaciones sucesivas, el material genético de los individuos mejor adaptados prevalece, generándose en cada ciclo reproductor individuos mejor adaptados, en promedio, que aquéllos de los que descienden. 3.4 Algoritmo Genético Podemos decir que un Algoritmo Genético es un procedimiento de resolución de problemas que se basa en los métodos de Evolución Genética de los seres vivos para solucionar problemas de búsqueda (en cuyo proceso analiza las posibles soluciones para el problema) y optimización (la cual encuentra el mejor resultado para un problema específico). Los algoritmos Genéticos están basados en integrar e implementar eficientemente dos ideas fundamentales: 1. Las representaciones simples como cadenas binarias de las soluciones del problema. 2. La realización de transformaciones simples para modificar y mejorar estas representaciones. Un Algoritmo Genético debe especificar los siguientes elementos: Una representación de individuos (cromosomas). Una población inicial Una medida de evaluación Un criterio de selección / eliminación de cromosomas Una o varias operaciones de recombinación Una o varias operaciones de mutación Las decisiones que hay que tomar para implementar un algoritmo genético son: Criterio de codificación. Como se va a almacenar la información en el genoma (Individuo). Criterio de tratamiento de individuos no factibles. Como se van a tratar a los individuos que no cumplan las restricciones. Criterio de inicialización. Cómo se va a construir la población inicial del algoritmo genético. Criterio de parada. Determina cuándo el algoritmo ha llegado a una solución aceptable. Función de adaptación. Corresponde a la función de costo de la investigación operativa tradicional, también llamada fitness.

CAPITULO 3 ALGORITMOS GENÉTICOS Operadores genéticos. Se emplean para determinar cómo va a ser la nueva generación. Básicamente son los operadores de cruzamiento y mutación. Tanto el cruzamiento como la mutación pueden ser realizados de muchas formas distintas. Criterios de reemplazo. Los criterios que determinan quiénes se van a cruzar. No tienen que ser obligatoriamente los mismos que los criterios de selección de los padres. Parámetros de funcionamiento. Determinados parámetros que, sin poder ser englobados en ninguno de los anteriores, son fundamentales para el funcionamiento de un algoritmo genético. 3.5 Descripción algorítmica A continuación se describe un algoritmo genético básico. Las similitudes con el proceso natural de la evolución son evidentes pero, de todos modos, se expondrán a medida que surjan. En primer lugar, debe definirse el problema. Para que el AG funcione, será necesario dar una función que permita medir cómo de acertada es una solución respecto a otra. En otros términos, el problema debe poder definirse como un problema de minimización (o maximización) de una función objetivo, que representa la presión selectiva del medio. En segundo lugar, deberá especificarse la manera de codificar las soluciones. Lo más usual es escoger una representación en forma de cadena de binaria. La interpretación que se dé a esa cadena dependerá de la naturaleza de la solución (puede ser la codificación de un valor entero, de un real, una ristra de valores booleanos...) Una vez se conoce el problema y la manera de representar sus soluciones, se procede a implementar el AG. Para facilitar la comprensión de la explicación que sigue, se expondrá mediante pseudocódigo, el cual se comentará a continuación.

CAPITULO 3 ALGORITMOS GENÉTICOS 1. Inicializar la población 2. Selección 1. Aplicar función objetivo 2. Seleccionar individuos para el cruce 3. Cruce 4. Mutación 5. Inserción 6. Si se_cumple_criterio_parada entonces parar otro caso volver a 2 En primer lugar (1) se procede a la inicialización de la población. Para cada individuo de la población se selecciona un valor completamente aleatorio. Después se aplica a cada individuo la función objetivo (2.1), lo que da una medida de lo adaptado que está cada uno de ellos. Se seleccionan entonces los individuos que se van a cruzar (2.3). Suponiendo que se han seleccionado dos, se procede a cruzarlos (3): se escoge un punto de corte, y la cadena de números binarios que representa a cada progenitor se divide en dos por ese punto. A continuación se generan dos individuos nuevos uniendo las subcadenas generadas como se muestra en la siguiente figura: Progenitores: 00110101 01110011 ^ Corte: 001 10101 011 10011 Cruce: 001 10011 011 10101 Descendencia: 00110011 01110101 En el paso 4 se genera en la descendencia una mutación en un gen (bit) aleatorio. Esto sucede con una probabilidad baja (esto es, en la mayoría de los casos, el paso 4 no tiene efecto).

CAPITULO 3 ALGORITMOS GENÉTICOS mutación (2º bit) 00110011 ===================> 01110011 Una vez se ha generado la descendencia, deberá insertarse en la población (5). Para llevar a cabo la inserción existen diversas políticas. Una de ellas consiste simplemente en eliminar los dos individuos peor adaptados e insertar los recién generados. Por último, en el paso 6 se comprueba si alguno de los individuos disponibles satisface los criterios establecidos y se puede considerar como solución al problema. En este paso también se puede comprobar si se ha excedido un número de iteraciones o un límite de tiempo. Si no es así y ningún individuo cumple los criterios de parada, se vuelve al paso 2. 3.6 Cómo saber si es posible usar el Algoritmo Genético? La aplicación más común de los algoritmos genéticos ha sido la solución de problemas de optimización, en donde han mostrado ser muy eficientes y confiables. Sin embargo, no todos los problemas pudieran ser apropiados para la técnica, y se recomienda en general tomar en cuenta las siguientes características del mismo antes de intentar usarla: Su espacio de búsqueda (i.e., sus posibles soluciones) debe estar delimitado dentro de un cierto rango. Debe poderse definir una función de aptitud que nos indique qué tan buena o mala es una cierta respuesta. Las soluciones deben codificarse de una forma que resulte relativamente fácil de implementar en la computadora. El primer punto es muy importante, y lo más recomendable es intentar resolver problemas que tengan espacios de búsqueda discretos, aunque éstos sean muy grandes. Sin embargo, también podrá intentarse usar la técnica con espacios de búsqueda continuos, pero preferentemente cuando exista un rango de soluciones relativamente pequeño.

CAPITULO 3 ALGORITMOS GENÉTICOS El algoritmo genético únicamente maximiza, pero la minimización puede realizarse fácilmente utilizando el recíproco de la función maximizante (debe cuidarse, por supuesto, que el recíproco de la función no genere una división por cero). Una característica que debe tener esta función es que debe ser capaz de "castigar" a las malas soluciones, y de "premiar" a las buenas, de forma que sean estas últimas las que se propaguen con mayor rapidez. La codificación más común de las respuestas es a través de cadenas binarias, aunque se han utilizado también números reales y letras. El primero de estos esquemas ha gozado de mucha popularidad debido a que es el que propuso originalmente Holland, y además porque resulta muy sencillo de implementar. 3.7 Selección Como ya se ha visto los individuos se seleccionan para reproducirse, ahora bien el problema está en cómo seleccionar. De acuerdo con la teoría de la evolución de Darwin, sólo los mejores individuos se reproducen. Basándose en esto existen varios métodos que son utilizados por los genéticos: Selección por la Regla de la Ruleta, Selección por Ranking, Selección de Estado Fijo por citar algunos de los más utilizados. 3.7.1 Selección por la Regla de la Ruleta Los padres se seleccionan de acuerdo a su fitness. Los individuos mejores (con mayor fitness) son los que tienen mayores posibilidades de ser elegidos. Intuitivamente el proceso construye una ruleta o un "tarta" en la que cada uno de las porciones representa a un individuo. La porción de tarta que le toca a cada individuo es proporcional a su fitness. Así los individuos buenos se llevarán las mayores porciones y al revés ocurrirá con los peores. El siguiente ejemplo clarifica el proceso:

CAPITULO 3 ALGORITMOS GENETICOS Ahora, al igual que en un casino se lanza a la ruleta una canica. En el lugar que pare dicha canica, será un lugar ocupado por un cromosoma que será elegido. Resulta claro que los individuos con mayor fitness son los que más a menudo son elegidos. Existe un algoritmo para realizar este proceso: 1. [SumaTotal] Calcular la suma total acumulada de los fitness de todos los individuos de la población actual. 2. [Elegir un número aleatorio r] Generar un número aleatorio entre 0 y la SumaTotal. 3. [Recorrer] Recorrer la población acumulando nuevamente los fitness. Cuando la suma que se lleve sea mayor o igual a r seleccionamos el individuo donde se vaya recorriendo. 3.7.2 Selección por Ranking El anterior tipo de selección funciona mal cuando existan grandes diferencias entre los fitness de los individuos de la población. Por ejemplo si un cromosoma ocupa el 90% de la ruleta el resto de los cromosomas tienen muy pocas posibilidades de ser elegidos. La selección por ranking da solución a este problema. Los individuos son ordenados de acuerdo a su ranking de fitness. De esta manera si tenemos n cromosomas el individuo con peor fitness se le asignará un 1 y el que tenga el mejor fitness se le asignará la n. Véase en las dos siguientes figuras cómo cambia la situación antes y después del ranking. Situación antes del Ranking (Ruleta)

CAPITULO 3 ALGORITMOS GENETICOS Situación después del Ranking Ahora todos los cromosomas tienen la oportunidad de ser seleccionados. Sin embargo este método puede hacer que el genético converja lentamente a la solución, ya que los mejores individuos no se diferencian apenas de los peores. A este esquema se le pueden aplicar otros criterios; por ejemplo, se crea la descendencia de uno de los paladines/amazonas, y esta sustituye al más parecido entre los perdedores. Esto se denomina crowding, y fue introducido por DeJong. Una variante de este es el muestreado estocástico universal, que trata de evitar que los individuos con más fitness copen la población; en vez de dar la vuelta a una ruleta con una ranura, da la vuelta a la ruleta con N ranuras, tantas como la población; de esta forma, la distribución estadística de descendientes en la nueva población es más parecida a la real. 3.7.3 Selección de Estado Fijo No es un tipo específico de selección de padres. La principal idea de este tipo de selección es que un gran número de individuos de la actual pasarán sin modificar a la siguiente generación. Un AG de selección de estado fijo funciona del siguiente modo: En cada generación se eligen unos pocos cromosomas con alto fitness para reproducir. Los peores individuos de la actual generación son eliminados y los nuevos individuos ocupan su lugar. El resto de individuos pasan sin modificar a la siguiente generación. 3.8 Elitismo Este concepto expresa la idea de que el mejor individuo de la actual generación pase sin modificar a la siguiente generación. De esta forma no se perderá el mejor cromosoma. Al resto de la población se le aplica la reproducción normalmente.

CAPITULO 3 ALGORITMOS GENETICOS Por otra parte existen algoritmos genéticos llamados elitistas debido a que convergen muy rápidamente a la solución. Esto se debe al tipo de problema que se trate. Más adelante se verá un caso concreto El problema del coloreamiento de un grafo. 3.9 Operadores de un AG 3.9.1 Operador de cruce Los operadores de cruce tratan de crear una generación de individuos nuevos pidiendo información a sus ancestros. Aunque estos operadores parecen corresponderse con la representación basada en precedencia, realizando un estudio más minucioso se observa que su funcionamiento está influenciado por otros factores. 3.9.2 Cruce en un punto Se copian los genes del primer padre hasta el punto de corte y se rellena con el resto de elementos que hagan la solución válida en el orden en que aparecen en el segundo padre considerando la cadena de genes como cíclica. En el caso de que se haya utilizado una codificación binaria simplemente se copian el resto de genes del segundo padre. 11001011+11011111 = 11001111 (1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) = (1 2 3 4 5 6 8 9 7) 3.9.3 Cruce en dos puntos Se copian los genes del primer padre comprendidos entre los dos puntos de cruce y se rellenan los que faltan con los del segundo padre considerando la cadena de genes como cíclica. 11001011 + 11011111 = 11011111

CAPITULO 3 ALGORITMOS GENÉTICOS 3.9.4 Cruce uniforme No se puede aplicar a la representación basada en permutaciones. Se escoge aleatoriamente si el gen iésimo del hijo se toma del primer o del segundo padre. 11001011 + 11011101 = 11011111 3.9.5 Cruce aritmético No se puede aplicar a la representación basada en permutaciones. Se realizan operaciones aritméticas con los genes de los padres para resultar la codificación genética del hijo. 11001011 + 11011111 = 11001001 (AND) 3.10 Operador de mutación 3.10.1 Inversión de genes Se seleccionan genes aleatoriamente y se invierte su valor. Se utiliza en representaciones de bits, cambiando 0s por 1s o viceversa. 11001001 => 10001001

CAPITULO 3 ALGORITMOS GENÉTICOS 3.10.2 Cambio de orden Se seleccionan dos genes aleatoriamente y se intercambian sus posiciones. Se utiliza en representaciones basadas en permutaciones. (1 2 3 4 5 6 8 9 7) => (1 8 3 4 5 6 2 9 7) 3.10.3 Modificación de genes Se realizan pequeñas modificaciones en los genes. Por ejemplo en una codificación basada en números reales se realizan sumas de números muy pequeños positivos o negativos. (1.29 5.68 2.86 4.11 5.55) => (1.29 5.68 2.73 4.22 5.55) 3.11 Parámetros de los AGs 3.11.1 Porcentaje de Cruce (Pc) Indica con qué frecuencia se cruzarán los individuos. Si éste es 0%, los hijos serán como los padres y sólo serán alterados por la mutación. Si éste es 100% todos los individuos nuevos serán creados mediante cruce de los padres de la generación previa. Cuanto más se crucen los individuos se supone que los hijos serán mejores. Sin embargo es recomendable, por la naturaleza del genético, que algunos individuos pasen sin modificar a la siguiente generación.

CAPITULO 3 ALGORITMOS GENÉTICOS 3.11.2 Porcentaje de Mutación (Pm) Establece la probabilidad con la cual los individuos serán mutados. Si éste porcentaje es 0% los individuos generados después de aplicarse el cruce no sufrirán ningún cambio por el contrario si es de 100% todos lo individuos de la población sufrirán cambios o mutaciones. La mutación trata de impedir que la búsqueda del genético caiga en extremos locales por eso es conveniente que ocurra de vez en cuando. No es bueno, sin embargo, que la mutación ocurra continuamente, ya que la búsqueda del genético pasa de ser "inteligente" a búsqueda aleatoria. 3.11.3 Tamaño de la Población (tampob) Establece cuántos individuos habrá en cada una de las generaciones. Si el tamaño de la población es muy bajo, el algoritmo genético tiene pocas posibilidades de evolucionar por el cruce y los los individuos nuevos se parecerán mucho a sus padres. Tampoco un tamaño excesivo es adecuado porque se llega a un punto en el que los resultados no mejoran por mucho que se incremente el tamaño de la población. Lo ideal es, en función del problema y la codificación, establecer un límite adecuado del tamaño de la población. 3.11.4 Número de Generaciones (nrogen) Con el paso de las generaciones la población del genético evolucionará obteniendo cada vez mejores individuos. Conviene, al igual que con el tamaño de la población, fijar un número de generaciones adecuado para conseguir el resultado deseado. 3.11.5 Tamaño del Individuo (tamind) Dependerá del número de elementos que constituyan una solución. Varía con el problema a resolver. 3.12 Representación del genotipo Es esencial distinguir en una solución a un problema entre el genotipo y el fenotipo. El genotipo es la representación interna que nosotros utilizamos para trabajar con la solución, mientras que el fenotipo es la solución en sí misma. Los operadores del algoritmo trabajarán con el genotipo. Se ha de elegir una representación para el genotipo:

CAPITULO 3 ALGORITMOS GENÉTICOS 3.12.1 Representación Binaria La representación binaria es la más común. En ella, un cromosoma es una cadena de bits 0 ó 1. Las primeras investigaciones en genéticos utilizaron este tipo de codificación debido a su sencillez. Es una representación indirecta. CROMOSOMA A 101100101100101011100101 CROMOSOMA B 111111100000110000011111 3.12.2 Representación Directa En este tipo de representación se usa directamente en problemas que utilizan valores difíciles de representar. Por ejemplo si se usan número reales. Se trata de problemas en los que una codificación binaria sería demasiado complicada. Cada cromosoma es una secuencia de valores. Los valores son cualquier cosa relacionada con el tipo problema.(números reales, caracteres u otros tipos de objetos). CROMOSOMA A CROMOSOMA B CROMOSOMA C 1.2324 5.3243 0.4556 2.3293 2.4545 ABDJEIFJDHDIERJFDLDFLFEGT (atrás), (atrás), (derecha), (hacia delante), (izquierda) 3.13 Ejemplo de un Algoritmo Genético Vamos a partir de una función f(x) muy sencilla: f(x)=x^2 (es decir, x al cuadrado).

CAPITULO 3 ALGORITMOS GENÉTICOS Queremos encontrar el valor de x que hace que la función f(x) alcance su valor máximo, pero restringiendo a la variable x a tomar valores comprendidos entre 0 y 31. Aún más, a x sólo le vamos a permitir tomar valores enteros, es decir: 0,1,2,3,...,30, 31. Obviamente el máximo se tiene para x = 31, donde f vale 961. No necesitamos saber algoritmos genéticos para resolver este problema, pero su sencillez hace que el algoritmo sea más fácil de comprender. Lo primero que debemos hacer es encontrar una manera de codificar las posibles soluciones (posible valores de x). Una manera de hacerlo es con la codificación binaria. Con esta codificación un posible valor de x es: (0, 1, 0, 1, 1) Se comienza de derecha a izquierda se multiplica la última componente ( 1 * 2 0 ) + ( 1 * 2 1 ) + ( 0 * 2 2 ) + ( 1 * 2 3 ) + ( 0 * 2 4 ) y la suma es 11. Observa que (0, 0, 0, 0, 0) equivale a x=0 y que (1,1,1,1,1) equivale a x = 31. A cada posible valor de la variable x en representación binaria le vamos a llamar individuo. Una colección de individuos constituye lo que se denomina población y el número de individuos que la componen es el tamaño de la población. Una vez que tenemos codificada la solución, debemos escoger un tamaño de población, para este ejemplo utilizamos 6 individuos. Debemos partir de una población inicial. Una manera de generarla es aletoriamente. Nuestro siguiente paso es hacer competir a los individuos entre sí. Este proceso se conoce como selección. La tabla 1 resume el proceso.

CAPITULO 3 ALGORITMOS GENÉTICOS Tabla 1 SELECCIÓN (1) (2) (3) (4) (5) 1 (0,1,1,0,0) 12 144 6 2 (1,0,0,1,0) 18 324 3 3 (0,1,1,1,1) 15 225 2 4 (1,1,0,0,0) 24 576 5 5 (1,1,0,1,0) 26 676 4 6 (0,0,0,0,1) 1 1 1 Cada fila en la tabla 1 está asociada a un individuo de la población inicial. El significado de cada columna de la tabla es el siguiente: (1) = Número que le asignamos al individuo. (2) = Individuo en codificación binaria. (3) = Valor de x. (4) = Valor de f(x). Observa que el mejor individuo es el 5 con f = 676. Calcula la media de f y obtendrás f_med =324.3. Una manera de realizar el proceso de selección es mediante un torneo entre dos. A cada individuo de la población se le asigna una pareja y entre ellos se establece un torneo: el mejor genera dos copias y el peor se desecha. La columna (5) indica la pareja asignada a cada individuo, lo cual se ha realizado aleatoreamente. Existen muchas variantes de este proceso de selección. Después de realizar el proceso de selección, la población que tenemos es la mostrada en la columna (2) de la tabla 2. Por ejemplo, que en el torneo entre el individuo 1 y el 6 de la población inicial, el primero de ellos ha recibido dos copias, mientras que el segundo cae en el olvido.

CAPITULO 3 ALGORITMOS GENÉTICOS Tabla 2 CRUCE (1) (2) (3) (4) 1 (0,1,1,0,0) 5 1 2 (0,1,1,0,0) 3 3 3 (1,0,0,1,0) 2 3 4 (1,0,0,1,0) 6 1 5 (1,1,0,1,0) 1 1 6 (1,1,0,1,0) 4 1 Tras realizar la selección, se realiza el cruce. Una manera de hacerlo es mediante el cruce 1 X: se forman parejas entre los individuos aleatoriamente de forma similar a la selección. Dados dos individuos pareja se establece un punto de cruce aleatorio, que no es más que un número aleatorio entre 1 y 4 (la longitud del individuo menos 1). Por ejemplo, en la pareja 23 el punto de cruce es 3, lo que significa que un hijo de la pareja conserva los tres primeros bits del padre y hereda los dos últimos de la madre, mientras que el otro hijo de la pareja conserva los tres primeros bits de la madre y hereda los dos últimos del padre. La población resultante se muestra en la columna (2) de la tabla 3. (1) (2) (3) (4) 1 (0,1,0,1,0) 10 100 2 (1,1,1,0,0) 28 784 3 (0,1,1,1,0) 14 196 4 (1,0,0,0,0) 16 256 5 (1,1,0,1,0) 26 676 6 (1,0,0,1,0) 18 324

CAPITULO 3 ALGORITMOS GENÉTICOS En la columna (3) tiene el valor de x; en la siguiente tiene el valor de f correspondiente. Ahora el valor máximo de f es 784 (para el individuo 2), mientras que antes de la selección y el cruce era de 676. Además f_med ha subido de 324.3 a 389.3. Se observa que los individuos después de la selección y el cruce son mejores que antes de estas transformaciones. El siguiente paso es volver a realizar la selección y el cruce tomando como población inicial la de la tabla 3. Esta manera de proceder se repite tantas veces como número de iteraciones. Y cuál es el óptimo?. En realidad un algoritmo genético no te garantiza la obtención del óptimo pero, si está bien construido, te proporciona una solución razonablemente buena. Puede que se obtenga el óptimo, pero el algoritmo no confirma que lo sea. Así que se queda con la mejor solución de la última iteración. También es bueno ir guardando la mejor solución de todas las iteraciones anteriores y al final quedarte con la mejor solución de las exploradas. 3.14 APLICACIÓN DE LOS ALGORITMOS GENÉTICOS 3.14.1 El problema Esta aplicación consiste en encontrar el máximo de una función utilizando un algoritmo genético. El dominio de las variables de la función son mapeados a un dominio entre 0 y 1, utilizando una transformación lineal. 3.14.2 Implementación Se utiliza una población de 25 individuos. Se utiliza una codificación basada en cadenas binarias. Se hicieron dos versiones para esta aplicación la diferencia entre ellas es la forma en que se seleccionan los individuos para formar la nueva generación. El tipo de cruzamiento es de dos puntos, los dos individuos que se van a cruzar se escogen aleatoriamente.

CAPITULO 3 APLICACIÓN ALGORITMOS GENÉTICOS La mutación es la siguiente, una variable se muta (cambiar de 0 a 1 o viceversa) si un número aleatorio x (que esta entre 0 y 1) es menor que la probabilidad de mutación. Para la primera versión se seleccionan por medio de la ruleta, para la segunda versión se seleccionan a dos individuos contiguos y sobrevive el que mejor se adapte al entorno. El programa escribe en un archivo quien fue el mejor individuo, así como su valor de adaptación (fitness). 3.14.3 Funciones que se utilizaron 3.14.3.1 initialize(): Procedimiento initialize: Inicializa los valores de los genes, así como los valores fitness para cada individuo de la población. Lee los limites inferior y superior de cada variable de el "archivo gadata.txt". El formato del archivo de entrada "gadat.txt" es el siguiente: var1_limite_inferior var1_limite_superior var2_limite_inferior var2_limite_superior... 3.14.3.2 evaluate(): Procedimiento evaluate: Evalúa cada uno de los individuos en una función. La función para este ejemplo es x 2 x*y+z. 3.14.3.3 keep_the_best(); Procedimiento keep_the_best: Esta función guarda el mejor individuo de la población. En la última entrada en el arreglo population se tiene una copia del mejor individuo. 3.14.3.4 select(); Este procedimiento selecciona a los individuos que estarán en la siguiente generación. Como se menciono arriba se hicieron dos versiones utilizando diferente tipo de selección.

CAPITULO 3 APLICACIÓN ALGORITMOS GENÉTICOS 3.14.3.5 crossover(); Procedimiento crossover: Selecciona dos individuos para cruzarlos utilizando el cruzamiento de dos puntos. 3.14.3.6 mutate(); Procedimiento mutate: Manda a todos los individuos de la población a al procedimiento mutar el cual es el que se encarga de mutar al individuo. 3.14.3.7 report(); Procedimiento report: Reporta los progresos de la simulación, mandándolos a un archivo de salida "Galog.txt". 3.14.3.8 evaluate(); Procedimiento evaluate: Se evalua cada uno de los individuos en la función. 3.14.3.9 elitist(): Procedimiento elitist: El mejor individuo de la generación anterior es guardado en la última casilla del arreglo. Si el mejor individuo de la generación reciente es peor que el mejor individuo de la generación anterior, entonces se reemplaza el mejor individuo de la generación anterior por el mejor individuo de la generación reciente. 3.14.3.10 Resultados El archivo de entrada es el siguiente: 4 4 3 3 5 5

CAPITULO 3 APLICACIÓN ALGORITMOS GENÉTICOS Resultados de la Primer versión: El máximo se alcanza en la generación 78 y es el siguiente: mejor individuo es : 0000001010100100011110101001011111010000100011010111111110011001101000 00011100001000010001100110 x=4.000 y=2.847 z=4.771 fitness = x^2 x*y + z = 32.156 Resultados de la Segunda versión: El máximo se alcanza en la generación 61 y es el siguiente: mejor individuo: 1111101011011100011110000101001000010001100011100101010011001100101000000010 11001011000000111110 x=3.989 y=2.962 z=3.490 fitness = x^2 x*y + z =31.216 3.14.3.11 Conclusiones Con los resultados se puede concluir que la segunda versión que se implemento es la más eficiente ya que el número máximo que encontró es el máximo de las dos versiones además de que este número se alcanza en la generación 61.