Algoritmos Geneticos

Los Algoritmos Genéticos están inspirados en el principio Darwiniano de la evolución de las especies
y en la genética. Son algoritmos probabilísticos que ofrecen un mecanismo de búsqueda paralela y
adaptativa basada en el principio de supervivencia de los más aptos y en la reproducción. Dentro de
los algoritmos genéticos podemos encontrar varios campos como las técnicas computacionales
inteligentes, Redes Neuronales, Lógica Fuzzy y Sistemas Especialistas, donde son presentados los
principios básicos de los Algoritmos Genéticos.
La Inteligencia Computacional es un área de la ciencia que busca, a través de técnicas inspiradas en
la Naturaleza, el desarrollo de sistemas inteligentes que imiten los aspectos del comportamiento
humano, tales como: aprendizaje, percepción, raciocinio, evolución y adaptación.
La siguientes líneas muestran varias técnicas y cual ha sido su inspiración dentro de la naturaleza:
 Redes Neuronales → Neuronas biológicas
 Algoritmos Genéticos → Evolución biológica
 Lógica Fuzzy Proc. → Lingüística
 Sistemas Especialistas → Inferencia
Los Algoritmos Genéticos son algoritmos matemáticos inspirados en los mecanismos de evolución
natural y recombinación genética. La técnica de los Algoritmos Genéticos ofrece un mecanismo de
búsqueda adaptativa basada en el principio Darwiniano de reproducción y supervivencia de los más
aptos. La Lógica Nebulosa (Fuzzy Logic) tiene como objetivo modelar el modo aproximado de
raciocinio humano, pretendiéndose desarrollar sistemas computacionales capaces de tomar
decisiones racionales en un ambiente de incertidumbre e imprecisión. La Lógica Nebulosa ofrece un
mecanismo para manipular informaciones imprecisas, tales como los conceptos de mucho, poco,
pequeño, alto, bueno, caliente, frío, etc., suministrando una respuesta aproximada para una
cuestión basada en un conocimiento que es inexacto, incompleto o no es totalmente confiable. Los
Sistemas Especialistas son programas de computador destinados a solucionar problemas en un
campo especializado del conocimiento humano. Usa técnicas de IA, base del conocimiento y
raciocinio inferencial. Las técnicas de la Inteligencia Computacional han sido empleadas con éxito en
el desarrollo de sistemas inteligentes de previsión, soporte a decisión, control, optimización,
modelado, clasificación y reconocimiento de patrones en general, aplicados en diversos sectores:
energía, industrial, económico, financiero, comercial, síntesis de circuitos, medio ambiente, entre
otros.
Principios y aplicaciones
Los Algoritmos Genéticos constituyen una técnica de búsqueda y optimización, altamente paralela,
inspirada en el principio Darwiniano de selección natural y reproducción genética.
Los principios de la naturaleza en los cuales están inspirados los AGs son muy simples. De acuerdo
con la teoría de C. Darwin, el principio de selección privilegia los individuos más aptos con mayor
longevidad y, por lo tanto, con mayor probabilidad de reproducción. Los individuos con más
descendentes tienen más oportunidades de transmitir sus códigos genéticos en las próximas
generaciones. Tales códigos genéticos constituyen la identidad de cada individuo y están
representados en los cromosomas.
Estos principios son imitados en la construcción de algoritmos computacionales que buscan la mejor
solución para un determinado problema, a través da evolución de poblaciones de soluciones
codificadas a través de cromosomas artificiales.
En los AGs, cada cromosoma es una estructura de datos que representa una de las posibles
soluciones del espacio de búsqueda del problema. Los Cromosomas son sometidos a un proceso de
evolución que envuelve evaluación, selección, ecombinación sexual (crossover) y mutación. Después
de varios ciclos de evolución la población deberá contener individuos más aptos.
La analogía entre los Algoritmos Genéticos y el sistema natural se muestra a través de la siguiente
tabla:
Naturaleza Algoritmos Genéticos
Cromosoma Palabra binaria, vector, etc
Gen Característica del problema
Alelo Valor da característica
Loco Posición en la palabra
Genotipo Estructura
Fenotipo Estructura sometida al problema
Individuo Solución
Generación Ciclo
Podemos caracterizar los Algoritmos Genéticos a través de los siguientes componentes:
1. Problema a ser optimizado.
2. Representación de Soluciones del Problema.
3. Decodificación del Cromosoma.
4. Evaluación.
5. Selección.
6. Operadores Genéticos.
7. Inicialización de la Población.

