miércoles, 31 de octubre de 2012

ALGORITMO GENÉTICO SIMPLE


ALGORITMO GENÉTICO SIMPLE
    El Algoritmo Genético Simple, también denominado Canónico, se representa en la Figura . 1. Como se verá a continuación, se necesita una codificación o representación del problema, que resulte adecuada al mismo. Además se requiere una función de ajuste ó adaptación al problema, la cual asigna un número real a cada posible solución codificada. Durante la ejecución del algoritmo, los padres deben ser seleccionados para la reproducción, a continuación dichos padres seleccionados se cruzarán generando dos hijos, sobre cada uno de los cuales actuará un operador de mutación. El resultado de la combinación de las anteriores funciones será un conjunto de individuos (posibles soluciones al problema), los cuales en la evolución del Algoritmo Genético formarán parte de la siguiente población.
    Figura 1

    Codificación
    Se supone que los individuos (posibles soluciones del problema), pueden representarse como un conjunto de parámetros (que denominaremos penes), los cuales agrupados forman una ristra de valores (a menudo referida como cromosoma). Si bien el alfabeto utilizado para representar los individuos no debe necesariamente estar constituido por el (0, l), buena parte de la teoría en la que se fundamentan los Algoritmos Genéticos utiliza dicho alfabeto. En términos biológicos, el conjunto de parámetros representando un cromosoma particular se denomina fenotipo. El fenotipo contiene la información requerida para construir un organismo, el cual se refiere como genotipo. Los mismos términos se utilizan en el campo de los Algoritmos Genéticos. La adaptación al problema de un individuo depende de la evaluación del genotipo. Esta última puede inferirse a partir del fenotipo, es decir puede ser computada a partir del cromosoma, usando la función de evaluación. La función de adaptación debe ser diseñada para cada problema de manera específica. Dado un cromosoma particular, la función de adaptación le asigna un número real, que se supone refleja el nivel de adaptación al problema del individuo representado por el cromosoma.
    Durante la fase reproductiva se seleccionan los individuos de la población para cruzarse y producir descendientes, que constituirán, una vez. mutados, la siguiente generación de individuos. La selección de padres se efectúa al azar usando un procedimiento que favorezca a los individuos mejor adaptados, ya que a cada individuo se le asigna una probabilidad
    de ser seleccionado que es proporcional a su función de adaptación. Este procedimiento se dice que está basado en la ruleta sesgada. Según dicho esquema, los individuos bien adaptados se escogerán probablemente varias veces por generación, mientras que, los pobremente adaptados al problema, no se escogerán más que de vez en cuando.
    Una vez seleccionados dos padres, sus cromosomas se combinan, utilizando habitualmente los operadores de cruce y mutación. Las formas básicas de dichos operadores se describen a continuación.
    El operador de cruce, coge dos padres seleccionados y corta sus ristras de cromosomas en una posición escogida al azar, para producir dos subristras iniciales y dos subristras finales. Después se intercambian las subristras finales, produciéndose dos nuevos cromosomas completos (véase la Figura 2). Ambos descendientes heredan genes de cada uno de los padres. Este operador se conoce como operador de cruce basado en un punto. Habitualmente el operador de cruce no se aplica a todos los pares de individuos que han
     Figura 2
    sido seleccionados para emparejarse, sino que se aplica de manera aleatoria, normalmente con una probabilidad comprendida entre 0.5 y 1.0. En el caso en que el operador de cruce no se aplique, la descendencia se obtiene simplemente duplicando los padres.
    El operador de mutación se aplica a cada hijo de manera individual, y consiste en la alteración aleatoria (normalmente con probabilidad pequeña) de cada gen componente del cromosoma. La Figura 3 muestra la mutación del quinto gen del cromosoma. Sí bien
    Figura 3
    puede en principio pensarse que el operador de cruce es más importante que el operador de mutación, ya que proporciona una exploración rápida del espacio de búsqueda, éste último asegura que ningún punto del espacio de búsqueda tenga probabilidad cero de ser examinado, y es de capital importancia para asegurar la convergencia de los Algoritmos Genéticos.
    Para criterios prácticos, es muy útil la definición de convergencia introducida en este campo por De Jong en su tesis doctoral. Si el Algoritmo Genético ha sido correctamente implementado, la población evolucionará a lo largo de las generaciones sucesivas de tal manera que la adaptación media extendida a todos los individuos de la población, así como la adaptación del mejor individuo se irán incrementando hacia el óptimo global. El concepto de convergencia está relacionado con la progresión hacia la uniformidad: un gen ha convergido cuando al menos el 95 % de los individuos de la población comparten el mismo valor para dicho gen. Se dice que la población converge cuando todos los genes han convergido. Se puede generalizar dicha definición al caso en que al menos un poco de los individuos de la población hayan convergido.
    La Figura 4 muestra como varía la adaptación media y la mejor adaptación en un Algoritmo Genético Simple típico.
    Figura 4
    A medida que el número de generaciones aumenta, es más probable que la adaptación media se aproxime a la del mejor individuo.

    Ejemplo

Figura 5

 Población

Tamaño de la población

Una cuestión que uno puede plantearse es la relacionada con el tamaño idóneo de la población. Parece intuitivo que las poblaciones pequeñas corren el riesgo de no cubrir adecuadamente el espacio de búsqueda, mientras que el trabajar con poblaciones de gran tamaño puede acarrear problemas relacionados con el excesivo costo computacional.
Goldberg efectuó un estudio teórico, obteniendo como conclusión que el tamaño óptimo de la población para ristras de longitud I, con codificación binaria, crece exponencialmente con el tamaño de la ristra.
Este resultado traería como consecuencia que la aplicabilidad de los Algoritmos Genéticos en problemas reales sería muy limitada, ya que resultarían no competitivos con otros métodos de optimización combinatoria. Alander, basándose en evidencia empírica sugiere que un tamaño de población comprendida entre l y 21 es suficiente para atacar con éxito los problemas por el considerados.

Población inicial

Habitualmente la población inicial se escoge generando ristras al azar, pudiendo contener cada gen uno de los posibles valores del alfabeto con probabilidad uniforme. Nos podríamos preguntar que es lo que sucedería si los individuos de la población inicial se obtuviesen como resultado de alguna técnica heurística o de optimización local. En los pocos trabajos que existen sobre este aspecto, se constata que esta inicialización no aleatoria de la población inicial, puede acelerar la convergencia del Algoritmo Genético. Sin embargo en algunos casos la desventaja resulta ser la prematura convergencia del algoritmo, queriendo indicar con esto la convergencia hacia óptimos locales.

Función objetivo

Dos aspectos que resultan cruciales en el comportamiento de los Algoritmos Genéticos son la determinación de una adecuada función de adaptación o función objetivo, así como la codificación utilizada.
Idealmente nos interesaría construir funciones objetivo con "ciertas regularidades", es decir funciones objetivo que verifiquen que para dos individuos que se encuentren cercanos en el espacio de búsqueda, sus respectivos valores en las funciones objetivo sean similares. Por otra parte una dificultad en el comportamiento del Algoritmo Genético puede ser la existencia de gran cantidad de óptimos locales, así como el hecho de que el óptimo global se encuentre muy aislado.
La regla, general para construir una buena función objetivo es que ésta debe reflejar el valor del individuo de una manera "real", pero en muchos problemas de optimización combinatoria, donde existe gran cantidad de restricciones, buena parte de los puntos del espacio de búsqueda representan individuos no válidos.
Para este planteamiento en el que los individuos están sometidos a restricciones, se han propuesto varias soluciones. La primera sería la que podríamos denominar absolutista, en la que 'aquellos individuos que no verifican las restricciones, no son considerados como tales, y se siguen efectuando cruces y mutaciones hasta obtener individuos válidos, o bien, a dichos individuos se les asigna una función objetivo igual a cero.
Otra posibilidad consiste en reconstruir aquellos individuos que no verifican las restricciones. Dicha reconstrucción suele llevarse a cabo por medio de un nuevo operador que se acostumbra a denominar reparador.
Otro enfoque está basado en la penalización de la función objetivo. La idea general consiste en dividir la función objetivo del individuo por una cantidad (la penalización) que guarda relación con las restricciones que dicho individuo viola. Dicha cantidad puede simplemente tener en cuenta el número de restricciones violadas ó bien el denominado costo esperado de reconstrucción, es decir el coste asociado a la conversión de dicho individuo en otro que no viole ninguna restricción.
Otra técnica que se ha venido utilizando en el caso en que la computación de la función objetivo sea muy compleja es la denominada evaluación aproximada de la función objetivo. En algunos casos la obtención de n funciones objetivo aproximadas puede resultar mejor que la evaluación exacta de una única función objetivo (supuesto el caso de que la evaluación aproximada resulta como mínimo n veces más rápida que la, evaluación exacta).
Un problema habitual en las ejecuciones de los Algoritmos Genéticos surge debido a la velocidad con la que el algoritmo converge. En algunos casos la convergencia es muy rápida, lo que suele denominarse convergencia prematura, en la cual el algoritmo converge hacia óptimos locales, mientras que en otros casos el problema es justo el contrario, es decir se produce una convergencia lenta del algoritmo. Una posible solución a estos problemas pasa por efectuar transformaciones en la función objetivo. El problema de la convergencia prematura, surge a menudo cuando la selección de individuos se realiza de manera proporcional a su función objetivo. En tal caso, pueden existir individuos con una adaptación al problema muy superior al resto, que a medida que avanza el algoritmo "dominan" a la población. Por medio de una transformación de la función objetivo, en este caso una comprensión del rango de variación de la función objetivo, se pretende que dichos "superindividuos" no lleguen a dominar a la población.
El problema de la lenta convergencia del algoritmo, se resolvería de manera análoga, pero en este caso efectuando una expansión del rango de la función objetivo.
La idea de especies de organismos, ha sido imitada en el diseño de los Algoritmos Genéticos en un método propuesto por Goldberg y Richardson, utilizando una modificación de la función objetivo de cada individuo, de tal manera que individuos que estén muy cercanos entre sí devalúen su función objetivo, con objeto de que la población gane en diversidad.
Función

