You are on page 1of 134

Algoritmos evolutivos

Algoritmos evolutivos
Este término es empleado para describir sistemas de resolución de
problemas de optimización o búsqueda basados en el ordenador
empleando modelos computacionales de algún mecanismo de
evolución conocido como elemento clave en su diseño e
implementación.
Los algoritmos evolutivos combinan la búsqueda aleatoria, dada por las
transformaciones de la población, con una búsqueda dirigida dada
por la selección.
Principales Componentes:
Población de individuos, que son una representación (no
necesariamente directa) de posibles soluciones.

 Procedimiento de selección basado en la aptitud de los individuos


para resolver el problema.

 Procedimiento de transformación para construir nuevos individuos a


partir de los anteriores.
La estructura general de los algoritmos
evolutivos responde al siguiente esquema:
Población Inicial

Generación=0

Condición Si
Mejor
Terminación
Individuo
No

Trasformar Población

Seleccionar y Reemplazar
Generación+1
Características
La característica fundamental de los algoritmos evolutivos radica en los
métodos de generación de soluciones: se parte de un conjunto de soluciones
iniciales y se van empleando un conjunto de operadores de búsqueda para ir
refinando la solución final.
Para realizar dicho refinamiento de las soluciones, se pueden utilizar técnicas
clásicas como el seguimiento del gradiente (Hill Climbing) complementadas
con mecanismos biológicos de exploración: población de soluciones,
operadores genéticos
Clasificación

• Estrategias Evolutivas

• Programación Evolutiva

• Algoritmos Genéticos

• Programación Genética
Estrategias Evolutivas
Técnica desarrollada por Rechenberg y Schwefel y extendida por Herdy,
Kursawe, Ostermeier, Rudolph, y otros, fue diseñada inicialmente con
la meta de resolver problemas de optimización discretos y continuos,
principalmente experimentales y considerados difíciles. Trabaja con
vectores de números reales Dcon desviaciones estándarD que codifican
las posibles soluciones de problemas numéricos. Utiliza recombinación
o cruce (crossover aritmético), mutación y la operación de selección, ya
sea determinística o probabilística, elimina las peores soluciones de la
población y no genera copia de aquellos individuos con una aptitud por
debajo de la aptitud promedio.
Programación Evolutiva
Técnica introducida por Fogel y extendida por Burgin, Atmar y otros,
inicialmente fue diseñada como un intento de crear inteligencia artificial.
La representación del problema se realiza mediante números reales
(cualquier estructura de datos), y emplea los mecanismos de mutación y
selección. El procedimiento es muy similar a las estrategias evolutivas con la
diferencia de que no emplea la recombinación, de tal forma que son
denominadas en conjunto algoritmos evolutivos como una manera de
diferenciarlas de los algoritmos genéticos.
Algoritmos Genéticos
Modelan el proceso de evolución como una sucesión de frecuentes
cambios en los genes, con soluciones análogas a cromosomas. Trabajan
con una población de cadenas binarias para la representación del
problema, y el espacio de soluciones posibles es explorado aplicando
transformaciones a éstas soluciones candidatas tal y como se observa
en los organismos vivientes: cruce, inversión y mutación. Como método
de selección emplean en mecanismo de la ruleta (a veces con elitismo).
Constituyen el paradigma más completo de la computación evolutiva
ya que
resumen de modo natural todas las ideas fundamentales de dicho
enfoque. Son muy flexibles ya que pueden adoptar con facilidad nuevas
ideas, generales o específicas, que surjan dentro del campo de la
computación evolutiva. Además, se pueden hibridar fácilmente con
otros paradigmas y enfoques, aunque no tengan ninguna relación con
la computación evolutiva. Se trata del paradigma con mayor base
teórica.
El diagrama de funcionamiento de los algoritmos
genéticos responde al siguiente esquema:
Programación genética:

Desarrollada por Koza, los individuos son programas o autómatas de


