CAPÍTULO 4: RESULTADOS Y DISCUSIÓN
4.1 Características Generales del Programa
El programa que soluciona los casos FJSSP, cuyo Diagrama de Flujo se explicó con la Figura 22, incluyen al Algoritmo Genético de Rutas, el cual soluciona el problema de Enrutamiento, al Algoritmo Genético de Secuencias, el cual soluciona el Subproblema de Secuenciación, y al Algoritmo de Presentación de Resultados, el cual presenta los datos en Diagrama de Gantt. También se incluyen, líneas de código para exportar los datos numéricos a un archivo de Excel y líneas de código para pedir los datos al usuario. El Programa ha sido denominado Multiobjective Flexible
Lenguaje matemático de Matlab y los principales detalles del código se presentan en el Anexo A.
El programa puede correr más de una vez para entregar varias soluciones óptimas de un mismo problema, es decir, todos los bloques de la Figura 22 se pueden reiterar más de una vez para tener varias respuestas del mismo caso FJSSP.
Al ejecutarse el programa, se solicita del usuario los datos relativos del
FJSSP y los datos relativos del Algoritmo Genético de Rutas y del Algoritmo
Genético de Secuencias. En la Figura 43 y la Figura 44, se pueden ver todos los requerimientos que el programa solicita del usuario para dos casos diferentes.
La Figura 43, muestra un ejemplo de datos que el usuario ingresa cuando se ejecuta el programa con “OPCIÓN_NÚMERO? = 1”. Es decir, la opción que corresponde al de “MINIMIZAR LIBREMENTE A MAXIMUM WORKLOAD Y TOTAL WORKLOAD”. Por consiguiente, no existirán valores umbrales de parada para Maximum Workload y Total Workload.
El “TAMAÑO_POBLACIÓN_ALGORITMO_GENÉTICO_RUTAS = 200” y el “TAMAÑO_POBLACIÓN_ALGORITMO_GENÉTICO_SECUENCIAS =200” indican el número de individuos o cromosomas para las poblaciones en cada Algoritmo Genético.
“MÁXIMA_GENERACIONES_ALGORITMO_GENÉTICO_RUTAS = 50” y “MÁXIMA_GENERACIONES_ALGORITMO_GENÉTICO_SECUENCIAS = 50” significan que en ambos Algoritmos Genéticos sus poblaciones evolucionarán pasando por las etapas de: Selección, Cruce, Mutación y Evaluación, durante cincuenta veces.
En las líneas “PORCENTAJE_MUTACIÓN_ALGORITMO_...” y en “PORCENTAJE_SOBREVIVIENTES_ALGORITMO…”, si el usuario no ingresa valores, entonces por defecto el programa designa los porcentajes que figuran entre paréntesis. Los valores por defecto han sido seleccionados dando buenos resultados para muchos casos.
En “NÚMERO_REITERACIONES_SIN_MEJORAR_WM+WT” es un criterio adicional de parada del Algoritmo Genético de Rutas. Un número escrito en esta línea indica el número de veces que el valor de la función objetivo del Algoritmo Genético de Rutas, (WM+WT), se reitera sin mejorar en generaciones consecutivas. Similarmente, sucede lo mismo para caso del Algoritmo Genético de Secuencias en la línea: “NÚMERO_REITERACIONES_SIN_MEJORAR_CM”. En ambos casos, si se dejan vacías las líneas, internamente se les designa valores iguales al número máximo de generaciones, quedando de esta manera inhabilitadas. La Figura 44, muestra las alternativas cuando se ejecuta el programa con la opción 2. Es decir, con la opción de: “ESPECIFICAR VALORES UMBRALES PARA MAXIMUM WORKLOAD Y TOTAL WORKLOAD”.
Para la opción 2, el programa requiere del usuario tres nuevos datos, que en la Figura 44, se muestran como ejemplos:
“UMBRAL_MAXIMUM_WORKLOAD (U_WM) = 10”. “UMBRAL_TOTAL_WORKLOAD (U_WT) = 32”.
“MÁXIMO_NÚMERO_REINICIOS_ALGORITMO_GENÉTICO_RUTAS…= 100”.
Con los dos primeros datos (U_WM y U_WT) el Algoritmo Genético de Rutas se detiene, si se cumple las condiciones: (WM+WT) ≤. (U_WM + U_WT) con
WM ≤ U_WM y WT ≤ U_WT. Pero si no se cumplen, entonces, se contínua. Así, por ejemplo, para los datos umbrales de la Figura 44, la búsqueda puede detenerse cuando el mejor Cromosoma de Rutas alcanza un
(WM+WT) ≤. 42 y si además WM ≤ 10 y WT ≤ 32; en caso contrario el Algoritmo Genético de Rutas sigue con su proceso de búsqueda.
El tercer dato requerido “MÁXIMO_NÚMERO_REINICIOS…= 100”, significa el máximo número de reinicios o intentos, generándose en cada intento una nueva población de individuos, para que el Algoritmo Genético de Rutas pueda cumplir con los umbrales requeridos. En el ejemplo, el número de reinicios (100) es arbitrario, conviene colocar un número alto para dar libertad al programa.
Se ha considerado para la población del Algoritmo Genético de Rutas un tamaño de decenas de unidades (en este caso 20) y generaciones del orden de los miles (en este caso 10000), ello ha proveído de mucha rapidez a la búsqueda. Además, un número alto de generaciones provee libertad al Algoritmo Genético de Rutas para ejecutarse disminuyendo la probabilidad de reinicios.
Para el caso del Algoritmo Genético de Secuencias, según el ejemplo de los datos de la Figura 44, el dato “UMBRAL_CM (U_CM) = 12” y el dato “MÁXIMA_GENERACIONES_ALGORITMO_GENÉTICO_SECUENCIAS = 100” significan respectivamente que la búsqueda se detiene cuando el mejor Cromosoma de Secuencias tiene un CM ≤ U_CM (Makespan menor o igual a 12) o cuando el número de generaciones alcanza el valor de 100. Es muy importante, especificar también el número de corridas si se desean tener varias soluciones para el mismo problema, en este ejemplo el número de corridas es 5.
La Figura 45, muestra una vista del ambiente de Matlab, cuando el programa está ejecutándose, los datos ingresados son los correspondientes al de la Figura 44, se observa que automáticamente se van generando figuras, una por cada corrida, éstas contienen los Diagramas de Gantt de las secuencias obtenidas. También los resultados son exportados a una hoja Excel.
Figura 45. Vista de Ejecución del Programa con la Generación de Diagramas de Gantt. Fuente: Elaboración propia.
La Figura 46, es uno de los Diagramas de Gantt generado automáticamente por el programa, se muestra el primero de los cinco diagramas generados. Los valores de WM, WT, CM y precedencia de operaciones pueden ser validados objetivamente del análisis del Diagrama.
La Figura 47, muestra los resultados exportados por el programa a un archivo de Excel. Las cinco soluciones, según se muestra, son WM=10, WT = 32 y CM ≤ 12, cumpliéndose con los umbrales de búsqueda especificados por el usuario.
Figura 46. Resultado en Diagramas de Gantt. Fuente. Elaboración propia
4.2 Solución de casos FJSSP y Monitoreo del Funcionamiento del