Selección

La función de selección de padres más utilizada, es la denominada función de selección proporcional a la función objetivo, en la cual cada individuo tiene una, probabilidad de ser seleccionado como padre que es proporcional al valor de su función objetivo.
Denotando por (p super prop sub j,t) la probabilidad de que el individuo (I super j sub t) sea seleccionado como padre, se tiene que:
Función
Esta función de selección es invariante ante un cambio de escala, pero no ante una traslación.
Una de las maneras de superar el problema relacionado con la rápida convergencia proveniente de los superindividuos, que surge al aplicar la anterior función de selección, es el efectuar la selección proporcional al rango del individuo, con lo cual se produce una repartición más uniforme de la probabilidad de selección, tal y como se ilustra en la Figura 6. Si denotamos por rango(g(I super j sub t)) el rango de la función objetivo del individuo (I super j sub t) cuando
Figura 6
los individuos de la población han sido ordenados de menor a mayor (es decir el peor individuo tiene rango 1, mientras que el individuo con mejor función objetivo tiene rango lambda), y sea (p super rango sub j,t) la probabilidad de que el individuo (I super j sub t) sea seleccionado como padre cuando la selección se efectúa proporcionalmente al rango del individuo, se tiene que
Función
La suma de los rangos, lambda(lambda + 1)/2, constituye la constante de normalización.
La función de selección basada en el rango es invariante frente a la translación y al cambio de escala.
Otro posible refinamiento del modelo de selección proporcional, es el modelo de selección del valor esperado, el cual actúa de la manera siguiente: para, cada individuo If, se introduce un contador, inicialiazado en g(I super j sub t)/gt, donde, gt denota la media, de. ) a función objetivo en la generación t. Cada vez que el individuo (I super j sub t) es seleccionado para el cruce, dicho contador decrece en una cantidad c (c pertenece a (0, 5;.1)). El individuo en cuestión dejará de poder ser seleccionado en esa generación, cuando su contador sea negativo.
Un esquema de selección, introducido por Brindle, y que empíricamente ha proporcionado buenos resultados, es el denominado muestreo estocástico con reemplazamiento del resto, en el cual cada individuo es seleccionado un número de veces que coincide con la parte entera del número esperado de ocurrencias de dicho suceso, compitiendo los individuos por los restos. Es decir, si denotamos por n(I super j sub t) el número de veces que el individuo (I super j sub t) es seleccionado para el cruce, tenemos que:
Función
Baker introduce un método denominado muestreo universal estocástico, el cual utiliza un único giro de la ruleta siendo los sectores circulares proporcionales a la función objetivo. Los individuos son seleccionados a partir de marcadores (véase Figura 7), igualmente espaciados y con comienzo aleatorio.
Efectuando un paralelismo con los métodos de muestreo estadísticos, este último tipo
Figura 7
de selección de padres se relaciona con el muestreo sistemático, mientras que la selección proporcional a la función objetivo, está basada en el muestreo estratificado con fijación proporcional al tamaño. También el procedimiento de selección que hemos denominado muestreo estocástico con reemplazamiento del resto, mantiene un paralelismo con el muestreo estratificado con fijación de compromiso.
En el modelo de selección elitista se fuerza a que el mejor individuo de la población en el tiempo t, sea seleccionado como padre.
La selección por torneo, constituye un procedimiento de selección de padres muy extendido y en el cual la idea consiste en escoger al azar un número de individuos de la población, tamaño del torneo, (con o sin reemplazamiento), seleccionar el mejor individuo de este grupo, y repetir el proceso hasta que el número de individuos seleccionados coincida con el tamaño de la población. Habitualmente el tamaño del torneo es 2, y en tal caso se ha utilizado una versión probabilística en la cual se permite la selección de individuos sin que necesariamente sean los mejores.
Una posible clasificación de procedimientos de selección de padres consistirá en: métodos de selección dinámicos, en los cuales las probabilidades de selección varían de generación a generación, (por ejemplo la selección proporcional a la función objetivo), frente a métodos de selección estáticos, en los cuales dichas probabilidades permanecen constantes (por ejemplo la selección basada en rangos).
Si se asegura que todos los individuos tienen asignada una probabilidad de selección distinta de cero el método de selección se denomina preservativo. En caso contrario se acostumbra a denominarlo extintivo.

Cruce

El Algoritmo Genético Canónico descrito anteriormente utiliza el cruce basado en un punto, en el cual los dos individuos seleccionados para jugar el papel de padres, son recombinados por medio de la selección de un punto de corte, para posteriormente intercambiar las secciones que se encuentran a la derecha de dicho punto.
Se han investigado otros operadores de cruce, habitualmente teniendo en cuenta más de un punto de cruce. De Jong investigó el comportamiento del operador de cruce basado en múltiples puntos, concluyendo que el cruce basado en dos puntos, representaba una mejora mientras que añadir más puntos de cruce no beneficiaba el comportamiento del algoritmo. La ventaja de tener más de un punto de cruce radica en que el espacio de búsqueda puede ser explorado más fácilmente, siendo la principal desventaja el hecho de aumentar la probabilidad de ruptura de buenos esquemas.
En el operador de cruce basado en dos puntos, los cromosomas (individuos) pueden contemplarse como un circuito en el cual se efectúa la selección aleatoria de dos puntos, tal y como se indica en la Figura 8.
Figura 8
Desde este punto de vista, el cruce basado en un punto, puede verse como un caso particular del cruce basado en dos puntos, en el cual uno de los puntos de corte se encuentra fijo al comienzo de la ristra que representa al individuo. Véase Figura,9.
En el denominado operador de cruce uniforme (Syswerda) cada gen, en la descendencia se crea copiando el correspondiente gen de uno de los dos padres, escogido de acuerdo ' a una "máscara de cruce" generada aleatoriamente. Cuando existe un l en la "máscara de cruce", el gen es copiado del primer padre, mientras que cuando exista un 0 en la
Figura 9
"máscara de cruce", el gen se copia del segundo padre, tal y como se muestra en la Figura 10. En la literatura, el término operador de cruce uniforme se relaciona con la obtención
Figura 10
de la "máscara de cruce" uniforme, en el sentido de que cualquiera de los elementos del alfabeto tenga asociada la misma probabilidad. Hablando en términos de la teoría de la probabilidad la máscara de cruce está compuesta por una muestra aleatoria de tamaño A extraída de una distribución de probabilidad de Bernouilli de parámetro l/2.
Si tuviésemos en cuenta el valor de la función de adaptación de cada padre en el momento de generar la "máscara de cruce", de tal manera que cuanto mayor sea la función de adaptación de un individuo, más probable sea heredar sus características, podríamos definir, véase Larrañaga y Poza [26], un operador de cruce basado en la función objetivo, en el cual la "máscara de cruce" se interpreta como una muestra aleatoria de tamaño l proveniente de una distribución de Bernouilli de parámetro
Función
donde (I super j sub t) y I(super i sub t) denotan los padres seleccionados para ser cruzados.
El concepto de "máscara de cruce" puede también servir para representar los cruces basados en un punto y basados en múltiples puntos, tal y como se muestra en Figura 11.
Sirag y Weiser, modifican el operador de cruce en el sentido del Simulated Annealing. De esta manera el operador de cruce se modifica definiendo un umbral de energía H. y una temperatura T, las cuales influencian la manera en la que se escogen los bits individuales. Según el operador propuesto el bit (i + 1)-ésimo se tomará del padre opuesto al que se ha tomado el bit i-ésimo, con probabilidad exp( . (tetha sub c)/T), donde T es el parámetro "temperatura" el cual, al igual que en Simulated Annealing, decrecerá lentamente por medio de un programa de enfriamiento. Con altas temperaturas el comportamiento se asemeja al del operador de cruce uniforme, es decir con probabilidad cercana a la unidad los bits se van escogiendo alternativamente de cada padre. Por otra parte cuando el valor
Figura 11
del parámetro temperatura se acerca a cero el hijo "resultante coincide prácticamente con uno de los padres.
Existen otros operadores de cruce específicos para un determinado problema como son, por ejemplo, los definidos para el problema del agente de comercio.
Por otra parte, la idea de que el cruce debería de ser más probable en algunas posiciones ha sido descrita por varios autores (Schaffer y Morishima, Holland, Davis, Levenick).