Problema
Los AGs son particularmente aplicados en problemas complejos de optimización: problemas con
diversos parámetros o características que precisan ser combinadas en busca de la mejor solución;
problemas con muchas restricciones o condiciones que no pueden ser representadas
matemáticamente y problemas con grandes espacios de búsqueda.
Los AGs han sido aplicados en diversos problemas de optimización, tales como: Optimización de
Funciones Matemáticas, Optimización Combinatoria, Optimización de Planeamiento, Problema del
Cajero Viajante, Problema de Optimización de Rutas de Vehículos, Optimización de Layout de
Circuitos, Optimización de Distribución, Optimización en Negocios, Síntesis de Circuitos
Electrónicos,Etc.
Representación
La representación de las posibles soluciones dentro del espacio de búsqueda de un problema define
la estructura del cromosoma que va ser manipulado por el algoritmo. Normalmente, la
representación binaria es la más empleada por ser más simple, fácil de manipular a través de los
operadores genéticos, fácil de ser transformada en entero o real y además, por facilitar la
demostración de los teoremas.
Decodificación
La decodificación del cromosoma consiste básicamente en la construcción de la solución real del
problema. El proceso de decodificación construye la solución para que esta sea evaluada por el
problema. La ventaja de la representación binaria es la gran facilidad para ser transformada en
entero o en real.
Evaluación
La evaluación es la unión entre el GA y el mundo externo. La evaluación se realiza a través de una
función que representa de forma adecuada el problema y tiene como objetivo suministrar una
medida de aptitud de cada individuo en la población actual. La función de evaluación es para un GA
lo que el medio ambiente es para los seres humanos. Las funciones de evaluación son específicas de
cada problema.
Selección
El proceso de selección en los algoritmos genéticos selecciona individuos para la reproducción. La
selección esta basada en la aptitud de los individuos: individuos más aptos tienen mayor
probabilidad de ser escogidos para la reproducción.
Operadores Genéticos
Los individuos seleccionados ( y reproducidos en la siguiente población) son recombinados
sexualmente a través del operador de crossover. El operador de crossover es considerado la
característica fundamental de los AGs. Los pares de progenitores son escogidos aleatoriamente y
nuevos individuos son criados a partir del intercambio del material genético. Los descendentes serán
diferentes de sus padres, pero con características genéticas de ambos progenitores.
Todavía hay un tercer operador genético denominado inversión, que cambia de posición dos genes
escogidos aleatoriamente. La importancia de este operador esta, sin embargo, restringida a
problemas con epistasia (fuerte interacción entre genes de un cromosoma).
Inicialización de la Población
La inicialización de la población determina el proceso de creación de los individuos para el primer
ciclo del algoritmo. Normalmente, la población inicial se forma a partir de individuos creados
aleatoriamente. Las poblaciones iniciales creadas aleatoriamente pueden ser sembradas con
cromosomas buenos para conseguir una evolución más rápida, si se conocen a priori, el valor de
estas “semillas” buenas.
Parámetros y Criterios de Parada
En un algoritmo genético varios parámetros controlan el proceso de evolución:
 Tamaño de la Población: número de puntos del espacio de búsqueda siendo considerados en
paralelo.
 Tasa de Crossover: probabilidad de un individuo de ser recombinado con otro.
 Tasa de Mutación: probabilidad de que el contenido de cada posición/gen del cromosoma