longitud variable, descritos mediante Expresiones-S de LISP
representadas habitualmente como árboles, y como operadores de
variación emplea crossover y modificación, además de mecanismos de
selección.
Resumen de las técnicas comentadas
Algoritmos genéticos
Los algoritmos genéticos son estrategias de búsqueda estocástica
basados en el mecanismo de selección natural y en algunos casos se
involucran aspectos de genética natural, imitando a la evolución
biológica como estrategia para resolver problemas Los algoritmos
genéticos difieren de las estrategias de búsqueda convencionales en
que estos (los AGs) trabajan sobre un conjunto de potenciales
soluciones, llamado población. Esta población esta compuesta de una
serie de soluciones llamadas individuos y un individuo esta conformado
por una serie de posiciones que representan cada una de las variables
involucradas en los procesos de optimización y que son llamados
cromosomas.
Estos cromosomas están compuestos por una cadena de símbolos que en muchos casos esta
presentada en números binarios. En una algoritmo genético cada individuo esta definido como una
estructura de datos que representa una posible solución del espacio de búsqueda del problema.

Las estrategias de evolución trabajan sobre los individuos, que representan las soluciones del
problema, por lo que estos evolucionan a través de generaciones.

Dentro de la población cada individuo es diferenciado de acuerdo con su valor de aptitud, que es
obtenido usando algunas medidas de acuerdo con el problema a resolver.
Para la obtención de las próximas generaciones se crean nuevos individuos,
llamados hijos, utilizando dos estrategias de evolución básicas como son el
operador de cruce y el de mutación (empleadas generalmente de forma
aleatoria).

Se seleccionan y copian estos individuos vencedores hacia la siguiente


generación con cambios aleatorios, y el proceso se repite. Las expectativas
son que la aptitud media de la población se incrementará en cada ronda y,
por tanto, repitiendo este proceso cientos o miles de rondas, pueden
descubrirse soluciones muy buenas del problema; en otras palabras, tras
varias iteraciones el algoritmo converge al individuo con mejor valor de
aptitud, el cual representara el óptimo o subóptimo del problema.
Los algoritmos genéticos toman para su definición terminología
utilizada en Genética Natural y Ciencia Computacional, por lo que la
literatura específica es una combinación entre los términos naturales y
los artificiales, por esto se debe tener en cuenta:

La Estructura de codificación con la cual se construyen las soluciones


para el problema se llaman cromosomas. Uno o más cromosomas
pueden ser requeridos para conformar una población.
El conjunto completo de cromosomas se llama genotipo y un
individuo en particular, un organismo resultante, se llama fenotipo.

 Cada cromosoma contiene una serie de valores individuales


llamados genes.

 Cada gen contiene información valiosa de una variable en particular


y su ubicación dentro del individuo se conoce como loco.

 Los diferentes valores de un gen son llamados alelos.


Componentes de un Algoritmo Genético
• Definición del problema a optimizar
• Representación para la solución del problema
• Decodificación del cromosoma
• Evaluación de un individuo:
Este tipo de optimización difiere en muchos aspectos de los procesos
convencionales de optimización, ya que los algoritmos genéticos:

Trabajan sobre un conjunto codificado de soluciones, no sobre las


soluciones mismas.
 Trabajan sobre un conjunto de soluciones, no sobre una solución única.
Utilizan información simple para determinar la aptitud de los individuos,
dejando de lado los procesos de derivación u otra información adicional.
 Usan procesos de transición probabilística para la búsqueda de la solución,
no reglas determinísticas.
Gracias a estas características, los algoritmos genéticos no requieren
información matemática adicional sobre optimización, por lo que
pueden tomar otro tipo de funciones objetivo y todo tipo de
restricciones (lineales y no lineales) definidas sobre espacios discretos,
continuos o espacios de búsqueda combinados.
Representación para la solución del problema

Para la solución de un problema en particular es importante definir una


estructura del cromosoma de acuerdo con el espacio de búsqueda. En
el caso de los algoritmos genéticos la representación más utilizada es la
representación binaria, debido a su facilidad de manipulación por los
operadores genéticos, su fácil transformación en números enteros o
reales, además de la facilidad que da para la demostración de
teoremas.
Decodificación del cromosoma

Para determinar el número real que la cadena binaria de caracteres


representa. Es importante tener en cuenta que la cadena no representa
un número real, sino que este número binario etiqueta un número
dentro del intervalo inicialmente fijado.
Evaluación de un individuo