Mutación

La mutación se considera un operador básico, que proporciona un pequeño elemento de aleatoriedad en la vecindad (entorno) de los individuos de la población. Si bien se admite que el operador de cruce es el responsable de efectuar la búsqueda a lo largo del espacio de posibles soluciones, también parece desprenderse de los experimentos efectuados por varios investigadores que el operador de mutación va ganando en importancia a medida que la población de individuos va convergiendo (Davis).
Schaffer y col. encuentran que el efecto del cruce en la búsqueda es inferior al que previamente se esperaba. Utilizan la denominada evolución primitiva, en la cual, el proceso evolutivo consta tan sólo de selección y mutación. Encuentran que dicha evolución primitiva supera con creces a una evolución basada exclusivamente en la selección y el cruce. Otra conclusión de su trabajo es que la determinación del valor óptimo de la probabilidad de mutación es mucho más crucial que el relativo a la probabilidad de cruce.
La búsqueda del valor óptimo para la probabilidad de mutación, es una cuestión que ha sido motivo de varios trabajos. Así, De Jong recomienda la utilización de una probabilidad de mutación del bit de (l super -1), siendo l la longitud del string. Schaffer y col. utilizan resultados experimentales para estimar la tasa óptima proporcional a l /(lambda super 0.9318),(l super 0.4535), donde lambda denota el número de individuos en la población.
Si bien en la mayoría de las implementaciones de Algoritmos Genéticos se asume que tanto la probabilidad de cruce como la de mutación permanecen constantes, algunos autores han obtenido mejores resultados experimentales modificando la probabilidad de mutación a medida que aumenta el número de iteraciones. Pueden consultarse los trabajos de Ackley, Bramlette, Fogarty y Michalewicz y Janikow.

Reducción

Una vez obtenidos los individuos descendientes de una determinada población en el tiempo t, el proceso de reducción al tamaño original, consiste en escoger lambda individuos de entre los Lambda individuos que forman parte de la población en el tiempo t, y los lambda individuos descendientes de los mismos. Dicho proceso se suele hacer fundamentalmente de dos formas distintas.
O bien los lambda individuos descendientes son los que forman parte de la población en el tiempo t + 1, es lo que se denomina reducción simple, o bien se escogen de entre los 2lambra individuos, los lambda individuos más adaptados al problema, siguiendo lo que podemos denominar un criterio de reducción elitista de grado lambda. Podemos también considerar otros procedimientos de reducción que se colocan entre los anteriores, por ejemplo, si escogemos los (lambda sub 1) mejores de entre padres y descendientes, escogiéndose los lambda . (lambda sub 1)y restantes de entre los descendientes no seleccionados hasta el momento.
El concepto de reducción está ligado con el de tasa de reemplazamiento generacional, (t sub rg) es decir en el porcentaje de hijos generados con respecto del tamaño de la, población.
Si bien en la idea primitiva de Holland [22] dicho reemplazamiento se efectuaba, de l en 1, es decir (t sub gr)=(lambda super -1), habitualmente dicho reemplazamiento se efectúa en bloque, (t sub gr)= 1. De Jong [13] introdujo el concepto de tasa de reemplazamiento generacional con el objetivo de efectuar un solapamiento controlado entre padres e hijos. En su trabajo, en cada paso una proporción, t,~, de la población es seleccionada para ser cruzada. Los hijos resultantes podrán reemplazar a miembros de la población anterior. Este tipo de Algoritmos Genéticos se conocen bajo el nombre de SSGA (Steady State Genetie Algorithm), un ejemplo de los cuales lo constituye GENITOR (Whitley y Kauth, Whitley).
Michalewicz introduce un algoritmo que denomina Algoritmo Genético Modificado, (MOD sub GA), en el cual para llevar a cabo el reemplazamiento generacional, selecciona al azar r1 individuos para la reproducción, así como r2 individuos (distintos de los anteriores) destinados a morir. Estas selecciones aleatorias tienen en consideración el valor de la función objetivo de cada individuo, de tal manera que cuanto mayor es la función objetivo, mayor es la probabilidad de que sea seleccionado para la reproducción, y menor es la probabilidad de que dicho individuo fallezca. El resto de los lambda . (r1 + r2) individuos son considerados como neutros y pasan directamente a formar parte de la población en la siguiente generación.

Algoritmos Genéticos Paralelos

En este apartado se introducirán tres maneras diferentes de explotar el paralelismo de los Algoritmos Genéticos, por medio de los denominados modelos de islas. Para una profundización sobre el tema puede consultarse Stender.

Modelos de islas.

La idea básica consiste en dividir la población total en varias subpoblaciones en cada una de las cuales se lleva, a cabo un Algoritmo Genético. Cada cierto número de generaciones, se efectúa un intercambio de información entre las subpoblaciones, proceso que se denomina migración. La introducción de la migración hace que los modelos de islas sean capaces de explotar las diferencias entre las diversas subpoblaciones, obteniéndose de esta manera una fuente de diversidad genética. Cada subpopulación es una "isla", definiéndose un procedimiento por medio del cual se mueve el material genético de una "isla" a otra. La determinación de la, tasa de migración, es un asunto de capital importancia, ya que de ella puede depender la convergencia prematura de la búsqueda.
Se pueden distinguir diferentes modelos de islas en función de la comunicación entre las
subpoblaciones. Algunas comunicaciones típicas son las siguientes:

  • Comunicación en estrella, en la cual existe una subpoblación que es seleccionada como maestra (aquella que tiene mejor media en el valor de la función objetivo), siendo las demás consideradas como esclavas. Todas las subpoblaciones esclavas mandan sus h1 mejores individuos (h1, > 1) a la subpoblación maestra la cual a su vez manda sus h2 mejores individuos (h2 > 1) a cada una de las subpoblaciones esclavas. Véase Figura 12.
Figura 12
  • Comunicación en red, en la cual no existe una jerarquía entre las subpoblaciones, mandando todas y cada una de ellas sus h3 (h3 > 1) mejores individuos al resto de las subpoblaciones. Véase Figura 13.
Figura 13
  • Comunicación en anillo, en la cual cada subpoblación envía sus h4 mejores individuos (h4 > 1), a una población vecina, efectuándose la migración en un único sentido de flujo. Véase Figura 14.
El modelo de islas ha sido utilizado por varios autores (Whitley y Starkweather, Gorges-Schleuter, Tanese).
Figura 14

Lógica borrosa (fuzzy logic) y algoritmos genéticos


La lógica borrosa trata de acercar la matemática al lenguaje impreciso del hombre común. El ser humano se maneja habitualmente con conceptos vagos , los cuales no pueden ser representados por la matemática tradicional.
Si se pregunta a una serie de personas acerca del estado del clima , es factible que las respuestas sean del tipo:
  • "Hace mucho calor".
  • "Hace frio"
  • "Hoy llovió mucho"
  • "No llovió casi nada: Apenas unas gotitas"
Si alguien responde a la pregunta en forma concreta , su respuesta se parecería a :
"En este momento hay 30 grados centigrados y se espera que para el resto del día la temperatura se eleve hasta los 35 grados , para luego decaer a 20 grados a lo largo dela noche"
Este tipo de respuesta parece extractada del parte meteorológico del noticiero. Esperamos oír algo similar cuando miramos la televisión , pero no tenemos la expectativa de hacerlo cuando le preguntamos al compañero de trabajo que acaba de llegar si hace calor afuera del edificio.
Tenemos entonces que el hombre se maneja con términos vagos para muchas de las acciones de su vida. Una matemática estructurada para trabajar con conceptos precisos no puede entonces representar estos conceptos. La lógica borrosa trata de poder incorporar métodos para que conceptos vagos puedan ser utilizados como funciones matemáticas.
Esta ha tenido una utilidad práctica inmediata en los mecanismos de control de las maquinarias. La lógica borrosa no es un mecanismo de optimización en si mismo , pero vuelve mas flexibles a los sistemas de control de los dispositivos electrónicos , por lo que podríamos decir que se trata de un método optimizado de control.. La difusión que ha tenido en el mundo se le debe en gran parte a la incorporación que han hecho los japoneses durante la década de los 80's de estas técnicas en los productos que comercializan mundialmente , en especial los electrodomésticos. (No es raro ver un lavarropas o una heladera de marca japonesa con el logotipo de Fuzzy Logicincorporado). Si se utiliza lógica borrosa , un dispositivo automático puede ser programado con órdenes del tipo expuesto en el Cuadro GA6

