generalized minimum spanning tree problem, independent set problem y flexible job shop problem:...

57
Generalized Minimum Spanning Tree Problem, Independent Set Problem y Flexible Job Shop Problem: Implementación de solución mediante algoritmos genéticos Alcívar Cevallos Roberth Abel, Contreras Fernández Juan Pablo, Párraga Álava Jorge Antonio. (roberth.alcivar, juan.contrerasff, jorge.parraga)@usach.cl Universidad de Santiago de Chile Avenida Libertador Bernardo O'Higgins nº 3363. Estación Central. Santiago. Chile

Upload: jorge-a-parraga-a

Post on 25-Jul-2015

358 views

Category:

Engineering


2 download

TRANSCRIPT

Generalized Minimum Spanning Tree Problem, Independent Set Problem y

Flexible Job Shop Problem: Implementación de solución mediante

algoritmos genéticos

Alcívar Cevallos Roberth Abel, Contreras Fernández Juan Pablo, Párraga Álava Jorge

Antonio.

(roberth.alcivar, juan.contrerasff, jorge.parraga)@usach.cl

Universidad de Santiago de Chile

Avenida Libertador Bernardo O'Higgins nº 3363. Estación Central. Santiago. Chile

Resumen

Con el objetivo de utilizar algoritmos genéticos en la resolución de los problemas de

optimización conocidos como Generalized Minimum Spanning Tree Problem, Independent

Set Problem y Flexible Job Shop Problem se realizó un reconocimiento de las

particularidades de cada uno de ellos. Al realizar el análisis fue posible modelar el

problema a través de la identificación de una solución inicial factible, función fitness y

operadores de variación; de esta manera se codificó la solución mediante algoritmos

genéticos, y mediante el software matemático MATLAB, siendo imperioso el uso de

instancias para cada uno de los problemas. En seguida, con el código en ejecución, se

definió la población inicial y sus generaciones sucesoras hasta llegar a obtener soluciones

óptimas para cada problema. Se alcanzó 95.28% de eficacia en el primer problema, 62.31%

en el segundo y 82.42% en el tercero. Finalmente se plasman las conclusiones y exponen los

recursos bibliográficos utilizados.

Palabras clave Algoritmos Genéticos, Generalized Minimum Spanning Tree, Independent

Set Problem, Flexible Job Shop.

1

1. Introducción

John Holland desde pequeño, se preguntaba cómo logra la naturaleza, crear seres

cada vez más perfectos (aunque, como se ha visto, esto no es totalmente cierto, o en todo

caso depende de qué entienda uno por perfecto). Lo curioso era que todo se lleva a cabo a

base de interacciones locales entre individuos, y entre estos y lo que les rodea. No sabía la

respuesta, pero tenía una cierta idea de cómo hallarla: tratando de hacer pequeños modelos

de la naturaleza, que tuvieran alguna de sus características, y ver cómo funcionaban, para

luego extrapolar sus conclusiones a la totalidad. En los años 50 entró en contacto con los

primeros ordenadores, donde pudo llevar a cabo algunas de sus ideas, aunque no se encontró

con un ambiente intelectual fértil para propagarlas. Años después aprendió que la evolución

era una forma de adaptación más potente que el simple aprendizaje, y tomó la decisión de

aplicar estas ideas para desarrollar programas bien adaptados para un fin determinado

naciendo así los algoritmos genéticos (AG). [1]

Sin embargo no fue hasta 1989 cuando los AG se hicieron famosos, gracias a

Goldberg, y debido a que la finalidad de estos es la de optimizar cuando las técnicas

tradicionales presentan dificultades. Por ello, los AG se pueden aplicar a numerosos campos,

desde la ingeniería, hasta el modelado económico, social, político o comercial. [2]

Muchos han sido los problemas clásicos que han sido resueltos mediante AG entre

ellos el problema del agente viajero [3] en el paper titulado “Algoritmo genético para el

problema del agente viajero aprovechando las capacidades de GEOQ” mejora las

heurísticas constructivas para la inicialización de la población, e incorpora dos nuevos

operadores de cruzamiento y dos de mutación, mediante un análisis de visibilidad y

proximidad.

De igual modo el problema del coloramiento de vértices [4] fue solucionado en el

trabajo “Implementación de un algoritmo genético paralelo sobre hardware gráfico de

última generación”, de igual manera “Algoritmos genéticos: Aplicación al problema de la

mochila” realizado por [5]. De allí que en este trabajo se pretende utilizar algoritmos

2

genéticos para solucionar los problemas: árbol de cobertura mínimo generalizado, conjunto

independiente de vértices y taller de tareas flexibles.

2. Caracterización del problema

2.1. Problema del Árbol de Cobertura Mínima Generalizado (MSGTP)

El problema del Árbol de Cobertura Mínima consiste en un grafo no dirigido cuyos

nodos son divididos en clúster. Se busca encontrar un árbol de cobertura de costo mínimo

que incluya solo un nodo de cada clúster.

Se trata de un grafo no dirigido multipartito G (V, E) cuyos vértices están dividido en

m subconjuntos {V1, V2, ..., Vm}, con |V| = n, tal que V= V1UV2…UVm; y V1∩Vk = Θ ∀ l, k ∈ {1, … m}, l≠k. G sólo tiene aristas entre vértices de diferentes subgrupos, y se supone que

cada arista tiene un coste negativo asociado. Definimos el problema generalizado árbol de

expansión mínima (GMSTP) como el problema de encontrar un árbol de coste mínimo que

se extiende exactamente un vértice de cada clúster. En la ilustración 1 se aprecia un ejemplo

del (GMSTP) con 5 clúster y 17 vértices. [6]

Ilustración 1. Ejemplo de (GMSTP) con 5 clúster y 17 vértices.

3

2.2. Problema del conjunto independiente de vértices máximo (MISP)

En teoría de grafos, el problema del conjunto independiente o estable es un conjunto