sea alterado.
 Número de Generaciones: número total de ciclos de evolución de un GA.
 Total de Individuos: número total de tentativas (tamaño de la población x número de
generaciones)
Los dos últimos parámetros son empleados generalmente como criterio de parada de un algoritmo
genético. Un algoritmo genético puede ser descrito como un proceso continuo que repite ciclos de
evolución controlados por un criterio de parada.
Desempeño de los algortimos genéticos
Los algoritmos genéticos son sistemas no lineares con comportamiento fuertemente ecológico. Los
AGs combinan cambios aleatorios con procesos probabilísticos. Los AGs son, por lo tanto,
estocásticos: difícilmente repiten un resultado de un experimento para otro.
El desempeño de un algoritmo genético es medido por el grado de evolución alcanzado durante
todo el proceso de evolución (experimento). Debido a la naturaleza estocástica de los AGs es
necesario evaluar el resultado medio de varios experimentos de un AG, para tener una idea de su
desempeño.
Las principales medidas de desempeño son:

 Curva de la media de los mejores cromosomas en cada ciclo durante varios experimentos.

 Curva on-line de la media de la evaluación de todos los individuos hasta un determinado
instante en un experimento.

 Curva off-line de la media de la evaluación de los mejores individuos hasta la generación
actual, en un experimento.


La curva media de los mejores individuos en varios experimentos presenta el desempeño medio de
un AG y sirve para el ajuste de los parámetros.
La curva on-line mide la velocidad con que el AG consigue producir buenas soluciones para el uso
"on- line" de las soluciones.
La curva off- line mide el grado de convergencia del AG en la creación de soluciones más aptas,
generadas off- line con relación al problema.
Técnicas, parámetros y operadores genéticos
Las técnicas, los parámetros y los tipos de operadores genéticos afectan significativamente el
desempeño de un algoritmo genético. En general, el algoritmo genético es extremamente sensible a
la introducción o combinación de las técnicas empleadas. La selección de las técnicas, los
parámetros y los tipos de operadores es empírica, sin embargo está relacionada con el tipo de
problema.
Podemos clasificar las técnicas empleadas en los AGs en las siguientes clases:
8. Técnica de Reproducción.
9. Técnica de Aptitud.
10. Técnica de Interpolación de Parámetros.
En cuanto a los operadores genéticos, los principales tipos son:
11. Crossover de Un punto.
12. Crossover de Dos puntos.
13. Crossover Uniforme.
Técnicas de reproducción
Estas técnicas determinan el criterio de substitución de los individuos de una población para la
próxima generación. Existen básicamente los siguientes métodos:
1.- Cambio de toda población:
En cada ciclo, son creados N nuevos individuos substituyendo la población anterior: son escogidos
N/2 pares para el apareamiento, generando N descendentes.
2.- Cambio de toda la población con elitismo:
Todos los cromosomas son substituidos, copiándose directamente el cromosoma más apto de la
población actual en la población siguiente.
3.- Cambio parcial da población:
Genera M individuos (M<N), que substituyen los peores individuos de la población actual. Técnica
elitista que mantiene la población más estática, permitiendo, por lo tanto, la utilización de
operadores menos conservadores como o crossover uniforme.
4.- Cambio parcial de la población sin duplicados:
No se permite en la población la presencia de individuos duplicados. Se garantiza de este modo el
mejor aprovechamiento del paralelismo intrínseco de los AGs (N puntos diferentes del espacio de
búsqueda siendo evaluados en cada ciclo). Sin embargo implica un “overhead” computacional para
la detección de los individuos duplicados.
Ténicas de aptitud
Se trata de la manera por la cual son atribuidas numéricamente las aptitudes de los cromosomas en
una población.
Intuitivamente, el método más simple de atribuir una aptitud a un cromosoma es utilizar el valor
numérico del resultado de la evaluación de este cromosoma por la función de evaluación. Existen,
sin embargo, dos problemas importantes asociados a este método:
 Competición próxima: individuos cuya aptitud relativa son próximas numéricamente.
 Super individuos: individuos con evaluación muy superior a la media, capaces de dominar el