Tipo de Órdenes plausibles de ser implementadas en un contexto de lógica borrosa

La formulación de este tipo de reglas es mucho mas sencilla de entender y explicar por los expertos humanos que deben introducir las mismas. Así mismo , la programación del software es mas simple al igual que su mantenimiento.
4.1. Funciones Borrosas
La lógica borrosa trabaja con las llamadas funciones borrosas , las cuales permiten efectuar las condiciones descriptas precedentemente.
Ejemplo: Para definir la función " mucho " dentro de una serie de valores se procede de la siguiente manera:
  • Se toma la serie , se la ordena de mayor a menor y se extrae el valor mas grande y el valor mas chico. Estos valores corresponden al límite superior y al límite inferior de la serie.
Tenemos entonces que dada una serie variando de a0 hasta aelementos:
Ecuación 3
  • Se establece como amplitud de la serie la diferencia del límite superior y el inferior:
Ecuación 4
  • La función " mucho " queda definida como:
Ecuación 5
En una serie de números naturales , cuyos valores estén entre 0 y 1000 ; A=(LS-LI) ; A=(1000-0) ; A=1000
La función " mucho " fue definida como x/A , por lo que variará desde 0/1000 para x=0 hasta 1000/1000 para x=1000. Tendremos entonces un rango de valores entre 0 y 1.
Ecuación 6
Para facilitar los cálculos , si la serie no comienza de 0 o contiene valores negativos, conviene convertirla en serie de números positivos sumando a cada término el valor máximo negativo.
Ejemplo: la serie de {-3 -2 -1 0 1 2 3 4 5} puede ser convertida en {0 1 2 3 4 5 6 7 8} sumándole 3 a todos los términos.
La serie {3,4,5,6} puede ser convertida en {0,1,2,3} restándole 3 a todos los términos.
Por ello , la ecuación 3 se transforma en:
Ecuación 7
Donde LILS0 representan los límites originales. Estos límites se normalizan a LSLI1 llevando la serie al rango {0..n}.
Ecuación 8
Veamos un caso concreto:
Supongamos la siguiente serie de temperaturas:
ÍTEM
t)
HORA
TEMPERATURA (GRADOS CELSIUS)
1
9
3
2
10
5
3
11
7
4
12
9
5
13
11
6
14
14
7
15
16
8
16
18
9
17
22
10
18
25
11
9
27
12
10
29
13
11
30
14
12
32
15
13
33
16
14
34
17
15
35
18
16
34
19
17
30
20
18
25

La pregunta que se sesea que se responda es ¿Hizo mucho calor a las 16 hs?. Esta pregunta es imposible de responder por los métodos tradicionales ya que la computadora solo puede retornar el valor 34 , pero no discriminar si eso es mucho o no. veamos como trabaja entonces la función " mucho "
Ecuación 9
Observamos que en definitiva la función " mucho " retorna un número representativo del 96,85%. Cuanto mas se acerque el número a 1 o 100% mas valedera será la afirmación. Cuanto mas se acerque a 0 , menos valedera será la misma. Solo en el caso que el resultado sea 0 o 1 (0% o 100%) se puede decir taxativamente que el enunciado es verdadero o falso., blanco o negro. Todos los valores intermedios caen bajo la categoría de "gris ". Un valor tendrá un " gris mas oscuro " ( que lo acercará al negro ) cuando su valor tienda a 1 . De la misma forma , será un " gris mas claro " ( que lo acercará al blanco ) si tiende a 0. No existen , entonces límites precisos para las categorías. volviéndose imprecisos los mismos ( de ahí la nomenclatura de lógica borrosa )
Dado que la función se acerca al 100% obtendremos como resultado que efectivamente hizo mucho calor a la hora señalada.
De la misma manera ,la función " Poco " puede ser descripta como la inversa de la función " mucho " , por lo que tendremos que :
Ecuación 10
Ecuación 11

Dado que el resultado de la función se acerca al 0% obtendremos como resultado que NO hizo poco calor a la hora señalada.
4.2. Algoritmos Genéticos basados en Lógica borrosa
Existe la posibilidad de planear la arquitectura de un GA para que sus funciones de convergencia y control, así como sus operadores genéticos estén basados en lógica borrosa. El GA estaría entonces programado para la supervivencia ante entornos borrosos. Esto acarrearía por un lado la ventaja de la programación de las mismas, aunque tendría un efecto en la supervivencia indistinta de ciertos especímenes con similar valor de la función borrosa aunque diferente valor absoluto. Ejemplo: Si se programa el GA para seleccionar los especímenes con valores " altos " , esto dará igual ponderación a un ejemplar con un 90% de performance (de la función "alto" ) que a uno con el 92% de la misma función.(Ambos son "altos").
Sin lógica borrosa el segundo ejemplar sería mas competitivo que el primero y lo aniquilaría. Dado que el efecto de utilizar o no esta lógica cambia la arquitectura del GA , su implementación no es en si misma ni buena ni mala , dependiendo de los objetivos del programador y de los resultados esperados.
Las diferencias entre un GA con y sin lógica borrosa pueden ser apreciadas en el Cuadro GA7
Cuadro GA7 Diferencias entre un GA con y sin lógica borrosa


Ejemplos de Aplicación

Ejemplo 1

Veamos cómo funciona un algoritmo genético:
Vamos a partir de una función f(x) muy sencilla:
f(x)=x2
Imagina que deseas 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(posibles 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). ¿Cómo se interpreta esto? Muy sencillo: multiplica la última componente (un 1) por 1, la penúltima (un 1) por 2, la anterior (un 0) por 4, la segunda (un 1) por 8 y la primera(un 0) por 16 y a continuación haz la suma: 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 ilustrativo vamos a escoger 6 individuos.
Debemos partir de una población inicial. Una manera de generarla es aleatoriamente: coge una moneda y lánzala al aire; si sale cara, la primera componente del primer individuo es un 0 y en caso contrario un 1. Repite el lanzamiento de la moneda y tendremos la segunda componente del primer individuo (un 0 sí sale cara y un 1 sí sale cruz). Así hasta 5 veces y obtendrás el primer individuo. Repite ahora la secuencia anterior para generar los individuos de la población restantes. En total tienes que lanzar 5 * 6 = 30 veces la moneda.
Nuestro siguiente paso es hacer competir a los individuos entre sí. Este proceso se conoce como selección. La tabla 1 resume el proceso.

Tabla 1.- SELECCION
(1)(2)(3)(4)(5)
1(0,1,1,0,0)121446
2(1,0,0,1,0)183243
3(0,1,1,1,1)152252
4(1,1,0,0,0)245765
5(1,1,0,1,0)266764
6(0,0,0,0,1)111
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 fmed=324.3. En cuanto a la columna (5) ahora te lo explico. 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 aleatoriamente. Existen muchas variantes de este proceso de selección, aunque este método nos vale para ilustrar el ejemplo.
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. Observa, 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.


Tabla 2.- CRUCE
(1)(2)(3)(4)
1(0,1,1,0,0)51
2(0,1,1,0,0)33
3(1,0,0,1,0)23
4(1,0,0,1,0)61
5(1,1,0,1,0)11
6(1,1,0,1,0)41

Tras realizar la selección, se realiza el cruce. Una manera de hacerlo es mediante el cruce 1X: 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 2-3 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.

Tabla 3.- POBLACION TRAS EL CRUCE

(1)(2)(3)(4)
1(0,1,0,1,0)10100
2(1,1,1,0,0)28784
3(0,1,1,1,0)14196
4(1,0,0,0,0)16256
5(1,1,0,1,0)26676
6(1,0,0,1,0)18324

En la columna (3) tienes el valor de x; en la siguiente tienes el valor de f correspondiente. Fíjate en que 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 fmed ha subido de 324.3 a 389.3. ¿Qué quiere decir esto? Simplemente 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 tú fijes. 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 proporcionará una solución razonablemente buena. Puede que obtengas el óptimo, pero el algoritmo no te confirma que lo sea. Así que quédate con la mejor solución de la última iteración. También es buena idea ir guardando la mejor solución de todas las iteraciones anteriores y al final quedarte con la mejor solución de las exploradas.

Consideraciones adicionales

En problemas reales en los que se aplican los algoritmos genéticos, existe la tendencia a la homegeinización de la población, es decir a que todos los individuos de la misma sean idénticos. Esto impide que el algoritmo siga explorando nuevas soluciones, con lo que podemos quedar estancados en un mínimo local no muy bueno.
Existen técnicas para contrarrestar esta "deriva genética". El mecanismo más elemental, aunque no siempre suficientemente eficaz, es introducir una mutación tras la selección y el cruce. Una vez que has realizado la selección y el cruce escoges un número determinado de bits de la población y los alteras aleatoriamente. En nuestro ejemplo consiste simplemente en cambiar algunos(s) bit(s) de 1 a 0 ó de 0 a 1.