de vértices en un grafo tal que ninguno de sus vértices es adyacente a otro. Es decir, es un

conjunto V de vértices tal que para ningún par de ellos existe alguna arista que los conecten.

En otras palabras, cada arista en el grafo contiene a lo más un vértice en V. El tamaño de un

conjunto independiente es el número de vértices que contiene. [7]

Ilustración 2. Coberturas de vértices (conformadas por los vértices rellenos)

El conjunto independiente máximo corresponde al mayor conjunto independiente

definible sobre un grafo dado. El problema de encontrar un conjunto con estas características

se llama problema del máximo conjunto independiente y es NP-completo.

.

Ilustración 3. Grafo con seis diferentes conjuntos independiente de vértices. (conformadas por los vértices rellenos)

4

2.3. Problema del taller de tareas flexibles (FJSP)

El problema del Job shop flexible (Flexible Job Shop Scheduling Problem: FJSSP) es

considerado como una variante del problema del job shop original. Dado un sistema con un

conjunto de m máquinas, M={M1,...,Mm}, y un conjunto de n trabajos independientes, J =

{J1,...,Jn}. Considerando que cada trabajo está compuesto por una secuencia de operaciones

O{j,1}, O{j,2},...,O{j,h},...,O{j,hj}, cada una de las cuales debe ser procesada en una máquina.

Se dispone de los tiempos de proceso p{i,j,h} de cada operación O{j,h} en cada máquina

factible Mi ∈ M{j,h} ⊆ M, el problema de Job Shop Flexible requiere minimizar el tiempo

de completación de la última operación: el makespan.

Donde:

O{j,h} corresponde a la h-ésima operación del trabajo J j y hj indica el número de

operaciones que requiere el trabajo Jj.

M{j,h} ⊆ M es el conjunto de todas las máquinas en el problema que pueden

procesar la operación O{j,h}.

Cuando todas las operaciones pueden ser procesadas por todas las máquinas,

M{j,h} = M, la flexibilidad del problema es total (T-FJSP). Por el contrario,

cuando al menos una operación O{j,h} no puede ser procesada en todas las

máquinas, es decir M{j,h} ⊂ M, la flexibilidad del problema es parcial (P-FJSP).

Se conoce el tiempo de proceso de cada operación en cada una de las máquinas

donde puede ser procesada. Se denota como p{ i,j,h} el tiempo de proceso de la

operación O{j,h} en la máquina Mi ∈ M{j,h}. No se permite interrumpir las

operaciones cuando han iniciado su proceso, como tampoco se permite que las

máquinas ejecuten más de una operación simultáneamente. Además, se asume

que todos los trabajos y máquinas están disponibles en el instante (tiempo) cero.

Para encontrar el tiempo de completación de la última operación (makespan) es

necesario asignar las operaciones a las máquinas y secuenciar dichas

operaciones, por lo cual la función objetivo del problema se puede expresar

como:

min Cmax = min {maxJj ∈ J CJj}

5

Un ejemplo de este problema se muestra a continuación.

Ilustración 4. Estructura de asignación del problema de programación de taller de trabajo

3. Materiales y Métodos

3.1. Materiales

Para la exitosa solución del problema fue necesario crear los programas informáticos

que se detallan en el punto 3.2, para el efecto se utilizó MATLAB. En cuanto al hardware,

para el apartado de programación, ejecución de pruebas y validación de resultados, se utilizó

un equipo con Sistema operativo Microsoft Windows 7® en su versión de 64 bits, tipo

notebook Samsung q430, Procesador Intel i5 m520 a 2.4ghz, Memoria ram de 4gb.

3.2. Métodos

Para los tres problemas propuestos el proceso evolutivo seguido se describe en el

algoritmo [8] a continuación:

6

InicioGeneracionInicial()para t 0 hasta N_Individuos hacer

Evaluacion de individuo tfin paraGeneracion 1mientras Generacion <= N_max_Generaciones hacer

para t 0 hasta N_Individuos hacerSelección (Dependiendo de cada problema)Cruzamiento(Dependiendo de cada problema)Mutacion(Dependiendo de cada problema)

fin paramientras t 0 hasta N_Individuos hacer

Evaluacion de individuo tfin mientrassi el mejor individuo es optimo entonces

Terminar AGfin siGenerar nueva población()Generacion Generacion +1

fin mientrasFin

El algoritmo genético usado lo que hace es operar en la modalidad genotipo fenotipo

cuyos pasos son:

1. Generar población inicial de soluciones factibles.

2. Evaluar cada solución según su factibilidad con la función objetivo del

problema.

3. En cada generación se crean y evalúan nuevas soluciones con el uso de

operadores de selección:

a. Selección: Torneo.

b. Cruzamiento: Dependiendo del problema.

c. Mutación: Dependiendo del problema.

4. Los puntos anteriores son repetitivos hasta el momento que se encuentre la

solución optimo o se alcance el máximo número de generaciones.

3.2.1. Problema del Árbol de Cobertura Mínima Generalizado (GMSTP)

7

Para este problema la representación mediante string, función fitness, operadores de

variación y el proceso evolutivo usada por el algoritmo genético fueron basadas en el estudio

realizado por Contreras et al. [8].

3.2.1.1. Representación

Se usará representación entera. El string entero tendrá largo m (total de clústers),

donde cada i-ésimo posición representa a un clúster. Y cada i-ésimo valor corresponde al

vértice seleccionado en el i-ésimo clúster. Este i-ésimo valor puede ir de 1 a c (cantidad

mayor de vértice del clúster).

En el caso que en la i-ésimo posición aparece un valor mayor al total de vértices al

contenido en la posición que representa a ese clúster, se aplica la función MODULO1entre el

i-ésimo valor y total de vértices de ese clúster.

Ilustración 5. Ejemplo de (GMSTP) con 5 clúster y 17 vértices.