proceso de selección, haciendo que el AG converja prematuramente hacia un óptimo local.
Para resolver estos problemas se utilizan métodos de transformación de la evaluación numérica de
los cromosomas en una aptitud. Los métodos más empleados son: “windowing”, "rankbased" y la
normalización lineal. Entre estos, la normalización lineal es el método más simple, eficiente para los
tres problemas y, además, parametrizable.
El método de normalización lineal consiste en ordenar los cromosomas en orden creciente de
evaluación (i=0 corresponde al individuo menos apto) y atribuir valores de aptitud a los cromosomas
linealmente entre un valor mínimo y un máximo, distanciados un valor fijo (tasa de decremento).
Técnica de interpolación de los parámetros
La interpolación de los parámetros de un AG tiene como objetivo buscar el valor ideal de un
determinado parámetro para cada ciclo, durante toda la evolución. Durante la evolución de un AG
algunos aspectos están altamente relacionados:
- la convergencia do algoritmo
- la aptitud dos cromosomas
- las tasas y parámetros
Por ejemplo, es intuitivamente perceptible que la tasa de aplicación del crossover sea mayor en las
primeras generaciones mientras la población se presenta dispersa en el espacio de búsqueda.
Después de varias generaciones los individuos tienden a presentar, en su mayoría, características
muy similares. Un aumento de la tasa de mutación en esta fase de la evolución servirá para dispersar
la población, trayendo nuevo material genético para la formación de mejores individuos.
La interpolación de los parámetros puede ser lineal o adaptativa. En la interpolación lineal la tasa o
parámetro es variado linearmente entre un valor inicial y final, a través de ajustes fijos, a cada K
generaciones. La interpolación adaptativa, normalmente es empleada para el ajuste de la tasa de
aplicación de los operadores, considerando el desempeño de estos operadores en los ciclos
anteriores. Este desempeño es medido en función del éxito de estos operadores en la creación de
mejores individuos. Este esquema requiere un proceso de puntuación de los individuos y sus
descendentes, necesitándose un razonable “overhead” computacional. El objetivo, de todo esto, es
alcanzar trayectorias óptimas para cada parámetro, durante toda la evolución.
Operadores genéticos
Los operadores genéticos se clasifican en:
- operadores de recombinación (crossover)
- operadores de mutación
- operadores de inversión (usados en problemas con epistasia)
- operadores específicos al dominio del problema.
Entre estos, los operadores de crossover, debido a su importancia fundamental en los AGs,
presentan variaciones que merecen ser destacadas.
 Crossover de Dos Puntos: Realiza la recombinación de dos individuos a partir de dos puntos
escogidos
aleatoriamente. Este operador es capaz de combinar schematas con posiciones fijas en las
extremidades, como en el siguiente ejemplo.


H1 1 1 S S S S S 0

H2 S S S 1 0 1 S S


 Crossover Uniforme: El crossover de dos puntos también presenta limitaciones en la
recombinación de los schematas. El crossover uniforme, por su parte, es capaz de
recombinar cualesquiera de las posiciones entre dos progenitores. Este operador utiliza un
patrón (palabra binaria) escogida aleatoriamente para designar los bits seleccionados de
cada progenitor en la creación de los descendentes. Por ejemplo:

G1 1 1 0 0 1 0 1
G2 0 1 1 1 1 1 0

Patrón 0 1 1 0 1 0 0

D1 0 1 0 1 1 1 0
D2 1 1 1 0 1 0 1


El crossover uniforme presenta un poder de destrucción mucho mayor que el crossover de un punto
y dos puntos que preservan los códigos (schemata cortos) compactos. El crossover uniforme puede
perjudicar la formación de patrones a partir de schematas cortos. Su utilización debe ser, por lo
tanto, en ambientes altamente elitistas como en la reproducción parcial de la población, que
AGrantiza la permanencia de los mejoresindividuos.

PROGRAMACION GENETICA
La programación genética es uno de los cuatro paradigmas principales de la
computación evolutiva. Básicamente consiste en el empleo de un enfoque
evolutivo para la generación de programas que resuelven una cierta tarea.
Tradicionalmente, estos programas se representan mediante árboles sintácticos
a través de los que es posible expresar funciones complejas e incluso
programas, dependiendo del conjunto de símbolos disponible (no es extraño en
cualquier caso encontrar también representaciones lineales de programas, o
representaciones basadas en grafos). Para construir dichos árboles es preciso
especificar el conjunto de símbolos terminales que se emplearán como hojas de
los árboles (variables, constantes, etc.), así como los símbolos no terminales
(funciones básicas) que se emplearán en los nodos internos, y si es preciso las
reglas sintácticas y semánticas de indican qué árboles son correctos.



