Trabajo Fin de Grado Grado en Ingeniería de Tecnologías Industriales MODELOS DE PROGRAMACIÓN LINEAL PARA DOS PROBLEMAS DE SECUENCIACIÓN CON VARIOS CONJUNTOS DE TRABAJOS Autor: Lucía Soriano Palomo Tutor: Paz Pérez González Dep. de Organización Industrial y G.E.I. Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2014 1 MODELOS DE PROGRAMACIÓN LINEAL PARA DOS PROBLEMAS DE SECUENCIACIÓN CON VARIOS CONJUNTOS DE TRABAJOS AUTOR: LUCÍA SORIANO PALOMO TUTOR: PAZ PÉREZ GONZÁLEZ UNIVERSIDAD DE SEVILLA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA 2 3 CONTENIDO Pag. LISTA DE FIGURAS 6 LISTA DE TABLAS 7 INTRODUCIÓN 10 1 SECUENCIACIÓN 15 1.1 ENTORNOS 16 1.2 RESTRICCIONES DE PROCESAMIENTOS 17 1.3 OBJETIVOS 18 1.4 MÉTODOS DE RESOLUCIÓN 19 2 SECUENCIACIÓN CON VARIOS CONJUNTOS 3 PROBLEMA DE SECUENCIACIÓN CON DOS CONJUNTOS DE TRABAJOS EN MÁQUINAS PARALELAS Y OBJETIVO MAKESPAN 22 26 3.1 DESCRIPCIÓN 26 3.2 PROBLEMAS RELACIONADOS 27 3.3 EJEMPLOS NUMÉRICOS 31 3.4 MODELO DE PROGRAMACIÓN LINEAL 37 4 PROBLEMA DE SECUENCIACIÓN CON DOS CONJUNTOS DE TRABAJOS EN FLOW SHOP DE PERMUTACIÓN Y OBJETIVO TIEMPO TOTAL DE FINALIZACIÓN 41 4 4.1 DESCRIPCIÓN 41 4.2 EJEMPLOS NUMÉRICOS 42 4.3 MODELO DE PROGRAMACIÓN LINEAL 51 4.4 EXPERIMENTOS 52 4.4.1 Batería de problemas y cálculo de épsilon 54 4.4.2 Resultados 55 5 CONCLUSIONES 63 6 ANEXOS 66 6.1 BATERIA DE PROBLEMAS 66 6.2 CÁLCULO ÉPSILON 66 6.3 MODELO MATEMÁTICO EN MATLAB 67 BIBLIOGRAFIA 73 5 LISTA DE FIGURAS ILUSTRACIÓN 1: SECUENCIA FACTIBLE PARA EN EL EJEMPLO DEL PROBLEMA .........................................................................................................................30 ILUSTRACIÓN 2: SECUENCIA FACTIBLE PARA PARA EL EJEMPLO DEL PROBLEMA .........................................................................................................................30 ILUSTRACIÓN 3: REPRESENTACIÓN DE LA PRIMERA ASIGNACIÓN PARA EL PROBLEMA .....................................................................................................................33 ILUSTRACIÓN 4: REPRESENTACIÓN DE LA TERCERA ASIGNACIÓN PARA EL PROBLEMA .....................................................................................................................34 ILUSTRACIÓN 5: PRIMERA SECUENCIA ADMISIBLE PARA ÉPSILON MÍNIMO EN EL PROBLEMA ......................................................................................................44 ILUSTRACIÓN 6: SECUENCIA ADMISIBLE PARA ENCONTRAR ÉPSILON MÍNIMO EN EL PROBLEMA ......................................................................................................44 ILUSTRACIÓN 7: SECUENCIA ADMISIBLE PARA ENCONTRAR ÉPSILON MÁXIMO EN EL PROBLEMA ......................................................................................................45 ILUSTRACIÓN 8: SECUENCIA ADMISIBLE PARA ENCONTRAR ÉPSILON MÁXIMO EN EL PROBLEMA ......................................................................................................46 ILUSTRACIÓN 9: SECUENCIA ADMISIBLE PARA ENCONTRAR ÉPSILON MÁXIMO EN EL PROBLEMA ......................................................................................................46 ILUSTRACIÓN 10: SECUENCIA ADMISIBLE PARA ENCONTRAR ÉPSILON MÁXIMO EN EL PROBLEMA ......................................................................................................47 ILUSTRACIÓN 11: SOLUCIÓN ÓPTIMA PARA ÉPSILON=11 EN EL PROBLEMA ..........................................................................................................................................................50 ILUSTRACIÓN 12: TIEMPOS MEDIOS DE RESOLUCIÓN PARA EL PROBLEMA PARA LOS DISTINTOS TAMAÑOS 6 ......................................61 LISTA DE TABLAS TABLA 1: TIEMPOS DE PROCESO DEL CONJUNTO B PARA EL EJEMPLO DEL PROBLEMA 29 TABLA 2: TIEMPOS DE PROCESO DEL CONJUNTO A PARA EL EJEMPLO DEL PROBLEMA 29 TABLA 3: TIEMPOS DE PROCESO DEL CONJUNTO A PARA EL EJEMPLO 31 TABLA 4: TIEMPOS DE PROCESO DEL CONJUNTO B PARA EL EJEMPLO 31 TABLA 5: SECUENCIAS POSIBLES ASIGNANDO PRIMERO LOS TRABAJOS DEL CONJUNTO B PARA EL PROBLEMA 32 TABLA 6: SECUENCIAS POSIBLES ASIGNANDO PRIMERO LOS TRABAJOS DEL CONJUNTO A PARA EL PROBLEMA 33 TABLA 7: SECUENCIAS ADMISIBLES PARA ÉPSILON=4 PARA EL PROBLEMA 34 TABLA 8: SECUENCIAS ADMISIBLES PARA =5 PARA EL PROBLEMA 35 TABLA 9: SECUENCIAS ADMISIBLES PARA =6 PARA EL PROBLEMA 36 TABLA 10: SECUENCIAS ADMISIBLES PARA =7 PARA EL PROBLEMA 36 TABLA 11: TIEMPOS DE PROCESO DE DOS CONJUNTOS DE TRABAJOS EN EL PROBLEMA 43 TABLA 12: SOLUCIONES ADMISIBLES PARA LOS DISTINTOS VALORES DE ÉPSILON EN EL PROBLEMA 49 TABLA 13: SOLUCIONES ADMISIBLES PARA LOS DISTINTOS VALORES DE ÉPSILON EN EL PROBLEMA 49 TABLA 14: RESULTADOS PARA 56 TABLA 15: RESULTADOS PARA 56 7 TABLA 16: RESULTADOS PARA 57 TABLA 17: RESULTADOS PARA 58 TABLA 18: RESULTADOS PARA 58 TABLA 19: RESULTADOS PARA 59 TABLA 20: TIEMPOS QUE TARDA GUROBI EN RESOLVER EL PROBLEMA PARA 60 8 9 INTRODUCIÓN La secuenciación, conocida como scheduling, se define como la asignación de recursos a tareas durante periodos de tiempo determinados, con objeto de optimizar una determinada medida de comportamiento [Pinedo, 2012]. Los recursos y las tareas pueden presentarse de diferentes formas. Los recursos pueden ser máquinas en un taller, puertas de embarque en un aeropuerto o aulas en centros de enseñanza, entre otros. Las tareas a las que podemos asociar dichos recursos son por ejemplo, operaciones en un proceso de producción, vuelos de llegada o de salida o grupos de alumnos. Los objetivos a optimizar, pueden ser muy diferentes también: minimizar la suma de los tiempos de finalización de los trabajos, minimizar el tiempo total en que están desocupadas las máquinas o minimizar la suma de retrasos, son algunos ejemplos. La secuenciación es por tanto un proceso de toma de decisiones que existe tanto en entornos de producción como en entornos de servicios logísticos [Cortés et al., 2010]. Los resultados de la teoría de programación de una sola máquina se pueden aplicar al estudio de sistemas de múltiples máquinas, pero a pesar de esta simplificación en absoluto es un problema fácil. En la programación en varias máquinas añadimos un nivel adicional de complejidad debido a la asignación de máquinas. Así, la complejidad del problema de programación en varias máquinas se infla, a menudo de manera exponencial. Como resultado, de la complejidad, es la aparición del concepto NP. La tendencia en la investigación es por lo tanto o encontrar un algoritmo polinómico para un problema tratable, o mostrar que el problema es intratable y buscar un algoritmo de aproximación [Cheng et al., 1990]. En un problema de programación nos podemos encontrar con distintos entornos de máquinas. En una primera clasificación se distinguen los sistemas con máquinas en serie y los sistemas con máquinas en paralelo. 10 En entornos con máquinas en paralelo, una determinada operación sobre un trabajo puede ser procesada sobre una máquina cualquiera de entre un conjunto de máquinas. [Lee et al., 2005] Pinedo señaló que un entorno de máquinas en paralelo es una situación que es importante tanto desde un punto de vista teórico, ya que es una generalización de la máquina individual, como desde un punto de vista práctico, debido a la ocurrencia de los recursos en paralelo en el mundo real. Cuando se trata con máquinas en paralelo, minimizar el makespan, el tiempo de finalización de todos los trabajos (longitud de la programación), se convierte en un objetivo de considerable interés. La programación en máquinas en paralelo se puede ver en dos pasos: En un primer paso, determinar qué trabajos van a ser asignados a qué máquinas En segundo lugar, hay que determinar la secuencia de los trabajos asignados a cada máquina. Si el objetivo es minimizar el makespan, sólo es importante el proceso de asignación, ya que minimizar el makespan, conlleva equilibrar la carga de las máquinas. Este problema es NP-hard, y durante el último par de décadas se han desarrollado muchas heurísticas para resolverlo considerando un conjunto de trabajos. En entornos en máquinas en serie, cada máquina realiza una operación diferente del conjunto de operaciones a las que se someten los trabajos. Entre las distintas configuraciones de máquinas en serie, los sistemas de flujo uniforme o flow-shop como son conocidos, han sido unos de los temas más investigados en la historia de la secuenciación [Framinan et al., 2003]. Este problema implica la determinación del orden de los trabajos sobre las máquinas para cumplir con un objetivo deseado. Además para muchas situaciones [J.M. Framinan et al., 2005], se supone que este orden es el mismo en cada máquina (permutation flow-shop). Entre los objetivos a tener en cuenta al programar en flow-shop, los más comunes que se encuentran en la literatura sobre secuenciación son minimizar el makespan o la suma de los tiempos de finalización [Framinan et al., 2005]. Aunque en las 11 últimas décadas la mayoría de la investigación se centra en el makespan, más recientemente se ha incrementado el estudio de la minimización de la suma de los tiempos de finalización o completion time. Esta minimización conduce a un uso estable de los recursos, un rápido paso de los trabajos de máquina a máquina y por lo tanto la reducción del mínimo inventario en proceso. En secuenciación existe la posibilidad de encontrarse con varios objetivos [PérezGonzález et al., 2014]. Por lo tanto, los problemas multicriterio han sido ampliamente estudiados en la literatura de programación de operaciones. En la literatura clásica de secuenciación multicriterio, lo usual es considerar que los criterios considerados afectan a todos los trabajos. Pero también es posible tener situaciones en las que los trabajos pertenecen a clases o conjuntos distintos y con criterios asociados a cada conjunto [Balasubramanian et al., 2009]. Este tipo de problemas surgen en un número grande de aplicaciones de la vida real y por lo tanto han sido objeto de interés por parte de investigadores y profesionales en los últimos años a pesar de la falta de no haber ni siquiera un nombre común para dichos problemas. Para ello en [Pérez-González et al., 2014] se trata de dar una visión unificada sobre el tema que permita avanzar en investigaciones futuras. Así, teniendo en cuenta el marco de secuenciación descrito, en este Trabajo fin de Grado se va a llevar a cabo el estudio de dos problemas. Un primer problema de secuenciación de trabajos pertenecientes a dos conjuntos distintos en máquinas en paralelo, asociando a cada uno de los conjuntos el criterio makespan. El segundo problema está enmarcado en un entorno flowshop, con restricción de permutación, considerando también trabajos pertenecientes a dos conjuntos distintos y con criterios asociados a estos conjuntos, el tiempo total de flujo o completion time. Este trabajo aborda ambos problemas en cuatro capítulos. El capítulo 1, describe qué son los problemas de secuenciación y la notación que se emplea en ellos. También se describe brevemente las distintas formas que existe de abordar un problema de programación de operaciones. 12 En el capítulo 2, se describe la secuenciación con varios conjuntos de trabajos, la importancia dentro de los problemas de secuenciación y la notación particular, aplicada a los problemas que se tratan en capítulos siguientes. En el capítulo 3, se estudia el primer problema, un problema con máquinas en paralelo, con dos conjuntos de trabajos, asociados a cada uno de ellos el criterio makespan. Se va a partir de problemas relacionados ya estudiados en la literatura sobre secuenciación, para continuar con el estudio de pequeñas instancias del problema para analizar su comportamiento, para posteriormente modelar el problema con un modelo de programación lineal entero mixto.. En el capítulo 4, se aborda el segundo problema, un problema en un entono flowshop con restricción de permutación, con dos conjuntos de trabajos, asociados a cada uno de ellos la suma de los tiempos de finalización. Al igual que el problema anterior en máquinas paralelas, en el estudio de este problema se parte de un pequeño ejemplo, en el que se puede ver el comportamiento de éste, para seguidamente modelarlo mediante programación lineal. Además, en el último apartado de este capítulo, se programa el problema en el lenguaje Matlab y con la ayuda de un solver Gurobi se estudia el tiempo de cómputo necesario para que éste devuelva el óptimo, estudiando la capacidad de Gurobi para dicho resolver de forma óptima problema, analizando para qué tamaños el tiempo supera un criterio de parada máximo de una hora. En el capítulo 5, se exponen las conclusiones llegadas tras el estudio de los problemas abordados en el capítulo 3 y en el capítulo 4. Por último en el capítulo 6, se encuentra el código en lenguaje Matlab que se explica en el capítulo 4. 13 14 1 SECUENCIACIÓN Como ya se ha comentado en la introducción, los problemas de secuenciación pueden entenderse como un problema de asignación de recursos en el tiempo, para llevar a cabo un conjunto de tareas. En este capítulo se van a introducir unas nociones básicas de los conceptos y la notación usual utilizada en secuenciación siguiendo el libro de Pinedo, [Pinedo, 2012]. En todos los problemas de secuenciación se ha de considerar el número de trabajos y el número de máquinas, ambos números se suponen finitos. Al número de trabajos se denota por n, mientras que al número de máquinas por m. Por lo general el subíndice j se refiere a trabajos y el subíndice i a máquinas. Si un trabajo requiere ser procesado por una máquina, dicha etapa se denota como el par (i, j), operación de trabajo j en la máquina i. Existen unos datos asociados a las tareas a tener en cuenta, en la formulación y resolución de los problemas de secuenciación: Tiempo de proceso o ejecución ( ): representa el tiempo de proceso del trabajo j en la máquina i. Fecha de llegada ( ): es el tiempo en el que el trabajo llega al sistema, es decir, el tiempo más temprano en el que puede comenzar su procesamiento. Fecha de entrega ( ): representa el envío cometido o fecha de finalización, la fecha en que el trabajo se le promete al cliente. Peso ( ): es básicamente un factor de priorización. Denota la importancia del trabajo j con el resto de trabajos en el sistema. Por ejemplo, este peso puede representar el coste de producción, de almacenamiento o la cantidad de valor añadido, entre otras formas. Un problema de programación se describe por un triplete α | β | γ notación introducida por [R.L. Graham, 1977]. El campo α denota el entorno de las máquinas y contiene solamente una entrada. El campo β proporciona las 15 características de procesamiento y las limitaciones. Este campo puede contener ninguna entrada, una entrada o varias entradas. Por último el campo γ describe el objetivo a minimizar. En el primer apartado de este capítulo 1, se presentan los diferentes tipos de entornos que se pueden encontrar, entendiendo por entorno la disposición de los recursos en la planta. Una vez definido el campo α, en el apartado 2.2 se analiza el segundo campo del triplete, presentando las restricciones más comunes en los problemas de secuenciación. Y por último, en el apartado 2.3 se exponen algunos de los objetivos más relevantes en la literatura.. 1.1 ENTORNOS Como se expuso en la introducción, existen diferentes tipos de entornos de máquinas: Una máquina (1): es el caso de una sola máquina. Es el más simple de todos los entornos y por lo tanto un caso especial de todos los otros más complicados. En los entornos con máquinas en serie, se puede establecer una clasificación respecto al esquema de paso de los trabajos por las diferentes máquinas: Sistemas de flujo uniforme (Flow shop): todos los trabajos siguen la misma ruta, es decir, tienen que ser procesados primero en la máquina 1, luego en máquina 2, y así sucesivamente. Después de terminar en una máquina, el trabajo se une a una cola que operará bajo la disciplina FIFO (first in, first out). Sistemas de tipo taller (Job shop): cada trabajo tiene su propia ruta predeterminada a seguir. Sistemas de taller abierto (Open shop): el paso de cada trabajo por las máquinas es libre. Respecto a los entornos con máquinas en paralelo se distinguen tres tipos: 16 Máquinas idénticas en paralelo ( ): el trabajo requiere una sola operación y puede ser procesado en cualquiera de las m máquinas. Máquinas con diferentes velocidades en paralelo ( máquina i se denota por uniformes. ): la velocidad de la . Este entorno es conocido como máquinas denota el tiempo que gasta la máquina i en procesar el trabajo j. Si todas las máquinas tienen la misma velocidad, =1 y = , por lo tanto estaríamos en el caso anterior. Máquinas independientes en paralelo ( ): Es una generalización del caso anterior. Cada máquina posee una velocidad de proceso diferente sobre cada trabajo. Trabajo j es procesado con velocidad en máquina i. Si las velocidades de las máquinas son independientes de los trabajos = , por lo tanto estaríamos en el caso anterior. Existen otros entornos más complejos, entornos híbridos que no se incluyen en este trabajo, para más información ver, por ejemplo, Pinedo 2012. 1.2 RESTRICCIONES DE PROCESAMIENTOS Las restricciones de proceso y limitaciones especificadas en el campo β pueden ser más de una, por lo que este campo puede incluir múltiples entradas, como ha sido comentado anteriormente. A continuación se presentan algunas de las más comunes en la literatura sobre secuenciación: Fechas de llegada ( ): si este símbolo aparece en el segundo campo, el trabajo j no puede iniciar su proceso antes de su fecha de llegada. Si no aparece en el campo β, el procesamiento de la tarea j puede comenzar en cualquier momento. Preemptions (prmp): Interrupción, es decir, no es necesario mantener un trabajo en una máquina, una vez iniciado hasta su terminación. Se permite interrumpir el proceso de un trabajo en cualquier punto en el tiempo y poner un trabajo en diferentes máquinas (en el caso de que haya máquinas iguales para realizarlo). 17 Restricciones de precedencia (prec): Requiere que uno o más trabajos deban ser completados antes de permitir que otro trabajo inicie su proceso. Tiempos de setup (sik): es el tiempo de cambio en el proceso de los trabajos i y los trabajos k. Permutación (prmu): sólo se da en el flowshop. Las colas en las máquinas operan de acuerdo con la disciplina FIFO (first in first out). Esto implica que el orden o permutación en el que los trabajos pasan por la primera máquina se mantiene a lo largo del sistema. Para conocer más restricciones, ver, por ejemplo, Pinedo 2012. 1.3 OBJETIVOS Los objetivos a minimizar más comunes se definen en función del tiempo de finalización de los trabajos. Por ello se definen los siguientes parámetros: Tiempo de finalización del trabajo j en la máquina i ( ): instante de terminación del proceso de la operación j en la máquina i. En los entornos con una única máquina se denota permutación, se suele denotar por en la última máquina . En los entornos flowshop de al tiempo de finalización del trabajo j . Retraso de un trabajo j ( ): se define como = - . Mide la desviación respecto a la fecha de entrega. Es positiva cuando el trabajo j se haya completado tarde y negativa cuando dicho trabajo se ha completado temprano. Tardanza de un trabajo j ( ): se define como =max ( - , 0)=max ( ,0).Mide el tiempo de retraso cuando el trabajo se termina más tarde de su fecha. A continuación se exponen algunos de los objetivos más comunes en la literatura sobre secuenciación: Tiempo de finalización (∑ ): minimizar la suma de los tiempos de finalización de los trabajos. 18 ): el makespan definido como el máximo de ( ,…, Makespan ( ), es equivalente al tiempo en el que la última tarea sale del sistema. Tiempo de finalización ponderado (∑ ): minimizar el coste total asociado a la finalización de los trabajos. Retraso total (∑ ): minimizar la suma de retrasos o retraso total. Retraso máximo ( ): se define como el máximo de ( ,…, ). Minimizar el retraso máximo sería, minimizar el retraso de todos los trabajos. Retraso total ponderado (∑ ): minimizar el coste total asociado al retraso total. Tardanza total (∑ ): minimizar la tardanza total. Tardanza máxima ( ): se define como el máximo de ( ,.., ). Minimizar la tardanza máxima sería, minimizar la tardanza de todos los trabajos. Tardanza total ponderada (∑ ): minimizar el coste total asociado a la tardanza total. Hay ocasiones que interesa optimizar más de un objetivo. Se denominan problemas multicriterio. Los enfoques en los problemas multicirterio más comunes a optimizar, considerando el caso de dos objetivos Combinación lineal convexa: Min λ Épsilon Constraint: Min Pareto: Min ( , y + (1-λ) sujeto a ), que se denota #( son: , con λ (0,1) ≤ϵ, que se denota ϵ( , / ) ) 1.4 MÉTODOS DE RESOLUCIÓN Para abordar un problema de secuenciación, se puede hacer mediante métodos exactos o métodos aproximados [Pinedo, 2012]. Los procedimientos exactos buscan la mejor solución, denominada óptimo, con respecto al objetivo que se quiere hallar. Dichos métodos son rápidos para 19 problemas polinomiales (P) y para algunos tamaños pequeños de problemas no polinomiales (NP) que no sean excesivamente complejos. Estos métodos para problemas NP-hard requieren a menudo un tiempo de búsqueda de la solución muy grande cuando el número de trabajos/máquinas se incrementa. Entre estos métodos se encuentran, por ejemplo, la programación dinámica y los algoritmos de ramificación y acotamiento (branch and bound). Los métodos aproximados o heurísticos se centran en buscar una buena solución, sin necesidad de que tenga que ser la mejor, en periodos de tiempos pequeños o razonables. Estas técnicas se clasifican de la siguiente forma: Heurísticas de tipo constructivo, comienzan sin una secuencia, y se construye una poco a poco mediante la adición de un trabajo cada vez de acuerdo a una regla. Son heurísticas de este tipo las reglas de despacho o dispatching rules, como por ejemplo FIFO (First In First Out), SPT (Shortest Processing Time first) o LPT (Longest Processing Time first). Metaheurísticas, se basan en mejorar soluciones ya encontradas. Los procedimientos tratan de optimizar localmente alrededor de una solución, para hallar mínimos locales. En este grupo se encuentran por ejemplo, Algoritmos Genéticos, Colonias de Hormigas o Búsqueda de Entorno Variable. 20 21 2 SECUENCIACIÓN CON VARIOS CONJUNTOS En los últimos años [Agnetis et al., 2004], los problemas de secuenciación en los que múltiples agentes compiten por el uso de recursos están recibiendo cada vez más atención en diferentes entornos de aplicaciones y campos, como la inteligencia artificial, la teoría de decisión, etc. En [Pérez-González et al., 2014] encontramos algunas de estas aplicaciones en la vida real: La secuenciación en una cadena de suministro: en una cadena de suministro, un problema clásico es reducir los costes de fabricación y distribución. Si los clientes están compitiendo por un recurso común entonces el problema implica interferencia de dos conjuntos de trabajos. Resecuenciación: actualizar la secuencia existente teniendo en cuenta interrupciones u otros cambios, como por ejemplo la llegada de nuevos trabajos a procesar. En este problema existen dos conjuntos de trabajos, los trabajos que ya han sido programados y los nuevos a programar, por lo que se puede formular como un problema de programación con dos agentes. Telecomunicaciones: la transmisión de paquetes de datos que deben llegar a su destino dentro de un límite de tiempo es otro ejemplo. Mientras que para algunas aplicaciones, esta transferencia de archivos o comunicación, no debe exceder una demora media, para otras aplicaciones como voz o video, tienen más prioridad lograr una tasa de pérdida específica. Se identifica de nuevo varios conjuntos de trabajos con diferentes objetivos que deben competir por el mismo recurso, el ancho de banda. A pesar de estas aplicaciones en la vida real, no ha sido establecido una definición, un nombre común, ni una notación específica para este tipo de problemas hasta que en [Pérez-González et al., 2014] se ha dado una visión unificada de este tipo de problemas que, aunque se trata de un caso especial de problemas de programación multicriterio, la existencia de varios conjuntos de 22 trabajos hace que la complejidad de estos problemas cambie incluso si las funciones objetivos son las mismas para todos los conjuntos. El nombre más empleado para denominar a este tipo de problemas es multi-agent scheuduling problem (MASP) [Pérez-González et al., 2014]. La situación es la siguiente, se considera conjuntos de . Se define y tiene asignado un criterio trabajos denotados por . Cada conjunto de trabajos . Como muchas referencias trata con dos conjuntos (este trabajo particularmente también), se denota un conjunto como conjunto como objetivos y con y y otro trabajos cada uno respectivamente, y funciones . Como ya se señaló en el apartado 1.3, en la programación con dos agentes, algunos de los enfoques que más se estudian para el problema MASP, son combinación lineal convexa, épsilon constraint y pareto [Agnetis et al., 2004]: MÉTODO DE COMBINACIÓN LINEAL: Dado dos conjuntos de trabajos y , con objetivos y , se pondera cada objetivo dependiendo de su importancia para buscar la solución óptima. Por lo tanto, dado un valor, λ tal que λ (0,1), encontrar una secuencia óptima + (1-λ) sea mínimo.MÉTODO DE RESTRICCIÓN-EPSILON: Dado dos conjuntos de trabajos y con objetivos secuencia óptima y y dado un valor tal que y ϵ, encontrar una sea mínima. Siguiendo la notación de Gra am se indica este problema como o también siempre que esto no se puede indicar simplemente como genere confusión ÉTODO DE PARETO Dado dos conjuntos de trabajos objetivos y dominadas ( encontrar el conjunto , de todas las ) y una correspondiente secuencia de cada par. Se indica este problema como podemos encontrar como y soluciones y de con no para o también lo . En el primer enfoque se pretende encontrar una solución en equilibrio para los objetivos dependiendo del peso que se le da a cada agente/conjunto 23 (dependiendo de ). En el segundo enfoque, el agente A encuentra la mejor solución para él, dada una secuencia aceptable para el agente B restringido por el coste . Una secuencia del método restricción-épsilon puede no tener soluciones factibles (por ejemplo, si es muy pequeño). En el último enfoque, los dos agentes proporcionan la lista de todas las posibles soluciones no dominadas, para negociar el equilibrio más aceptable para los dos. Otros enfoques que se pueden encontrar en la literatura son Goal Programming y Lexicographical approach. El enfoque Goal Programming, denotado por , también llamado modelo de decisión, es un caso especial del método de restricción épsilon. El objetivo aquí es encontrar una secuencia factible satisfaciendo y . El enfoque lexicográfico, denotado por , minimiza todos los criterios en el orden dado. Sólo en los enfoques épsilon constraint y lexicográfico, el orden en el que son considerados los criterios es relevante, diferentes órdenes implican diferentes problemas. Para el estudio de los problemas que se han considerado en este trabajo se van a tener en cuenta las siguientes propiedades básicas de problemas con una máquina y un conjunto de trabajos: Propiedad 1: Si el makespan es el criterio para cada uno de los conjuntos, entonces hay una secuencia óptima en el que todos los trabajos que pertenecen al conjunto se procesan de forma consecutiva. Propiedad 2: Si el tiempo total de finalización es el criterio para uno de los conjuntos entonces existe una secuencia óptima en la que los trabajos son procesados por la regla SPT (Shortest Processing Time), es decir, desde menos a más duración. 24 25 3 PROBLEMA DE SECUENCIACIÓN CON DOS CONJUNTOS DE TRABAJOS EN MÁQUINAS PARALELAS Y OBJETIVO MAKESPAN 3.1 DESCRIPCIÓN En la práctica, a menudo se tiene que hacer frente al problema de equilibrar la carga en las máquinas en paralelo. En las máquinas idénticas en paralelo el trabajo sólo requiere de una sola operación y puede ser procesado en cualquiera de las m máquinas. Es por ello que [Pinedo, 2012] señala que es una generalización del problema con una única máquina. Mientras que con una máquina el objetivo makespan solo tiene interés cuando hay tiempos de set-up (ya que sin tiempos de preparación el problema es trivial), cuando se trata de máquinas en paralelo el maskespan se convierte en un objetivo de considerable interés ya que minimizando el makespan de un banco de máquinas en paralelo, se asegura un buen equilibrio [Pinedo, 2012]. Sin embargo, en este caso el problema es NP-hard, por lo que obtener la solución óptima no es fácil cuando el problema considera muchos trabajos. Dado que en la práctica es posible tener situaciones en la que los trabajos pertenecen a conjuntos distintos [Agnetis et al., 2003], con un criterio asociado con cada conjunto, y este problema no se ha considerado anteriormente en la literatura sobre secuenciación, se plantea el siguiente problema: Sean y dos agentes y B, cada uno con un conjunto de trabajos respectivamente. Cada conjunto tiene un número de trabajos a procesar y y A . El conjunto de trabajos tiene unos tiempos de proceso, . Los trabajos van a ser procesados en máquinas idénticas paralelas, denotado por . Los agentes tienen que programar sus trabajos en dichas máquinas paralelas, recursos comunes, pero cada agente desea minimizar una función objetivo. Ambos agentes van a minimizar el tiempo de finalización del último trabajo en procesaro makespan, denotado 26 , para cada agente respectivamente. El enfoque estudiado en este problema es el conocido como épsilon constraint. Por lo tanto, utilizando la notación propuesta por Graham se define el problema como sigue: 3.2 PROBLEMAS RELACIONADOS Para el estudio del problema planteado en el apartado anterior, se va a partir del estudio de problemas relacionados, en concreto dos. En el primero se minimiza el makespan con un solo conjunto de trabajos en máquinas paralelas, y en el segundo se minimiza el makespan de dos conjuntos de trabajo mediante el enfoque de épsilon constraint para una sola máquina. Primero se considera el problema [Pinedo, 2012]. Este problema es interesante porque, como ya se ha comentado anteriormente, minimizar el makespan tiene el efecto de equilibrar la carga sobre las distintas máquinas, como señala [Pinedo, 2012]. Este problema a partir de dos máquinas es NP-hard, por lo que, durante el último par de décadas, se han desarrollado muchas heurísticas para resolverlo. Una heurística muy común usada para resolver el problema de forma sencilla, y que da una solución aproximada del problema, se describe a continuación [Pinedo, 2012]: Se ordenan los trabajos mediante la regla LPT (The Longest Processing Time first). Luego se van asignando a la máquina más libre de carga. Esta heurística tiende a colocar los trabajos más cortos al final del programa, donde pueden ser utilizados para equilibrar las cargas. Existe un teorema que demuestra que la solución encontrada por esta heurística dista de la solución óptima una cantidad dependiente del número de máquinas y no superior a : 27 Ahora se aborda el problema de encontrar una solución óptima de . Para ello estudiamos primero el problema analizado por [Agnetis et al., 2003]. Se demuestra que este problema puede ser resuelto eficientemente por una reducción conocida, problema de un solo agente .Para este último Lawler (1973) elabora un algoritmo con complejidad O( . Dada una secuencia σ para dos conjuntos de trabajos, el tiempo de finalización del último trabajo: donde para Si existe una secuencia factible finita , entonces resolviendo con función objetivo es también factible y óptima para alcanza el mismo valor óptimo . De lo contrario si y , entonces no hay solución factible existente para el problema con dos agentes. A continuación se va a aplicar el algoritmo de Lawler para el problema en un pequeño ejemplo, para entender un poco mejor este algoritmo. Se define el tiempo de finalización total , como la suma de los tiempos de proceso de todos los trabajos, tanto del conjunto A como del conjunto B (Tabla 2, Tabla 1) 28 3 1 Tabla 1: Tiempos de proceso del conjunto B para el ejemplo del problema 2 4 Tabla 2: Tiempos de proceso del conjunto A para el ejemplo del problema Si dicho tiempo p es menor que ϵ, la secuencia factible es procesar primeramente todos los trabajos de A, y a continuación se procesan los trabajos del conjunto B, como podemos observar en la Ilustración 1. En dicho diagrama de Gantt se observa que el tiempo de finalización de la última tarea de A que se procesa, el makespan de A, es un valor de cuatro, mientras que el de B es de diez. 29 Máquina 1 3 0 1 1 2 3 2 4 Ilustración 1: Secuencia factible para 5 4 6 7 8 9 10 11 12 en el ejemplo del problema Si por el contrario el valor que toma épsilon es menor que la suma de los tiempos de proceso de todos los trabajos de todos los conjuntos, es decir , la secuencia factible, sería procesar todos los trabajos de B, ya que el valor del makespan del conjunto B está restringido por ϵ, y a continuación procesamos los trabajos del conjunto A. Para dicha secuencia podemos observar en la Ilustración 2 que el makespan de A ahora toma un valor de diez y el de B toma un valor de seis. Máquina 1 2 0 1 4 2 3 Ilustración 2: Secuencia factible para 4 3 5 6 7 1 8 9 10 para el ejemplo del problema 30 11 12 3.3 EJEMPLOS NUMÉRICOS En este apartado se va a analizar un ejemplo pequeño para el problema , considerando m=2, y dos conjuntos de trabajos, dos trabajos, j=1…2 y k=1…2 con sus tiempos de proceso y y , con dados en las tablas 3 y 4respectivamente. 3 1 Tabla 3: Tiempos de proceso del conjunto A para el ejemplo 2 4 Tabla 4: Tiempos de proceso del conjunto B para el ejemplo En este apartado se pretende estudiar las distintas secuencias posibles del problema, que dependen del valor que tome la constante épsilon, que restringe el valor del makespan del conjunto B. Existirá un valor de épsilon mínimo, por debajo del cual el problema será infactible y un valor de épsilon máximo por encima del cual el problema será siempre posible. Y entre estos dos valores extremos, épsilon mínimo y épsilon máximo, oscilaran valores de épsilon para los cuales habrá secuencias factibles y una o más secuencias óptimas. 31 Para estudiar los diferentes casos que se pueden encontrar según los valores del parámetro , se van a generar las distintas secuencias posibles. Asignando primero todos los trabajos pertenecientes al conjunto B a las dos máquinas, obtenemos las siguientes distintas secuencias posibles: Primera Segunda Tercera Cuarta asignación asignación asignación asignación Máquina 2 , , , , Máquina 1 , , , , 5 7 7 5 4 4 4 4 Tabla 5: Secuencias posibles asignando primero los trabajos del conjunto B para el problema Asignando primero los trabajos del conjunto B se pretende encontrar el decir, el mínimo valor que puede tomar , es en el problema con el que podría ser minimizado el objetivo de dicho conjunto, ya que si se recuerda la formulación del problema, este objetivo está sujeto a dicho parámetro. En este ejemplo, Por debajo de este valor, . no es posible resolver el problema ya que no existe ninguna secuencia factible (problema infactible). 32 Máquina 2 Máquina 1 0 1 2 3 4 5 6 7 8 Ilustración 3: Representación de la primera asignación para el problema Asignando ahora todos los trabajos de A lo antes posible: Primera Segunda Tercera Cuarta asignación asignación asignación asignación Máquina 2 , , , , Máquina 1 , , , , 3 3 3 3 5 7 7 5 Tabla 6: Secuencias posibles asignando primero los trabajos del conjunto A para el problema Procesando primero todos los trabajos del conjunto A, se atrasan todos los trabajos del conjunto B, con lo que se pretende encontrar el , el épsilon a partir del cual todas las soluciones del objetivo del conjunto B son admisibles. En este ejemplo, . 33 Máquina 2 Máquina 1 0 1 2 3 4 5 6 7 8 Ilustración 4: Representación de la tercera asignación para el problema Por lo tanto, los valores de que va permitir que el problema tenga soluciones admisibles serán valores: Se analizan ahora las posibles soluciones admisibles con oscilando entre dichos valores mínimo y máximo. Si ϵ=4, las asignaciones admisibles que se pueden tener en este ejemplo son: Primera Segunda Tercera Cuarta Quinta Sexta asignación asignación asignación asignación asignación asignación Máquina , , , , , , , , , , 5 7 7 5 6 6 4 4 4 4 4 4 2 Máquina , , 1 Tabla 7: Secuencias admisibles para épsilon=4 para el problema 34 Observando la Tabla 7, la primera asignación y la cuarta asignación son soluciones óptimas para este valor de . Si ϵ=5, todas las anteriores asignaciones son soluciones válidas (ϵ=4), más las nuevas obtenidas para dicho valor de . Séptima asignación Máquina , 2 Máquina , 1 5 5 Tabla 8: Secuencias admisibles para Para este nuevo valor de =5 para el problema siguen siendo óptimas la primera y la cuarta asignación. Si ϵ=6, todas las anteriores asignaciones son soluciones válidas (ϵ=4,5), más las nuevas obtenidas para dicho valor de . 35 Octava Novena asignación asignación Máquina , 2 Máquina , , 5 4 5 6 Tabla 9: Secuencias admisibles para Para este nuevo valor de , =6 para el problema es óptima la novena asignación, ya que conseguimos reducir el makespan de A a un valor 4, sometiendo al conjunto B al valor de . Si ϵ=7 todas las anteriores asignaciones son soluciones válidas (ϵ=4, 5,6), más las nuevas obtenidas para dicho valor de . Décima asignación Máquina , 2 Máquina , 1 5 5 Tabla 10: Secuencias admisibles para =7 para el problema 36 Con este nuevo valor de no es mejorada la secuencia novena, que sigue siendo óptima para dicho valor. Por lo tanto, se puede observar a partir del pequeño ejemplo que se ha analizado, que dependiendo del valor de , el problema puede que sea infactible (cuando es menor que ), que todas las asignaciones sean factibles, y el problema sea trivial (cuando es mayor que ), o que el problema tenga distintas asignaciones factibles, y una o más sean óptimas (cuando está entre y ). 3.4 MODELO DE PROGRAMACIÓN LINEAL Como define literalmente [Canca, 2013]: “Un modelo es una cierta “estructura” construida con el propósito de reflejar determinadas características y analizar el comportamiento de un determinado objeto o sistema. Utiliza, de forma general, relaciones y definiciones matemáticas, con el fin de representar relaciones internas del sistema que está siendo modelado.” Existen varias razones por las que emplear modelos. Hacer experimentos con modelos reales supone una dificultad y puede conllevar algún riesgo. Otra razón por la que utilizar modelos es que al modelar el problema se hace un estudio de mayor profundidad del sistema que estamos modelando. La construcción de un modelo implica la asociación de un criterio de maximizar o minimizar el objetivo que estamos considerando. Es por ello que cuando hablamos de modelar, hablamos de optimizar. Y en el ámbito del modelado, la programación lineal es una parte muy importante, ya que a pesar de la difícil tarea que supone esta característica al modelar, facilita la resolución del modelo. La formulación del modelo de programación lineal que se presenta en este apartado es una modificación del modelo de programación lineal formulado para dos conjuntos de trabajos en máquinas paralelas, en el que se minimizan 37 y , [Balasubramanian et al, 2008]. Es una formulación en tiempo discretizado que fue propuesta originalmente por Sousa y Wolsey(1992). Para el problema estudiado, se tienen las siguientes variables: L indica el parámetro que decide el valor makespan. T es el tiempo máximo de comienzo posible, que viene dado por El modelo modificado es el siguiente: (1) y (2) Aseguran que cada trabajo esté programado exactamente una vez. El primer grupo también asegura que ningún trabajo de A se complete después de L. (3) Se asegura de que no haya más trabajos en procesamiento que máquinas. 38 (4) Son limitaciones de integralidad en las variables de decisión. Tras un estudio exhaustivo del problema, y la búsqueda de un modelo de programación lineal más sencillo con el que se pueda representar el problema estudiado, dada la complejidad del modelo modificado de [Balasubramanian et al, 2008], en este Trabajo Fin de Grado se ha optado por no programarlo con una herramienta de resolución matemática (como Gurobi), siendo una línea de investigación interesante para los investigadores en secuenciación. 39 40 4 PROBLEMA DE SECUENCIACIÓN CON DOS CONJUNTOS DE TRABAJOS EN FLOW SHOP DE PERMUTACIÓN Y OBJETIVO TIEMPO TOTAL DE FINALIZACIÓN 4.1 DESCRIPCIÓN Un flow-shop es un conjunto de m máquinas en serie, en las que cada trabajo tiene que ser procesado en cada unas de éstas máquinas [Pinedo, 2012]. Es decir todos los trabajos tienen que seguir la misma ruta, primero ser procesados en la máquina 1, a continuación en la máquina 2, y así sucesivamente. Es por ello que después de terminar en una máquina un trabajo, se une a la cola de la siguiente máquina. A esta disciplina está asociada la restricción de permutación (pmru), el orden por el que pasan los trabajos en la primera máquina se mantienen a lo largo del sistema. Operan bajo la disciplina FIFO, el primero que entra, es el primero en salir. Como se comentó en la introducción, entre los objetivos que podemos asociar a flow-shop, encontramos la minimización del tiempo de finalización de la última tarea, makespan, objetivo que implica por lo general una buena utilización de la máquina. Es por ello que la mayoría de la investigación durante las últimas décadas se han centrado en este objetivo, pero más recientemente, la investigación dedicada a la minimización de los tiempos de finalización de los trabajos (completion time) se ha incrementado ya que conduce a un uso estable de los recursos y la reducción del inventario [J.M. Framinan et al., 2005]. Este problema es NP para el caso con un único conjunto. Al ser considerado más relevante dicho objetivo para el entorno de producción dinámico actual, [J.M. Framinan et al., 2005], unido a que los problemas de gestión en los que múltiples agentes compiten en el uso de recursos están 41 recibiendo cada vez más atención como se comentó en el Capítulo 0, se plantea el estudio del siguiente problema: Sean dos y agentes y B, cada uno con un conjunto de trabajos respectivamente. Cada conjunto tiene un número de trabajos a procesar y y A . El conjunto de trabajos tiene unos tiempos de proceso, . Los trabajos van a ser procesados en máquinas m máquinas en serie, denotado por . Los trabajos de ambos agentes tienen que pasar con en el mismo orden que hayan pasado por la primera máquina por todas las máquinas. Esta limitación es denotada como pmru en el campo beta de la notación de Graham. Ambos agentes van a minimizar el tiempo de finalización cada uno de los trabajos en la última máquina que los procesa , . El enfoque estudiado en este problema es el conocido como épsilon constraint. Por lo tanto utilizando la notación propuesta por Graham se define el problema como sigue: Al igual que el caso con un único conjunto, este problema es NP, por lo que no existe un algoritmo que proporcione la solución óptima en tiempo polinomial. 4.2 EJEMPLOS NUMÉRICOS A partir de un pequeño ejemplo que va a ser analizado, se van a buscar los distintos valores entre los que se mueve el valor de épsilon. Un épsilon mínimo, por debajo del cual el problema es infactible y un épsilon máximo por encima del cual todas las soluciones son factibles. También será analizado el problema cuando se mueva entre estos valores extremos, identificando la o las soluciones óptimas que pudiesen aparecer en el ejemplo. Considérese dos conjuntos de trabajos, proceso y , con dos trabajos, con tiempos de , dependiente de la máquina en el que es procesado (i=1,2), respectivamente. 42 Máquina 1 Máquina 2 2 4 4 3 2 1 1 4 Tabla 11: Tiempos de proceso de dos conjuntos de trabajos en el problema Para ver con mayor facilidad dicho ejemplo se va a denominar los trabajos de ambos conjuntos de j=1…4. Se va a tratar de encontrar para este ejemplo los valores entre los que oscila el parámetro épsilon, parámetro que restringe el objetivo del conjunto B. Por debajo de épsilon mínimo no hay soluciones admisibles y por encima de épsilon máximo todas las soluciones son admisibles. Para encontrar hay que probar qué secuencia proporciona el menor valor del tiempos total de terminación de los trabajos de B, es decir, el menor valor de . Se tendrá los menores valores cuando los trabajos de B se secuencien al principio en la secuencia. Así, se probará el caso [3,4,x,x] y el caso [4,3,x,x], para comprobar cuál de las dos secuencias da menor valor de de , y ése será el valor . Notar que da igual en qué lugar se secuencian los trabajos de A (trabajos 1 y 2), ya que no influyen en este caso en el valor de 43 . Máquina 2 3 Máquina 1 3 0 1 4 4 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ilustración 5: Primera secuencia admisible para épsilon mínimo en el problema Máquina 2 4 Máquina 1 4 0 3 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Ilustración 6: Secuencia admisible para encontrar épsilon mínimo en el problema En la Ilustración 5 secuenciando primero el trabajo 3 y después el 4, puede comprobarse que los tiempos de finalización de ambos trabajos pertenecientes al conjunto B son: Por lo tanto la suma de los tiempos de finalización del conjunto B para esta secuencia: 44 En la Ilustración 6 secuenciando primero el trabajo 4 y después el 3, puede comprobarse que los tiempos de finalización de ambos trabajos pertenecientes al conjunto B son: Por lo tanto la suma de los tiempos de finalización del conjunto B para esta secuencia: Así la primera secuencia ilustrada en este ejemplo da el valor de épsilon mínimo: Para encontrar los últimos trabajos en ser procesados, van a ser los del conjunto B, alargando así lo máximo el tiempo total de terminación de B. Ahora influyen el orden en el que se van a procesar los trabajos del conjunto A , por lo que habrá que probar con las distintas secuencias, [1,2,3,4], [1,2,4,3], [2,1,3,4], y [2,1,4,3] y ver para cada una, la suma de los tiempos de finalización del conjunto B. El de mayor valor de entre las secuencias, será el épsilon máximo. Máquina 2 1 Máquina 1 1 0 1 2 2 2 3 4 5 3 3 6 7 8 4 4 9 10 11 12 13 14 15 16 17 Ilustración 7: Secuencia admisible para encontrar épsilon máximo en el problema En la Ilustración 7 se puede observar la secuencia [1,2,3,4] y como los tiempos de finalización son los siguientes: 45 Y por lo tanto la suma de los tiempos de finalización para esta secuencia es: Máquina 2 1 Máquina 1 1 0 1 2 2 2 3 4 4 5 6 7 4 3 3 8 9 10 11 12 13 14 15 16 17 Ilustración 8: Secuencia admisible para encontrar épsilon máximo en el problema En la Ilustración 8 se puede observar la secuencia [1,2,4,3] y como los tiempos de finalización son los siguientes: Y por lo tanto la suma de los tiempos de finalización para esta secuencia es: Máquina 2 Máquina 1 2 0 1 2 3 4 5 2 1 3 1 3 4 6 7 8 9 4 10 11 12 13 14 15 16 17 Ilustración 9: Secuencia admisible para encontrar épsilon máximo en el problema 46 En la Ilustración 9 se puede observar la secuencia [2,1,3,4] y como los tiempos de finalización son los siguientes: Y por lo tanto la suma de los tiempos de finalización para esta secuencia es: Máquina 2 2 Máquina 1 2 0 1 2 1 1 3 4 5 4 6 7 4 3 3 8 9 10 11 12 13 14 15 16 17 Ilustración 10: Secuencia admisible para encontrar épsilon máximo en el problema Y por último, en la Ilustración 10 se puede observar la secuencia [2,1,4,3] y como los tiempos de finalización son los siguientes: Y por lo tanto la suma de los tiempos de finalización para esta secuencia es: Al retrasar lo máximo la finalización de los trabajos tres y cuatro, pertenecientes al conjunto B, la máxima suma de tiempos de finalización de dichos trabajos es 29, como se puede ver en la secuencia admisible en la Ilustración 8. Se observa en este ejemplo que por lo tanto . Por lo tanto, los valores que puede tomar épsilon en este ejemplo serían: 47 Se analizan ahora las posibles soluciones admisibles con épsilon oscilando entre dichos valores mínimo y máximo. 48 ϵ=10 ϵ=10 ϵ=11 ϵ=11 ϵ=13 ϵ=14 ϵ=14 ϵ=16 ϵ=16 ϵ=16 ϵ=17 ϵ=18 Secuencia [3,4,1,2] [3,4,2,1] [4,3,1,2] [4,3,2,1] [4,1,3,2] [4,2,3,1] [3,1,4,2] [1,3,4,2] [3,2,4,1] [4,2,1,3] [4,1,2,3] [3,2,1,4] 22 22 21 22 20 20 21 18 24 18 18 20 10 10 11 11 13 14 14 16 16 16 17 18 ϵ=26 ϵ=27 ϵ=29 Tabla 12: Soluciones admisibles para los distintos valores de épsilon en el problema ϵ=19 ϵ=19 ϵ=20 ϵ=22 ϵ=22 ϵ=23 ϵ=23 ϵ=24 ϵ=25 Secuencia [3,1,2,4] [1,4,3,2] [2,3,4,1] [1,3,2,4] [1,4,2,3] [2,3,1,4] [2,4,3,1] [2,1,3,4] [2,4,1,3] [1,2,3,4] [2,1,4,3] [1,2,4,3] 19 18 21 17 17 18 21 16 20 15 16 15 19 19 20 22 22 23 23 24 25 26 27 29 Tabla 13: Soluciones admisibles para los distintos valores de épsilon en el problema 49 En la Tabla 12, aparece para cada valor de épsilon las secuencias admisibles y el tiempo total de terminación (o flowtime) de cada conjunto de trabajos. A medida que aumentamos el valor de épsilon todas las secuencias establecidas para épsilon menores son también admisibles. Si todas las secuencias anteriores (para épsilon menores hasta ) son factibles. Así sucesivamente. Por ejemplo, la secuencia óptima para dicho épsilon sería [4,3,1,2]: Máquina 2 4 Máquina 1 4 0 3 3 1 2 1 1 3 4 2 2 5 6 7 8 9 10 11 12 13 14 15 Ilustración 11: Solución óptima para épsilon=11 en el problema Los tiempos de finalización que podemos observar en la Ilustración 11 para todos los trabajos son: Por lo tanto, el flow-time de ambos conjuntos de trabajos es de: 50 4.3 MODELO DE PROGRAMACIÓN LINEAL El siguiente modelo de programación lineal está basado en el modelo Manne, [Tseng et al. ,2004], que propone un modelo de programación lineal entera para el problema general de job shop. En su modelo, Manne asegura que solo se puede cumplir una de las siguientes opciones, que o el trabajo j precede al trabajo k en algún lugar de la secuencia, o el trabajo k precede al trabajo j. (1) Asegura que el tiempo de finalización de cada trabajo en la máquina 1 no ocurra antes de la duración del tiempo de proceso del trabajo en la máquina 1. (2) Asegura que el tiempo de finalización de cada trabajo en la máquina i no sea antes que el tiempo de finalización del trabajo en la máquina i-1 más el tiempo de proceso en la máquina i. 51 (3) y (4) Son restricciones disyuntivas pareadas que aseguran que el trabajo j precede al trabajo k, o bien el trabajo k sigue en la secuencia, pero no ambos. (5) Suma de los tiempos de finalización de los trabajos del conjunto B en la última máquina. 4.4 EXPERIMENTOS En este apartado se va a comprobar la capacidad que puede llegar a soportar el solver Gurobi resolviendo el modelo de programación lineal del apartado 4.3, es decir, el número máximo de trabajos que puede resolver el solver sin llegar a tomarse un tiempo excesivamente alto. Para ello, aparte de hacer uso del programa Gurobi, también se va a hacer uso del programa Matlab: Matlab, según sus creadores (http://www.mathworks.es/products/matlab/), es un lenguaje de alto nivel y entono interactivo para el cálculo numérico, la visualización y la programación. Mediante Matlab es posible analizar datos, desarrollar algoritmos y crear modelos o aplicaciones. El lenguaje, las herramientas y las funciones matemáticas incorporadas permiten explorar diversos enfoques y llegar a una solución antes que con hojas de cálculo o lenguajes de programación tradicionales. Gurobi (http://www.gurobi.com/) es un solver para programación matemática. Resuelve dar solución a la programación lineal (LP), programación cuadrática (QP), programación cuadrática restringida (QCP), programación lineal entera mixta (MILP), programación cuadrática mixta (MIQP) y programación cuadrática entera mixta restringida (MIQCP). Existen diversos lenguajes de programación y modelado que soporta Gurobi, por ejemplo, Java,C++ ,Python y Matlab, entre otros muchos. Para resolver el modelo (http://www.gurobi.com/documentation/5.6/referencemanual/matlab_gurobi), lo primero es construir el modelo con el lenguaje Matlab. Los datos asociados con un modelo de optimización se deben almacenar en un 52 Matlab struct. Los campos de esta estructura contienen las diferentes partes del modelo: model.A: la matriz de restricciones del modelo. Es un campo obligatorio. model.obj: el vector objetivo. Es un campo obligatorio. model.rhs: el vector término independiente de las restricciones (b). Es un campo obligatorio. model.sense: el vector de caracteres que indica el sentido de cada restricción. Puede ser <,= ó >. Es un campo obligatorio. model.modelsense: es el objetivo de optimización. Puede ser ‘min’, minimizar la función o ‘max’, maximizar la función. El valor predeterminado en ausencia de indicación es minimizar la función. Es un campo opcional. model.vtype: es un vector de caracteres que indica los tipos de las variables. Las variables pueden ser de tipo continuas ‘C’, enteras ‘I’, binarias ‘B’, semi-continuas ‘S’ o semi-enteras ‘N’. El valor predeterminado en ausencia de indicación es de tomar variables como continuas. Es un campo opcional. Gurobi devuelve una estructura, con los diversos resultados de la optimización almacenados en sus campos. La siguiente es una lista de campos más habituales disponibles en el resultado devuelto: result.status: el estado de la optimización, lo devuelve como una cadena. Si el resultado es "óptimo”, indica que se ha encontrado una solución óptima al modelo. Entre otros estados posibles, por ejemplo es si el modelo no tiene solución factible. result.objval: el valor objetivo de la solución encontrada. 53 result.runtime: el tiempo en segundos de la resolución de la optimización. result.x: la solución calculada. Este vector contiene un valor para cada columna de A. result.slack: la holgura de cada restricción de la solución. Este vector contiene un valor para cada fila de A. 4.4.1 Batería de problemas y cálculo de épsilon Para comprobar la capacidad del modelo se ha generado una serie de problemas, con diez instancias para cada tamaño de problema. Cada vez que se crea una instancia, mediante la función “bateria” (puede verse en el Anexo 6.1) se crea un problema con el número de trabajos elegido por el usuario para el conjunto de trabajos , y el número de trabajos para el conjunto de trabajos . Este número de trabajos para cada conjunto es el elegido por el usuario cambiando la variable nc en la función “batería”. Se a supuesto que el número de trabajos es igual para . En la función “batería” se generan los ambos conjuntos, por lo tanto tiempos de proceso para cada máquina, siguiendo una distribución aleatoria uniforme entre 1 y 99, teniendo que ser todos los valores generados números enteros. También para cada instancia se calcula el valor de épsilon, en otra función en lenguaje Matlab “calculoepsilon” (puede verse en el Anexo 6.2) que opera de la siguiente manera. Se suman los tiempos de procesos para cada trabajo del conjunto B en todas las máquinas y con estos resultados se emplea la regla SPT (Shortest Processing Time), ordenando los trabajos del conjunto B de menor a mayor suma de los tiempos de procesos en todas las máquinas. Con este orden se calcula el valor de la suma de los tiempos de finalización y éste será el valor de épsilon. La elección de este proceso es para garantizar que no haya ningún valor de épsilon demasiado pequeño que haga el problema infactible, y que no haya ningún valor de épsilon demasiado grande que haga el problema trivial. 54 4.4.2 Resultados En este apartado se ha llevado a cabo la resolución del problema para distintos valores de , incrementando el número de trabajos en los conjuntos, para ver el tiempo que puede llevarse el modelo buscando la solución óptima. Para cada número de trabajos elegido en cada conjunto, se han creado diez instancias y se han calculado para cada instancia, el valor de los tiempos de procesos de todos los trabajos en dos máquinas y el valor de épsilon como se especificó en el apartado 4.4.1. Con todos los datos calculados, y se procede a formular el modelo mediante la forma especificada en el apartado 4.4 y a llamar al solver Gurobi para que busque el óptimo en cada instancia. Esta función es la que aparece descrita en el Anexo 6.3. Gurobi devuelve la solución óptima que buscamos, el valor de la función objetivo en dicha solución óptima (es decir, la suma de los tiempos de finalización de los trabajos del conjunto A) y el tiempo que tarda en encontrar este óptimo. También devuelve los tiempos de finalización de todos los trabajos en todas las máquinas, de los que se sirve la función para calcular la suma de tiempos de finalización del conjunto B (pudiendo comprobarse así que la solución es factible, esta suma es menor o igual que épsilon). A continuación se muestran los resultados obtenidos para Instancias . Tiempo (seg) 1 2 2 164 496 164 0,016 2 2 2 283 679 283 0,031 3 2 2 276 611 276 0 4 2 2 173 489 173 0,031 5 2 2 231 491 231 0 6 2 2 194 492 194 0 7 2 2 158 471 158 0 8 2 2 243 457 243 0 9 2 2 185 426 185 0,016 10 2 2 205 428 205 0,016 Media de tiempos 0,011 55 Tabla 14: Resultados para En la Tabla 14, se muestran los resultados obtenidos cuando el número de trabajos elegido para ambos conjuntos es de dos. El tiempo que tarda Gurobi en proporcionar el óptimo para cada instancia es prácticamente cero, da una solución inmediata para tan pocos trabajos. También se puede observar en cada instancia como la suma de los tiempos de terminación para el conjunto B nunca es mayor que el épsilon calculado, siempre tiene que ser igual o menor. Instancias Tiempo (seg) 1 3 3 520 1076 520 0,0468 2 3 3 639 1292 639 0,0936 3 3 3 276 849 276 0,2028 4 3 3 445 944 443 0,0780 5 3 3 343 914 343 0,0312 6 3 3 313 944 312 0,0936 7 3 3 465 897 465 0,1248 8 3 3 444 778 411 0,1716 9 3 3 423 650 422 0,1872 10 3 3 543 830 540 0,1404 Media de tiempos 0,1170 Tabla 15: Resultados para En la Tabla 15, se muestran los resultados para seis trabajos en total, tres trabajos pertenecen al conjunto A y otros tres pertenecen al conjunto B. Comparando la tabla anterior con ésta se puede ver cómo se ha incrementado el tiempo que tarda Gurobi en proporcionar una solución óptima, llegando de media a tardar en resolver una instancia 0,2 segundos. Este tiempo sigue siendo muy bajo. Se sigue observando el cumplimiento de la restricción (5) del apartado 4.3, la suma de los tiempos de terminación del conjunto B se mantienen por debajo del valor que toma épsilon, en cada instancia. 56 Instancias Tiempo (seg) 1 4 4 565 1225 565 0,2964 2 4 4 269 1000 254 0,1404 3 4 4 738 1474 738 0,4836 4 4 4 764 1227 761 0,2340 5 4 4 763 1721 763 0,2184 6 4 4 596 1522 569 0,2496 7 4 4 603 1486 603 0,0780 8 4 4 688 1346 674 0,2496 9 4 4 909 1495 877 0,3120 10 4 4 983 1156 983 0,3900 Media de tiempos 0,2652 Tabla 16: Resultados para En la Tabla 16, se muestran los resultados al añadir un trabajo más a cada conjunto con respecto al experimento de la Tabla 15. Ahora se procesan cuatro trabajos del conjunto A y cuatro del conjunto B. En total se están procesando ocho trabajos en las dos máquinas. El tiempo en segundos que tarda Gurobi en proporcionar una solución óptima para cada instancia ha aumentado de nuevo, pero sigue siendo un tiempo muy pequeño, décimas de segundos, no es un tiempo todavía muy notable. Y cómo para todos los casos anteriores, puede verse reflejada en la solución el criterio Épsilon Constraint elegido para los objetivos de ambos conjuntos de trabajos. Instancias Tiempo (seg) 1 5 5 652 2271 638 0,2180 2 5 5 844 2236 843 1,0608 3 5 5 700 1826 669 0,3590 4 5 5 838 2169 834 0,4840 5 5 5 777 1592 777 1,0608 6 5 5 1157 2364 1156 0,9050 57 7 5 5 590 2215 590 0,2650 8 5 5 788 1971 788 1,0608 9 5 5 1018 2357 1009 0,4520 10 5 5 1135 1852 1133 0,5620 Media de tiempos 0,6660 Tabla 17: Resultados para En Tabla 17están expuestos los resultados obtenidos cuando el conjunto A tiene para procesar cinco trabajos y el conjunto B otros cinco trabajos. Al aumentar en dos el número total de trabajos pertenecientes a ambos conjuntos con respecto al caso anterior (Tabla 16), el tiempo que tarda Gurobi en resolver cada instancia es mayor pero sigue siendo la resolución muy rápida también. Aquí también se presentan casos en los que la suma de tiempos de terminación de los trabajos del conjunto B son menores que épsilon, como en la instancia 1, y casos en los que esta suma es igual al valor de épsilon, por ejemplo la instancia 7. Instancias Tiempo (seg) 1 6 6 1056 2857 1056 2,8236 2 6 6 904 3132 904 1,6380 3 6 6 1264 2993 1254 1,1076 4 6 6 1038 2862 1037 0,9204 5 6 6 1126 3305 1126 1,0140 6 6 6 1356 2984 1356 1,5600 7 6 6 1170 2958 1164 1,6848 8 6 6 1103 2803 1077 1,0764 9 6 6 1094 3276 1094 1,3728 10 6 6 1431 3451 1425 7,1604 Media de tiempos 2,0358 Tabla 18: Resultados para 58 En la Tabla 18, se vuelve a ver los resultados obtenidos al incrementar en uno los trabajos de ambos conjuntos con respecto al experimento anterior, en el que la se tenían en total diez trabajos. Ahora Gurobi tiene que programar doce trabajos, cumpliendo que la suma de los tiempos de terminación de los trabajos del conjunto B sea menor o igual que épsilon (comparando las columnas cuatro y seis de la tabla, se ve que se cumple) y buscando el óptimo en la suma de los tiempos de terminación de los trabajos del conjunto A (en la columna cinco, están las soluciones óptimas proporcionadas por Gurobi en cada instancia). La media de tiempos que tarda en dar la solución se ha incrementado bastante respecto a los casos anteriores, pero aún así es un tiempo pequeño, dos segundos. Instancias Tiempo (seg) 1 7 7 1734 4334 1718 100,1200 2 7 7 2085 4471 2080 147,6500 3 7 7 1277 3550 1277 15,8810 4 7 7 2080 4536 2075 15,8960 5 7 7 1410 2641 1404 68,9050 6 7 7 1860 4124 1858 38,1890 7 7 7 1487 3321 1469 13,0260 8 7 7 1373 3737 1371 790,1700 9 7 7 1500 2935 1497 13,8220 10 7 7 1430 3819 1429 3,5412 Media de tiempos 120,7200 Tabla 19: Resultados para En la Tabla 19, se muestran los resultados obtenidos en las diez instancias para catorce trabajos, siete pertenecientes al conjunto A y siete pertenecientes al conjunto B. El tiempo medido en segundos, que tarda Gurobi en proporcionar la solución óptima se ha incrementado considerablemente respecto a los casos 59 anteriores. Con este número de trabajos tarda una media de dos minutos, mientras que en los casos anteriores no se llegaba a tardar ni el minuto. Se sigue cumpliendo el criterio Épsilon Constraint. A medida que aumentamos el número de los trabajos en cada conjunto (Tabla 20), el tiempo que necesita Gurobi para buscar una solución óptima es mayor. Aunque éste cambio se percibe más al incrementar a partir de 6 el número de trabajos. Nº trabajos Instancias 1 2 3 4 5 6 7 8 9 10 Media de tiempos 0,0156 0,0312 0 0,0312 0 0 0 0 0,0156 0,0156 0,0109 0,0468 0,0935 0,2028 0,0780 0,0311 0,0936 0,1248 0,1716 0,1872 0,1404 0,1170 0,2964 0,1404 0,4836 0,2340 0,2184 0,2496 0,0779 0,2496 0,3120 0,3900 0,2651 0,2184 1 0,3588 0,4836 1 0,9048 0,2652 1 0,4524 0,5616 0,6661 Tabla 20: Tiempos que tarda Gurobi en resolver el problema 2,8236 1,6380 1,1076 0,9204 1,0140 1,5600 1,6848 1,0764 1,3728 7,1604 2,0358 100,1200 147,6500 15,8810 15,8960 68,9050 38,1890 13,0260 790,1700 13,8220 3,5412 120,7200 para Este incremento de tiempo se puede percibir en la Ilustración 12, donde en el eje abscisas están representados los problemas con los distintos números de trabajos asignados a cada conjunto, y en el eje de ordenadas están representados los tiempos medios que tarda el solver en dar la solución óptima. 60 140 120 100 80 60 40 20 0 0 1 2 3 4 5 6 Ilustración 12: Tiempos medios de resolución para el problema 7 8 para los distintos tamaños Al experimentar con un tamaño , el solver Gurobi tarda en dar una solución óptima para el modelo en cada instancia, más de una hora, por lo tanto se paró de experimentar. Se puede decir que trabajos para resolver el problema es el umbral máximo de con las herramientas Matlab y Gurobi. 61 62 5 CONCLUSIONES La secuenciación o la programación de operaciones es una forma de toma de decisiones que juega un papel crucial en las industrias manufactureras y de servicios. En el entorno competitivo actual la programación efectiva se ha convertido en una necesidad para la supervivencia de las empresas en el mercado. De ahí la necesidad de programar los trabajos para utilizar los recursos de la manera más eficiente [Pinedo, 2012]. Por este papel que juega la secuenciación en la actualidad, se ha contribuido con el estudio de dos problemas. Pero estos dos problemas no han sido dos problemas clásicos de secuenciación con un único conjunto de trabajos. Sino ambos, con dos conjuntos de trabajos que como vimos en el capítulo 3 tienen algunas aplicaciones en la vida real. Cada uno de los problemas ha tratado un caso particular de los distintos entornos de las máquinas que se pueden dar en la programación de operaciones, paralelo y serie. Cada uno de los problemas ha tratado diferentes objetivos, en uno el makespan y en el otro, flow-time, para ambos conjuntos de trabajos. Pero han tenido en común la manera de abordar el problema con varios conjuntos de trabajos, es decir, no sobrepasando el valor del objetivo del conjunto B, una cierta cantidad fijada, épsilon, y minimizando el objetivo del conjunto A. Es por ello que para cada problema se han buscado mediante pequeños ejemplos, los valores máximos y mínimos de este parámetro, examinando cuando el problema se hace factible, o infactible, y buscando entre las soluciones factibles la óptima. A partir de analizar el comportamiento del problema en casos pequeños, se ha modelado cada uno de ellos con programación lineal, una tarea bastante complicada por la búsqueda de la linealidad, que facilita el proceso de resolución. A pesar de esta premisa, el modelo obtenido para el problema de máquinas en paralelo con dos conjuntos de trabajos y objetivo makespan para ambos, es bastante complejo, por lo que no se ha llevado a cabo su programación con solver 63 (Gurobi en este caso). Por ello la programación de dicho modelo mediante algún solver, puede ser una futura línea de investigación. El modelado del segundo problema, minimizar el flow-time de dos conjuntos de trabajos en un flow-shop, al ser más sencillo que el anterior y se ha programado mediante lenguaje Matlab y ha sido resuelto por el solver Gurobi. Se ha probado con distintos números de trabajos para cada conjunto para ver el tiempo que tarda el solver en obtener el óptimo. Se ha obtenido que a partir de ocho trabajos para cada conjunto, el programa tarda un tiempo excesivamente alto en dar la solución. Por ello entre las futuras líneas de investigación de este problema, puede ser resolverlo mediante otro solver, para comprobar si el tiempo computacional puede bajar al aumentar el número de trabajos. Ambos problemas se han abordado desde la búsqueda del óptimo, por lo que otras posibles investigaciones, teniendo en cuenta que ambos problemas son NP, sería abordar el problema desde una búsqueda aproximada de soluciones. 64 65 6 ANEXOS 6.1 BATERIA DE PROBLEMAS function [m,nc,pA,pB]=bateria nc=8; m=2; pA=[]; for i=1:m for b=1:nc pA(i,b)=floor(random('unif',1,99)); end end pB=[]; for i=1:m for b=1:nc pB(i,b)=floor(random('unif',1,99)); end end DATOS=[pA pB]; dlmwrite('datostrabajos.txt',DATOS); 6.2 CÁLCULO ÉPSILON function [epsilon]=calculoepsilon(pB,nB) A=pB(1,:) B=pB(2,:) for k=1:nB-1 for j=1:nB-1 if A(j)+B(j)>A(j+1)+B(j+1) aux=A(j) aux2=B(j) A(j)=A(j+1) B(j)=B(j+1) A(j+1)=aux B(j+1)=aux2 end end end pB=[A;B] datostrabajose=[pB] sumam1=datostrabajose(1,1) sumam2=sumam1+datostrabajose(2,1) epsilon=sumam2 for j=2:nB 66 sumam1=sumam1+datostrabajose(1,j) if sumam1<sumam2 sumam2=sumam2+datostrabajose(2,j) epsilon=sumam2+epsilon else sumam2=sumam1+datostrabajose(2,j) epsilon=sumam2+epsilon end end 6.3 MODELO MATEMÁTICO EN MATLAB function [R1]=restriccion1(m,n) c=zeros(m,n); x=zeros(n,n); totalvariables=(m*n)+(n*n); R1=zeros(n,totalvariables); for j=1:n for i=1 c(i,j)=1; end R1j=[c(:)' x(:)']; R1(j,:)=R1j; c=zeros(m,n); end end function [R2]=restriccion2(m,n) c=zeros(m,n); x=zeros(n,n); totalvariables=(m*n)+(n*n); R2=zeros((n*(m-1)),totalvariables); for i=2:m for j=1:n c(i,j)=1; c(i-1,j)=-1; R2j=[c(:)' x(:)']; R2(j,:)=R2j; c=zeros(m,n); end end end function [R3]=restriccion3(m,n,nA) c=zeros(m,n); 67 x=zeros(n,n); totalvariables=(m*n)+(n*n); R3=zeros(1,totalvariables); for i=m for j=nA+1:n c(i,j)=1; end end R3=[c(:)' x(:)']; end function [R4]=restriccion4(m,n) c=zeros(m,n); x=zeros(n,n); R4=[]; b=1; for i=1:m for j=1:n for k=j+1:n c(i,j)=1; c(i,k)=-1; x(j,k)=1000; R4b=[c(:)' x(:)']; R4(b,:)=R4b; b=b+1; c=zeros(m,n); x=zeros(n,n); end end end function [R5]=restriccion5(m,n) c=zeros(m,n); x=zeros(n,n); R5=[]; b=1; for i=1:m for j=1:n for k=j+1:n c(i,j)=1; c(i,k)=-1; x(j,k)=1000; R5b=[c(:)' x(:)']; R5(b,:)=R5b; b=b+1; c=zeros(m,n); 68 x=zeros(n,n); end end end function [b1]=independiente1(n,datostrabajos) b1=[]; for i=1 for j=1:n b1=[b1 datostrabajos(i,j)]; end end function [b2]=independiente2(datostrabajos,m,n) b2=[]; for i=2:m for j=1:n b2=[b2 datostrabajos(i,j)]; end end function [b3]=independiente3(epsilon) b3=epsilon; end function [b4]=independiente4(datostrabajos,n,m) b4=[]; for i=1:m for j=1:n for k=j+1:n b4=[b4 datostrabajos(i,j)]; end end end function [b5]=independiente5(datostrabajos,n,m) b5=[]; for i=1:m for j=1:n for k=j+1:n b5=[b5 1000-datostrabajos(i,k)]; 69 end end end function [objetivo]=vectorobjetivo(n,m,nA) c=zeros(m,n); x=zeros(n,n); for i=m for j=1:nA c(i,j)=1; end end objetivo=[c(:)' x(:)']; end RESULTADO=[]; for instancia=1:10 [m,nc,pA,pB]=bateria; load datostrabajos.txt; nA=nc; nB=nc; n=nA+nB; [epsilon]=calculoepsilon(pB,nB); [R1]=restriccion1(m,n); [R2]=restriccion2(m,n); [R3]=restriccion3(m,n,nA); [R4]=restriccion4(m,n); [R5]=restriccion5(m,n); A=[]; for j=1:n A=[A;R1(j,:)]; end for j=1:(n*(m-1)) A=[A;R2(j,:)]; end A=[A;R3]; [fil,col]=size(R4); for j=1:fil A=[A;R4(j,:)]; end for j=1:fil A=[A;R5(j,:)]; end [b1]=independiente1(n,datostrabajos); [b2]=independiente2(datostrabajos,m,n); 70 [b3]=independiente3(epsilon); [b4]=independiente4(datostrabajos,n,m); [b5]=independiente5(datostrabajos,n,m); B=[b1 b2 b3 b4 b5]; [objetivo]=vectorobjetivo(n,m,nA); model.A=sparse(A); model.obj=objetivo; model.rhs=B; for j=1:n model.sense(j)='>'; end for j=1:(n*(m-1)) model.sense(j+n)='>'; end model.sense(n+(n*(m-1))+1)='<'; for j=1:fil model.sense(j+n+(n*(m-1))+1)='>'; end [fil2,col2]=size(R5); for j=1:fil2 model.sense(j+n+(n*(m-1))+1+fil)='<'; end for z=1:(n*m) model.vtype(z)='C'; end for p=((n*m)+1):((n*m)+(n*n)) model.vtype(p)='B'; end model.modelsense='Min'; result=gurobi(model) disp(result.objval); disp(result.x); OBJETIVO=result.objval TIEMPO=result.runtime resultad=result.x'; totalB=0 for j=(2+(nA*2)):2:(n*2) totalB=totalB+resultad(j) end RESUL=[instancia nA nB epsilon OBJETIVO totalB TIEMPO]; RESULTADO(instancia,:)=RESUL; end dlmwrite('resultados.txt',RESULTADO); 71 72 BIBLIOGRAFIA [Balasubramanian et al., 2009] Balasubramanian H., Fowler J., Keha A. and Pfund M. (2009). Scheduling interfering job sets on parallel machines. European Journal of Operational Research 199 (2009), 55–67. [Pinedo, 2012] Pinedo, M. L. (2012). Scheduling: Theory, Algorithms, and Systems. [Lee et al., 2005] Lee W., Wu C. and Chen P. (2005). A simulated annealing approach to makespan minimization on identical parallel machines. [Agnetis et al., 2004] Agnetis A., Mirchandani P.B., Pacciarelli D., Pacifici A., (2003). Scheduling Problems with Two Competing Agents. Scheduling Problems Operations Research 52(2), pp. 229–242. [Tseng et al. ,2004] Tseng F.T., Stafford Jr. E.F, Gupta J. An empirical analysis of integer programming formulations for the permutation fowshop. Omega 32 (2004) 285 – 293. [J.M. Framinan et al. ,2005] Framinan J.M., Leisten R., Ruiz-Usano R., (2005). Comparison of heuristics for flowtime minimisation in permutation flowshops. Computers & Operations Research 32 (2005) 1237–1254. [Zhao et al., 2012] Zhao K., Lu X., (2012). Approximation schemes for two-agent scheduling on parallel machine. Theoretical Computer Science (2012), doi: 10.1016/j.tcs.2012.11.002. [Framinan et al., 2003] Framinan J.M., Listen R., (2003). An effcient constructive heuristic for flowtime minimisation in permutation flow shops. Omega 31 (2003) 311 – 317. [Cheng et al., 1990] Cheng T.C.E., Sin C.C.S., (1990). A state of the art review of parallel machine scheduling research. European Journal of Operational Research 47 (1990) 271-292. 73 [Cortés et al., 2010] Cortés P., Onieva L., (2010). Ingeniería de organización. Modelos y aplicaciones. [R.L. Graham, 1977] R. L. Graham, E. L. Lawler, J. K. L. A. H. G. R. K. (1977). Optimization and approximation in deterministic sequencing and scheduling: A survey. [Pérez-González et al., 2014] Pérez-Gonzalez P., Framinan J.M., (2014). A common framework and taxonomy for multicriteria scheduling problems with interfering and competing jobs: Multi-agent scheduling problems. European Journal of Operational Research 235 (2014) 1–16. [Canca, 2013] Canca O. J. D., (2013) Construcción de modelos de programación lineal. “Apuntes de Técnicas de Optimización”, GITI. [Huson, 2014] Huson C., (2014) Modelo de Programación Lineal y Metaheurística aplicada a la resolución de un problema de secuenciación. 74