Nos muestra el valor de aptitud de cada uno de los individuos. Esta


aptitud viene dada por una función que es la unión entre el mundo
natural y el problema a resolver matemáticamente. Esta función de
aptitud es particular para cada problema particular a resolver y
representa para un algoritmo genético lo que el medio ambiente
representa para los humanos
Operadores Evolutivos: Selección
Un algoritmo genético puede utilizar muchas técnicas diferentes para
seleccionar a los individuos que deben copiarse hacia la siguiente
generación, pero abajo se listan algunos de los más comunes. Algunos
de estos métodos son mutuamente exclusivos, pero otros pueden
utilizarse en combinación, algo que se hace a menudo.

Las diferentes variantes en la operación de selección son:


Selección elitista:

Se garantiza la selección de los miembros más aptos de cada


generación. (La mayoría de los AGs no utilizan elitismo puro, sino que
usan una forma modificada por la que el individuo mejor, o algunos de
los mejores, son copiados hacia la siguiente generación en caso de que
no surja nada mejor).
Selección proporcional a la aptitud:
los individuos más aptos tienen más probabilidad de ser seleccionados, pero no la certeza.

Selección por rueda de ruleta


una forma de selección proporcional a la aptitud en la que la probabilidad de que un individuo sea
seleccionado es proporcional a la diferencia entre su aptitud y la de sus competidores.
(Conceptualmente, esto puede representarse como un juego de ruleta: cada individuo obtiene una
sección de la ruleta, pero los más aptos obtienen secciones mayores que las de los menos aptos.
Luego la ruleta se hace girar, y en cada vez se elige al individuo que “posea” la sección en la que se
pare la ruleta).
Selección escalada:
al incrementarse la aptitud media de la población, la fuerza de la
presión selectiva también aumenta y la función de aptitud se hace más
discriminadora.
Este método puede ser útil para seleccionar más tarde, cuando todos
los individuos tengan una aptitud relativamente alta y sólo les distingan
pequeñas diferencias en la aptitud.

Selección por torneo: se eligen subgrupos de individuos de la


población, y los miembros de cada subgrupo compiten entre ellos. Sólo
se elige a un individuo de cada subgrupo para la reproducción.
Selección por rango: a cada individuo de la población se le asigna un rango
numérico basado en su aptitud, y la selección se basa en este ranking, en
lugar de las diferencias absolutas en aptitud. La ventaja de este método es
que puede evitar que individuos muy aptos ganen dominancia al principio a
expensas de los menos aptos, lo que reduciría la diversidad genética de la
población y podría obstaculizar la búsqueda de una solución aceptable.

Selección generacional: la descendencia de los individuos seleccionados en


cada generación se convierte en toda la siguiente generación. No se
conservan individuos entre las generaciones.
Selección por estado estacionario: la descendencia de los individuos
seleccionados en cada generación vuelven al acervo genético preexistente,
reemplazando a algunos de los miembros menos aptos de la siguiente
generación. Se conservan algunos individuos entre generaciones.

Selección jerárquica: los individuos atraviesan múltiples rondas de selección


en cada generación. Las evaluaciones de los primeros niveles son más
rápidas y menos discriminatorias, mientras que los que sobreviven hasta
niveles más altos son evaluados más rigurosamente. La ventaja de este
método es que reduce el tiempo total de cálculo al utilizar una evaluación
más rápida y menos selectiva para eliminar a la mayoría de los individuos
que se muestran poco o nada prometedores, y sometiendo a una evaluación
de aptitud más rigurosa y computacionalmente más costosa sólo a los que
sobreviven a esta prueba inicial.
Operadores Genéticos: Cruce y Mutación
Una vez que la selección ha elegido a los individuos aptos, éstos deben
ser alterados aleatoriamente con la esperanza de mejorar su aptitud
para la siguiente generación.

Existen dos estrategias básicas para llevar esto a cabo. La primera y más
sencilla se llama mutación. Al igual que una mutación en los seres vivos
cambia un gen por otro, una mutación en un algoritmo genético
también causa pequeñas alteraciones en puntos concretos del código
de un individuo.
Problema