Ejemplo 2

Con la finalidad de aclarar mejor los conceptos cubiertos previamente, presentaremos ahora una sencilla aplicación del algoritmo genético a un problema de optimización:
Un grupo de financieros mexicanos ha resuelto invertir 10 millones de pesos en la nueva marca de vino "Carta Nueva". Así pues, en 4 ciudades de las principales de México se decide iniciar una vigorosa campaña comercial: México en el centro, Monterrey en el noroeste, Guadalajara en el occidente y Veracruz en el oriente. A esas 4 ciudades van a corresponder las zonas comerciales I, II, III y IV. Un estudio de mercado ha sido realizado en cada una de las zonas citadas y han sido establecidas curvas de ganancias medias, en millones de pesos, en función de las inversiones totales (almacenes, tiendas de venta, representantes, publicidad, etc.) Estos datos se ilustran en la tabla 2 y en la figura 4. Para simplificar los cálculos, supondremos que las asignaciones de créditos o de inversiones deben hacerse por unidades de 1 millón de pesos. La pregunta es: ¿en dónde se deben de asignar los 10 millones de pesos de los que se dispone para que la ganancia total sea máxima?

Inversión
(en millones)
Beneficio I
Beneficio II
Beneficio III
Beneficio IV
00000
10.280.250.150.20
20.450.410.250.33
30.650.550.400.42
40.780.650.500.48
50.900.750.620.53
61.020.800.730.56
71.130.850.820.58
81.230.880.900.60
91.320.900.960.60
101.380.901.000.60
Tabla 1. Datos obtenidos con la investigación de mercado en cada una de las regiones en estudio

1) Representación: Para poder aplicar el algoritmo genético, lo primero que necesitamos determinar es cuál será el esquema a utilizarse para representar las posibles soluciones del problema. En este caso necesitamos 4 bits (2^4 = 16) para representar cada solución, porque cada una admite 11 valores posibles (de 0 a 10). Como existen 4 valores independientes (uno por cada zona de estudio), se requieren entonces 16 bits (4 x 4) por cada cromosoma. Es importante hacer notar que se requiere una función de codificación (i.e., que transforme el valor de la inversión a binario) y una de decodificación (i.e., que realice el proceso inverso). Debido a que en este caso los 4 bits utilizados para representar una solución pueden producir más valores de los que se necesitan, se usará una función de ajuste que haga que los resultados producidos siempre se encuentren en el rango válido.

2) Función de Aptitud: Dado que el objetivo es obtener las inversiones que sumen 10, y que tengan un beneficio máximo, podemos usar la siguiente función de aptitud penalizada:

c1+c2+c3+c4
F(x)=-------------
500*V+1

donde c1, c2, c3 y c4 son las ganancias por zona, que se calculan de acuerdo a los valores de la tabla 2, y v es el valor absoluto de la diferencia entre la suma obtenida de las inversiones y 10. Nótese que cuando no se viole ninguna restricción (i.e., cuando la suma de inversiones sea exactamente 10) la función de aptitud no será "castigada".

3) Operadores: Se usará una cruza de 2 puntos. La probabilidad que se dará a la misma será del 80%. En cuanto a la mutación, se le asignará una probabilidad baja, que será del 1%. El tamaño de población manejado para este ejemplo será de 50 cromosomas, y se correrá el algoritmo genético durante 20 generaciones.

4) Resultados: El resultado obtenido en una corrida típica es un beneficio de 1.81 millones de pesos, correspondiente a invertir 4 millones en la zona comercial I, 3 millones en la zona II, 1 millón en la zona III y 2 millones en la zona IV. Esta es la solución óptima, la cual se obtuvo originalmente mediante programación dinámica. El tiempo que le tomó al algoritmo genético encontrar este valor fue de sólo 13 segundos. Debe hacerse notar que, en este caso, si deseáramos analizar inversiones que sumen otra cantidad, y en unidades menores al millón, el algoritmo genético tendría que modificarse de manera mínima, mientras que la programación dinámica requeriría una cantidad tal de trabajo que prácticamente se volvería inoperante.

ventajas y desventajas de los AG


Reseña Histórica

Los algoritmos genéticos (AG), fueron inventados en 1975 por John Holland, de la Universidad de Michigan. Los AG son, simplificando, algoritmos de optimización, es decir, tratan de encontrar la mejor solución a un problema dado entre un conjunto de soluciones posibles. Los mecanismos de los que se valen los AG para llevar a cabo esa búsqueda pueden verse como una metáfora de los procesos de evolución biológica. 

John Holland desde pequeño, se preguntaba cómo logra la naturaleza, crear seres cada vez más perfectos. No sabía la respuesta, pero tenía una cierta idea de como hallarla: tratando de hacer pequeños modelos de la naturaleza, que tuvieran alguna de sus características, y ver cómo funcionaban, para luego extrapolar sus conclusiones a la totalidad.

Fue a principios de los 60, en la Universidad de Michigan en Ann Arbor, donde, dentro del grupo Logic of Computers, sus ideas comenzaron a desarrollarse y a dar frutos. Y fue, además, leyendo un libro escrito por un biólogo evolucionista, R. A. Fisher, titulado La teoría genética de la selección natural, como comenzó a descubrir los medios de llevar a cabo sus propósitos de comprensión de la naturaleza. De ese libro aprendió que la evolución era una forma de adaptación más potente que el simple aprendizaje, y tomó la decisión de aplicar estas ideas para desarrollar programas bien adaptados para un fin determinado.

En esa universidad, Holland impartía un curso titulado Teoría de sistemas adaptativos. Dentro de este curso, y con una participación activa por parte de sus estudiantes, fue donde se crearon las ideas que más tarde se convertirían en los AG. Por tanto, cuando Holland se enfrentó a los AG, los objetivos de su investigación fueron dos:

  • imitar los procesos adaptativos de los sistemas naturales
  • diseñar sistemas artificiales (normalmente programas) que retengan los mecanismos importantes de los sistemas naturales.

Unos 15 años más adelante, David Goldberg, actual delfín de los AG, conoció a Holland, y se convirtió en su estudiante. Goldberg era un ingeniero industrial trabajando en diseño de pipelines, y fue uno de los primeros que trató de aplicar los AG a problemas industriales. Aunque Holland trató de disuadirle, porque pensaba que el problema era excesivamente complicado como para aplicarle AG, Goldberg consiguió lo que quería, escribiendo un AG en un ordenador personal Apple II. Estas y otras aplicaciones creadas por estudiantes de Holland convirtieron a los AG en un campo con bases suficientemente aceptables como para celebrar la primera conferencia en 1985, ICGA´85.


¿Que son los Algoritmos Genéticos?

Los AG son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización. Están basados en el proceso genético de los organismos vivos. A lo largo de las generaciones, las poblaciones evolucionan en la naturaleza de acorde con los principios de la selección natural y la supervivencia de los mas fuertes, postulados por Darwin (1859). Por imitación de este proceso, los AG son
capaces de ir creando soluciones para problemas del mundo real. La evolución de dichas soluciones hacia valores óptimos del problema depende en buena medida de una adecuada codificación de las mismas. En la naturaleza los individuos de una población compiten entre si en la búsqueda de recursos tales como comida, agua y refugio. Incluso los miembros de una misma especie compiten a menudo en la búsqueda de un compañero. Aquellos individuos que tienen mas éxito en sobrevivir y en atraer compañeros tienen mayor probabilidad de generar un gran numero de descendientes. Por el contrario individuos poco dotados producirán un menor numero de descendientes. Esto significa que los genes de los individuos mejor adaptados se propagaran en sucesivas generaciones hacia un número de individuos creciente. La combinación de buenas características provenientes de diferentes ancestros, puede a veces producir descendientes "superindividuos", cuya adaptación es mucho mayor que la de cualquiera de sus ancestros. De esta manera, las especies evolucionan logrando unas características cada vez mejor adaptadas al entorno en el que viven. El poder de los AG proviene del hecho de que se trata de una técnica robusta, y pueden tratar con éxito una gran variedad de problemas provenientes de diferentes áreas, incluyendo aquellos en los que otros métodos encuentran dificultades. Si bien no se garantiza que el AG encuentre la solución optima del problema, existe evidencia empírica de que se encuentran soluciones de un nivel aceptable, en un tiempo competitivo con el resto de algoritmos de optimización combinatoria. En el caso de que existan técnicas especializadas para resolver un determinado problema, lo mas probable es que superen al AG, tanto en rapidez como en eficacia. El gran campo de aplicación de los AG se relaciona con aquellos problemas para los cuales no existen técnicas especializadas. Incluso en el caso en que dichas técnicas existan, y funcionen bien, pueden efectuarse mejoras de las mismas hibridandolas con los AG.


