Tema 6
Tema 6
Optimización II
Algoritmos genéticos
Índice
Esquema 3
Ideas clave 4
6.1. Introducción y objetivos 4
6.2. Estructura de un algoritmo genético 5
6.3. Modelos de algoritmos genéticos 8
6.4. Representación de la información 10
© Universidad Internacional de La Rioja (UNIR)
Tema 6. Esquema
Optimización II
Esquema
3
Ideas clave
Los algoritmos genéticos fueron desarrollados en EE. UU. en los años 70 por Holland,
DeJong y Goldberg. Originalmente, fueron aplicados a la optimización discreta o
combinatoria (binaria). Son algoritmos de optimización que pueden ser pensados
como métodos de búsqueda global. La idea del algoritmo es replicar el proceso de
selección natural para encontrar las soluciones más aptas. Esto es, el algoritmo
consiste en, dada una población de individuos, hacerla evolucionar mediante
cambios aleatorios en sus genes y luego seleccionar a los mejores individuos de la
población para que puedan perpetuarse. En el marco de un problema de
optimización, las posibles soluciones conforman la población y la función de costo
sirve para seleccionar a los individuos más aptos.
Hemos dicho que los cambios en los genes son aleatorios. Sin embargo, el grado de
aleatoriedad está controlado (interviene en una pequeña parte del algoritmo). Así,
los algoritmos genéticos son mucho más eficientes que las búsquedas locales
específicas, generando soluciones completamente aleatorias, y también que las
búsquedas exhaustivas. Por otra parte, estos algoritmos no necesitan prácticamente
ninguna hipótesis adicional del problema. Por ejemplo, no se ven afectados por la
falta de derivabilidad (o continuidad) del problema.
Optimización II
4
Tema 6. Ideas clave
secuencial. Además, para cada tipo de representación, estudiaremos cómo
implementar los operadores asociados.
Algunos de los objetivos que podemos plantear inicialmente en este tema son:
Los algoritmos genéticos están inspirados en los procesos biológicos, razón por la cual
se suele utilizar una terminología propia de la biología para designar los elementos
que componen estos métodos. Podemos, pues, establecer una equivalencia entre la
terminología que hemos venido utilizando hasta ahora y la nueva, la que hace
referencia a los conceptos propios de la biología. Así, las funciones objetivo (o de
costo) se llaman, en el contexto de los algoritmos genéticos, funciones de aptitud (o
simplemente aptitud o idoneidad). Comúnmente, la función de aptitud no coincide
con la función objetivo, es decir, es una modificación de la función objetivo adaptada
para que verifique ciertas hipótesis.
Optimización II
5
Tema 6. Ideas clave
candidatos son los que se adaptan mejor a su entorno. Por ejemplo, en un problema
de minimización, aquellos fenotipos cuya imagen sea menor por la función de
aptitud. Cada iterado del algoritmo produce una nueva generación. Esto es, los
fenotipos tienen descendencia. En la nueva generación, se introducen cambios
aleatorios en sus cromosomas, esto es, se producen mutaciones.
Población inicial: suele estar formada por una generación aleatoria de soluciones
al problema dado.
Optimización II
6
Tema 6. Ideas clave
Función de evaluación: nos permite saber la calidad de los individuos de una
población. Habitualmente, es una función monótona creciente que asigna un
valor mayor cuanto mejor es el individuo.
Optimización II
7
Tema 6. Ideas clave
Figura 1. Esquema de un algoritmo genético. Fuente: elaboración propia.
Optimización II
8
Tema 6. Ideas clave
Figura 3. Problema multiobjetivo. Fuente: elaboración propia.
Optimización II
9
Tema 6. Ideas clave
Nota: las dos últimas opciones pueden usarse solas o combinarse entre ellas y
con la primera opción presentada.
Optimización II
10
Tema 6. Ideas clave
Representación real: cada solución está formada por un vector de números reales.
Para poder usar esta representación es necesario que la función objetivo sea capaz
de obtener, a partir de un vector de números reales, un valor de idoneidad
asociada a dicha solución.
Nos ayudan a escoger qué individuos deben reproducirse para generar nuevas
soluciones. Por lo general, interesa que los individuos con mejor función de
evaluación se reproduzcan, ya que estos son los que tienen el código genético que
alberga las mejores soluciones.
Este operador también es elegido con libertad por el programador. Eso sí, es
imprescindible que los fenotipos más aptos, tengan una mayor probabilidad de
reproducirse, aunque la definición de más apto pueda sufrir modificaciones.
Optimización II
11
Tema 6. Ideas clave
Veamos algunos operadores de selección:
Optimización II
12
Tema 6. Ideas clave
En este caso, se elige el tamaño 𝑘 del torneo (habitualmente 𝑘 = 2). Luego, se escoge
al azar 𝑘 individuos de la población con o sin reemplazamiento. Finalmente, la idea
consiste en seleccionar el mejor individuo de este conjunto y repetir el proceso hasta
que tengamos el número de individuos deseado para ser progenitores. Una se vez se
ha calculado la aptitud de los distintos genotipos de una población, hay que calcular
los individuos de la siguiente población.
Orden lineal
𝑓(𝑔 )
𝑝 = 𝑃(𝑔 ) =
∑ 𝑓(𝑔 )
Optimización II
13
Tema 6. Ideas clave
Donde 𝑝 es la probabilidad de que el individuo 𝑘 − ésimo sea seleccionado como
padre y tomando 𝑁 para denotar el número total de fenotipos. La hipótesis que
hemos adoptado sobre la función de aptitud, que es no negativa, nos obligará a
modificar la función objetivo. En este caso:
Selección aleatoria
Los padres se seleccionan de forma aleatoria. Todas las soluciones tienen la misma
posibilidad de ser escogidas. Este operador es el que realiza una mayor exploración
del espacio y el que más evita la convergencia. Sin embargo, no proporciona ningún
mecanismo que permita a las mejores soluciones cruzarse entre sí, lo que hace que
se pierda la oportunidad de mejorar las buenas soluciones ya obtenidas.
Este operador está orientado a generar una población diversa y, por tanto, a explorar
al máximo el espacio de soluciones. La primera solución para cruzar se escoge
aleatoriamente y, para la segunda, se escogen, de entre un determinado número de
soluciones al azar, aquella que es más diferente a la solución actual. Siguiendo este
proceso, se crean soluciones que son muy diferentes unas de otras, con lo que se
mejora la exploración del espacio de soluciones.
Optimización II
14
Tema 6. Ideas clave
Figura 9. Selección por emparejamiento variado inverso. Fuente: elaboración propia.
Optimización II
15
Tema 6. Ideas clave
Selección proporcional al ranking del individuo
Los operadores de cruce deben ser capaces de generar, a partir de dos soluciones
cualesquiera, una solución que herede características de ambos padres, asumiendo
que se necesitan dos individuos para procrear y generar un entrecruzamiento
cromosómico. Esto es, a partir de un par de fenotipos, se produce otro que comparte
muchos cromosomas de sus fenotipos paternos. La manera de aparejar los distintos
fenotipos puede variar según el problema. Por ello, es muy importante utilizar un
operador de cruce que sea adecuado al tipo de dato con el que estamos tratando.
Optimización II
16
Tema 6. Ideas clave
Operador de cruce BLX−𝛼.
Operador de cruce para representación de orden.
Este operador consiste en elegir una posición aleatoria común a ambos padres, para
luego dividirlos en este punto y crear dos hijos copiando la cabecera de los
cromosomas padres e intercambiando las colas. El operador de cruce clásico binario,
por tanto, sigue los siguientes pasos:
Se divide cada individuo en dos realizando un corte aleatorio por algún punto del
vector binario de solución (posición 𝑛).
Se unen los cuatro trozos de forma que se formen dos vectores distintos y cada
uno tiene una parte de cada padre.
Cada uno de los vectores generados es un hijo formado a partir de los dos vectores
binarios originales.
Optimización II
17
Tema 6. Ideas clave
Operador de cruce clásico binario (𝒎 − point crossover)
Para el primer hijo, se cambia cada gen con probabilidad 0.5. El segundo hijo será el
complementario del primero. Luego, se crean dos hijos copiando alternativamente
las partes de los padres.
Optimización II
18
Tema 6. Ideas clave
Figura 13. Cruce uniforme con probabilidad 0.5. Fuente: elaboración propia.
El operador de cruce real recombina aritméticamente los valores reales de cada una
de las posiciones de los dos vectores padre. El parecido de los padres a los hijos viene
dado debido a que los números generados son cercanos a los valores que manejaban
los padres. Pueden utilizarse muchas funciones para realizar este proceso de cruce.
Uno de los más comunes es el operador de media, por ejemplo, si tenemos los
individuos:
𝐼 +𝐼 5.6 + 0.9 7.6 + 3.2 2.4 + 9.1 4.4 + 1.1 0.7 + 0.9
𝐻= = ⋯
2 2 2 2 2 2
Optimización II
19
Tema 6. Ideas clave
Obteniendo finalmente:
Usando este operador, todos los hijos tendrán un valor comprendido entre los
valores de cada posición de cada uno de los padres.
El operador de cruce BLX−𝛼 es otro operador para información real. Al contrario que
el anterior, que era totalmente determinístico, este operador genera valores
aleatorios dentro del rango de valores en que están localizados los padres. De esta
forma, el operador de cruce BLX−𝛼 genera dos hijos siguiendo el siguiente
procedimiento:
[𝑆 − 𝐼 ∙ 𝛼, 𝑆 + 𝐼 ∙ 𝛼]
Cuanto mayor sea 𝛼, más amplio será el intervalo. Podemos observar cómo el
intervalo generado por este operador abarca la zona intermedia entre el valor
mínimo y máximo de los padres, así como un rango de valores por debajo del mínimo
y otro por encima del máximo. El rango de valores por encima y por debajo del
mínimo de los padres es regulado por la variable 𝛼.
Optimización II
20
Tema 6. Ideas clave
Para mayor claridad, veamos cómo funciona este operador con un ejemplo.
Supongamos que tememos los dos padres reales del ejemplo anterior (véase Figura
14).
Los valores menores y mayores de estos dos valores son mente 0.9 y 9.1
respectivamente. De esta forma, los hijos generados por estos vectores deben ser
valores aleatorios localizados dentro del intervalo [0.9 − 8.2 ∙ 𝛼 , 9.1 + 8.2 ∙ 𝛼].
Ahora, es necesario determinar el valor de 𝛼. Cuanto mayor valor le demos a 𝛼,
mayor exploración del espacio, pero menor refinamiento y convergencia. No hay
una regla perfecta para fijar el valor de 𝛼.
Optimización II
21
Tema 6. Ideas clave
Operador de cruce para representación de orden
Figura 17. Soluciones de un operador de cruce para representación de orden. Fuente: elaboración propia.
Dado que el problema del viajante de comercio es circular, es decir, el nodo donde
se empieza es en el que se acaba, se puede añadir la información tras los valores
mantenidos. De esta forma, cuando hayamos rellenado el último valor, comenzamos
desde el primero. Siguiendo este proceso, el vector hijo formado mediante este
operador es el siguiente:
Optimización II
22
Tema 6. Ideas clave
Figura 18. Vector hijo. Fuente: elaboración propia.
Podemos ver el proceso llevado a cabo en este ejemplo gráficamente en la Figura 19:
Optimización II
23
Tema 6. Ideas clave
Operador de mutación para información binaria – Bit-Flip
Para cada una de las posiciones de todas las soluciones disponibles, con una cierta
probabilidad muy baja, cambiamos un 1 por un 0 o un 0 por un 1. La idea de este
operador de mutación consiste en realizar pequeños cambios aleatorios sobre las
soluciones con el objetivo de comprobar si la idoneidad asociada mejora. Es
importante aplicar el operador de mutación con una probabilidad baja debido a que,
por ejemplo, si tenemos el vector solución [1 0 0 1 1 1 0], una mutación con
probabilidad menor o igual al 5 % en base a la tabla adjunta en la Figura 20 produce
la mutación [1 0 0 1 1 𝟎 1 0].
Figura 20. Mutación con probabilidad menor o igual al 5 %. Fuente: elaboración propia.
Optimización II
24
Tema 6. Ideas clave
Operador de mutación para información real
El operador de mutación para información real aplica, con una baja probabilidad, una
pequeña modificación sobre los valores reales del vector de soluciones de cada
individuo. Normalmente, se usa una distribución gaussiana o normal de media 0. De
esta forma:
𝒙 = 𝒙 + 𝑁(0, 𝜎)
Aquí, la desviación típica nos ayuda a regular la fuerza del cambio aplicado sobre cada
elemento del vector de soluciones. Podemos ver un ejemplo aplicado en la Figura 21.
Figura 21. Mutación con probabilidad menor o igual al 1 %. Fuente: elaboración propia.
Optimización II
25
Tema 6. Ideas clave
Operador de mutación para información secuencial
Optimización II
26
Tema 6. Ideas clave
Peor entre semejantes: se escogen, de entre la población, las 𝑥 soluciones más
parecidas a la generada y, de entre ellas, se elimina a la que tenga peor valor de
idoneidad. Este esquema busca mantener un equilibrio diversidad-convergencia,
ya que mantiene soluciones diferentes dentro de la población. A su vez, trata de
deshacerse de aquellas soluciones que aportan poca diversidad y tienen un valor
bajo de idoneidad.
Optimización II
27
Tema 6. Ideas clave
El problema de la mochila
Se desea colocar objetos en una mochila de forma tal que se maximice el valor de los
objetos sin exceder su capacidad máxima.
Ω = [𝑥 , 𝑥 , ⋯ , 𝑥 ] ∶ 𝑥 ∈ {0,1} y 𝑝 ∙ 𝑥 ≤ 𝐶max
𝑓(𝑥 , 𝑥 , ⋯ , 𝑥 ) = 𝑣 ∙ 𝑥 = 𝑣 𝑥 + ⋯+ 𝑣 𝑥
Optimización II
28
Tema 6. Ideas clave
Ejercicio 1
Tenemos una mochila que tiene una capacidad de carga de 7 kg. y un conjunto de
paquetes que queremos llevar en ella. Cada paquete tiene un valor en euros y un
peso determinado por la Tabla 1:
Solución
Optimización II
29
Tema 6. Ideas clave
Paso 2. Población inicial:
Buscamos cuatro padres de partida de forma aleatoria. Por ejemplo, para seleccionar
a los cuatro padres, consideramos cuatro muestras aleatorias de cinco números cada
una en el intervalo (0, 1), lo cual nos genera una probabilidad en cada artículo. La
decisión de si consideramos el artículo o no estará sujeta a si esa probabilidad iguala
o supera el 40 %.
𝑓 𝒑 = 𝑝 , ∙ 𝑣 =𝑝 , ∙7+𝑝 , ∙9+𝑝 , ∙ 10 + 𝑝 , ∙ 10 + 𝑝 , ∙8
Optimización II
30
Tema 6. Ideas clave
La población obtenida es justamente:
Paso 3. Cruce:
De forma aleatoria, se eligen parejas dos a dos, para luego realizar el one-point
crossover con 𝑛 = 3 . Toda esta información aleatoria puede ser generada en:
AugeWeb, en Excel, en Matlab, en Python, etc.
Optimización II
31
Tema 6. Ideas clave
Paso 4. Mutación:
Optimización II
32
Tema 6. Ideas clave
Ahora evaluamos a los hijos mutados en el fitness:
Ahora se seleccionan los cuatro mejores individuos de todos los obtenidos y medidos:
Nota: cuando existen empates estos se resuelven viendo cuál de ellos pesa
menos, situación que justamente pasa con 𝑝 , ℎ′ , ℎ′ cuyos pesos
respectivos son: 6,5 kg, 8,5 kg y 10 kg.
Optimización II
33
Tema 6. Ideas clave
Paso 6. Cruce:
Paso 7. Mutación:
Para cada hijo 𝒉 , se generan cinco números aleatorios nuevos y vemos si mutan
entrada por entrada.
Optimización II
34
Tema 6. Ideas clave
Luego, los hijos mutados en la primera generación están dados por:
Optimización II
35
Tema 6. Ideas clave
Paso 8. Selección:
Tabla 32. Selección de los mejores individuos de ambas generaciones. Fuente: elaboración propia.
Paso 9. Factibilidad:
𝑃 𝒑 = 𝑝 , ∙𝑝
= 𝑝 , ∙𝑝 +𝑝 , ∙𝑝 +𝑝 , ∙𝑝 +𝑝 , ∙𝑝 +𝑝 , ∙𝑝
Entonces:
Optimización II
36
Tema 6. Ideas clave
En consecuencia, la solución a nuestro problema es la generada por el primer padre
tomado que, para tener un valor total de 27 €, pone en la mochila los artículos 1, 3 y
4 con un peso total de 5,5 kg.
Notas importantes
Si hubiese dos o más soluciones menores que siete, se escoge la de menor peso.
Si todas fallan, no tiene sentido trabajar con un algoritmo donde las soluciones
son no factibles y cada vez que esto ocurra se sale del algoritmo.
Esto puede resultar muy costoso, pero permite diseñar algoritmos para solo
factibles.
Ejercicio 2
Solución
Optimización II
37
Tema 6. Ideas clave
if pesos(i) > j
memorizacion(i+1, j+1) = memorizacion(i, j+1);
else
memorizacion(i+1, j+1) = max(memorizacion(i, j+1),
valores(i) + memorizacion(i, j-pesos(i)+1));
end
end
end
selectedItems = false(1, n); %% Recuperar los elementos seleccionados
j = capacidadMochila;
for i = n:-1:1
if memorizacion(i+1, j+1) ~= memorizacion(i, j+1)
selectedItems(i) = true;
j = j - pesos(i);
end
end
%% Calcular el valor total máximo
maxValue = memorizacion(n+1, capacidadMochila+1);
end
Optimización II
38
Tema 6. Ideas clave
6.10. Referencias bibliográficas
Optimización II
39
Tema 6. Ideas clave