Queremos buscar un vector con la mayor cantidad de 1 en su interior aunque la solución es trivial. Nos sirve
para ver como se ejecuta la librería ECJ para JAVA.

Representación

Una matriz de individuos llamada GENOMA en el algoritmo o algorítmicamente un vector de vectores donde se
encontraran los individuos.

Función fitness

Es la suma de los elementos de cada vector o individuo dentro del genoma dividido sobre la longitud del
individuo (Esto me da 1 si todos los elementos son 1) buscando el valor mas alto en el vector.
Pasos para solucionar el problema

Inicializar la población (Población inicial) remplazar la población con el


nuevo resultado función evaluador da el primer fitness Si el evaluador
encuentra un individuo ideal salta al paso 9 (El algoritmo no se ejecuta)
Si no llama la función Exchanger para remplazar la nueva población con el
resultado Llama la función BREEDER para crear una nueva población
Incrementa el contador de generaciones Termina si encuentra un fitness de
1/1 = 1.0 es decir todos los elementos llenos de 1 en el vector
Introducción a los algoritmos genéticos

Un algoritmo genético es una búsqueda heurística que está inspirada


en la teoría de la evolución natural de Charles Darwin. Este algoritmo
refleja el proceso de selección natural donde los individuos más aptos
son seleccionados para la reproducción con el fin de producir
descendencia de la próxima generación.
Concepto de selección natural

El proceso de selección natural comienza con la selección de individuos


más aptos de una población. Producen descendientes que heredan las
características de los padres y se agregarán a la generación siguiente. Si
los padres tienen una mejor condición física, sus hijos serán mejores
que los padres y tendrán más posibilidades de sobrevivir. Este proceso
continúa iterando y, al final, se encontrará una generación con las
personas más aptas.
Este concepto se puede aplicar a un problema de búsqueda.
Consideramos un conjunto de soluciones para un problema y
seleccionamos el conjunto de las mejores.

Cinco fases se consideran en un algoritmo genético.

1.- Población inicial


2.- Función de la aptitud
3.- Selección
4.-Cromosomas
5.-Mutación
Población inicial
El proceso comienza con un conjunto de individuos que se llama
Población. Cada individuo es una solución al problema que desea
resolver.
Un individuo se caracteriza por un conjunto de parámetros (variables)
conocidos como Genes. Los genes se unen en una cuerda para formar
un cromosoma (solución).
En un algoritmo genético, el conjunto de genes de un individuo se
representa utilizando una cuerda, en términos de un alfabeto. Por lo
general, se utilizan valores binarios (cadena de 1s y 0s). Decimos que
codificamos los genes en un cromosoma.
Función de la aptitud

La función de aptitud determina qué tan buena es una persona (la


capacidad de una persona para competir con otras personas). Le da un
puntaje de condición física a cada individuo. La probabilidad de que un
individuo sea seleccionado para la reproducción se basa en su puntaje
de condición física.
Selección

La idea de la fase de selección es seleccionar a las personas más aptas y


dejarles pasar sus genes a la próxima generación.

Se seleccionan dos pares de individuos (padres) en función de sus


puntajes de aptitud. Las personas con una buena forma física tienen
más posibilidades de ser seleccionadas para la reproducción.
Crossover
Crossover es la fase más importante en un algoritmo genético. Para
cada par de padres que se aparearán, se elige al azar un punto de cruce
dentro de los genes.

• Nota: Crossover cromosómico, intercambio de material genético


entre cromosomas homólogos. Crossover, un filtro de cruces.
Crossover clásico, género musical que mezcla y fusiona elementos del
estilo de música clásica con la música popular. Crossover, géneros
musicales que combinan elementos de diferente origen o expresión.
Por ejemplo, considere el punto de cruce como 3 como se muestra a
continuación.
Los descendientes se crean intercambiando los genes de los padres
entre ellos hasta que se alcanza el punto de cruce.

Intercambio de genes entre los padres


Los nuevos descendientes se agregan a la población.

Nueva descendencia
Mutación

En ciertos descendientes nuevos formados, algunos de sus genes


