Sei sulla pagina 1di 20

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

(Universidad del Perú, DECANA DE AMÉRICA)

FACULTAD DE INGENIERÍA INDUSTRIAL


E.A.P INGENIERÍA INDUSTRIAL

Investigación Operativa

Tema: Algoritmo Genético

Integrantes:
Salazar Palomino, Ángelo 17170057
Ordoñez Huayllas, Christian 17170167
Salinas Revilla, Miguel 17170041
Rojas del Castillo, Albert 17170073

Fecha entrega: 24/06/19

Lima-Perú
2019
Índice
1. Introducción .............................................................................................................................. 3
2. Algoritmo genético.................................................................................................................... 4
2.1 Operadores de recombinación ............................................................................................. 5
2.1.1 Cruce en un punto ........................................................................................................ 5
2.1.2. Cruce de dos puntos .................................................................................................... 6
2.1.3. Cruce Probabilístico o Uniforme ................................................................................. 8
2.2 Mutación ............................................................................................................................. 9
3. Aplicación ............................................................................................................................... 10
1. Introducción

Cuando hablamos de algoritmos genéticos, hay que hablar de John Holland que en 1962

asienta las bases para sus posteriores desarrollos hasta llegar a lo que se conoce hoy por

algoritmos genéticos.

Un algoritmo genético es un método de búsqueda que imita la teoría de la evolución

biológica de Darwin para la resolución de problemas. Para ello, se parte de una

población inicial de la cual se seleccionan los individuos más capacitados (mejor

función objetivo) para luego reproducirlos y mutarlos para finalmente obtener la

siguiente generación de individuos que estarán más adaptados que la anterior

generación.

Estos algoritmos permiten abordar problemas complejos que surgen en las ingenierías y

los campos científicos: problemas de planificación de tareas, horarios, tráfico aéreo y

ferroviario, búsqueda de caminos óptimos, optimización de funciones, etc.

Figura 1. Representación de un algoritmos genético


2. Algoritmo genético

En la naturaleza todo el proceso de evolución biológica se hace de forma

natural pero para aplicar el algoritmo genético al campo de la resolución de

problemas habrá que seguir una serie de pasos. Una premisa es conseguir que el

tamaño de la población sea lo suficientemente grande y de forma aleatorio para

garantizar la diversidad de soluciones. En caso de que la población no sea generada

de forma aleatoria habrá que tener en cuenta que se garantice una cierta diversidad en

la población generada.

Figura 2. Estructura de un individuo en un algoritmo genético.

Los pasos básicos de un algoritmo genético son:

1. Inicialización: La población inicial de soluciones candidatas se genera usualmente

de forma uniformemente aleatoria (selecciona población-padres)

2. Evaluación: Se crea una nueva solución descendiente y se evalúa el valor de las

soluciones candidatas.

3. Selección: Mediante la selección se trata de dar preferencia en la evolución a

aquellas soluciones con un mayor valor de fitness (mejor capacidad de

adaptación).

4. Recombinación: La recombinación combina partes de dos o más soluciones

padres para crear nuevas soluciones (descendientes), que son posiblemente


mejores. La solución descendiente que se obtiene de la recombinación no será

idéntica a ninguno de los padres, sino que contendrá información combinada de

los dos.

5. Mutación: Mientras la recombinación opera sobre dos o más cromosomas padre,

la mutación modifica una única solución de forma aleatoria, que usualmente

afectan a uno o más rasgos del individuo. En otras palabras, la mutación realiza un

camino aleatorio en la vecindad de una solución candidata.

6. Reemplazo: La población descendiente que creamos mediante la selección,

recombinación y mutación reemplaza a la población de padres siguiendo algún

criterio determinado, como por ejemplo el reemplazo elitista, que preserva la

mejor solución a lo largo de la evolución.

2.1 Operadores de recombinación

La idea principal del cruce se basa en que, si se toman dos individuos

correctamente adaptados al medio y se obtiene una descendencia que comparta

genes de ambos. Si el cruce no agrupa las mejores características en uno de los

hijos es posible que la descendencia tenga peor ajuste que los padres.

2.1.1 Cruce en un punto

El cruce de un punto es la técnica más sencilla de cruce. Una vez

seleccionados dos individuos se cortan sus cromosomas por un punto

seleccionado aleatoriamente para generar dos segmentos diferenciados en

cada uno de ellos: la cabeza y la cola. Se intercambian las colas entre los dos

individuos para generar los nuevos descendientes. De esta manera ambos

descendientes heredan información genética de los padres, tal como puede

verse en la siguiente Figura 3.


Figura 3. Cruce un punto

Formalmente el operador de cruce por un punto puede definirse como:

1. Sea P1, P2 dos soluciones padres formadas P1[1],...,P1[n] y P2[1],...,P2[n]

respectivamente

2. Generar un punto de cruce k,1 ≤ k ≤ n

3. Las soluciones hijo C1 y C2 serán:

a. C1 := P1[1],...,P1[k],P2[k + 1],...,P2[n]