Tomando como ejemplo la ilustración 5. El string tendrá largo m=5; y cada posición

tendrá un valor que representa al vértice seleccionado en el i-ésimo clúster, este valor estará

1 Función que devuelve el residuo de una división.

8

entre 1 y c=5. De este modo se muestra un string donde el clúster 1 tiene seleccionado el

vértice 3, clúster 2 el vértice 3, clúster 3 vértice 5, clúster 4 vértice 1, clúster 5 vértice 1.

3 3 5 1 1

Sin embargo, los clúster 2 y 3 presentan vértices que no están disponibles en esos

clúster por lo que se aplica la función modulo. En el caso del clúster 2 (3/2) obteniendo

como residuo 1 y clúster 3 (5/3) residuo 2, por lo que el string quedaría sin problemas de

infactibilidades en sus valores.

3 1 2 1 1

En forma resumida, una solución del problema es un subgrafo T que cumpla dos

condiciones:

1. T es árbol 2. T contiene un y sólo un vértice de cada cluster.

Un cromosoma de nuestro problema será un arreglo de largo igual a la cantidad de

clúster donde, en cada celda, se indicara el número del nodo que se debe tomar del clúster

correspondiente a ese índice de celda. Así estamos trabajando con un cromosoma que puede

ser de números enteros o reales pero al ser codificado en Matlab se tomará únicamente parte

entera, es decir números que se mueven entre 1 y la cantidad de nodos en el clúster.

El cromosoma, por tanto, indica cuales nodos son los seleccionados para configurar

el árbol solución T. Las aristas del árbol T se escogerán como las aristas que resuelvan el

problema del árbol de cobertura mínimo para los nodos seleccionados. Recordamos en este

punto que para resolver el problema del árbol de cobertura de peso mínimo existen

algoritmos polinomiales O(|V|2+|E|) donde V y E corresponden a los vértices y aristas del

grafo respectivamente.

9

3.2.1.2. Función Fitness

La función de fitness se aplica sobre cada string para saber que tan bien se adapta

esta al problema. Notemos que con la codificación elegida se obtienen solo soluciones

factibles por lo tanto no hay necesidad de agregar un término de penalización.

Así, definimos el fitness de un individuo como el peso del árbol de cobertura de peso

mínimo que se puede formar para la configuración de vértices que define este individuo.

3.2.1.3. Generación de población inicial

Para generar la población inicial se crean 1000 individuos de forma aleatoria, según

la cantidad de vértices y aristas que tenga cada una de las instancias.

3.2.1.4. Operadores de Cruzamiento y Mutación

A pesar que teóricamente el string o cromosoma puede ser de números enteros o

reales, en la práctica lo que se hizo fue considerar solo la parte entera aplicando funciones

para ello (propias de matlab), en conjunto con la función módulo explicada en el punto

3.2.1.1. De este modo podremos usar cualquier operador de variación definido para este tipo

de codificación. En este caso usamos cruzamiento 1 Point Crossover y Random Resseting

[9] para la mutación.

3.2.1.5. Parámetros genéticos

Se utilizaron las instancias de 53gil262, 34gr229, 27pr264, 21eil101, 30kroa150,

1pr152, 34gr202europe, 40krob200, 12brazil58, 10att48. Todas tienen un valor óptimo

Min f ( x )=∑e∈E

Ce∗Xe

10

conocido. Número máximo de generaciones = 20, probabilidad de cruzamiento= 0.90 y

probabilidad de mutación 0.10 y la selección mediante Tournament2.

3.2.1.6. Codificación

Para encontrar la solución al subproblema del árbol de cubrimiento de peso mínimo y

evaluar la función fitness se utilizó el algoritmo de Kruskal 3 (se van escogiendo las aristas

de menor peso sin formar ciclos hasta conseguir un árbol de peso mínimo), uno de los más

usados para resolver este problema, y cuyo seudocódigo se describe a continuación:

Kruskal (G)E(1)=0, E(2)= todos los Arcos del grafo GMientras E(1) contenga menos de n-1 arcos y E(2)=0 doDe los arcos de E(2) seleccionar el de menor coste-->e(ij)E(2)= E(2) - {e(ij)}

Si V(i), V(j) no están en el mismo árbol entoncesjuntar los árboles de V(i) y de V(j) en uno sóloend Si

end doFin del algoritmo

Así la solución al subproblema, evaluación de la fitness y demás procesos se

realizaron mediante codificación MatLab, de forma que una porción del código muestra en

la ilustración 5:

2 Se escogen aleatoriamente un número T de individuos de la población, y el que tiene puntuación mayor se reproduce, sustituyendo su descendencia al que tiene menor puntuación.3 http://es.wikipedia.org/wiki/Algoritmo_de_Kruskal

11

Ilustración 6. Código en MatLab del Algoritmo Genético para el problema GMSTP

3.2.2. Problema del conjunto independiente de vértices máximo (MISP)

Para este problema la representación mediante string, función fitness, operadores de

variación y el proceso evolutivo usada por el algoritmo genético fueron basadas en el estudio

realizado por Back, T. et al. [10]

3.2.2.1. Representación

Para dar la representación primero es necesario entender la solución matemática

mediante el uso de matriz de incidencia de un grafo G (V, E).

12

V: conjunto de vértices. Donde V= {1 a n}

E: conjunto de aristas. Donde E= {1 a m}

(i,j): Par que representa una arista entre los vértices i, j. Talque la arista ∈ E.

Ai,j: Matriz de adyacencia.