A partir de ahí, se emplean los mecanismos de selección, reproducción y
reemplazo para hacer evolucionar una población de programas en pos de la
solución de un cierto problema (ya sea de tipo supervisado, en el que se desea
producir una cierta salida conocida ante ciertas entradas, o no supervisado, en el
que típicamente se desea un cierto comportamiento de un sistema controlado
por el programa, pero no se dispone explícitamente de las salidas precisas que
hay que producir para ello). Lo mejor de todo es que este enfoque funciona, y es
posible resolver satisfactoriamente problemas de diferente índole (clasificación,
síntesis de circuitos, control de sistemas, etc.)
PROGRMACION EVOLUTIVA
La computación evolutiva (en adelante CE) es una de las ramas
de la Inteligencia Artificial que se aplica para la resolución de
problemas deoptimización combinatoria. La CE está inspirada en los
mecanismos de evolución biológica propuestos por Darwin, Medel y
Lamark. Sin entrar mucho en detalle sobre los estudios que hicieron
estos científicos, solo vamos a mencionar brevemente lo que
propusieron. Darwin propuso la “Selección natural de los más adaptados“,
Medel propuso la “Teoría corpuscular de la herencia” y Lamark propuso la
“Herencia de caracteres adquiridos“.
Como debéis saber muchos de vosotros, el principal problema de
la inteligencia artificial es que no tiene una definición fácil o
formal, pero para entendernos podemos decir que la inteligencia
artificial es una rama que trata de “imitar” a la inteligencia natural y
por tanto la computación evolutiva se basa en imitar la evolución
biológica tal y como la entendemos hoy en dia. Como podeis
suponer la CE trata de resolver problemas de optimización
combinatoria, con el fin de encontrar el mejor resultado al
problema, es decir tal y como pasa en la naturaleza, ya que el gran
problema que hay, sobre todo en el entorno animal; es la
supervivencia y solo los más fuertes y mejor adaptados al entorno
son capaces de sobrevivir y reproducirse; en otras palabras, son
los mejores individuos posibles o la mejor solución al problema.
Aunque podemos “rizar mucho el rizo” la computación evolutiva
se basa en la siguiente metáfora, denominada como metáfora evolutiva:
 Una población de individuos coexiste en un determinado entorno con recursos
limitados.
 La competición por los recursos provoca la selección de aquellos individuos que
están mejor adaptados al entorno.
 Estos individuos se convierten en los progenitores de nuevos individuos a través de
procesos de mutación y recombinación.
 Los nuevos individuos pasan a competir por su supervivencia.
 Con el paso del tiempo, esta selección natural provoca el incremento en la “calidad” de
los individuos de la población.

Dentro de lo que es la computación evolutiva, se engloban
diferentes estrategias para la resolución de problemas de
optimización. Estas estrategias son las siguientes:
 Procesos de Búsqueda Evolutiva: Fue propuesta por Alan Turing en el año 1948.
 Estrategias Evolutivas (EE): Propuesto por Rechenberg en 1964. Representan a los
individuos con Vectores reales.
 Programación Evolutiva (PE): Propuesto por Fogel en 1965. Utilizan máquinas de
estado finito.
 Algoritmos Genéticos (AG): Propuesto por Holland en 1975. Representan a los
individuos como cadenas binarias.
 Programación Genética (PG): Propuesto por Koza en 1992. Utilizan Arboles LISP.
Podemos decir que la diferencia que hay entre estos algoritmo
evolutivos, es la forma en la que representan a los individuos.
Hay que decir que la diferencia entre este tipo de algoritmos es
irrelevante ya que conceptualmente hacen los mismo con distintas
formas de representar a los individuos, por lo tanto lo mejor a la
hora de utilizar los algoritmos evolutivos es elegir la
representación más adecuada y los operadores de variación más
adecuados para resolver el problema que tengamos que resolver.
El esquema general de un algoritmo evolutivo lo mostramos en la
siguiente imagen:

A continuación mostramos el Pseudo-Código de un algoritmo
evolutivo:
BEGIN
INICIALIZAR de forma aleatoria una población con soluciones candidatas
EVALUAR cada candidato
REPEAT UNTIL ( CONDICIÓN DE TERMINACIÓN == true )
1. SELECCIONAR progenitores
2. RECOMBINAR progenitores seleccionados obteniendo descendencia
3. MUTAR descendencia
4. EVALUAR nuevos candidatos
5. SELECCIONAR individuos para la próxima generación
END REPEAT
END
Hasta ahora hemos visto a grandes rasgos en que se basa la CE y
el Pseudocódigo de los algoritmos evolutivos, pero ¿Como
representamos a los individuos?, ¿Como se reproducen y mutan
los individuos? y ¿Que es eso de que un “individuo es
suficientemente bueno”?. Pues vamos a responder a estas
preguntas:
¿Como representamos a los individuos?
Basándonos en el conocimiento humano y haciendo una
simplificación, diremos que cada persona tiene una información
genetica única que se puede ver en el ADN de cada un@. Este
ADN los forman 4 tipos de “elementos” que son la “Adenina”
(A), “Timina” (T), “Citosina” (C) y “Guanina” (G), con lo que
haciendo una gran simplificación podemos decir que las personas
estamos representados por un “ARRAY” compuesto por alguno
de estos 4 “elementos” con lo cual ya tenemos aqui una forma (o
estructura de datos) para representar a los individuos. Esto,
pasado a un problema de optimización combinatoria, significa
que un posible resultado al problema lo podemos pasar a un array
(por ejemplo un array binario de ceros y unos), al que le daremos
un cierto significado. A este array que representa a un individuo
del problema o una posible solución, se le denomina Cromosoma.
¿Como se reproducen y mutan los individuos?
Siguiendo con las simplificaciones, podemos decir que el proceso
de reproducción no es mas que crear un nuevo individuo a partir
de dos individuos dados, es decir combinando los dos arrays que
representan a dos individuos. A continuación ponemos un
ejemplo que como obtenemos un nuevo individuo a partir de dos:

A grandes rasgos es así como funciona la reproducción humana,
ya que uno al nacer hereda unas características de la madre y otras
del padre. Como se ve no se tiene porque heredar en partes
iguales las características de los dos progenitores.
Por último en lo referente a la generación de nuevo individuos,
existe la posibilidad de que “Mute” algún gen; es decir, que sin
ninguna “lógica” (aunque supongo que biologicamente la tendrá)
un determinado elemento del cromosoma cambie de valor, por
ejemplo al valor complementario:

¿Que es eso de que un “individuo es suficientemente bueno”?
Como se ha comentado los Algoritmos Evolutivos sirven para
resolver problemas de optimización combinatoria, pero tambien
se ha de decir que no siempre alcanzan la mejor solución, por lo
tanto hay que definir un umbral a partir del cual consideramos
que la solución que buscamos es lo suficientemente buena. Este
umbral se ha de obtener a partir de una “función de evaluación”
que se ha de definir siempre que se utilicen algoritmos evolutivos.
Esta función de evaluación es conocida como “Función de Fitness”
aunque también se le suele denominar función de calidad, función de aptitud
o función objetivo.
Como decía, esta función de fitness evaluará lo bueno o malo que
es un individuo (o posible solución del problema) por lo tanto con
esta función podemos utilizar dos estrategias para obtener la
mejor solución al problema en función del conocimiento que
tengamos del problema:
 Sino tenemos mucha idea de la solución que nos dará el problema, pondremos el
algoritmo evolutivo a ejecutarse hasta que complete „N‟ generaciones y en la generación
„N‟ evaluaremos todos los individuos con la función de fitness y cogeremos como
solución el individuo que mejor resultado nos haya dado con la función de fitness.
 La segunda estrategia se utiliza cuando sabemos el umbral de calidad que queremos
alcanzar para la solución del problema. En este caso se iran ejecutando generaciones
(una por una) y tras cada generación se evaluaran todos los individuos con la función de
fitness y si alguno cumple un determinado umbral de calidad, se parará de ejecutar el
algoritmo, al haber alcanzado una buena solución.