¿Por qué utilizar Algoritmos Genéticos en la Optimización?

La razón del creciente interés por los AG es que estos son un método global y robusto de búsqueda de las soluciones de problemas. La principal ventaja de estas características es el equilibrio alcanzado entre la eficiencia y eficacia para resolver diferentes y muy complejos problemas de grandes dimensiones.

Lo que aventaja a los AG frente a otros algoritmos tradicionales de búsqueda es que se diferencian de estos en los siguientes aspectos:

  • Trabajan con una codificación de un conjunto de parámetros, no con los parámetros mismos.
  • Trabajan con un conjunto de puntos, no con un único punto y su entorno (su técnica de búsqueda es global.) Utilizan un subconjunto del espacio total, para obtener información sobre el universo de búsqueda, a través de las evaluaciones de la función a optimizar. Esas evaluaciones se emplean de forma eficiente para clasificar los subconjuntos de acuerdo con su idoneidad.
  • No necesitan conocimientos específicos sobre el problema a resolver; es decir, no están sujetos a restricciones. Por ejemplo, se pueden aplicar a funciones no continuas, lo cual les abre un amplio campo de aplicaciones que no podrían ser tratadas por los métodos tradicionales.
  • Utilizan operadores probabilísticos, en vez de los tipicos operadores determinísticos de las técnicas tradicionales.
  • Resulta sumamente fácil ejecutarlos en las modernas arquitecturas masivas en paralelo.
  • Cuando se usan para problemas de optimización, resultan menos afectados por los máximos locales que las técnicas tradicionales (i.e., son métodos robustos).
Ahora bien; un esquema del funcionamiento general de un algoritmo genético podría ser el siguiente:

Algoritmo Genético:
- Generar una población inicial.
- Iterar hasta un criterio de parada.
- Evaluar cada individuo de la población.
- Seleccionar los progenitores.
- Aplicar el operador de cruce y mutación a estos progenitores.
- Incluir la nueva descendencia para formar una nueva generación.


Ventajas

  • El primer y más importante punto es que los AG son intrínsecamente paralelos. La mayoría de los otros algoritmos son en serie y sólo pueden explorar el espacio de soluciones hacia una solución en una dirección al mismo tiempo, y si la solución que descubren resulta subóptima, no se puede hacer otra cosa que abandonar todo el trabajo hecho y empezar de nuevo. Sin embargo, ya que los AG tienen descendencia múltiple, pueden explorar el espacio de soluciones en múltiples direcciones a la vez. Si un camino resulta ser un callejón sin salida, pueden eliminarlo fácilmente y continuar el trabajo en avenidas más prometedoras, dándoles una mayor probabilidad en cada ejecución de encontrar la solución. Sin embargo, la ventaja del paralelismo va más allá de esto. Considere lo siguiente: todas las cadenas binarias (cadenas de ceros y unos) de 8 dígitos forman un espacio de búsqueda, que puede representarse como ******** (donde * significa “o 0 o 1”). La cadena 01101010 es un miembro de este espacio. Sin embargo, también es un miembro del espacio 0*******, del espacio 01******, del espacio 0******0, del espacio 0*1*1*1*, del espacio 10*01**0, etc. Evaluando la aptitud de esta cadena particular, un AG estaría sondeando cada uno de los espacios a los que pertenece. Tras muchas evaluaciones, iría obteniendo un valor cada vez más preciso de la aptitud media de cada uno de estos espacios, cada uno de los cuales contiene muchos miembros. Por tanto, un AG que evalúe explícitamente un número pequeño de individuos está evaluando implícitamente un grupo de individuos mucho más grande -de la misma manera que un encuestador que le hace preguntas a un cierto miembro de un grupo étnico, religioso o social espera aprender algo acerca de las opiniones de todos los miembros de ese grupo, y por tanto puede predecir con fiabilidad la opinión nacional sondeando sólo un pequeño porcentaje de la población. De la misma manera, el AG puede dirigirse hacia el espacio con los individuos más aptos y encontrar el mejor de ese grupo. En el contexto de los algoritmos evolutivos, esto se conoce como teorema del esquema, y es la ventaja principal de los AG sobre otros métodos de resolución de problemas.
  • Debido al paralelismo que les permite evaluar implícitamente muchos esquemas a la vez, los AG funcionan particularmente bien resolviendo problemas cuyo espacio de soluciones potenciales es realmente grande -demasiado vasto para hacer una búsqueda exhaustiva en un tiempo razonable. La mayoría de los problemas que caen en esta categoría se conocen como “no lineales”. En un problema lineal, la aptitud de cada componente es independiente, por lo que cualquier mejora en alguna parte dará como resultado una mejora en el sistema completo. No es necesario decir que hay pocos problemas como éste en la vida real. La no linealidad es la norma, donde cambiar un componente puede tener efectos en cadena en todo el sistema, y donde cambios múltiples que, individualmente, son perjudiciales, en combinación pueden conducir hacia mejoras en la aptitud mucho mayores. La no linealidad produce una explosión combinatoria: el espacio de cadenas binarias de 1.000 dígitos puede examinarse exhaustivamente evaluando sólo 2.000 posibilidades si el problema es lineal, mientras que si no es lineal, una búsqueda exhaustiva requiere evaluar 21.000 posibilidades -un número que, escrito, ocuparía más de 300 dígitos.Afortunadamente, el paralelismo implícito de los AG les permite superar incluso este enorme número de posibilidades, y encontrar con éxito resultados óptimos o muy buenos en un corto periodo de tiempo, tras muestrear directamente sólo regiones pequeñas del vasto paisaje adaptativo. Por ejemplo, un AG desarrollado en común por ingenieros de General Electric y el Rensselaer Polytechnic Institute produjo el diseño de la turbina de un motor a reacción de altas prestaciones que era tres veces mejor que la configuración diseñada por humanos, y un 50 % mejor que una configuración diseñada por un sistema experto que recorrió con éxito un espacio de soluciones que contenía más de 10.387 posibilidades. Los métodos convencionales para diseñar estas turbinas son una parte fundamental de proyectos de ingeniería que pueden durar hasta cinco años y costar más de 2.000 millones de dólares; el AG descubrió esta solución en dos días, en una estación de trabajo de escritorio típica en ingeniería.
  • Otra ventaja notable de los AG es que se desenvuelven bien en problemas con un paisaje adaptativo complejo -aquéllos en los que la función objetivo es discontinua, ruidosa, cambia con el tiempo, o tiene muchos óptimos locales. La mayoría de los problemas prácticos tienen un espacio de soluciones enorme, imposible de explorar exhaustivamente; el reto se convierte entonces en cómo evitar los óptimos locales soluciones que son mejores que todas las que son similares a ella, pero que no son mejores que otras soluciones distintas situadas en algún otro lugar del espacio de soluciones. Muchos algoritmos de búsqueda pueden quedar atrapados en los óptimos locales: si llegan a lo alto de una colina del paisaje adaptativo, descubrirán que no existen soluciones mejores en las cercanías y concluirán que han alcanzado la mejor de todas, aunque existan picos más altos en algún otro lugar del mapa.Los algoritmos evolutivos, por otro lado, han demostrado su efectividad al escapar de los óptimos locales y descubrir el óptimo global incluso en paisajes adaptativos muy escabrosos y complejos. (Debe decirse que, en la realidad, a menudo no hay manera de decir si una cierta solución a un problema es el óptimo global o sólo un óptimo local muy alto. Sin embargo, aunque un AG no devuelva siempre una solución perfecta y demostrable a un problema, casi siempre puede devolver al menos una muy buena solución). Todos los cuatro componentes principales de los AG -paralelismo, selección, mutación y cruzamiento- trabajan juntos para conseguir esto. Al principio, el AG genera una población inicial diversa, lanzando una “red” sobre el paisaje adaptativo. (Koza 2003[42], p. 506) compara esto con un ejército de paracaidistas cayendo sobre el paisaje del espacio de búsqueda de un problema, cada uno de ellos con órdenes de buscar el pico más alto). Pequeñas mutaciones permiten a cada individuo explorar sus proximidades, mientras que la selección enfoca el progreso, guiando a la descendencia del algoritmo cuesta arriba hacia zonas más prometedoras del espacio de soluciones. Sin embargo, el cruzamiento es el elemento clave que distingue a los AG de los otros métodos como los trepacolinas y el recocido simulado. Sin el cruzamiento, cada solución individual va por su cuenta, explorando el espacio de búsqueda en sus inmediaciones sin referencia de lo que el resto de individuos puedan haber descubierto. Sin embargo, con el cruzamiento en juego, hay una transferencia de información entre los candidatos prósperos los individuos pueden beneficiarse de lo que otros han aprendido, y los esquemas pueden mezclarse y combinarse, con el potencial de producir una descendencia que tenga las virtudes de sus dos padres y ninguna de sus debilidades. Este punto está ilustrado en Koza et al. 1999[41], p. 486, donde los autores analizan el problema de sintetizar un filtro de paso bajo utilizando programación genética. En una generación se seleccionaron dos circuitos progenitores para llevar a cabo el cruzamiento; un padre tenía una buena topología (componentes como inductores y condensadores colocados en el sitio correcto) pero malos tamaños (valores demasiado bajos de inductancia y capacidad para los componentes). El otro padre tenía mala topología pero buenos tamaños. El resultado de aparearlos mediante cruzamiento fue una descendencia con la buena topología de un padre y los buenos tamaños del otro, dando como resultado una mejora sustancial de la aptitud sobre sus dos padres.El problema de encontrar el óptimo global en un espacio con muchos óptimos locales también se conoce como el dilema de la exploración versus explotación, “un problema clásico de todos los sistemas que pueden adaptarse y aprender”. Una vez que un algoritmo (o un diseñador humano) ha encontrado una estrategia para resolver problemas que parece funcionar satisfactoriamente, ¿debería centrarse en hacer el mejor uso de esa estrategia, o buscar otras? Abandonar una estrategia de probada solvencia para buscar otras nuevas casi garantiza que supondrá una pérdida y degradación del rendimiento, al menos a corto plazo. Pero si uno se queda con una estrategia particular excluyendo a todas las demás, corre el riesgo de no descubrir estrategias mejores que existen pero no se han encontrado. De nuevo, los AG han demostrado ser muy buenos en dar con este equilibrio y descubrir buenas soluciones en un tiempo y esfuerzo computacional razonables.
  • Otra área en el que destacan los AG es su habilidad para manipular muchos parámetros simultáneamente. Muchos problemas de la vida real no pueden definirse en términos de un único valor que hay que minimizar o maximizar, sino que deben expresarse en términos de múltiples objetivos, a menudo involucrando contrapartidas: uno sólo puede mejorar a expensas de otro. Los AG son muy buenos resolviendo estos problemas: en particular, su uso del paralelismo les permite producir múltiples soluciones, igualmente buenas, al mismo problema, donde posiblemente una solución candidata optimiza un parámetro y otra candidata optimiza uno distinto y luego un supervisor humano puede seleccionar una de esas candidatas para su utilización. Si una solución particular a un problema con múltiples objetivos optimiza un parámetro hasta el punto en el que ese parámetro no puede mejorarse más sin causar una correspondiente pérdida de calidad en algún otro parámetro, esa solución se llama óptimo paretiano o no dominada.
  • Finalmente, una de las cualidades de los AG que, a primera vista, puede parecer un desastre, resulta ser una de sus ventajas: a saber, los AG no saben nada de los problemas que deben resolver. En lugar de utilizar información específica conocida a priori para guiar cada paso y realizar cambios con un ojo puesto en el mejoramiento, como hacen los diseñadores humanos, son “relojeros ciegos”; realizan cambios aleatorios en sus soluciones candidatas y luego utilizan la función objetivo para determinar si esos cambios producen una mejora. La virtud de esta técnica es que permite a los AG comenzar con una mente abierta, por así decirlo. Como sus decisiones están basadas en la aleatoriedad, todos los caminos de búsqueda posibles están abiertos teóricamente a un AG; en contraste, cualquier estrategia de resolución de problemas que dependa de un conocimiento previo, debe inevitablemente comenzar descartando muchos caminos a priori, perdiendo así cualquier solución novedosa que pueda existir. Los AG, al carecer de ideas preconcebidas basadas en creencias establecidas sobre “cómo deben hacerse las cosas” o sobre lo que “de ninguna manera podría funcionar”, los AG no tienen este problema. De manera similar, cualquier técnica que dependa de conocimiento previo fracasará cuando no esté disponible tal conocimiento, pero, de nuevo, los AG no se ven afectados negativamente por la ignorancia. Mediante sus componentes de paralelismo, cruzamiento y mutación, pueden viajar extensamente por el paisaje adaptativo, explorando regiones que algoritmos producidos con inteligencia podrían no haber tenido en cuenta, y revelando potencialmente soluciones de asombrosa e inesperada creatividad que podrían no habérseles ocurrido nunca a los diseñadores humanos. Un ejemplo muy gráfico de esto es el redescubrimiento, mediante la programación genética, del concepto de retroalimentación negativa -un principio crucial para muchos componentes electrónicos importantes de hoy en día, pero un concepto que, cuando fue descubierto en primera instancia, se le denegó una patente de nueve años porque el concepto era demasiado contrario a las creencias establecidas. Por supuesto, los algoritmos evolutivos no están enterados ni preocupados de si una solución va en contra de las creencias establecidas -sólo de si funciona.


