I. INTRODUCCIÓN
En la actualidad, la optimización de los recursos productivos juega un papel importante en la planeación de la producción dentro de las organizaciones. Una adecuada programación dentro del área de producción que involucre la asignación de máquinas y la secuenciación de operaciones dentro de las mismas, es un proceso valioso dentro de los sistemas de producción. Por tal razón, [1,4], entre otros, han unido esfuerzos para estudiar un problema que describe este tipo de situaciones, el Job Shop flexible.
El presente artículo analiza el problema de la programación, asignación y secuenciación de máquinas para la ejecución de múltiples trabajos, conocido como Job Shop flexible (FJSSP por sus siglas en inglés), incluyéndole recursos y operaciones de transporte. El FJSSP es un problema de optimización combinatoria de tipo NP-Hard [5].
De acuerdo con lo anterior, se utiliza la metaheurística de algoritmo genético propuesta por [6], un método establecido como una adaptación algorítmica de la evolución biológica a la inteligencia artificial.
II. TRABAJOS RELACIONADOS
No se confirma con seguridad quién propuso el JSSP, pero [7,9] declaran a S.M. Johnson como pionero en el estudio de problemas de Scheduling a través de su trabajo [10], donde describe un problema sobre Flow Shop resuelto por medio de un algoritmo propuesto y elaborado por él mismo.
Según [11], el Job Shop flexible se aborda por primera vez en [12]. Allí se propone un algoritmo polinomial para resolver un FJSSP con 2 trabajos. A partir de ahí se han desarrollado otros estudios sobre el tema. En [13] se concluye que la complejidad del Job Shop flexible es mayor a la del Job Shop debido a la necesidad de asignar operaciones a las diferentes máquinas y, de igual forma, mayor que la complejidad del Flow Shop flexible tratado en [14] donde todos los trabajos tienen el mismo orden de procesamiento.
Posteriormente, FJSSP fue abordado con ciertas modificaciones que lo aproximan más a la realidad empresarial:
En [15] se estudia un algoritmo híbrido usando optimización por enjambre de partículas (PSO) y recocido simulado (SA) para optimizar la programación de un Job Shop flexible con objetivos múltiples.
En [16], se utiliza la planificación jerárquica de la producción con el fin de encontrar buenas soluciones al problema de planificación y control de la producción en un taller de tipo FJSSP.
En [17] se estudia el problema de restricciones no fijas para la programación de un Job Shop flexible (FJSSP-nfa), el cual se considera una variación más real del Job Shop flexible clásico, puesto que asume cada máquina sujeta a un número arbitrario de tareas asociadas a mantenimiento preventivo (PM). Por esta razón, proponen un algoritmo genético híbrido (hGA) en el que los operadores de cruce y de mutación son implementados en el espacio del fenotipo con el fin de incrementar su capacidad de heredar.
En [18] se propone un algoritmo híbrido entre el PSO y la búsqueda tabú (TS), para solucionar un problema de objetivos múltiples del Job Shop flexible. El PSO diseñado muestra una alta eficiencia al combinar búsquedas globales y locales.
Un algoritmo genético mejorado (IGA) para el problema de programación del Job Shop flexible Distribuido (DFJSP) se presenta en [19], donde los trabajos son procesados por un sistema de varias unidades de manufactura flexible (FMUs).
El problema de Job Shop flexible con restricciones de transporte y tiempos acotados de procesamiento (Bounded processing times) con dos objetivos, es resuelto por medio de un algoritmo genético con búsqueda tabú (GATS) por [20]. Allí buscan minimizar el makespan y el almacenamiento (manejado en términos de tiempo de espera de cada trabajo).
La optimización de la programación del Job Shop flexible de objetivos múltiples la examina [21] a través de una metaheurística híbrida entre PSO (basada en prioridades) y búsqueda local.
El Job Shop flexible con tiempos de alistamiento (SDST-FJSP) se estudia en [22], donde presentan un algoritmo memético, con una estructura de vecindario (fast neighborhood structure) compuesta por dos movimientos (reversal crititcal arcs y machines assignment) para hacer estimaciones más rápidas.
Un algoritmo micro artificial de colonia de abejas (MMABC) para solucionar un Job Shop flexible multiobjetivo con restricciones de transporte lo presentan [23], quienes proponen un operador de cruce (Crossover operator) para mejorar los resultados y así optimizar el makespan y el tiempo de procesamiento de cada operación, donde este último varía en cada una de las máquinas.
En [24] se propone una solución basada en un planteamiento por niveles (assigning and sequencing sub-problems) para solucionar un problema de programación de Job Shop flexible con tiempos de transporte y tiempos de configuración dependientes de la secuencia (sequence-dependent setup times).
III. PLANTEAMIENTO DEL PROBLEMA
En concordancia con lo dicho por [25] y lo revisado en la literatura para este trabajo, el makespan es el objetivo a optimizar más utilizado, pues equivale a minimizar tiempos muertos o maximizar la utilización de las máquinas. Por ello, este es el objetivo a tener en cuenta para el modelo del presente artículo. Al realizar modificaciones al modelo matemático presentado por [20], el problema se puede modelar de la siguiente manera:
A. Supuestos del modelo
Dentro de las principales consideraciones a tener en cuenta para el presente modelo se encuentran:
Los tiempos de operación son conocidos con certidumbre.
Todos los Jobs están disponibles para ser procesados en el instante t=0.
No existen relaciones de precedencia entre trabajos.
Todas las máquinas se encuentran listas para operar en t=0.
No se permite la interrupción de los trabajos en las máquinas.
Todos los Jobs tienen la misma prioridad dentro del sistema.
No se consideran tiempos de alistamiento.
Se permite la recirculación dentro de la programación, es decir, un trabajo puede visitar 2 veces una misma máquina.
Existe una restricción de precedencia entre las operaciones de un Job.
Existe una restricción de interferencia para una misma máquina en cualquier instante de tiempo.
Se considera un Job terminado cuando finalicen todas sus operaciones.
El tiempo de transporte será el mismo para desplazamientos vacíos o con carga.
B. Notación
Los conjuntos a manejar a lo largo del modelo matemático son:
Los parámetros a tener en cuenta en el modelo matemático son:
Ji, Trabajo i
Oi, Número de operaciones para el trabajo Ji
OPij, j-esima operación del trabajo Ji
Pijk, tiempo de procesamiento para cada OPij en la máquina k
Ci, Tiempo de terminación del trabajo Ji
Mk, Máquina k
MPij, Conjunto de máquinas que pueden procesar la operación OPij
Rh, Recurso de transporte h
TPij, Actividad de transporte entre OPij y OPij+1
TRij, Conjunto total de recursos de transporte que pueden realizar TPij
(klh, Tiempo de transporte vacío entre la máquina Mk y Ml utilizando el recurso h
(klh, Tiempo de transporte con carga entre la máquina Mk y Ml utilizando el recurso h
Q, Número muy grande
Las siguientes son las variables necesarias para el modelo:
tij, Fecha de inicio de la OPij donde i ( [1,n] y j ( [1,Oi]
vij, Fecha de inicio para TPij donde i ( [1,n] y j ( [1,Oi - 1]
PJijk, es 1 si la OPij es realizada por la máquina Mk donde Mk ( MPij
YPij i’j’ k, es 1 si la OPij es realizada antes de la OPi’j’ en la máquina k (dado que PJijk = 1 y PJi’j’k = 1)
TJijh, es 1 si el TPij es realizado por el recurso Rh
YTij i’j’ h, es 1 si el TPij es realizado antes de TPi’j’ (dado que TJijh = 1 y TJi’j’h = 1)
C. Modelo matemático
Función Objetivo:
Donde
Sujeto a:
Donde la Ecuación (1) representa la función objetivo del modelo de optimización: minimizar el makespan; mientras que la Ecuación (2) representa la fecha de terminación de cada trabajo. La restricciones del modelo están representadas por las Ecuaciones de la (3) a la (10), donde (3) el tiempo de inicio de una operación subsiguiente a otra deber ser mayor o igual al tiempo de inicio de la operación anterior más su tiempo de duración. La Ecuación (4) obliga a cada trabajo a ser realizado solo por una máquina, al igual que cada transporte debe ser realizado por un único recurso, como se muestra en la Ecuación (5). Las Ecuaciones (6) y (7) tratan la capacidad de las maquinas con el fin de que no se procese más de una operación al tiempo en una misma máquina, donde (6) exige que el tiempo de inicio de una actividad en una determinada máquina debe ser mayor que el tiempo de inicio de la actividad predecesora en dicha máquina, más su tiempo de procesamiento; mientras que (7) determina la continuidad de dos operaciones de dos trabajos que se realizan en la misma máquina.
Las Ecuaciones (8) y (9) relacionan la capacidad de los recursos de transporte con el fin de que no se realice más de un transporte por un mismo recurso en el mismo periodo de tiempo, donde en (8) el tiempo de inicio del transporte utilizando un determinado recurso para un trabajo entre dos operaciones realizadas en máquinas diferentes, debe ser mayor que el tiempo de inicio del transporte predecesor utilizando el mismo recurso más su tiempo de transporte; mientras que (9) permite conocer la continuidad del transporte de dos trabajos para dos operaciones que se realizan en máquinas diferentes usando un mismo recurso. Por su parte, en la Ecuación (10) se establece que un recurso de transporte debe tener tiempo suficiente para mover un trabajo entre dos operaciones sucesivas. Finalmente, la Ecuación (11) establece que no se puede iniciar el transporte entre dos operaciones sucesivas de un trabajo sin que haya terminado la primera operación.
IV. METODOLOGÍA
Para resolver el problema de Job Shop Flexible con restricciones de transporte propuesto en esta investigación, se descompuso la metodología en tres sub-etapas: 1) tipo de codificación, 2) asignación de operaciones y, 3) asignación de transporte. Posteriormente, se usa el algoritmo genético como técnica de optimización.
A. Codificación
El tipo de codificación representa así mismo lo que en términos del algoritmo genético es el cromosoma. Con base en los diferentes tipos de representaciones genéticas para el FJSSP, en esta investigación se usa la representación basada en operaciones codificando un Schedule por medio de una secuencia de operaciones a partir de números enteros, los cuales se repiten tantas veces como cantidad de operaciones haya en los trabajos.
Como se observa en la Fig. 1, a medida que se avanza en el cromosoma de izquierda a derecha, se determinan las operaciones de cada Job. De esta manera siempre se respeta la restricción de precedencia entre operaciones asegurando la factibilidad del cromosoma.
A continuación se realiza la asignación de las máquinas a cada una de las operaciones, lo cual se hace de manera aleatoria, dejando la optimización al algoritmo evolutivo. Esta información se almacena en otro cromosoma; ambos cromosomas representan una solución factible al problema. Cabe aclarar que la información de asignación está ligada al cromosoma de secuenciación, por ende, al ejecutarse cualquier procedimiento de optimización, la información de asignación será transmitida en el algoritmo genético a cromosomas hijos.
Finalmente, el cromosoma se modifica adicionando el doble de operaciones a las que se tenían inicialmente. Estas representan los transportes entre las máquinas y su traslado inicial de bodega. El cromosoma quedará como se muestra en la Fig. 2.
La asignación de operaciones de transporte se realiza por medio de evaluaciones parciales de la carga de cada recurso de transporte, de manera que exista un equilibrio entre los mismos.
B. Algoritmo propuesto
Los Algoritmos Genéticos (AGs) trabajan con una población de individuos donde cada uno representa una solución factible a un problema dado. Cada individuo (cromosoma) está compuesto por genes (información) cuyo valor está relacionado con la bondad de la solución y representa lo que en la naturaleza corresponde al grado de efectividad de un organismo para competir por unos determinados recursos. Los AGs funcionan de manera iterativa y cada iteración es llamada una generación. A medida que las iteraciones aumentan, se supone que los cromosomas tendrán mejores genes de sus padres (generación anterior), por lo tanto, la calidad promedio de las soluciones será siempre mejor que la anterior generación. Para ello hace uso de operadores genéticos:
Generación de la población inicial: en la presente investigación la población inicial se generó de forma aleatoria.
Selección: en esta etapa se realizó una selección por torneo con reemplazo donde la probabilidad de escoger una solución para el torneo era proporcional a la función fitness.
Cruce: de acuerdo con [26], el cruce basado en dos puntos es el que mejores resultados arroja en comparación con 3 o más puntos, por ende, es el aplicado en la presente investigación (ver Fig. 3), donde adicionalmente se tiene en cuenta la probabilidad de que exista el cruce.
Mutación: dado que su objetivo es diversificación de la población cambiando de forma arbitraria algunos de los genes, se escogió el operador swap, en el cual se seleccionan de manera aleatoria dos genes para ser intercambiados uno por el otro. Sin embargo, la probabilidad de mutación controla el porcentaje en el que se produce esta diversificación en la población.
Reparación: gracias al tipo de codificación del cromosoma propuesto para esta investigación, no es necesario ejecutar el operador de Reparación.
Todo el ciclo de evolución (todos los operadores) se repiten hasta que se cumpla algún criterio de parada, como el número de iteraciones o la diferencia de avance en la solución menor a una tolerancia establecida previamente. En este caso, el criterio de parada elegido fue el número de generaciones.
Por otro lado, algunos parámetros de entrada necesarios para que se ejecute el AG diseñado son: tamaño de la población, número de iteraciones, probabilidad de cruce y probabilidad de mutación. En la Fig. 4 se puede ver el pseudocódigo del algoritmo programado.
V. RESULTADOS EXPERIMENTALES
Con el fin de validar el desempeño de la codificación propuesta en el lenguaje de programación Matlab®, se realizó la comparación de los resultados versus las instancias en diferentes etapas que representan la descomposición por partes del Job Shop Flexible con restricciones de transporte. Estas etapas son:
Problemas de tipo Job Shop.
Problemas tipo Job Shop Flexible.
Problemas tipo Job Shop con restricciones de transporte.
Problemas tipo Job Shop Flexible con restricciones de transporte.
El algoritmo fue ejecutado en una computadora con procesador Intel core i7, 2 GHz y 8 Gb de memoria RAM para todas las instancias y para la ejecución y desarrollo del diseño de experimentos.
A. Resultados de la validación para el problema Job Shop
Por medio de las instancias desarrolladas por Fisher & Thomson [27] y Lawrence [28], se confrontan los resultados obtenidos y se verifica la efectividad de la codificación propuesta para los problemas de tipo Job Shop. Se toman 10 de estas instancias. Lo resultados se muestran en la Tabla I, y de acuerdo con ellos se puede concluir que el Algoritmo genético diseñado con restricción de transporte encuentra muy buenas soluciones al problema del Job Shop clásico.
B. Resultados de la validación para el problema Job Shop Flexible
Para este apartado se tomaron las instancias presentadas por Fattahi [29], Paulli [30] y Hurink [31], se realizó la validación de la codificación para problemas de tipo Job Shop flexible, en donde las operaciones pueden ser realizadas por más de una máquina. De igual forma, se tomó una muestra aleatoria de las instancias a resolver para validar la efectividad del algoritmo en estos problemas. Los resultados se muestran en la Tabla II.
Según estos resultados, se puede concluir que el código es efectivo para problemas de tipo Job Shop flexible, observando que para instancias de complejidad media y baja el margen de diferencia con el mejor resultado encontrado no supera 3,5%, donde en 5 de estos casos alcanza dicho valor. Adicionalmente, se muestra que, para instancias de gran complejidad, solo se presenta un margen de error máximo del 7% en la instancia de “Hurink23” de tamaño 10x10.
C. Resultados de la validación para el problema Job Shop con restricciones de transporte
Posteriormente, a través de instancias propuestas por Deroussi [32] que describen una combinación de jobsets y distribuciones de planta o layouts, se realizó la validación del algoritmo para instancias de tipo Job Shop con restricciones de transporte.
De acuerdo con los resultados encontrados, para tres instancias se coincidió con la mejor solución encontrada hasta el momento. Además, en otros tres casos, se obtiene una mejor solución que la hallada por TSAG [33] (Ver Tabla III).
Adicionalmente, se puede observar que se presenta un margen de error menor al 11,6%, donde los más atípicos se presentan en las configuraciones de layout número 3. Esta configuración, a diferencia de las demás, muestra un rango de valores en tiempos de transporte bastante amplio, lo cual genera dependencia del sentido de desplazamiento y aumenta la complejidad del problema. Para los demás casos se observa un error promedio del 5,62%.
D. Resultados de la validación para el problema Job Shop Flexible con restricciones de transporte
Finalmente, se realizó la validación del algoritmo por medio de problemas de tipo Job Shop flexible con restricciones de transporte. Para esto, se modificaron las instancias de Deroussi [32] con el fin de obtener las de tipo Job Shop flexible con flexibilidad parcial. Así, al procesar dichas instancias se puede ver una disminución en el valor del makespan.
Las instancias fueron nombradas de la siguiente manera: EXF11, que hace referencia a la instancia original del autor, indicando que fueron modificadas para poder ser evaluadas en problemas de tipo flexible, donde la parte numérica relaciona el Jobset con la configuración del layout para los tiempos de transporte. Estas instancias modificadas pueden encontrarse en el Github https://github.com/INDUSTRIALOPALO/FJSSP-t, disponible para su consulta y prueba por demás algoritmos.
De los resultados mostrados en la Tabla IV se puede concluir que, al flexibilizar las instancias, el algoritmo es capaz de realizar mejores asignaciones para obtener un menor valor de makespan. Si bien el porcentaje de mejora dependerá en gran parte del tipo de flexibilidad que se tenga en el problema (parcial o total), se observa que, para la flexibilización del problema de forma aleatoria, se obtuvo una mejor solución con una mejora del 4,71% como mínimo.
VI. DISEÑO DE EXPERIMENTOS
Para poder evaluar el algoritmo y su comportamiento respecto a los 4 factores que indicen en su eficiencia para solución de problemas tipo Job shop flexible, se realizó un diseño de experimentos factorial 2k-1, teniendo en cuenta como variable respuesta el makespan. Se tomaron 4 factores y dos niveles para cada uno de ellos, con 5 réplicas por cada uno de los tratamientos. Además, de acuerdo con [34], cada escenario debe ajustarse y realizar las ejecuciones del algoritmo de manera aleatoria después de haber definido el diseño factorial.
A. Instancias a testear
Teniendo en cuenta que el algoritmo propuesto fue desarrollado para solucionar problemas de tipo Job shop flexible con restricciones de transporte, los diseños de experimentos a ejecutar se basaron en las instancias propuestas por [30] y se seleccionaron 7 de las 32 posibles. Las instancias usadas para realizar el experimento fueron: EX11, EX31, EX32, EX43, EX62, EX82 y EX93.
B. Factores y niveles
Los factores analizados son los que presentan mayor influencia sobre la variable respuesta. En la Tabla V se aprecian dichos factores y los niveles para cada uno, mientras que en la Tabla VI se presentan los niveles que se probaron en cada uno de los 8 tratamientos del diseño experimental fraccionado.
C. Resultados
Para todos los diseños factoriales realizados se validaron los distintos supuestos de normalidad, homocedasticidad e independencia por medio del software estadístico Minitab 17, así como las diferentes pruebas estadísticas necesarias. En las Fig. 5 a Fig. 11 se aprecian los diagramas de efectos estandarizados para cada una de las instancias probadas. Además, en las Tabla VII a Tabla XIII se presentan los respectivos análisis de varianza.
De lo obtenido a través de los distintos experimentos factoriales elaborados, se concluye que en el 100% de los casos el tamaño de la población es significativo para poder obtener mejores resultados de la variable respuesta. Adicionalmente, en el 72% de los casos el número de generaciones también fue un factor determinante. Estos dos hechos son consistentes con la utilización de un algoritmo evolutivo.
VII. CONCLUSIONES
A partir de los resultados obtenidos y la validación hecha de manera progresiva en las instancias encontradas de programación de operaciones (job shop, job shop flexible, entre otros), se puede concluir que el algoritmo genético programado es una herramienta efectiva a la hora de abarcar problemas de programación de operaciones con limitaciones de transporte. Cabe mencionar que estos, los AGs, no son la única forma de abordarlos, tal y como se expone en [35].
De acuerdo con lo observado en el diseño de experimentos, más del 70% de los casos analizados demuestran la significancia del número de generaciones, lo cual podría tomarse como un resultado esperado al tener en cuenta que se está trabajando con un algoritmo evolutivo.
Igualmente, se determinó que en el 100% de los casos el tamaño de población fue un factor significativo en función de la minimización del makespan. Esto hace ver que aun cuando los factores de probabilidad de cruce y mutación no fueron representativos en la mayoría de casos, es necesario contar con una cantidad amplia de cromosomas (soluciones) para que operen estos elementos del algoritmo y obtener mejores resultados a medida que se avance en el número de iteraciones. El hecho de contar con un tamaño de población elevado, puede verse reflejado en una mayor exploración del espacio de solución.
Finalmente, se corroboró la importancia en la selección de buenos valores para los parámetros de entrada del algoritmo genérico, especialmente en el tamaño de la población y el número de generaciones. Por tanto, se insta a analizarlos a mayor profundidad con el fin de establecer valores coherentes que permitan encontrar muy buenas soluciones sin castigar la utilización de los recursos (tiempo y espacio computacional).