b. C2 := P2[1],...,P2[k],P1[k + 1],...,P1[n]

El problema fundamental de la cruza de un punto es que presupone que

los bloques constructores son esquemas cortos y de bajo orden, y cuando esto

no sucede (p.ej., con cadenas largas), suele no proporcionar resultados

apropiados. Obviamente, las aplicaciones del mundo real suelen requerir

cadenas largas y de ahí que esta cruza no se use comúnmente en dichos

problemas.

2.1.2. Cruce de dos puntos

El operador de cruce de dos puntos es similar al de un punto excepto que

genera dos puntos de corte en vez de uno. Formalmente el operador de cruce por

dos puntos puede describirse mediante el siguiente algoritmo:


1. Sea P1, P2 dos soluciones padres formadas P1[1],...,P1[n] y P2[1],...,P2[n]

respectivamente

2. Generar dos puntos de cruce k1,k2,1 ≤ k1 ≤ n,1 ≤ k2 ≤ n y k1 < k2

3. Las soluciones hijo C1 y C2 serán: a) C1 := P1[1],...,P1[k1],P2[k1 +

1],...,P2[k2],P1[k2 + 1],...,P1[n] b) C2 := P2[1],...,P2[k1],P1[k1 +

1],...,P1[k2],P2[k2 + 1],...,P2[n]

Se trata de una generalización del cruce de un punto. En vez de cortar por un

único punto los cromosomas de los padres como en el caso anterior se realizan

dos cortes. Deberá tenerse en cuenta que ninguno de estos puntos de corte

coincida con el extremo de los cromosomas para garantizar que se originen tres

segmentos. Para generar la descendencia se escoge el segmento central de uno de

los padres y los segmentos laterales de otro padre como lo muestra la siguiente

Figura 4.

Figura 4: Cruce dos puntos

Generalizando se pueden añadir más puntos de cruce dando lugar a

algoritmos de cruce multipunto. Sin embargo existen estudios que desaprueban

esta. Aunque se admite que el cruce de dos puntos aporta una sustancial mejora

con respecto al cruce de un solo punto, el hecho de añadir un mayor número de

puntos de cruce reduce el rendimiento del Algoritmo Genético. El problema


principal de añadir nuevos puntos de cruce radica en que es más fácil que los

segmentos por separado quizás pierdan las características de bondad que poseían

conjuntamente. Sin embargo no todo son desventajas y añadiendo más puntos de

cruce se consigue que el espacio de búsqueda del problema sea explorado más a

fondo.

2.1.3. Cruce Probabilístico o Uniforme

El cruce probabilístico o uniforme propone el intercambio aleatorio de bits

entre los individuos padre dependiendo de una probabilidad fija p. El operador

tradicional corresponde a utilizar un valor de p = 0,5. Aunque se puede

implementar de muy diversas formas, la técnica implica la generación de una

máscara de cruce con valores binarios. Si en una de las posiciones de la máscara

hay un 1, el gen situado en esa posición en uno de los descendientes es copia del

primer padre. Si por el contrario hay un 0 el gen se copia del segundo padre. Para

producir el segundo descendiente se intercambian los papeles de los padres, o bien

se intercambia la interpretación de los unos y los ceros de la máscara de cruce.

Figura 4: Cruce Uniforme o Probabilístico


Los operadores de recombinación descriptos anteriormente, se utilizan para la

realización de experimentos aplicados a los siguientes problemas de Optimización

Combinatoria.

2.2 Mutación

Tras el cruce, tiene lugar la mutación. Si nos referimos en términos de

evolución, la mutación se manifiesta de forma extraordinaria, nada común. Las

mutaciones suelen en promedio ser beneficiosas pues contribuyen a la diversidad

genética de la especie. Además previenen a las soluciones de la población de verse

limitadas por un óptimo local. Por lo tanto la mutación consiste en modificar ciertos

genes de forma aleatoria atendiendo a la probabilidad de mutación establecida con

anterioridad. La mutación depende de la codificación y de la reproducción. Si se

abusa de la mutación podemos caer en el uso del algoritmo genético como una

simple búsqueda aleatoria. Por lo tanto antes de aumentar las mutaciones, conviene

estudiar otras soluciones que aporten diversidad a la población.

Para el caso de una codificación binaria, la mutación consiste simplemente en

la inversión del gen mutado que corresponderá con un bit. En el caso de una

codificación numérica, la mutación podría consistir en sustituir un número por otro

o intercambiar un número por otro que está en otra posición del cromosoma

Figura 5.Mutación de los genes


3. Aplicación

Miguel actualmente tiene una dieta basada en grasas lo cual le genera sobrepeso, y para

este verano desea ponerse en forma, por ello va a un nutricionista y este le recomienda

una serie de alimentos que tiene que incluir en su dieta para alcanzar este objetivo, en

esta conversación el nutricionista le dice a miguel que su consumo mínimo de proteínas

por comida sea de 60g y su consumo de grasas no debe exceder a 25g por comida. ¿Qué