Desventajas

Aunque los AG han demostrado su eficiencia y potencia como estrategia de resolución de problemas, no son la panacea. Los AG tienen ciertas limitaciones; sin embargo, se demostrará que todas ellas pueden superarse y que ninguna de ellas afecta a la validez de la evolución biológica.

  • La primera y más importante consideración al crear un AG es definir una representación del problema. El lenguaje utilizado para especificar soluciones candidatas debe ser robusto; es decir, debe ser capaz de tolerar cambios aleatorios que no produzcan constantemente errores fatales o resultados sin sentido. Hay dos maneras principales para conseguir esto. La primera, utilizada por la mayoría de los AG, es definir a los individuos como listas de números binarios, enteros o reales- donde cada número representa algún aspecto de la solución candidata. Si los individuos son cadenas binarias, un 0 o 1 podría significar la ausencia o presencia de una cierta característica. Si son listas de números, estos números podrían representar muchas cosas distintas: los pesos de las conexiones en una red neuronal, el orden de las ciudades visitadas en un recorrido dado, la situación espacial de componentes electrónicos, los valores con los que se alimenta a un controlador, los ángulos de torsión de los enlaces péptidos de una proteína, etc. Así, la mutación implica cambiar estos números, cambiar bits o sumar o restar valores aleatorios. En este caso, el propio código del programa no cambia; el código es lo que dirige la simulación y hace un seguimiento de los individuos, evaluando sus aptitudes y quizá asegurando que sólo se producen valores realistas y posibles para el problema dado. En otro método, la programación genética, el propio código del programa sí cambia. Como ya se dijo en la sección “Métodos de representación”, la PG representa a los individuos como árboles de código ejecutables que pueden mutar cambiando o intercambiando subárboles. Ambos métodos producen representaciones robustas ante la mutación, y pueden representar muchos tipos diferentes de problemas y, como se dice en la sección “Algunos ejemplos específicos”, ambas han tenido un éxito considerable. El problema de representar a las soluciones candidatas de manera robusta no surge en la naturaleza, porque el método de representación utilizado por la evolución, a saber, el código genético, es inherentemente robusto: con muy pocas excepciones, como una cadena de codones de parada, no existe una secuencia de bases de ADN que no pueda traducirse en una proteína. Por lo tanto, virtualmente, cualquier cambio en los genes de un individuo siempre producirá un resultado inteligible, y por tanto las mutaciones en la evolución tienen mayor probabilidad de producir una mejora. Esto entra encontraste con los lenguajes creados por el hombre como el inglés, donde el número de palabras con significado es pequeño comparado con el número total de formas en las que se pueden combinar las letras del alfabeto, y por tanto, es probable que un cambio aleatorio en una frase en inglés produzca un sinsentido
  • El problema de cómo escribir la función objetivo debe considerarse cuidadosamente para que se pueda alcanzar una mayor aptitud y verdaderamente signifique una solución mejor para el problema dado. Si se elige mal una función objetivo o se define de manera inexacta, puede que el AG sea incapaz de encontrar una solución al problema, o puede acabar resolviendo el problema equivocado. (Esta última situación se describe a veces como la tendencia del AG a “engañar”, aunque en realidad lo que está pasando es que el AG está haciendo lo que se le pidió hacer, no lo que sus creadores pretendían que hiciera). Como por ejemplo: unos investigadores utilizaron un algoritmo evolutivo en conjunción con una serie de chips reprogramables, haciendo que la función objetivo recompensara al circuito en evolución por dar como salida una señal oscilatoria. Al final del experimento, se producía efectivamente una señal oscilatoria -pero en lugar de actuar como un oscilador, como pretendían los investigadores, ¡descubrieron que el circuito se había convertido en un receptor de radio que estaba recibiendo y retransmitiendo una señal oscilatoria de un componente electrónico cercano! Sin embargo, esto no es un problema en la naturaleza. En el laboratorio de la evolución biológica, sólo hay una función objetivo que es igual para todos los seres vivos -la carrera por sobrevivir y reproducirse, sin importar qué adaptaciones hagan esto posible. Los organismos que se reproducen con más abundancia que sus competidores están más adaptados; los que fracasan en reproducirse no están adaptados.
  • Además de elegir bien la función objetivo, también deben elegirse cuidadosamente los otros parámetros de un AG -el tamaño de la población, el ritmo de mutación y cruzamiento, el tipo y fuerza de la selección. Si el tamaño de la población es demasiado pequeño, puede que el AG no explore suficientemente el espacio de soluciones para encontrar buenas soluciones consistentemente. Si el ritmo de cambio genético es demasiado alto o el sistema de selección se escoge inadecuadamente, puede alterarse el desarrollo de esquemas beneficiosos y la población puede entrar en catástrofe de errores, al cambiar demasiado rápido para que la selección llegue a producir convergencia. Los seres vivos también se enfrentan a dificultades similares, y la evolución se ha encargado de ellas. Es cierto que si el tamaño de una población cae hacia un valor muy bajo, los ritmos de mutación son muy altos o la presión selectiva es demasiado fuerte (una situación así podría ser resultado de un cambio ambiental drástico), entonces la especie puede extinguirse. La solución ha sido “la evolución de la evolutividad” -las adaptaciones que alteran la habilidad de una especie para adaptarse. Un ejemplo. La mayoría de los seres vivos han evolucionado una elaborada maquinaria celular que comprueba y corrigue errores durante el proceso de replicación del ADN, manteniendo su ritmo de mutación a unos niveles aceptablemente bajos; a la inversa, en tiempos de fuerte presión ambiental, algunas especies de bacterias entran en un estado de hipermutación en el que el ritmo de errores en la replicación del ADN aumenta bruscamente, aumentando la probabilidad de que se descubrirá una mutación compensatoria. Por supuesto, no pueden eludirse todas las catástrofes, pero la enorme diversidad y las adaptaciones altamente complejas de los seres vivos actuales muestran que, en general, la evolución es una estrategia exitosa. Igualmente, las aplicaciones diversas y los impresionantes resultados de los AG demuestran que son un campo de estudio poderoso y que merece la pena.
  • Un problema con el que los AG tienen dificultades son los problemas con las funciones objetivo ”engañosas”, en las que la situación de los puntos mejorados ofrecen información engañosa sobre dónde se encuentra probablemente el óptimo global. Por ejemplo: imagine un problema en el que el espacio de búsqueda esté compuesto por todas las cadenas binarias de ocho caracteres, y en el que la aptitud de cada individuo sea directamente proporcional al número de unos en él es decir, 00000001 sería menos apto que 00000011, que sería menos apto que 00000111, etcétera -, con dos excepciones: la cadena 11111111 resulta tener una aptitud muy baja, y la cadena 00000000 resulta tener una aptitud muy alta. En este problema, un AG (al igual que la mayoría de los algoritmos) no tendría más probabilidad de encontrar un óptimo global que una búsqueda aleatoria. La solución a este problema es la misma para los AG y la evolución biológica: la evolución no es un proceso que deba encontrar siempre el óptimo global. Puede funcionar casi igual de bien alcanzando la cima de un óptimo local alto y, para la mayoría de las situaciones, eso será suficiente, incluso aunque el óptimo global no pueda alcanzarse fácilmente desde ese punto. La evolución es como un “satisfactor” -un algoritmo que entrega una solución “suficientemente buena”, aunque no necesariamente la mejor solución posible, dada una cantidad razonable de tiempo y esfuerzo invertidos en la búsqueda. La “FAQ de la evidencia de diseño improvisado en la naturaleza” proporciona ejemplos de la naturaleza con estos resultados. (También hay que tener en cuenta que pocos o ningún problema real es tan engañoso como el ejemplo algo forzado dado arriba. Normalmente, la situación de las mejoras locales proporciona alguna información sobre la situación del óptimo global).
  • Un problema muy conocido que puede surgir con un AG se conoce como convergencia prematura. Si un individuo que es más apto que la mayoría de sus competidores emerge muy pronto en el curso de la ejecución, se puede reproducir tan abundantemente que merme la diversidad de la población demasiado pronto, provocando que el algoritmo converja hacia el óptimo local que representa ese individuo, en lugar de rastrear el paisaje adaptativo lo bastante a fondo para encontrar el óptimo global. Esto es un problema especialmente común en las poblaciones pequeñas, donde incluso una variación aleatoria en el ritmo de reproducción puede provocar que un genotipo se haga dominante sobre los otros. Los métodos más comunes implementados por los investigadores en AG para solucionar este problema implican controlar la fuerza selectiva, para no proporcionar tanta ventaja a los individuos excesivamente aptos. La selección escalada, por rango y por torneo, discutidas anteriormente, son tres de los métodos principales para conseguir esto; algunos métodos de selección escalada son el escalado sigma, en el que la reproducción se basa en una comparación estadística de la aptitud media de la población, y la selección de Boltzmann, en la que la fuerza selectiva aumenta durante la ejecución de manera similar a la variable “temperatura” en el recocido simulado. La convergencia prematura ocurre en la naturaleza (los biólogos la llaman deriva genética). Esto no debe sorprender; como ya se dijo arriba, la evolución, como estrategia de resolución de problemas, no está obligada a encontrar la mejor solución, sólo una que sea lo bastante buena. Sin embargo, en la naturaleza, la convergencia prematura es menos común, ya que la mayoría de las mutaciones beneficiosas en los seres vivos sólo producen mejoras en la aptitud pequeñas e incrementales; son raras las mutaciones que producen una ganancia de aptitud tan grande que otorgue a sus poseedores una drástica ventaja reproductiva.

  • Finalmente, varios investigadores aconsejan no utilizar AG en problemas resolubles de manera analítica. No es que los AG no puedan encontrar soluciones buenas para estos problemas; simplemente es que los métodos analíticos tradicionales consumen mucho menos tiempo y potencia computacional que los AG y, a diferencia de los AG, a menudo está demostrado matemáticamente que ofrecen la única solución exacta. Por supuesto, como no existe una solución matemática perfecta para ningún problema de adaptación biológica, este problema no aparece en la naturaleza.


