1. UNIVERSIDAD LAICA ELOY ALFARO
DE MANABI
FACULTAD DE INGENIERIA
ESCUELA DE INGENIERIA ELECTRICA
TAREA DE PROGRAMACIÓN I
PROF: Ing. Washington García, Mg.
Alumno: Ronald Barcia Macías
Curso: 2
do
semestre “A”
2. Algoritmos Genéticos
La capacidad del ser humano para predecir el comportamiento de su entorno se ha ido
incrementando con el paso del tiempo. De igual modo, ha comprendido que si bien
eracapaz de controlar muchos aspectos de su vida, y su interacción con lo que le rodeaba,
no lo era para otros tantos.
La inteligencia artificial es responsable de muchos de esos logros. Los pioneros de esta
ciencia estaban tan interesados en la electrónica, como en la biología, y por eso sus
aplicaciones iban desde calcular trayectorias de misiles, a tratar de modelar el cerebro, de
imitar el proceso de aprendizaje humano, y de simular la evolución biológica.
Los años ochenta marcan el florecimiento del interés de la comunidad científica por estos
temas computacionales inspirados en la biología, que han visto como su desarrollo les
llevaba a cosas inimaginables, primero en el campo de las Redes Neuronales, luego en el
del Aprendizaje, y por último en lo que ahora se conoce como “computación evolutiva”, de
la que los algoritmos genéticos constituyen su máximo exponente.
Los programas evolutivos fueron presentados en 1994 por Michalewicz, cuando propuso
incorporar conocimiento específico del problema a resolver en las estructuras de datos.
Así, los Programas Evolutivos son métodos que incorporan directamente conocimiento
específico a los Algoritmos Genéticos, puesto que permiten la utilización de estructuras de
datos naturales. Esto permite, a su vez, la utilización de operadores genéticos sensibles al
contexto, con el fin de mejorar la eficiencia del algoritmo de búsqueda sin perder gran
parte de la propiedad de generalización.
Los Algoritmos Genéticos 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 más fuertes, postulados por
Darwin (1859). Por imitación de este proceso, los Algoritmos Genéticos 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
sí 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 más éxito en sobrevivir y en atraer compañeros tienen mayor
probabilidad de generar un gran número de descendientes. Por el contrario individuos
poco dotados producirán un menor número 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.
3. El tema central en las investigaciones sobre algoritmos genéticos, ha sido larobustez, el
equilibrio necesario entre la eficiencia y la eficacia suficiente para la supervivencia en
entornos diferentes. Las implicaciones que tiene la robustez en los sistemas artificiales son
variadas. Si se puede conseguir que un sistema artificial sea más robusto, se podrán
reducir, e incluso eliminar, los costes por rediseños. Y si se es capaz de lograr niveles altos
de adaptación, los sistemas podrán desarrollar sus funciones mejor y durante más tiempo.
Sin embargo, ante la robustez, eficiencia y flexibilidad de los sistemas biológicos, sólo
podemos sentarnos a contemplar, y maravillarnos; mentiríamos si dijéramos que somos
capaces de igualarlos.
El poder de los Algoritmos Genéticos 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 Algoritmos Genéticos encuentre la solución óptima del
problema, existe evidencia evidencia empírica de que se encuentran soluciones de un
nivel aceptable, en untiempo 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 más probable es que superen al Algoritmos Genético, tanto en rapidez
como en eficacia.El gran campo de aplicación de los Algoritmos Genéticos 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 hibridándolas con los Algoritmos Genéticos.
Un algoritmo genético es un método de búsqueda dirigida basada en probabilidad.
Bajo una condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde
siempre al mejor elemento de la población sin hacerle ningún cambio) se puede
demostrar que el algoritmo converge en probabilidad al óptimo. En otras palabras, al
aumentar el número de iteraciones, la probabilidad de tener el óptimo en la población
tiende a 1.
¿Por qué utilizar Algoritmos Genéticos en la Optimización?
La razón del creciente interés por los Algoritmos Genéticos 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 Algoritmos Genéticos 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.
4. 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 típicos 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.
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.
BEGIN/* Algoritmo Genético Simple */
Generar una población inicial.
Computar la función de evaluación de cada individuo.
WHILE NOTTerminado DO
BEGIN/* Producir nueva generación */
FORTamaño población/2 DO
BEGIN/*Ciclo Reproductivo */
Seleccionar dos individuos de la anterior generación,para el cruce
(probabilidad de selección proporcional a la función de evaluación del
individuo).
Cruzarcon cierta probabilidad los dos individuos obteniendo dos
descendientes.
Mutar los dos descendientes con cierta probabilidad.
Computar la función de evaluación de los dos descendientes mutados.
Insertar los dos descendientes mutados en la nueva generación.
END
IF la población ha convergido THEN
Terminado := TRUE
END
END
Funcionamiento
Los algoritmos entre el conjunto de soluciones de un problema, llamado fenotipo, y el
conjunto de individuos de una población natural, codificando la información de cada
5. solución en una cadena, generalmente binaria, llamada cromosoma. Los símbolos que
forman la cadena son llamados los genes. Cuando la representación de los cromosomas
se hace con cadenas de dígitos binarios se le conoce como genotipo. Los cromosomas
evolucionan a través de iteraciones, llamadas generaciones. En cada generación, los
cromosomas son evaluados usando alguna medida de aptitud. Las siguientes
generaciones (nuevos cromosomas), operadores genéticos, de sobrecruzamiento y de
mutación.
¿Cuándo usar estos algoritmos?
Los algoritmos genéticos son de probada eficacia en caso de querer calcular funciones
no derivables (o de derivación muy compleja) aunque su uso es posible con cualquier
función.
Deben tenerse en cuenta también las siguientes consideraciones:
Si la función a optimizar tiene muchos máximos/mínimos locales se requerirán
más iteraciones del algoritmo para "asegurar" el máximo/mínimo global.
Si la función a optimizar contiene varios puntos muy cercanos en valor al
óptimo, solamente podemos "asegurar" que encontraremos uno de ellos (no
necesariamente el óptimo).
Funcionamiento de un algoritmo genético básico
Un algoritmo genético puede presentar diversas variaciones, dependiendo de cómo se
aplican los operadores genéticos (cruzamiento, mutación), de cómo se realiza la
selección y de cómo se decide el reemplazo de los individuos para formar la nueva
población. En general, el pseudocódigo consiste de los siguientes pasos:
Algoritmo genético i: inicialización, f(X): evaluación, ?: condición de término, Se:
selección, Cr: cruzamiento, Mu: mutación, Re: reemplazo, X*: mejor solución.
Inicialización: Se genera aleatoriamente la población inicial, que está
constituida por un conjunto de cromosomas los cuales representan las posibles
soluciones del problema. En caso de no hacerlo aleatoriamente, es importante
garantizar que dentro de la población inicial, se tenga la diversidad estructural de
6. estas soluciones para tener una representación de la mayor parte de la población
posible o al menos evitar la convergencia prematura.
Evaluación: A cada uno de los cromosomas de esta población se aplicará la
función de aptitud para saber cómo de "buena" es la solución que se está
codificando.
Condición de término El AG se deberá detener cuando se alcance la solución
óptima, pero ésta generalmente se desconoce, por lo que se deben utilizar otros
criterios de detención. Normalmente se usan dos criterios: correr el AG un
número máximo de iteraciones (generaciones) o detenerlo cuando no haya
cambios en la población. Mientras no se cumpla la condición de término se hace
lo siguiente:
o Selección Después de saber la aptitud de cada cromosoma se procede a
elegir los cromosomas que serán cruzados en la siguiente generación.
Los cromosomas con mejor aptitud tienen mayor probabilidad de ser
seleccionados.
o Recombinación o Cruzamiento La recombinación es el principal
operador genético, representa la reproducción sexual, opera sobre dos
cromosomas a la vez para generar dos descendientes donde se combinan
las características de ambos cromosomas padres.
o Mutación modifica al azar parte del cromosoma de los individuos, y
permite alcanzar zonas del espacio de búsqueda que no estaban cubiertas
por los individuos de la población actual.
o Reemplazo una vez aplicados los operadores genéticos, se seleccionan
los mejores individuos para conformar la población de la generación
siguiente
Aplicaciones
Diseño automatizado, incluyendo investigación en diseño de materiales y diseño
multiobjetivo de componentes automovilísticos: mejor comportamiento ante
choques, ahorros de peso, mejora de aerodinámica, etc.
Diseño automatizado de equipamiento industrial.
Diseño automatizado de sistemas de comercio en el sector financiero.
Construcción de árboles filogenéticos.
Optimización de carga de contenedores.
Diseño de sistemas de distribución de aguas.
Diseño de topologías de circuitos impresos.
Diseño de topologías de redes computacionales.
En Teoría de juegos, resolución de equilibrios.
Análisis de expresión de genes.
Aprendizaje de comportamiento de robots.
Aprendizaje de reglas de Lógica difusa.
Análisis lingüístico, incluyendo inducción gramática, y otros aspectos de
Procesamiento de lenguajes naturales, tales como eliminación de ambigüedad de
sentido.
Infraestructura de redes de comunicaciones móviles.
Optimización de estructuras moleculares.
Planificación de producción multicriteria.
Predicción.
Aplicación de Algoritmos Genéticos al Dilema del prisionero Iterado
7. Optimización de sistemas de compresión de datos, por ejemplo, usando
wavelets.
Predicción de Plegamiento de proteínas.
Optimización de Layout.
Predicción de estructura de ARN.
En bioinformática, Alineamiento múltiple de secuencias.
Aplicaciones en planificación de procesos industriales, incluyendo planificación
job-shop.
Selección óptima de modelos matemáticos para la descripción de sistemas
biológicos.
Manejo de residuos sólidos.
Ingeniería de software.
Construcción de horarios en grandes universidades, evitando conflictos de
clases.
Problema del viajante.
Hallazgo de errores en programas.
Optimización de producción y distribución de energía eléctrica.
Diseño de redes geodésicas (Problemas de diseño).
Calibración y detección de daños en estructuras civiles.
Un ejemplo simple de algoritmo genético
Sea X el problema a resolver. Dada una representación de candidatas a soluciones en una
cadena de bits, un algoritmo genético simple, tal y como se describe en Mitchell M. (1998),
trabajaría del siguiente modo:
1. Comenzar con una población P generada aleatoriamente de n cromosomas de lbit.
2. Calcular la capacidad f(x) para cada cromosoma x de P.
3. Repetir los siguientes pasos hasta que se hayan creado n descendientes:
a. Seleccionar un par de cromosomas padre de P, siendo la probabilidad de
selección una función creciente de la capacidad. La selección se realiza
“con remplazamiento”, es decir, que el mismo cromosoma puede ser
seleccionado en más de una ocasión para ser padre.
b. Con probabilidad pc (probabilidad de cruce, o tasa de cruce), cruzar el par
en un punto elegido aleatoriamente (con probabilidad uniforme) para
formar dos descendientes. Si no tiene lugar ningún cruce, formar dos
descendientes que sean copias exactas de sus respectivos padres.
(Obsérvese que aquí la probabilidad de cruce se define como la
probabilidad de que dos padres se crucen sobre un único punto. Hay otras
versiones de algoritmos genéticos que son de “cruces en múltiples puntos”,
en los que la tasa de cruce para una pareja de padres es el n º de puntos en
los que tiene lugar un cruce).
c. Mutar los dos descendientes en cada lugar con probabilidad pm
(probabilidad de mutación, o tasa de mutación), y colocar los cromosomas
resultantes en lanueva población P’.Si n es impar, se puede rechazar
aleatoriamente a un miembro de la nuevapoblación.
4. Remplazar la población actual P con la nueva P’.
5. Volver al paso 2.
8. Cada iteración del proceso recibe el nombre de generación. Lo usual es iterar el algoritmo
de 50 a 500 o más veces. El conjunto completo de generaciones se llama serie.Al concluir
una serie, a menudo se encuentran entre la población uno o más cromosomas con elevada
capacidad. Como la aleatoriedad juega un importante papel en cada serie, dos series con
diferentes números aleatorios en el origen darán lugar generalmente a comportamientos
diferentes. Los investigadores en algoritmos genéticos acostumbran a reportar estadísticas
(tales como el mejor potencial hallado en una serie, y la generación donde se encontró el
individuo con la mejor capacidad, etc.) evaluadas sobre muchas series diferentes del
algoritmo genético sobre el mismo problema. El procedimiento arriba descrito es en
realidad la base de la mayoría de las aplicaciones de los Algoritmos Genéticos. Desde
luego, quedan muchos detalles importantes en los que se debería profundizar, como cuál
ha de ser el tamaño de la población, y cuáles las probabilidades de cruce (pc) y de
mutación (pm). De esos “detalles”dependerá, en gran parte, el éxito o fracaso del
Algoritmo Genético que estemos aplicando. Asimismo, podemos encontrar otros
Algoritmos Genéticos mucho más complejos (y eficaces) que el que se ha utilizado, como
aquellos que trabajan sobre otras representaciones además de las cadenas de bits, o los
que emplean otros operadores de cruce y mutación, pero se pretende realizar una primera
aproximación del lector al campo de los Algoritmos Genéticos, no desarrollar un completo
estudio del mismo.
Como se ha podido observar, una de las principales ventajas de los AG puede
observarse en su sencillez; puesto que se necesita muy poca información sobre el
espacio de búsqueda ya que se trabaja sobre un conjunto de soluciones o parámetros
codificados (hipótesis o individuos). Al igual que sus campos de aplicación, se puede
afirmar que es un método muy completo de optimización, puesto que sus áreas de
estudio son muy amplias, y se puede ver generalizado en muchos sucesos cotidianos.
Se ha observado de igual forma que los AG están indicados para resolver todo tipo de
problemas que se puedan expresar como un problema de optimización donde se
define una representación adecuada para las soluciones y para la función a optimizar.
Se busca una solución por aproximación de la población, en lugar de una aproximación
punto a punto.
http://eddyalfaro.galeon.com/geneticos.html
www.sc.ehu.es/ccwbayes/docencia/mmcc/docs/temageneticos.pdf
http://geneura.ugr.es/~jmerelo/ie/ags.html
www.nebrija.es/~cmalagon/ia/apuntes/algoritmosgeneticos.pdf
www.uv.es/asepuma/X/J24C.pdf
C++ para ingeniería y ciencias, 2da Ed - Gary J. Bronson
Como Programar en C y Java 4ta Edición - Deitel