pueden ser sometidos a una mutación con una baja probabilidad
aleatoria. Esto implica que algunos de los bits en la cadena de bits se
pueden voltear.
La mutación ocurre para mantener la diversidad dentro de la
población y prevenir la convergencia prematura.
Terminación

El algoritmo finaliza si la población ha convergido (no produce


descendencia que sea significativamente diferente de la generación
anterior). Luego se dice que el algoritmo genético ha proporcionado
una serie de soluciones a nuestro problema.
La población tiene un tamaño fijo. A medida que se forman las nuevas
generaciones, mueren las personas con el menor nivel de aptitud física,
lo que proporciona espacio para nuevos descendientes.

La secuencia de fases se repite para producir individuos en cada nueva


generación que son mejores que la generación anterior.
Pseudocódigo
Ejemplo en Java
A continuación se presenta una implementación de ejemplo de un algoritmo
genético en Java.

Dado un conjunto de 5 genes, cada gen puede contener uno de los valores binarios
0 y 1.
El valor de la aptitud se calcula como el número de 1s presente en el genoma. Si
hay cinco 1s, entonces está teniendo la mejor forma física. Si no hay 1s, entonces
tiene la aptitud mínima.

Este algoritmo genético intenta maximizar la función de aptitud para proporcionar


una población que consta de la persona más apta, es decir, individuos con cinco 1s.
Nota: En este ejemplo, después del cruce y la mutación, la persona con el menor
ajuste es reemplazada por la nueva descendencia más apta.
Ejemplo de algoritmo genético simple.

La población comienza con una fuerza de aptitud aleatoria, después de


algunas generaciones, el algoritmo debería producir una población que
tenga una fuerza física más fuerte. El valor máximo posible aquí es 10.
Estrategia de reemplazo: elitismo 10%, es decir, el 10% superior del padre
sobrevive a cada generación.
Estado estable (solo reemplace al padre si el hijo es mejor al menos tan
bueno).
Estrategia de selección: método del torneo.
Encontrar 4 aleatorios en población no igual
Deje que 2 peleen, y 2 pelea
Los ganadores hacen 2 niños
Resultado
Ejemplo 2
Un algoritmo genético (GA)
Es ideal para encontrar soluciones a problemas de búsqueda complejos. A menudo se usan
en campos como la ingeniería para crear productos increíblemente de alta calidad gracias a
su capacidad de buscar a través de una gran combinación de parámetros para encontrar la
mejor combinación. Por ejemplo, pueden buscar a través de diferentes combinaciones de
materiales y diseños para encontrar la combinación perfecta de ambos que podría resultar
en un producto final más fuerte, ligero y global, mejor. También se pueden usar para
diseñar algoritmos de computadora, programar tareas y resolver otros problemas de
optimización. Los algoritmos genéticos se basan en el proceso de evolución por selección
natural que se ha observado en la naturaleza. En esencia, replican la forma en que la vida
usa la evolución para encontrar soluciones a problemas del mundo real.
Sorprendentemente, aunque los algoritmos genéticos se pueden utilizar para encontrar
soluciones a problemas increíblemente complicados, son bastante simples de usar y
comprender.
Cómo trabajan ellos
Como ahora sabemos que se basan en el proceso de selección natural, esto
significa que toman las propiedades fundamentales de la selección natural y las
aplican a cualquier problema que intentemos resolver.
El proceso básico para un algoritmo genético es:
Inicialización: crea una población inicial. Esta población generalmente se genera
aleatoriamente y puede tener cualquier tamaño deseado, desde solo unos pocos
individuos hasta miles.

Evaluación: cada miembro de la población es luego evaluado y calculamos un


"estado físico" para ese individuo. El valor de la aptitud se calcula según cuán bien
se ajusta a nuestros requisitos deseados. Estos requisitos podrían ser simples, "los
algoritmos más rápidos son mejores" o más complejos, "los materiales más fuertes
son mejores, pero no deberían ser demasiado pesados".
Selección: queremos mejorar constantemente la aptitud general de nuestra
población. La selección nos ayuda a hacer esto descartando los malos
diseños y manteniendo solo a los mejores individuos de la población. Hay
algunos métodos de selección diferentes, pero la idea básica es la misma, es
más probable que se seleccionen individuos más aptos para nuestra próxima
generación.