Ai , j={ 1 si A i , j∈ E0 caso contrario

Con la formulación matemática del problema clara, es posible representar el

problema como un string binario (Xi, X,i+1, … , Xn) de largo n (total de vértices). Donde

cada i-ésimo posición representa al vértice i. Si Xi=1 el vértice i está en la solución inicial,

caso contrario no lo está y Xi=0. Este string se multiplicará con la matriz de adyacencia para

obtener la solución candidata.

Es importante indicar que esta representación puede generar soluciones candidatas

infactibles, por ello se aplicará una función de penalidad en el fitness para atacar este

problema.

Por ejemplo, dado el grafo de la ilustración 7, la matriz de adyacencia

correspondiente está dada en la tabla 1. Y un posible string binario para nuestro problema es:

1 0 0 1

Que representa una solución candidata formado por los nodos {1,4}.

Ilustración 7. Grafo no dirigido con 4 nodos y 5 arista para el problema del MIS

13

.

Aijaristas

a b c d e

nodo

s

1 1 0 0 1 02 1 1 0 0 13 0 1 1 1 04 0 0 1 0 1

Tabla 1. Matriz de adyacencia del grafo de la ilustración 7.

3.2.2.2. Función Fitness

En primera instancia se evalúa si la solución inicial (string, vector o cromosoma) es

factible o infactible.

Para ello se realiza una multiplicación de matrices entre la matriz de adyacencia Aij y

el cromosoma (traspuesto) Xj. El resultado de esta operación entregará un vector del mismo

largo que el vector de solución inicial. Tomando como referencia el ejemplo del punto

3.2.2.1 este proceso seria:

1 0 0 1 0 11 1 0 0 1 X 00 1 1 1 0 00 0 1 0 1 1

El mismo devuelve el vector o solución candidata: (en este caso es factible)

1011

Será factible si solo está formado por 0 y 1, es decir que una misma arista ha tocado a lo

más 1 vez a un vértice de la solución candidata.

14

Será infactible si está formado por números diferentes a 0 y 1. En este caso se aplica

penalidad. Para el efecto se cuenta la cantidad de veces que aparecen números

diferentes de 0 y 1, es decir 2 o superiores.

Así la función fitness es:

M ℑ f ( X⃗ )=−∑i=1

n

( X i )+Penalizaci ón

In=Numero de 2 que aparecen en el string resultante.n=nodosm=aristas

f ( x⃗ )=¿

  

3.2.2.3. Generación de población inicial

La población inicial será realizada de forma aleatoria, generando 2000 vectores o

soluciones iniciales. Luego, también de forma aleatoria, se escoge un vértice (nodo, posición

o gen) de este vector y se eliminan todos sus vecinos que tengan menor fitness, este proceso

se repite hasta que la actual solución no pueda ser mejorada.

3.2.2.4. Operadores de Cruzamiento y Mutación

Por ser un string de representación binaria se usaran operadores de variación

definido para este tipo de codificación. En este caso usamos 1-Point Crossover y mutación

Bitflip Mutation.

Parámetros genéticos

Se utilizaron las instancias de frb30-15-1, frb30-15-2, frb30-15-3, frb30-15-4, frb30-

15-5. El tamaño de población fue de 2000, número máximo de generaciones = 30,

15

probabilidad de cruzamiento= 0.90 y probabilidad de mutación 0.40 y la selección mediante

Tournament4.

3.2.2.5. Codificación

En este caso fue necesario codificar la función de penalidad que se seguiría en las

soluciones infectables además del resto del código como se describe enseguida:

Ilustración 8. Código en MatLab de evaluación función fitness.

Por defecto el toolbox de optimización y algoritmos genéticos de MatLab opera este

tipo de problemas como minimización por ello lo que se hizo fue convertir el problema a

minimización multiplicando por -1.

Con el proceso para aplicar penalidad claro, se expone una porción del código del

algoritmo genético utilizado.

4 Se escogen aleatoriamente un número T de individuos de la población, y el que tiene puntuación mayor se reproduce, sustituyendo su descendencia al que tiene menor puntuación

16

Ilustración 9. Código en MatLab del Algoritmo Genético para el problema GMSTP

3.2.3. Problema del taller de tareas flexibles (FJSP)

Para este problema la representación mediante string, función fitness, operadores de

variación y el proceso evolutivo usada por el algoritmo genético fueron basadas en el estudio

realizado por [11] pero con algunas modificaciones.

3.2.3.1. Representación

M1 M2 M3

O1,1 1 2 1O1,2 X 1 1O1,3 4 3 XO2,1 5 X 2O2,2 X 2 XO2,3 7 5 3

Ilustración 10. Ejemplo de Job Shop Flexible. 2 trabajos 3 máquinas.

17

Tomando con ejemplo la ilustración tabla 4, donde las columnas representan cada

una de las tres máquinas (M1, M2, M3) y las filas las 2 operaciones que se pueden realizar en

las tres máquinas, por ejemplo: (O1,2= operación 1, maquina 2). Los valores internos

representan el tiempo de los procesos de las operaciones en cada máquina. La X indica que

la maquina no puede realizar la operación.

Con la finalidad de simplificar la solución al problema, se altera la solución

propuesta por [11] y en vez de usar tres vectores, solo se usa un vector S de

secuenciamiento. Para poder detallar el método introduciremos la notación a utilizar

• M = {M1,...,Mm} conjunto de maquinas

• J = {J1,...,Jn} conjunto de trabajos

• hj cantidad de operaciones del trabajo j. j = 1,...,n

• Oj,h h-esima operación del trabajo j. j = 1,...,2, h = 1,...,hj

• Mj,h ⊆ M conjunto de máquinas donde la operación Oj,h puede ser realizada.

• Ti,j,h tiempo que demora en ser procesada la operación Oj,h en la máquina Mi ∈ Mj,h

El vector de secuenciamiento es un vector de largo igual al número total de

operaciones ∑j=1

n

h j que contiene tantos valores j como operaciones tenga el trabajo j, es decir

el cromosoma de secuenciamiento tiene h1 cantidad de 1’s, luego h2 cantidad de 2’s y así

hasta hn cantidad de valores n donde n es la cantidad de trabajos.

Los individuos de nuestra población serán permutaciones o reordenamientos de los

valores de este vector. La interpretación de este cromosoma es que en cada celda aparece

alguno de los trabajos y aparecen tantas veces como operaciones tienen, por lo tanto cada

vez que el trabajo j se hace referencia las operaciones consecutivas en orden de prioridad de

este.

18

De esta forma dada una permutación del vector de secuenciamiento es posible

obtener un vector de operaciones que indica el orden de las operaciones donde además se

respeta la prioridad de esta en cada trabajo.

Lo anterior no resuelve nada acerca del problema de asignación de operaciones a

máquinas. Para atacar este problema hacemos lo siguiente:

Dado un cromosoma de secuenciamiento, generamos un cromosoma de operaciones

(que es una permutación de los números entre 1 y la cantidad total de operaciones). De

izquierda a derecha recorremos el vector de operaciones. Para cada operación O j,h del vector

determinamos Mj,h y elegimos de entre ellas a la máquina que tenga menos carga de trabajo

(en tiempo) y se la asignamos a dicha operación. Finalmente actualizamos la carga de

trabajo de la máquina sumando a su carga el tiempo correspondiente a la operación en esa

máquina.

Así para cada cromosoma de secuenciamiento podemos generar vectores de

ordenamiento y de asignación con los cuales es posible calcular el makespan de la solución.

Notemos que la regla, “asignar a la máquina con menos carga de trabajo” es una

opción escogida por nosotros al atacar el problema. En general puede escogerse cualquier

máquina que esté apta para realizar la operación. Esta regla podría cambiarse por ejemplo

por “asignar a la máquina que demore menos tiempo en realizar la operación”.

3.2.3.2. Función Fitness

Se define la función fitness cuyo propósito es de minimizar el makespan 5, es decir

minimizar la diferencia de tiempo entre el inicio y finalización de una secuencia de trabajo.

El valor del makespan corresponde al tiempo que tarda en terminar de procesar todas sus

operaciones la máquina que más demora.

5 Diferencia entre el inicio y fin de una sequencia de trabajo

19

3.2.3.3. Generación de población inicial

Para generar la población inicial se generan individuos de forma aleatoria. Como

nuestro cromosoma se basa en el vector de secuenciamiento los individuos de la población

inicial son permutaciones del vector de secuenciamiento original ya descritos anteriormente.

A partir de esta permutación es posible obtener un vector de operaciones y luego un vector

de asignación con lo que es posible obtener el makespan de cada individuo

3.2.3.4. Operadores de Cruzamiento y Mutación

Dado que todas las soluciones se codifican como un cromosoma de largo ∑j=1

n

h j

permutaciones del vector de secuenciamiento definido anteriormente basta con utilizar los

operadores clásicos de permutación, en este caso se utilizó cruzamiento mediante PMX.

Para la mutación se usó swap mutation donde se seleccionan aleatoriamente dos

posiciones del cromosoma y se intercambian de forma de mantener siempre cromosomas

factibles.

3.2.3.5. Parámetros genéticos

Se utilizaron las instancias 01a, 02a, 03a, Mk01, Mk02, Mk03, Mk04, Mk05,

Mk06¸Mk07, con un tamaño de población de 200, número generaciones = 50, probabilidad

de cruzamiento= 0.90 y probabilidad de mutación 0.10 y la selección mediante Tournament.

3.2.3.6. Codificación

20

Una vez que se estableció el proceso evolutivo se procedió a codificarlo en MatLab

como se describe a continuación:

Ilustración 11. Código de generación de la población inicial para Job Shop Flexible.

Ilustración 12. Porción de código del algoritmo genético para la solución del Job Shop Flexible Problem.

21

4. Resultados

4.1. Problema del árbol de cobertura mínimo generalizado (GMSTP)

A continuación se presentan los resultados obtenidos para la solución propuesta para

el problema de árbol de cobertura mínimo generalizado:

N° Instancias Datos relevantesÓptimo Conocido

Resultado Algoritmo Genético

Error porcentual

Tiempo (Segundos)

1 53gil262 262 nodos, 53 clúster 887 911 2.70574971 1872 34gr229 229 nodos, 34 clúster 45989 63772 38.6679423 1023 27pr264 264 nodos, 27 clúster 16546 16677 0.79173214 704 21eil101 101 nodos, 21 clúster 204 205 0.49019607 485 30kroa150 150 nodos, 30 clúster 9815 9868 0.53998981 766 31pr152 152 nodos, 31 clúster 39109 39130 0.05369608 83

734gr202europe

202 nodos, 34 clúster 135 150 11.1111111 94

8 40krob200 200 nodos, 40 clúster 11244 11441 1.75204553 1169 12brazil58 58 nodos, 12 clúster 9206 9356 1.62937214 2110 10att48 48 nodos, 10 clúster 10923 10930 0.06408495 18

Promedio 4.720018 80

Tabla 2. Resumen de resultados alcanzados y tiempos de duración del algoritmo genético propuesto.

En la tabla 2 se observa que de las 10 instancias nuestro algoritmo genético tuvo

efectividad superior a 95% en ocho instancias, mientras que en dos casos (instancias 2 y 7)

no fue tan satisfactorio el resultado.

El menor tiempo obtenido fue 18 segundos esto sucedió en la instancia 10, y el

mayor tiempo en la instancia 1 con una duración de 187 segundos. Esta situación es

originada debido la cantidad de nodos y clúster pues mientras más crecen estos parámetros

el algoritmo tiende a resolver el problema en tiempos más altos.

22

En promedio nuestra solución presenta un error porcentual de 4.72%, es decir

nuestro algoritmo se acerca al optimo en el 95.28% de los casos.

Para entender en detalle los resultados por instancias se realizaron graficas de curvas

de convergencia:

Ilustración 13. Gráfica de curva de convergencia instancia 1.

Para la instancia 1, es evidente que el fitness para la población inicia es alto, en

promedio inicio con un valor superior a 1150 pero paulatinamente disminuía hasta llegar a la

generación 20 donde el mejor valor alcanzado fue 911. Y en promedio 939.60

23

Ilustración 14. Gráfica de curva de convergencia instancia 2.

Para la instancia 2, sucede algo similar a la 1, aunque en este caso desde la

generación 14 se estabiliza el valor del fitness quedando finalmente como mejor 63772.

Ilustración 15. Gráfica de curva de convergencia instancia 3.

Para la instancia 3, el valor del fitness inicia cerca de 21000 y va disminuyendo

paulatinamente, recién en la generación 19 comienza la convergencia. 16667 es su mejor

valor, con 16715.8 como promedio.

24

Ilustración 16. Gráfica de curva de convergencia instancia 4.

La instancia 4, inicia su proceso de estabilización de función fitness a partir de la generación

14, llegando a la generación 20 con un promedio de 205.48 y con el mejor valor fitness alcanzado de

205.

Ilustración 17. Gráfica de curva de convergencia instancia 5.

En la instancia 5, similarmente a lo que paso con la instancia 3, el valor del fitness no

llega a converger hasta el final de la generación 20, con el valor mejor alcanzado de 9868.

25

Ilustración 18. Gráfica de curva de convergencia instancia 6.

En este caso (ilustración 18) la estabilización de la función fitness se logra a partir de

la generación 16, alcanzado el mejor valor que fue 39130, muy similar al promedio del

fitness para esta instancia que es 39258.

Ilustración 19. Gráfica de curva de convergencia instancia 7.

En la instancia 7 la variación del fitness desde la población inicial hasta la

generación 20 fue muy baja, de hecho desde la generación 12 se ven signos de

estabilización. El mejor fitness fue 150, prácticamente igual al del promedio que fue 150.21

26

Ilustración 20. Gráfica de curva de convergencia instancia 8.

La instancia 8 alcanzo el mejor fitness recién en la generación 20, el cual fue de

11441, con un fitness promedio de 11525.9.

Ilustración 21. Gráfica de curva de convergencia instancia 9.

Para la instancia 9 es evidente que en la generación 8 ya se había establecido el

mejor valor para función fitness pues hasta la generación 20 la variación era prácticamente

nula, de este modo el mejor fitness fue 9356, y con un promedio global de 9382.37.

27

Ilustración 22. Gráfica de curva de convergencia instancia 10.

Al igual que sucedió con la instancia 9, la instancia 10 a partir de la generación 8 ya

había establecido el mejor valor para función fitness pues hasta la generación 20 la variación

era prácticamente nula. El mejor fitness fue 10930, y con un promedio global de 10973.2.

4.2. Problema del conjunto independiente de vértices máximo (MISP)

A continuación se presentan los resultados obtenidos mediante el algoritmo

propuesto para el problema del máximo conjunto independiente de vértice:

Instancias Datos relevantesÓptimo Conocido [12]

Resultado Algoritmo Genético

Error porcentual

Tiempo (Segundos)

1 frb30-15-1 450 nodos, 17827 aristas 26 14 46.15 14.232 frb30-15-2 450 nodos, 17874 aristas 26 17 34.62 27.233 frb30-15-3 450 nodos, 17809 aristas 26 18 30.77 27.064 frb30-15-4 450 nodos, 17831 aristas 26 15 42.31 28.285 frb30-15-5 450 nodos, 17794 aristas 26 17 34.62 30.03

Promedio 16.2 37.69 126.83

28

Tabla 3. Resumen de resultados alcanzados y tiempos de duración del algoritmo genético propuesto.

En la tabla 3 se observa que de las 5 instancias nuestro algoritmo genético tuvo

efectividad superior a 62.31% en comparación con resultados de estudios previos.

El menor tiempo obtenido fue 14.23 segundos esto sucedió en la instancia 1, y el

mayor tiempo en la instancia 5 con una duración de 30.03 segundos.

Para entender en detalle los resultados por instancias se realizaron graficas de curvas

de convergencia, en este caso es importante señalar que en MatLab la función objetivo se

trabajó como minimización de allí que tuvo que multiplicarse por -1 para que se convierta en

maximización lo que ocasiona que las soluciones factibles se encuentren en coordenadas con

signo (-) negativo.

Ilustración 23. Gráfica de curva de convergencia instancia 1.

Para la instancia 1, en la población inicial se presentan varias soluciones infactibles

de modo que la aplicación de penalidad de apoco fue ayudando a solucionar este problema,

es así que finalmente la mejor cantidad posibles de vértices en el conjunto independiente

(solución factible) fue 14, pero en promedio a penas 5.16.

29

Ilustración 24. Gráfica de curva de convergencia instancia 2.

En la instancia 2 la situación fue similar, las soluciones inicialmente fueron en alto

grado infactibles pero de a poco se fueron alcanzando mejoras hasta la generación 30, donde

se obtuvo el mejor valor que fue 17, y en promedio para esta instancia se tuvo 7.36.

Ilustración 25. Gráfica de curva de convergencia instancia 3.

30

Ilustración 26. Gráfica de curva de convergencia instancia 4.

Ilustración 27. Gráfica de curva de convergencia instancia 5.

En las instancias restantes, es decir; 3, 4 y 5, la situación fue similar los mejores

resultados estuvieron entre 15 y 18, con promedios entre 4 y 7.

Es evidente que la poca variación de cuanto a soluciones factibles e infactibles se da

porque en todas las instancias presentaban la misma cantidad de nodos, y a penas existían

mínimas variaciones en la cantidad de aristas.

31

4.3. Problema del Taller de Tareas Flexibles (FJSP)

A continuación se presentan los resultados obtenidos para la solución propuesta para

el problema de árbol de cobertura mínimo generalizado:

En la tabla 4 se observa que de las 10 instancias nuestro algoritmo genético tuvo

efectividad del 100% en cuatro instancias, más de 97% en dos casos y 75% en otras dos y

apenas en 1 instancia no fue tan satisfactorio el resultado pues solo se alcanzó efectividad de

7%. En promedio la efectividad del AG fue 82.42%.

El menor tiempo obtenido fue 15.59 segundos esto sucedió en la instancia 1, y el

mayor tiempo en la instancia 1 con una duración de 105.45 segundos. En promedio con las

instancias usadas nuestro AG tarda en resolver el problema del JSF69.22 segundos.

N° Instancias Datos relevantesÓptimo Conocido

Resultado Algoritmo Genético

Error porcentual

Tiempo (Segundos)

1 Mk0110 trabajos, 6 máquinas, 1 operaciones.

36 36 0 15.59

2 Mk0210 trabajos, 6 máquinas, 3.5 operaciones.

24 31 29.166666 33.67

3 Mk0315 trabajos, 8 máquinas, 3 operaciones.

204 204 0 82.84

4 Mk0415 trabajos, 8 máquinas, 2 operaciones.

48 60 25 47.48

5 Mk0515 trabajos, 4 máquinas, 1.5 operaciones.

168 173 2.9761904 58.89

6 Mk0610 trabajos, 15 máquinas, 3 operaciones.

33 64 93.939393 88.21

7 Mk0720 trabajos, 5 máquinas, 3 operaciones.

133 166 24.812030 54.13

8 Dauzere 01a10 trabajos, 5 máquinas, 1 operaciones.

2505 2505 0 103.78

9 Dauzere 02a 10 trabajos, 5 máquinas, 2228 2229 0.0448833 105.45

32

1 operaciones.

10 Dauzere 03a10 trabajos, 5 máquinas, 1 operaciones.

2228 2228 0 102.19

Promedio 17.58 69.22

Tabla 4. Resumen de resultados alcanzados y tiempos de duración del algoritmo genético propuesto.

Para entender en detalle los resultados por instancias se realizaron graficas de curvas

de convergencia:

Ilustración 28. Gráfica de curva de convergencia instancia 1.

Para la instancia 1 (ilustración 28), es evidente que el fitness para la población inicia

es alto, en promedio inicio con un valor de 38, y en cada generación iba cambiando, aunque

en poca intensidad pues finalmente el mejor valor alcanzado fue 36. Y en promedio 36.96

33

Ilustración 29. Gráfica de curva de convergencia instancia 2.

En la ilustración 29, se observa el comportamiento de la instancia 2, claramente a

partir de la generación 5 se alcanza el mejor valor que es 31, que coincide con el valor

optimo conocido para esta instancia.

Ilustración 30. Gráfica de curva de convergencia instancia 3.

Para la instancia 3, los valores son pocos cambiantes de hecho a partir de la

generación 10 estos parecen ser iguales. Así el mejor valor en este caso fue 204 con un

promedio muy parecido de 205.56.

34

Ilustración 31. Gráfica de curva de convergencia instancia 4.

En la ilustración 31, se observa que el fitness parte de un valor alto, pero a partir de

la generación 5 comienza su estabilidad obteniendo un promedio de 62.40 y el mejor valor

60.

Ilustración 32. Gráfica de curva de convergencia instancia 5.

En la instancia 5 los mejores valores para cada generación son muy constantes, en

general hasta la generación 12 se mantiene en 177, luego hasta la generación 30 toma un

valor de 176, pasa hasta la generación 35 con 175, disminuye luego hasta 174 en la

35

generación 48, y de allí llega a su mejor valor 173 en las dos ultima generaciones. El

promedio es 178.03

Ilustración 33. Gráfica de curva de convergencia instancia 6.

En la ilustración 33, se observa el comportamiento de la instancia 6, claramente no

existe convergencia, de hecho el mejor valor es 64 y promedio 72.81, los cuales se

encuentran muy lejanos al óptimo conocido. (ver tabla 3).

Ilustración 34. Gráfica de curva de convergencia instancia 7.

36

Para la instancia 7, al igual que en la 6, no se da una convergencia, pero a pesar de

ello los valores 166 (el mejor) y 189.32 (promedio) durante las 50 generaciones no están tan

alejados del optimo conocido 133 (ver tabla 3).

Ilustración 35. Gráfica de curva de convergencia instancia 8.

Es evidente que en la instancia 8 los mejores valores son constantes en 2505 durante

las 50 generaciones, mientras que el promedio comienza cercano a los 2565 y a partir de la

quinta generación se mantiene en torno al 2520, dando finalmente un promedio de 2523.

Ilustración 36. Gráfica de curva de convergencia instancia 9.

37

En la instancia 9 tampoco se da convergencia durante las 50 generaciones, pese a ello

los mejores valores de cada generación a partir de la décima, tienden a ser constantes a 2229

es decir a penas a un punto de diferencia del óptimo conocido 2228 (tabla 1)

Ilustración 37. Gráfica de curva de convergencia instancia 10.

Finalmente la instancia 10 tampoco se observa la convergencia durante las 50

generaciones, pese a ello los mejores valores de cada generación a partir de la quinta,

tienden son constantes en 2228 justamente el valor del optimo conocido (tabla 1).

5. Discusión

En la actualidad muchos son los trabajos que se han realizado sobre algoritmos

genéticos, uno estos titulado “Un efectivo algoritmo genético para el problema del árbol de

cobertura mínimo generalizado” [8] aplica un algoritmo genético paralelo de tipo genotipo-

fenotipo para resolver dicho problema, sus resultados muestran una tasa de error de apenas

0,033% sin embargo, existen diferencias notorias con nuestro trabajo pues, ellos utilizan el

algoritmo Prim para la generación del árbol de cobertura mínimo de los vértices mientras en

nuestro trabajo se usó el algoritmo Kruskal para la misma actividad. Además el tipo y

cantidad de instancias fue diferente pues usaron 21 instancias de tipo clúster centering y

38

nosotros solo 10 instancias. A pesar de la diferencia en el número de instancias nuestro

trabajo obtuvo tasas de error en promedio inferior al 5% por lo que nuestra solución también

se encuentra en porcentajes altamente confiables.

Por otro lado en “An Evolutionary Heuristic for the Maximal Independent Set

Problem” [10] se encuentran similitudes con el trabajo realizado pues ellos también generan

de forma aleatoria la oblación inicial, y aplican de igual manera una penalidad a la función

fitness, sin embargo utilizan como tamaño de población 50 y como operador de cruzamiento

de dos puntos, todos estos factores influyen en que este trabajo presente una efectividad

superior al 99% mientras que en nuestro estudio solo el 63% aproximadamente, sin embargo

es evidente que esta diferencia se da también porque ellos usaron 10 instancias y cada una de

ellas con vértices y aristas muy distintas. Por lo que para efectos prácticos nuestros 63%

también es un resultado adecuado.

Finalmente, en el estudio “Un algoritmo genético para el problema de Job Shop

Flexible” [11] también resuelven el problema de nuestro trabajo, la diferencia principal es

que este caso ellos usaron tres vectores para la representación del problemas mientras que

nosotros solo uno. En promedio para la instancias usadas [13] obtienen una efectividad de

83.56% muy similar a la obtenida por nuestro algoritmo que fue 82.42%. Los tiempos

computacionales no pueden ser comparados pues ellos usaron una cantidad entre 1000 y

3000 generaciones extremamente superior a la nuestra que fue de 50.

6. Conclusiones

Al finalizar el presente estudio se llega a las siguientes conclusiones:

Este estudio propone algoritmos genéticos para resolver los problemas del

árbol de cobertura mínimo generalizado (GMSTP), conjunto independiente

de vértices (MISP) y taller de tareas flexibles problema de Job Shop Flexible

(FJSP).

39

Para el GMSTP se logró resolver el problema en un tiempo computacional

razonable y obteniendo 95.28% que es un valor similar comparado con las

mejores algoritmos existente en la literatura.

El MISP fue resuelto de tal forma que en promedio, y para la instancias de

pruebas, es posible tener como máximo 18 nodos en el conjunto

independiente, lo que representa un 62.31% de efectividad en relación a otros

resultados alcanzados en el mismo problema, porcentaje aceptable sobre todo

por el hecho de que también se aceptan soluciones infactibles aunque gracias

a la penalidad que se aplicó no se afectó el desempeño de los resultados.

En cuanto al FJSP nuestro algoritmo genético resolvió el problema con una

tasa de efectividad de 82.42% un porcentaje similar a las mejores soluciones

conocidas, a pesar que en general estas utilizan tres vectores (operaciones,

maquinas, trabajos) para la representación y varios operadores de

cruzamiento y mutación; mientras que en nuestro estudio solo se usó uno/a en

ambos situaciones.

Todos estos estudios evidencian las ventajas de utilizar algoritmos genéticos

(AG) para resolver problemas de optimización, pero sobre todo; se muestra

como a través de diferentes representaciones, operadores o configuración de

parámetros, los AG hacen que los distintos problemas sean resueltos con

resultados de efectividad y tiempo bastante similares a otras soluciones

propuestas a nivel mundial por varios autores.

40

7. Bibliografía

[1] J. J. Merelo, "Informática evolutiva: Algoritmos Genéticos," 07 04 2014. [Online].

[2] J. L. Galindo and A. Carnicero, "Optimización mediante algoritmos genéticos: Aplicación al diseño de celosías," Anales de Mecánica y Electricidad, vol. LXXX, no. V, pp. 40-50, 2003.

[3] A. Vásquez, "Algoritmo genético para el problema del agente viajero," Serie Científica de la Universidad de las Ciencias Informáticas, vol. 5, no. 8, 2012.

[4] J. Pedraz and C. Córdoba, "Implementación de un algoritmo genético paralelo sobre hardware gráfico de última generación," e-Prints Complutense, 2005.

[5] J. Sánchez and J. Turrado, "Algoritmos genéticos: Aplicación al problema de la mochila," 2008.

[6] C. Ferreira, L. Satoru, V. Parada and E. Uchoa, "A GRASP-based approach to the generalized minimum spanning tree problem," Expert Systems with Applications, vol. 39, pp. 3526-3536, 2012.

[7] C. Carcamo, "Problema de la cobertura de vértices," 2011.

[8] C. Contreras, C. Rey, G. Gatica and V. Parada, "Un efectivo algoritmo genético para el problema del árbol de cobertura mínimo generalizado," X Optima VI RED-M, 2013.

[9] A. Eiben and J. Smith, Introduction to Evolutionary Computing, 1998.

[10] T. Back and S. Khuri, "An Evolutionary Heuristic for the Maximun Independent Set Problem," IEEE World Congress on Computational Intelligence., 1994.

[11] R. Medina, L. Pradenas and V. Parada, "Un algoritmo genético para el problema de Job Shop Flexible," Ingeniare. Revista Chilena de Ingeniería, vol. 19, no. 1, pp. 53-61, 2011.

[12] S. Balaji, "A New Effective Local Search Heuristic for the Maximum clique problem," International Journal of Mathematical, Computational Science and Engineering, vol. 7, no. 5, pp. 22-28, 2013.

[13] P. Brandimarte, "Routing and scheduling in a flexible job shop by tabu search," Annals of Operations Research, vol. 41, no. 1-4, pp. 157-183, 1993.

[14] J. Osorio and T. Motoa, "Modelo Jerárquico para el Job Shop Flexible," XIII International Conference on Industrial Engineering and Operation Management, 2007.

[15] M. Hifi, "A Genetic algorith based heurisitc for solving the weighted maximum independent set and some equivalent problems," Journal of the Operational Research Society, vol. 48, pp. 612-622, 1997.

[16] D. Andrade, M. Resende and R. Werneck, "Fast Local Search for the Maximum," pp. 220-234.