¿Cómo Saber si es Posible usar un Algoritmo Genético?

La aplicación más común de los AG 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 de estar delimitado dentro de un cierto rango.
  • Debe permitir definir una función de aptitud que nos indique que tan buena o mala es una cierta respuesta.
  • Las soluciones deben codificarse de una forma que resulte relativamente fácil de implementar en el computador.
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 preferiblemente cuando exista un rango de soluciones relativamente pequeño.


Algunas Aplicaciones de los Algoritmos Genéticos

Como hemos podido observar, el área de aplicación de los AG es muy amplia, y en general sus aplicaciones se pueden implementar a muchos de los problemas de la vida cotidiana, de igual forma, se hayan aplicado a diversos problemas y modelos en ingeniaría, y en la ciencia en general cabe destacar entre ellos:

Optimización: Se trata de un campo especialmente abonado para el uso de los AG, por las características intrínsecas de estos problemas. No en vano fueron la fuente de inspiración para los creadores estos algoritmos. Los AG se han utilizado en numerosas tareas de optimización, incluyendo la optimización numérica, y los problemas de optimización combinatoria.

Programación automática: Los AG se han empleado para desarrollar programas para tareas específicas, y para diseñar otras estructuras computacionales tales como el autómata celular, y las redes de clasificación.

Aprendizaje máquina: Los AG se han utilizado también en muchas de estas aplicaciones, tales como la predicción del tiempo o la estructura de una proteína. Han servido asimismo para desarrollar determinados aspectos de sistemas particulares de aprendizaje, como pueda ser el de los pesos en una red neuronal, las reglas para sistemas de clasificación de aprendizaje o sistemas de producción simbólica, y los sensores para robots.

Economía: En este caso, se ha hecho uso de estos Algoritmos para modelizar procesos de innovación, el desarrollo estrategias de puja, y la aparición de mercados económicos.

Sistemas inmunes: A la hora de modelizar varios aspectos de los sistemas inmunes naturales, incluyendo la mutación somática durante la vida de un individuo y el descubrimiento de familias de genes múltiples en tiempo evolutivo, ha resultado útil el empleo de esta técnica.

Ecología: En la modelización de fenómenos ecológicos tales como las carreras de armamento biológico, la coevolución de parásito-huesped, la simbiosis, y el flujo de recursos.

Genética de poblaciones: En el estudio de preguntas del tipo "¿Bajo qué condiciones será viable evolutivamente un gene para la recombinación?".

Evolución y aprendizaje: Los AG se han utilizado en el estudio de las relaciones entre el aprendizaje individual y la evolución de la especie.

Sistemas sociales: En el estudio de aspectos evolutivos de los sistemas sociales, tales como la evolución del comportamiento social en colonias de insectos, y la evolución de la cooperación y la comunicación en sistemas multi-agentes.

Aunque esta lista no es, en modo alguno, exhaustiva, sí transmite la idea de la variedad de aplicaciones que tienen los AG. Gracias al éxito en estas y otras áreas, los AG han llegado a ser un campo puntero en la investigación actual.


AQUI PODRA ENCONTRAR MAS INFORMACION DE ALGORITMOS GENETICOS