Crossover: durante el cruce, creamos nuevas personas combinando aspectos


de nuestras personas seleccionadas. Podemos pensar que esto es imitar
cómo funciona el sexo en la naturaleza. La esperanza es que al combinar
ciertos rasgos de dos o más individuos, crearemos una descendencia aún
más "en forma" que heredará los mejores rasgos de cada uno de sus padres.

.
• Mutación: debemos agregar un poco de aleatoriedad a la genética de
nuestra población, de lo contrario, cada combinación de soluciones
que podamos crear estaría en nuestra población inicial. La mutación
generalmente funciona haciendo cambios muy pequeños al azar al
genoma de un individuo.
¡Y repetir! - Ahora tenemos nuestra próxima generación, podemos
comenzar de nuevo desde el paso dos hasta que lleguemos a una
condición de terminación
Limitaciones
Imagina que te dijeron que te pusieras una venda en los ojos y luego te
pusieron al pie de una colina con la instrucción de encontrar el camino
hacia la cumbre. Tu única opción es ir subiendo la colina hasta que
notes que ya no estás ascendiendo. En este punto, podrías declarar que
has encontrado el pico, pero ¿cómo lo sabrías? En esta situación,
debido a que tienes los ojos vendados, no puedes ver si estás en la
cima o solo en el pico de la sección más pequeña de la colina.
Llamamos a esto un óptimo local. A continuación se muestra un
ejemplo de cómo podría verse esta localización óptima:
A diferencia de nuestro escalador de montañas con los ojos vendados,
los algoritmos genéticos a menudo pueden escapar de estos óptimos
locales si son lo suficientemente superficiales. Aunque al igual que
nuestro ejemplo, a menudo nunca podemos garantizar que nuestro
algoritmo genético haya encontrado la solución global óptima para
nuestro problema. Para problemas más complejos, generalmente es
una excepción irrazonable encontrar un óptimo global, lo mejor que
podemos hacer es esperar es una aproximación cercana de la solución
óptima.
Echemos un vistazo a las clases que vamos a crear para nuestra GA:

1.-Población: administra a todos los individuos de una población


2.- Individual: administra un individuo
3.-Algoritmo: gestiona nuestros algoritmos de evolución como el cruce
y la mutación
4.-FitnessCalc - Nos permite establecer una solución candidata y
calcular la aptitud de un individuo
Population.java
Individual.java
Algorithm.java
FitnessCalc.java
Ahora vamos a crear nuestra clase principal.
• Primero, debemos establecer una solución candidata (no dude en cambiar esto si
lo desea).

Ahora crearemos nuestra población inicial, una población de 50 debería estar


bien.
• Ahora podemos evolucionar nuestra población hasta que alcancemos
nuestra aptitud óptima
Aquí está el código completo para nuestra
clase principal:
Resultado
Problema de partición

Algoritmo genético para resolver el "problema de la partición" en 2012.


También se ha desarrollado un algoritmo que lo resuelve a modo
estocástico y otro que lo resuelve con fuerza bruta para comparación
de rendimiento entre estos.
Problema de 4 reinas

Algoritmo genético programado en 2011 que resuelve el problema de


colocar 4 reinas en un tablero de ajedrez. "Ejecuta.java" contiene el
main.
Controlador Evolutivo de Estrategias
Controlador Evolutivo de Estrategias
• Modificación del controlador Greedy de la competición www.ptsp-
game.net/ que da valores a pesos de distintas características del
controlador mediante Estrategias evolutivas (1 + 1)-EE y (NU +
LAMBDA)-EE programada en 2012.
Snake /Serpiente
• Programación del juego de la Serpiente en 2008 como práctica de
programación.
Eejemplo1 A_Estocastico
Ejemplo 2 A_Gen
Los Algoritmos Genéticos son métodos adaptativos, generalmente
usados en problemas de búsqueda y optimización de parámetros,
basados en la reproducción sexual y en el principio de supervivencia
del más apto (Fogel, 2000).

“Los Algoritmos Genéticos son algoritmos de búsqueda basados en la