alimentos debe incluir Miguel en cada comida?

Elabore una simulación de todos los operadores para una generación y una población

de N=4

Solución:

Primeramente tomamos una población de 4 comidas, luego colocamos los datos

aleatoriamente, donde cero significa que no debe incluir ese alimento en su dieta y 1

significa que si debe incluirlo en su dieta.


Calculamos la grasa total y proteínas totales de cada población y evaluamos si cumple

con las condiciones o no, y luego los que no cumplen las condiciones los desechamos,

mientras los que si cumplen son seleccionados para ser los padres.

Se hizo 2 tipos de cruce (en 1 punto y en 2 puntos) y los resultados son los siguientes.

Como ninguno de los hijos sirve para ser parte de la solución, es decir ningún hijo tiene

como mínimo 60gramos en proteínas ni un máximo de 25 gramos de grasas a la vez, se

procede a la mutación. Para ello se escogieron a los hijos que están más próximos a

cumplir ambas condiciones (Hijo 2 e Hijo 4) .Notamos que estos hijos tienen una

ingesta baja en grasas totales por comida y están muy cerca de tener una ingesta

adecuada de proteínas. Por eso decidimos cambiar el cromosoma 8 (incluir lácteos en su

dieta por comida).


Ahora los hijos 2 y 4 son óptimos por lo que ahora van a formar parte de la siguiente

generación de poblaciones.

Conclusiones:

Como solo se hizo para una generación, la solución óptima será la que tenga mayor

cantidad de proteínas y menor cantidad de grasas a la vez. En este caso, se seleccionó al

Padre 1 como la solución óptima por ser la población que cuenta con muchas más

proteínas que el resto de las poblaciones.


Código en Visual Basic

Figura 6. Asignación de macros.

Figura 7. Función “Generar Población”.


Figura 8. Función “Seleccionar Padres”.
Figura 9. Función “Cruzar Cromosomas”.
APLICACIÓN

Maximizar la función 𝑓(𝑥) = 𝑥 2 , donde los valores de x se encuentran en el rango x=

{1,2,3,…,30,31}

SOLUCION

Primero, tomamos una población de 4 números al azar dentro del rango, los cuales están

convertidos en su forma binaria (0,1), como por ejemplo el 13 que en binario es

representado por 011012 , el 24 como 110002 . Asimismo hallamos los valores de

𝑓(𝑥) = 𝑥 2 para cada dato aleatorio.

En la siguiente tabla de probabilidades se muestran los valores reemplazados de la

función 𝑥 2 las probabilidades selección y la cuenta actual.


Nota:

1) La probabilidad de selección se halla de la siguiente manera

𝑓𝑖
𝑃𝑟𝑜𝑏. 𝑆𝑒𝑙𝑒𝑐𝑐𝑖𝑜𝑛 =
∑ 𝑓𝑖

Donde:

𝑓𝑖 : función evaluada para el numero i

2) La cuenta actual se determina en base a 3 números: 2, 1, 0. Estos valores indican

cuantas veces se va a cruzar el valor de x

El 2, es representado por el número mayor

El 0 representa al número menor

El 1 representara a los datos que no son mayores ni menores

Entonces:

Como el 576 fue el nro. Mayor se le ha asignado una cuenta actual de 2

Y como el 64 fue el nro. Menor se le ha asignado una cuenta actual de 0

Se escogen los valores que tienen una cuenta actual diferente de cero y como existe 2

valores que no son ni 2 ni 0 se utilizaran para el cruzamiento.


En esta etapa se procede con el cruzamiento en la que se da la recombinación de los

cromosomas, en una de ellas se realiza la recombinación en un punto k=4 la que da

como resultado el Hijo 1 y el Hijo 2; y la recombinación en un punto k=2 la que da

como resultado el Hijo 3 y el Hijo 4.

Luego pasamos a la mutación la cual se realiza de manera aleatoria con el fin de obtener

la solución más óptima para la función. Obtenernos que el Hijo 1 es la mejor solución

generada por las mutaciones la cual maximiza la función x2.


Ahora para n generaciones, se tiene la siguiente macro la cual inicia con la creación de

la población para ello crea los individuos que están expresados en base binaria y son

seleccionados de manera aleatoria.

Una vez creada la población, la variable x expresa cada una de las poblaciones en base

decimal y luego se eleva al cuadrado; el conteo actual compara cada una de las

poblaciones y así asigna el valor de 0 a la población con x2 mínimo y 2 a la población

con x2 máximo, al resto de las poblaciones se le asigna el valor de 1.


Si queremos seleccionar los padres en una nueva generación, utilizamos el botón

seleccionar padres el cual utiliza el mejor valor de las poblaciones, es decir el que tomo

valor 2 en el conteo actual y el mayor de los valores 1. Así la macro por cada

generación que evalué se ira maximizando la función hasta llegar al valor que maximice

la función, en nuestro caso el valor de 31 es el valor que maximiza la función x2 la cual

es encontrada en la 8va generación.

Potrebbero piacerti anche