mecánica de selección natural y de la genética natural. Combinan la
supervivencia del más apto entre estructuras de secuencias con un
intercambio de información estructurado, aunque aleatorizado, para
constituir así un algoritmo de búsqueda que tenga algo de las
genialidades de las búsquedas humanas”
Para alcanzar la solución a un problema se parte de un conjunto
inicial
de individuos, llamado población, generado de manera aleatoria.
Cada uno de estos individuos representa una posible solución al
problema. Estos individuos evolucionarán tomando como base
los esquemas propuestos por Darwin sobre la selección natural,
y se adaptarán en mayor medida tras el paso de cada
generación a la solución requerida (Darwin, 2007).
Computación Evolutiva
Se refiere al estudio de los fundamentos y aplicaciones de ciertas
técnicas heurísticas basadas en los principios de la evolución natural
(Tomassini, 1995). Estas técnicas heurísticas podrían clasificarse en 3
grandes categorías o grupos, dando lugar a la ecuación evolutiva
recogida en la Figura 1.1
Algoritmos Genéticos
Un Algoritmo Genético consiste en una población de soluciones
codificadas de forma similar a cromosomas.
Cada uno de estos cromosomas tendrá asociado un ajuste, valor de
bondad o fitness, que cuantifica su validez como solución al problema.
En función de este valor se le darán más o menos oportunidades de
reproducción.
Además, con cierta probabilidad se realizarán mutaciones de estos
cromosomas (Goldberg, 2002).
• Este proceso hará posible que los individuos genéticos tiendan hacia
las soluciones a un problema dado, aunque las condiciones del
espacio de búsqueda varíen con el transcurso del tiempo.

Las dos Estrategias de Evolución más empleadas son la (μ+λ)-ES y la


(μ,λ)-ES.
En la primera de ellas un total de μ padres producen λ descendientes,
reduciéndose nuevamente la población a μ individuos (los padres de la
siguiente generación) por selección de los mejores individuos. De esta
manera los padres sobreviven hasta que son reemplazados por hijos
mejores que ellos. En la (μ,λ)-ES la descendencia reemplaza
directamente a los padres, sin hacer ningún tipo de comprobación.
La Programación Evolutiva surge principalmente a raíz del trabajo
“Artificial Intelligence Through Simulated Evolution”.

En este caso los individuos, conocidos aquí como organismos, son


máquinas de estado finito. Los organismos que mejor resuelven alguna
de las funciones objetivo obtienen la oportunidad de reproducirse.
Antes de producirse los cruces para generar la descendencia se realiza
una mutación sobre los padres.
A su vez la computación evolutiva puede verse como uno de los
campos de investigación de lo que se ha dado en llamar Soft Computing
(ver Figura 1.2).
La computación evolutiva tiene una fuerte base biológica. En sus
orígenes los algoritmos evolutivos consistieron en copiar procesos que
tienen lugar en la selección natural. Este último concepto había sido
introducido, rodeado de mucha polémica, por Charles Darwin (Darwin,
1859). A pesar de que aún hoy en día no todos los detalles de la
evolución biológica son completamente conocidos, existen algunos
hechos apoyados sobre una fuerte evidencia experimental:

1.- La evolución es un proceso que opera, más que sobre los propios
organismos, sobre los cromosomas. Estos cromosomas pueden ser
considerados como herramientas orgánicas que codifican la vida o,
visto al revés, una criatura es ‘creada’ decodificando la información
contenida en los cromosomas.
2.- La selección natural es el mecanismo que relaciona los cromosomas
(genotipo) con la eficiencia respecto al entorno de la entidad (fenotipo)
que representan. Otorga a los individuos más adaptados al entorno
un mayor número de oportunidades de reproducirse.

3.- Los procesos evolutivos tienen lugar durante la etapa de reproducción.


Aunque existe una larga serie de mecanismos que afectan a la reproducción,
los más comunes son la mutación, causante de que los cromosomas en la
descendencia sean diferentes a los de los padres, y el cruce o recombinación,
que combina los cromosomas de los padres para producir la descendencia.
sobre estos hechos se sustenta el funcionamiento de la Computación
Evolutiva en general, y de los Algoritmos Genéticos en particular
(Michalewicz, 1999).

You might also like