Vous êtes sur la page 1sur 111

Trabajo Fin de Grado

Grado en Ingeniería de Organización Industrial

Problema de Secuenciación en Máquinas Paralelas


no Relacionadas y Restricción de Elegibilidad

Autor: Fernando Lozano García


Tutor: Paz Pérez González

Equation Chapter 1 Section 1

Dep. Organización Industrial y Gestión de Empresas I


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2016

31
Trabajo Fin de Grado
Grado Ingeniería de Organización Industrial

Problema de Secuenciación en Máquinas Paralelas


no Relacionadas y Restricción de Elegibilidad

Autor:
Fernando Lozano García

Tutor:
Paz Pérez González

Dep. de Organización Industrial y Gestión de Empresas I


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2016

1
Índice
Índice 3
Índice de Tablas 5
Índice de Figuras 7
1 Introducción 9
1.1. Objetivos 9
1.2. Estructura del documento 10
2 Programación de la Producción 13
2.1. Introducción a la programación de la producción 13
2.2. Conceptos básicos 16
2.3. Modelos de programación de la producción 18
2.4. Métodos de programación de la producción 23
3 Problema de Máquinas Paralelas no Relacionadas 25
3.1. Problemas en máquinas paralelas 25
3.2. Descripción del problema 27
3.3. Modelo de Programación Lineal 29
3.4. Ejemplo numérico 29
4 Resolución del Problema de Forma Exacta 33
4.1. Introducción 33
4.2. Matlab 33
4.3. Gurobi 34
4.4. Batería de Problemas 38
4.5. Resultados del MILP 40
5 Resolución del Problema de Forma Aproximada 55
5.1. Introducción 55
5.2. Presentación de la heurística 57
5.3. Ejemplo numérico 58
5.4. Resultados 63
6 Conclusiones 77
Bibliografía 79
Anexos 81
Anexo 1: Batería de problemas y modelo matemático en Matlab 81
Anexo 2: Programación de heurística en C 85
Anexo 3: Resultados del modelo 89
Anexo 4: Resultados de la Heurística 101

3
4
Índice de Tablas
Tabla 1. Datos del ejemplo numérico del modelo 30
Tabla 2. Datos de Tiempos medios y Desviación Típica de BP para el modelo de PL. 42
Tabla 3. Datos de Tiempos medios y Desviación Típica de BG para el modelo de PL 48
Tabla 4. Datos de Tiempos medios del modelo de PL y Heurística y PDR Medio para BP 64
Tabla 5. Datos de Tiempos medios del modelo de PL y Heurística y PDR Medio para BG 70
Tabla 6. Resultados del Modelo. 2 Máquinas 90
Tabla 7. Resultados del Modelo. 4 Máquinas 91
Tabla 8. Resultados del Modelo. 6 Máquinas 93
Tabla 9. Resultados del Modelo. 8 Máquinas 94
Tabla 10. Resultados del Modelo. 10 Máquinas 96
Tabla 11. Resultados del Modelo. 20 Máquinas 97
Tabla 12. Resultados del Modelo. 30 Máquinas 97
Tabla 13. Resultados del Modelo. 40 Máquinas 98
Tabla 14. Resultados del Modelo. 50 Máquinas 98
Tabla 15. Resultados del Modelo. 100 Máquinas 99
Tabla 16. Resultados del Modelo. 200 Máquinas 99
Tabla 17. Resultados de la Heurística. Batería Pequeña 107
Tabla 18. Resultados de la Heurística. Batería Grande 111

5
6
Índice de Figuras
Figura 1. Máquina única (Pérez González, 2014) 19
Figura 2. Máquinas paralelas idénticas (Pérez González, 2014) 19
Figura 3. Flow Shop (Pérez González, 2014) 20
Figura 4. Job Shop (Pérez González, 2014) 20
Figura 5. Open Shop (Pérez González, 2014) 20
Figura 6. Hybrids Flowshop (Pérez González, 2014) 21
Figura 7. Modelo Programación Lineal de Máquinas Paralelas no Relacionadas (Pinedo, 2012) 29
Figura 8. Resolución en Excel del ejemplo numérico del modelo 30
Figura 9. Representación de solución óptima del ejemplo numérico del modelo 31
Figura 10. Esquema de Gurobi (http://www.gurobi.com) 35
Figura 11. Tiempos medios para los valores de n para el modelo de PL. m = 2 43
Figura 12. Tiempos medios para los valores de n para el modelo de PL. m = 4 43
Figura 13. Tiempos medios para los valores de n para el modelo de PL. m = 6 44
Figura 14. Tiempos medios para los valores de n para el modelo de PL. m = 8 44
Figura 15. Tiempos medios para los valores de n para el modelo de PL. m = 10 45
Figura 16. Comparación por máquinas de Tiempos de ejecución medios en BP para el modelo de PL 45
Figura 17. Comparación por máquinas de Desviación estándar medias en BP para el modelo de PL 46
Figura 18. Tiempo de cómputo de Gurobi para BP. Comparación de tiempos medios 46
Figura 19. Tiempos medios para los valores de n para el modelo de PL. m = 20 49
Figura 20. Tiempos medios para los valores de n para el modelo de PL. m = 30 50
Figura 21. Tiempos medios para los valores de n para el modelo de PL. m = 40 50
Figura 22. Tiempos medios para los valores de n para el modelo de PL. m = 50 51
Figura 23. Tiempos medios para los valores de n para el modelo de PL. m = 100 51
Figura 24. Tiempos medios para los valores de n para el modelo de PL. m = 200 52
Figura 25. Comparación por máquinas de Tiempos de ejecución medios en BG para el modelo de PL 52
Figura 26. Tiempo de cómputo de Gurobi para BG. Comparación de tiempos medios 53
Figura 27. Diagrama de flujo del algoritmo 58
Figura 28. Paso 1. Ejemplo numérico de la heurística 59
Figura 29. Paso 2. Ejemplo numérico de la heurística 60
Figura 30. Paso 3. Ejemplo numérico de la heurística 60
Figura 31. Paso 4. Ejemplo numérico de la heurística 61
Figura 32. Paso 5. Ejemplo numérico de la heurística 62
Figura 33. PDR medio para los valores de n. m = 2 65
Figura 34. PDR medio para los valores de n. m = 4 65
Figura 35. PDR medio para los valores de n. m = 6 66
Figura 36. PDR medio para los valores de n. m = 8 66

7
Figura 37. PDR medio para los valores de n. m = 10 67
Figura 38. Resumen de PDR medios para los valores de m de la BP 67
Figura 39. PDR medio para BP de las distintas máquinas 68
Figura 40. Diferencia de tiempos de cómputo entre modelo y heurística en BP 68
Figura 41. PDR medio para los valores de n. m = 20 71
Figura 42. PDR medio para los valores de n. m = 30 72
Figura 43. PDR medio para los valores de n. m = 40 72
Figura 44. PDR medio para los valores de n. m = 50 73
Figura 45. PDR medio para los valores de n. m = 100 73
Figura 46. PDR medio para los valores de n. m = 200 74
Figura 47. Resumen de PDR medios para los valores de m de la BG 74
Figura 48. PDR medio para BG de las distintas máquinas 75
Figura 49. Diferencia de tiempos de cómputo entre modelo y heurística en BG 76

8
1 INTRODUCCIÓN
1.1. Objetivos
El objetivo principal del presente Trabajo Fin de Grado es el de estudiar y resolver un problema de
programación de la producción. Para ello se asignarán recursos a los distintos trabajos cuyos tiempos
de proceso vienen establecidos, con la finalidad de optimizar un objetivo. La programación de la
producción no es una tarea fácil en la práctica ya que cada empresa o entorno en que se quiera aplicar
es diferente y cada una tiene sus propias restricciones y recursos. La incorporación de esta
programación en un entorno tiene una gran importancia, a pesar de ser muy complicada de implantar,
ya que con ello se consigue optimizar la producción, lo que supone un aumento de beneficios
optimizando el rendimiento de la planta. Hoy en día es primordial cumplir con los plazos de entrega,
siendo necesario para ello cumplir a su vez con los plazos de producción. Es por ello que la
programación de la producción se convierte en una herramienta esencial.

Los distintos recursos que pueden aparecer son desde máquinas en una planta de producción,
operarios con herramientas, cintas transportadoras… Los trabajos pueden ser operaciones a realizar
en un determinado producto durante su proceso productivo y etapas de un proyecto, entre otros. Los
objetivos a perseguir en una programación de la producción pueden ser muy diversos como, por
ejemplo, minimizar la tardanza total, minimizar el makespan, minimizar los tiempos de finalización
de los trabajos o minimizar los retrasos. Otra importante característica a tener en cuenta en un
problema a la hora de programar su producción es el entorno en el que se realizan los trabajos, es
decir, la distribución de las máquinas. Los distintos entornos se describen en el capítulo 2 del
presente Trabajo Fin de Grado.

Debido a las importantes ventajas que aporta la programación de la producción, ésta se utiliza en
empresas y procesos de sectores muy diferentes. Es el caso de empresas de fabricación donde se
persigue disminuir todo lo posible los retrasos y tiempos muertos de las máquinas, empresas de
servicios en las que la prioridad es disminuir la mano de obra o empresas de logística donde el
objetivo principal es el de reducir los costes de transporte.

Mediante este trabajo se pretende comparar los resultados obtenidos por un modelo de programación
lineal y una heurística para un problema de máquinas paralelas no relacionadas cuyo objetivo es el de
minimizar el tiempo de finalización de todos los trabajos (makespan). El problema en cuestión tiene
una restricción muy común en el día a día de las empresas pero de la cual no se dispone mucha
información y no es fácil encontrar publicaciones donde se tenga en consideración dicha restricción.
La restricción en cuestión recibe el nombre de elegibilidad (elegibility) y consiste en la imposibilidad
9
de que una máquina pueda realizar un determinado trabajo. En capítulos posteriores se describe de
manera más detallada esta restricción y cómo se ha incluido en el problema.

1.2. Estructura del documento


Este Trabajo Fin de Grado se compone de seis capítulos y unos anexos en los cuales se ha estudiado
dicho problema y se han llevado a cabo los análisis y pruebas necesarias para poder comprender su
mecánica.

En el capítulo 2 se describe lo que es la programación de la producción, empezando por una breve


introducción histórica y teórica y continuando por sus características, objetivos y demás elementos
relacionados con la programación.

Tras esta introducción teórica, el capítulo 3 comienza con un análisis en mayor profundidad de los
problemas de programación en máquinas paralelas ya que el problema a tratar en este Trabajo Fin de
Grado consiste en un problema de dichas características. Tras esto, se explica el problema objeto de
estudio de este Trabajo Fin de Grado, donde se realiza una descripción del problema a tratar, sus
restricciones, función objetivo y todas aquellas consideraciones a tener en cuenta para poder resolver
dicho problema, además de mostrar el modelo de programación lineal a resolver. Tras esta
introducción al problema, en este capítulo se lleva a cabo la resolución de un ejemplo sencillo
mediante la herramienta Solver de Microsoft Excel con el fin de entender el problema a tratar.

En el capítulo 4 se analizarán los programas necesarios que se han utilizado en este Trabajo para
poder realizar las pruebas necesarias y obtener los resultados oportunos del problema en cuestión. En
este caso se ha utilizado el lenguaje de programación Matlab para realizar la batería de problemas y
generar el modelo de programación lineal a resolver. Este modelo será resuelto posteriormente por
Gurobi, proporcionando el makespan del problema y el tiempo de cómputo necesario para obtener la
solución de cada problema. Tras esto se explica cómo se ha generado la batería de problemas, sus
características y demás consideraciones que se han tenido en cuenta a la hora de realizarla. Una vez
presentados los programas necesarios para resolver de forma óptima el problema y las características
de las instancias de los problemas que se van a resolver, el capítulo finaliza con la presentación de los
resultados de los distintos problemas y análisis de los mismos.

Una vez obtenidos el óptimo de los problemas, en el capítulo 5 se va a realizar un análisis de los
mismos problemas mediante su resolución por una heurística. Para ello en este capítulo se comenzará
por una introducción teórica a las heurísticas y se continuará con una presentación a la heurística
seleccionada para llevar a cabo la resolución de los problemas. Tras esto se llevará a cabo la
resolución de un problema pequeño de manera manual (sin utilizar software) para comprender el

10
funcionamiento de la heurística. Por último, en este capítulo se resolverá mediante el lenguaje de
programación C los mismos problemas resueltos por el modelo de programación lineal y se
compararán los resultados obtenidos por esta heurística y los obtenidos por el modelo de
programación lineal mediante el cálculo del Porcentaje de Desviación Relativa (PDR).

En el capítulo 6 se recogen las conclusiones que se pueden extraer de este Trabajo Fin de Grado y de
los resultados obtenidos a lo largo de dicho trabajo

Por último, este trabajo se compone también de cuatro anexos. El Anexo 1 recoge el código en
Matlab de la batería de problemas y del modelo de programación lineal necesarios para que Gurobi
realice la resolución de los problemas. En el Anexo 2 se puede apreciar el código en C de la
heurística utilizada para resolver de manera aproximada los problemas. El Anexo 3 está compuesto
por los resultados obtenidos por Gurobi una vez resuelto el modelo de programación lineal. Por
último, en el Anexo 4, se recogen los resultados obtenidos de la heurística y la comparación con las
soluciones proporcionadas por Gurobi.

11
12
2 PROGRAMACIÓN DE LA PRODUCCIÓN
2.1. Introducción a la programación de la producción
La programación de la producción empezó a considerarse a principios del siglo XX con los trabajos
realizados por Henry Gantt (Gantt, 1910 y Gantt, 1919). Hasta que no transcurrieron varios años no
aparecieron las primeras publicaciones en la literatura de la investigación operativa, en la década de
1950 con los artículos de Smith (1956), Johnson (1954) y Jackson (1956) (Juan Velasco Sánchez,
2013). Durante la década de 1980 se siguieron diferentes líneas de investigación tanto a nivel teórico
como práctico, cobrando un gran interés la programación estocástica (Pinedo, 2008). En esta época
se desarrollaron programas para poder utilizar en la práctica, todo esto fue posible gracias a la
difusión de los ordenadores en el ámbito empresarial (Juan Velasco Sánchez, 2013).

La planificación y el control de la producción tienen una serie de funciones como las que se muestran
a continuación (Juan Velasco Sánchez, 2013):

- Predecir la demanda en relación al tipo de producto, cantidad y momento en el que se


presentará dicha demanda.

- Planificar la producción, asignar los recursos de que dispone una empresa a las necesidades
de producción, de manera que se logre satisfacer la predicción de la demanda.

- Controlar y gestionar el stock, estableciendo órdenes de producción y compras en los niveles


de materias primas, partes compradas y productos terminados.

- Programación de la producción. Consiste en asignar actividades a puestos de trabajos


específicos, obteniendo unos tiempos de iniciación y finalización de cada uno de los trabajos
en los distintos puestos.

- Lanzamiento y control de la producción. Implica un aprovisionamiento de herramientas,


materiales y la comunicación de las instrucciones a la planta. Este control realimenta a las
funciones anteriores para su posterior corrección.

Existen dos tipos de producción dentro de una empresa, que depende del conocimiento de la
demanda que se tenga en el momento, estos dos tipos son (Companys Pascual, 1989):

- Fabricación para almacenar. Tiene gran importancia la predicción de la demanda, la


planificación de la producción y el control y gestión del stock. Por contrario, la programación
de la producción y el lanzamiento y control tienen una importancia media.

- Fabricación bajo pedido. Tiene una importancia moderada las funciones de predicción de la

13
demanda, planificación de la producción y el control y gestión del stock, mientras que la
programación de la producción y el lanzamiento y control tienen una importancia alta.

Bajo este contexto, el presente Trabajo Fin de Grado se va a centrar en la programación de la


producción. La finalidad de la programación de la producción es establecer un tiempo de inicio y fin
de cada trabajo en cada una de las máquinas o estaciones necesarias para obtener el producto final.
Para poder obtener dichos tiempos de inicio y finalización es necesario que previamente cada trabajo
haya sido cargado (asignar su realización en una máquina en concreto) y puesto en secuencia, es
decir, establecer el orden de ejecución de cada trabajo en cada máquina.

Otro concepto a tener en cuenta es el de período de programación, el cuál es el período durante el


cual se considera que un programa se mantiene fijo. Este período debe procurarse que sea lo más
corto posible. El rango de variación del período de programación puede ser de entre unas pocas horas
hasta una semana, tiempo durante el cual únicamente se aceptan órdenes de producción de
emergencia. (Companys Pascual, 1989) El período ideal de programación sería de cero (Pinedo,
2009), es decir, las órdenes se reciben y asignan continuamente, de igual modo, el trabajo en proceso
y la programación se revisarán de forma continua como resultado de los continuos cambios que
ocurren dentro de la planta.

Existen diferentes sistemas de fabricación cuya naturaleza y complejidad de programación varían de


forma sustancial. Estos sistemas de fabricación varían desde la fabricación continua hasta el trabajo
de taller, pasando por la producción intermitente. A continuación se definirán dichos sistemas
(Companys Pascual, 1989):

- Fabricación continua: su programación es sencilla ya que la capacidad de producción es fija y


se determina durante el diseño de la línea de producción. Algunos ejemplos de este sistema
de fabricación los encontramos en las fábricas cementeras, siderurgia, automoción, etc.

- Trabajo de taller: es el sistema opuesto al de fabricación continua, donde los trabajos se


realizan bajo pedido. Resulta muy difícil conseguir una predicción de la demanda, lo que
conlleva a una complicación en la planificación de la producción. Esto puede hacer que
máquinas que están desocupadas pasen a estar sobrecargadas. Debido a esta complejidad a la
hora de predecir la demanda, es necesario que en la empresa haya todo tipo de materias
primas, ya que no se sabe si serán necesarias próximamente o no. De igual modo se debe
contar con personal suficiente para cubrir posibles picos de demanda y que sean capaces de
efectuar distintos trabajos. La programación en este tipo de empresas tiene la función de
asignar los distintos recursos de que se dispone en el taller a los diferentes trabajos que
llegan. Los pedidos casi siempre se enviarán con retraso ya que resulta muy difícil conseguir

14
una alta utilización de la maquinaria y del personal. Algunos ejemplos de este tipo de sistema
de fabricación es la fabricación de matrices, moldes…

- Producción intermitente: es un tipo de sistema de fabricación que se encuentra entre la


fabricación continua y el trabajo de taller. Es posible que un sistema de este tipo fabrique
únicamente bajo pedido, aunque de forma frecuente se atienden a los pedidos por medio de
los stocks, ya que estas empresas poseen un programa de las necesidades de los clientes a lo
largo de todos los meses del año y esto facilita la planificación de la producción. En el caso
de producirse una variación en la demanda del cliente, estos programas pueden ser
modificados semanalmente. La secuencia de los trabajos en las distintas máquinas para la
fabricación de cada producto suele ser fija. En el caso en que se necesite fabricar grandes
cantidades de una misma pieza se utiliza una distribución en planta por producto,
denominada distribución en línea. También se diseña una línea de fabricación en el caso en
que formando familias de piezas se llegue a cantidades importantes. Un ejemplo de este tipo
de sistemas de fabricación es la industria auxiliar del automóvil, formada por empresas cuya
misión es la de suministrar piezas a la empresa que se encarga del ensamblaje del automóvil.

Con todo lo visto anteriormente podemos observar que cada empresa es distinta de las otras, lo cual
conlleva a que cada sistema y su complejidad varían de una empresa a otra. Otro aspecto importante
a tener en cuenta son las decisiones que deben tomarse a la hora de programar la producción, estas
decisiones deben tener las siguientes características (Framinan et al., 2014):

- Exhaustivas y con un gran nivel de detalle: el volumen de datos a manejar debe ser muy
grande debido a la necesidad de establecer el tiempo de inicio de cada trabajo en cada recurso
de la empresa.

- Se deben tomar en intervalos cortos de tiempo, a ser posible en tiempo real:

• Horizonte rodante (Rolling horizon): consiste en la obtención de un programa para un


número determinado de intervalos de tiempo, del que solo se ejecuta el primer intervalo.
Con esto se consigue incorporar los cambios y variaciones ocurridas en cada período.

• Reprogramación (Rescheduling): se trata de modificar el programa debido a la


incertidumbre del entorno de la producción.

- Tiene una gran influencia en los resultados finales.

- Debido a que cada empresa es distinta de las otras, las condiciones de la decisión, las
restricciones y los objetivos, depende de cada empresa.

- Decisiones estructuradas: en muchas ocasiones, las decisiones relacionadas con la

15
programación pueden ser formalizadas mediante técnicas cuantitativas:

• Modelos matemáticos: posibilitan la definición del conjunto de restricciones y objetivos


de las decisiones. Estos modelos matemáticos pueden resolverse de forma óptima o
aproximada mediante distintas técnicas.

• Los datos que son necesarios para tomar decisiones, datos tales como tiempos de
proceso, fechas, etc., se obtienen con cierta facilidad.

La programación de la producción presenta una serie de problemas. Según (Juan Velasco Sánchez,
2013), los problemas presentes en la programación de la producción pueden ser: la competencia
entre los trabajos por los recursos necesarios para ser realizados, lo que origina colas en las entradas
de las distintas máquinas. Existe la posibilidad de que las máquinas y herramientas sufran averías,
además de otros factores que pueden llevar a retrasos en el programa previsto inicialmente como es
el absentismo laboral, la variación de rendimientos de cada uno de los trabajadores o materiales
defectuosos o que no cumplan con las especificaciones que se requieran. Otro problema que puede
aparecer durante la realización de los trabajos es el de la cancelación, reducción o aumento de las
órdenes de fabricación, además de los retrasos en la llegada de las materias primas, o un aumento o
disminución de la demanda.

2.2. Conceptos básicos


Entre los objetivos más importantes que persigue la programación de la producción destaca
(Companys Pascual, 1989) el cumplimiento de los plazos de entrega, evitar tiempos ociosos en las
máquinas y trabajadores, evitar quedarse sin stock, reducir el stock en curso de fabricación, y evitar
las horas extras. Estos objetivos deben lograrse siempre de tal manera que se minimicen los costes
asociados con el incumplimiento de estos objetivos.

La programación de la producción se compone de las siguientes fases (Juan Velasco Sánchez, 2013):

- Carga de máquinas: las órdenes de producción pasan a ser operaciones a llevar a cabo. Estas
operaciones son asignadas a las distintas máquinas. En el caso de ser posible asignaciones
alternativas, se debe tener en cuenta la carga de trabajo en las máquinas alternativas. En esta
fase se determinan las necesidades de máquinas, materiales y mano de obra.

- Evaluar la carga de trabajo: en esta fase se lleva a cabo la comparación de las necesidades de
horas de máquina y de mano de obra con las capacidades correspondientes. En esta fase se
debe tener en cuenta si es necesario establecer turnos adicionales, horas extras, contratar
mano de obra temporal, etc., para lograr equilibrar las necesidades con las capacidades.

16
- Poner en secuencia los trabajos en cada máquina: se trata de ordenar las operaciones
asignadas a cada una de las máquinas cumpliendo los objetivos por orden de prioridad.

- Desarrollo de un programa detallado: determinar los tiempos de inicio y fin de cada uno de
los trabajos en cada máquina, en esta fase, el programa está listo para ser lanzado. A través de
un sistema de recolección de datos y de un sistema de control de progreso se consigue
información actualizada y exacta.

(Juan Velasco Sánchez, 2013) define la máquina como un recurso productivo con una cierta
capacidad para transformar o transportar un material. Este término puede representar distintos
objetos físicos, tales como operarios, herramientas, máquinas, combinación de operarios,
herramientas y máquinas, la planta de producción al completo, sistema de transporte de
material…Otro concepto a tener en cuenta es el trabajo que se define como producto objeto de una
operación en alguna de las máquinas. De estas dos definiciones anteriores surge la de tiempo de
proceso como la duración en el tiempo de una operación y transformación de un trabajo en una
máquina determinada.

Un programa (Schedule) consiste en la asignación en una escala temporal concreta de las máquinas
para la fabricación de un conjunto de trabajos, es quién determina los tiempos de inicio y fin de cada
operación a realizar en cada uno de los recursos. Debido a que en la mayoría de los casos el tiempo
de proceso es conocido, basta con obtener el tiempo de inicio o de fin. Esto no siempre se cumple ya
que en muchos casos existen operaciones interrumpibles e implica establecer dichos instantes de
interrupción y de continuación de las operaciones. Los programas pueden ser de dos tipos (Framiñan
et al., 2014):

- Un programa admisible (Feasible Schedule) es aquel que cumple con todas las restricciones y
características del proceso productivo. Lograr este programa es el principal objetivo de toda
programación de la producción. Puede darse el caso de la existencia de varios programas
admisibles, en dicho caso se debe establecer criterios adicionales para evaluar cada uno de
estos programas y poder seleccionar el más adecuado para ser ejecutado en la planta. Este
procedimiento por el que obtenemos un programa se denomina algoritmo. Dentro de este
tipo de programas se encuentra el programa óptimo (Optimal Schedule), que se define como
aquel programa admisible que resulta ser mejor que cualquier otro programa admisible. Este
programa óptimo se obtiene mediante un algoritmo denominado algoritmo óptimo.

- El otro tipo de programas es el no admisible, este tipo de programas no cuenta con los
requisitos necesarios para poder aplicarlo al problema en cuestión, no cumple con las
restricciones y características del proceso productivo.

17
En los problemas NP-Hard, el objetivo no es buscar la solución óptima debido a su gran
complejidad, sino buscar soluciones buenas próximas a la óptima, con lo que los algoritmos
utilizados para este tipo de problemas son los algoritmos de aproximación que nos devuelve una
solución cercana a la óptima. Otra manera de obtener una solución próxima a la óptima es resolver el
problema mediante heurísticas aunque es posible no obtener una solución de calidad ni un tiempo de
cálculo aceptable (Luis Fanjul Peyró, 2010).

2.3. Modelos de programación de la producción


Un modelo de programación de la producción consiste en una abstracción de un problema concreto
donde es necesaria una toma de decisión en el ámbito de la programación de la producción
(Framiñan, Leisten, & Ruiz García, 2014). Para poder realizar el modelo son necesarios una serie de
datos como los que se muestran a continuación:

- Conjuntos de trabajos y de máquinas.

- La operación de un trabajo en una máquina.

- Ruta de proceso. Ruta predefinida que debe seguir un trabajo a lo largo de las distintas
máquinas. Es el orden que debe seguir el trabajo en las máquinas.

- Tiempo de proceso. Tiempo en que una máquina está ocupada en procesar un trabajo en
concreto. Es el tiempo que tarda una máquina en realizar un trabajo.

- Fecha de llegada. Instante en que un trabajo puede empezar a ser procesado por una máquina.

- Fecha de entrega. Instante de tiempo en el que un trabajo debe estar terminado. Esta fecha de
entrega puede no cumplirse con la consiguiente penalización o coste adicional.

- Fecha de entrega obligatoria. Fecha de entrega que no puede ser retrasada bajo ningún
concepto.

- Peso. Prioridad que tiene un trabajo en ser realizado en una máquina determinada.

- Disponibilidad de las máquinas. Instante de tiempo a partir del cual una máquina está
disponible para ser usada.

Un problema de programación de la producción se identifica por la letra de los tres campos α, β y γ.


Cada una de estas letras corresponde a una característica del modelo. El significado de estas letras es
el siguiente (Graham, 1969):

- α: relacionada con la característica de la máquina. Es el tipo de entorno. Dependiendo del


valor de α, el entorno a estudiar es el siguiente:

18
• α = 1: una única máquina. Cada trabajo debe procesarse en una máquina en una sola
operación. Los trabajos no siguen una ruta concreta.

Entrada de Máquina 1 Salida de Trabajos


Trabajos

Figura 1. Máquina única (Pérez González, 2014)

• α = P: máquinas paralelas idénticas. Cada trabajo debe procesarse en una máquina en una
sola operación. Los trabajos no siguen una ruta concreta. El tiempo de proceso de cada
trabajo en cada una de las máquinas no depende de la máquina donde se procese.

Máquina 1

Entrada de
Máquina 2 Salida de Trabajos
Trabajos

Máquina 3

Figura 2. Máquinas paralelas idénticas (Pérez González, 2014)

• α = Q: máquinas paralelas uniformes. Cada trabajo debe procesarse en una máquina en


una sola operación. Los trabajos no siguen una ruta concreta. Cada máquina tiene
diferentes velocidades de procesado, siendo la misma para todos los trabajos, es decir,
una máquina más rápida procesa los trabajos más rápido que otra más lenta.

• α = R: máquinas paralelas no relacionadas. Cada trabajo debe procesarse en una máquina


en una sola operación. Los trabajos no siguen una ruta concreta. Todas las máquinas son
diferentes. El tiempo en que se procesa un trabajo depende de la máquina en que se
procese.

• α = F: taller de flujo regular (Flow Shop). Las máquinas están dispuesta en serie, cada
una realiza un proceso diferente, siendo necesario que cada trabajo sea procesado en
todas las máquinas. La ruta de los trabajos es la misma para todos ellos.

19
Existe un caso particular denominado taller de flujo regular de permutación (Permutation
Flow Shop) en el que la secuencia para todas las máquinas es la misma.

Máquina 1 Máquina 2 ..... Máquina m

Entrada de Salida de
Trabajos Trabajos

Figura 3. Flow Shop (Pérez González, 2014)

• α = J: taller (Job Shop). Las máquinas están dispuesta en serie, cada una realiza un
proceso diferente, siendo necesario que cada trabajo sea procesado en todas las máquinas.
La ruta de los trabajos es distinta para cada uno de ellos.

Entrada de Entrada de Entrada de


Trabajos Trabajos Trabajos

Máquina 1 Máquina 2 ..... Máquina m

Salida de Salida de Salida de


Trabajos Trabajos Trabajos

Figura 4. Job Shop (Pérez González, 2014)

• α = O: taller abierto (Open Shop). Las máquinas están dispuesta en serie, cada una realiza
un proceso diferente, siendo necesario que cada trabajo sea procesado en todas las
máquinas. La ruta de los trabajos no está determinada, siendo posible cualquier
combinación.

Máquina 1 Máquina 2 ..... Máquina m

Figura 5. Open Shop (Pérez González, 2014)

20
• Existe un último caso denominado entorno híbrido en el que se unen máquinas paralelas
con un taller. El taller está compuesto por estados en vez de máquinas y cada uno de
estos estados está formado por una o varias máquinas paralelas.

Estación 1 Estación 2 Estación m

Máquina 1 Máquina 1 Máquina 1

Entrada de Salida de
Trabajos Trabajos

Máquina 2 Máquina 2 Máquina 2

Máquina m1 Máquina m2 Máquina mm

Figura 6. Hybrids Flowshop (Pérez González, 2014)

- β: son las restricciones a las que está sujeto el modelo de programación de la producción.
Algunas de las restricciones más destacadas que pueden encontrarse en dichos modelos son:
precedencia de trabajos, tiempos de setup, elección de máquinas, disponibilidad de las
máquinas, interrupción de los trabajos, fecha de llegada y de entrega, almacenaje o buffer…
(Framinan et al., 2014).

- γ: es la función objetivo o criterio. Las funciones objetivos pueden clasificarse según el coste,
tiempo, calidad y flexibilidad.

Existen las siguientes medidas a la hora de evaluar la función objetivo de un modelo:

• Cj: tiempo de terminación del trabajo j (completion time). Es el tiempo en que un trabajo
termina su procesado en el entorno.

• Fj: tiempo de flujo del trabajo j (flowtime). Es el tiempo en el que un trabajo se encuentra
en el entorno. Fj = Cj – rj.

• Lj: retraso del trabajo j (lateness). Mide lo que se retrasa o adelanta un trabajo.
Lj = Cj – dj.

21
• Tj: tardanza del trabajo j (tardiness). Mide lo que se retrasa un trabajo. Tj = máx {0, Lj}.

• Ej: adelanto del trabajo j (earliness). Mide lo que se adelanta un trabajo.


Ej = máx {0, -Lj}.

• Uj: trabajo tardío (tardy job). Uj vale 1 en el caso en que se retrase y 0 si no. Es decir,
Uj =1 si Tj > 0 y Uj = 0 en caso contrario.

Los objetivos que pueden aparecer en un modelo de programación de la producción se


agrupan en cuatro grupos. El primero de ello consiste en encontrar un programa factible, es
decir γ = -. Otro grupo de objetivos son los relacionados con la reprogramación. El siguiente
está formado por aquellos objetivos que no están relacionados con las fechas de entrega,
estos objetivos pueden ser:

• Makespan. C = máx C.

• Maximum flowtime. máx F = máx .

• Total completion time. ∑ =∑ .

• Total flowtime. ∑ =∑ .

Por ultimo están los objetivos relacionados con las fechas de entrega. Destacan los
siguientes:

• Maximum lateness. máx L = máx .

• Maximum tardiness. máx T = máx .

• Maximum earliness. máx E = máx .

• Total lateness. ∑ =∑ .

• Total tardiness. ∑ =∑ .

• Total earliness. ∑ =∑ .

• Number of tardy jobs. ∑ =∑ .

Puede darse el caso que cada trabajo tenga un peso o importancia diferente, esto lleva a que
las expresiones anteriores deben ponderarse con el peso de cada uno de los trabajos.

22
2.4. Métodos de programación de la producción
La función principal de los métodos de programación es la de resolver un problema de programación
de la producción. Estos métodos de programación proporcionan una solución factible a un problema.
Dichos métodos son aplicables a cualquier instancia de un modelo y la solución obtenida debe
proporcionar unos buenos resultados teniendo en cuenta un objetivo (Framiñan et al., 2014). Estos
métodos que proporcionan una solución se denominan algoritmos. Estos algoritmos pueden ser de
dos tipos:

- Exacto: proporciona la solución óptima a un problema concreto. Dentro de este tipo se


encuentran los algoritmos constructivos exactos (reglas básicas de despacho) y los algoritmos
enumerativos (programación matemática, Branch and Bound y programación dinámica).

- Aproximado: proporciona un programa factible, sin garantizar que sea el óptimo. Entre este
tipo de algoritmos se encuentran las heurísticas constructivas, las heurísticas de mejora y las
metaheurísticas.

Existen una reglas básicas de despacho (Basic dispatching rules) que se utilizan para resolver ciertos
tipos de problemas de programación de la producción. Algunas de las reglas de despacho más
importantes son (Pérez González, 2014) la regla FIFO (First In First Out) que consiste en que el
primer trabajo que llega a una máquina es el primero en ser procesado, LIFO (Last In First Out) en el
que el último trabajo que llega a una máquina es el primero en ser procesado, SPT (Shortest
Processing Time first) caracterizado por procesar primero el trabajo con un menor tiempo de
proceso, LPT (Longest Processing Time first) en el que se procesa primero el trabajo con un mayor
tiempo de proceso y EDD (Earlier Due Date first) el cual procesa en primer lugar el trabajo con una
menor fecha de entrega.

Existe un grupo de algoritmos exactos, los cuales se consideran los más importantes, entre los que
destacan el algoritmo de Johnson para problemas F2|| Cmax, el algoritmo de Lawler que resuelve
problemas del tipo 1| prec| máx g (Cj) y el algoritmo de Moore para problemas 1|| ∑Uj.

Entre las distintas clases de algoritmos, destacan los enumerativos que se caracterizan por garantizar
que se evalúan todas las soluciones del modelo. Los principales algoritmos enumerativos son los
siguientes:

- Programación matemática: la formulación se realiza mediante la programación lineal entera


mixta (MILP) y se resuelve mediante un Solver. Mediante este algoritmo es posible resolver
cualquier tipo de problema como, por ejemplo, || !, |#$% | ! y
|&' (| !.

23
- Branch and Bound: se utiliza para resolver problemas de optimización combinatoria. Para
ello es necesario definir los nodos, definir la ramificación, calcular la cota y establecer una
estrategia de ramificación.

Para resolver un problema mediante metaheurísticas el primer paso a realizar es el de representar la


solución, tras esto debemos establecer una solución inicial mediante alguna heurística o de forma
aleatoria. El siguiente paso es el de definir la vecindad o soluciones posibles realizando algún cambio
en la solución. Estos tipos de vecindades pueden verse, por ejemplo, en (Pinedo, 2009). Tras definir
la vecindad se comienza el proceso de búsqueda, la cual consiste en la aplicación de algún cambio en
la vecindad de manera que se logre una mejora en la función objetivo. Es necesario definir un
criterio de aceptación, el cual nos hará saber si el cambio realizado reemplazará a la solución actual.
Por último se debe imponer un criterio de terminación que pondrá fin a la metaheurística.

Algunas de las metaheurísticas más utilizadas y conocidas son el Método de Búsqueda Descendente
Simple, Simulated Annealing, Algoritmo Genético Scatter Search e Iterated Greedy entre otros
(Pinedo, 2009).

24
3 PROBLEMA DE MÁQUINAS PARALELAS NO
RELACIONADAS
En este capítulo se va a realizar un análisis de los distintos problemas en máquinas paralelas, tras
esto, se describirá de una manera detallada el problema en cuestión que se quiere estudiar y se
mostrará el modelo de programación lineal que se debe resolver. Por último, se realizará un ejemplo
con un número reducido de trabajos y máquinas con el objeto de entender y analizar el problema.

3.1. Problemas en máquinas paralelas


En apartados anteriores se han definido, de forma general, los diferentes tipos de problemas en
máquinas paralelas. A continuación se estudiarán, con mayor profundidad, estos problemas.

De acuerdo a (Pinedo, 2012), los problemas de máquinas paralelas son una generalización de los
problemas con una máquina. Es un problema de gran importancia debido a que son distribuciones de
máquinas muy comunes en la realidad. Algunos de los objetivos más importantes en este tipo de
problemas son la minimización del makespan, el tiempo total de terminación y la tardanza máxima.
En el caso de minimizar el makespan el principal objetivo para lograrlo consiste en equilibrar la
carga de las máquinas, garantizando un buen equilibrio.

La programación de las máquinas en paralelo suele realizarse en dos etapas. La primera consiste en
asignar los trabajos a cada una de las máquinas, la segunda es asignar la secuencia de los trabajos en
las máquinas. En aquellos problemas cuyo objetivo es minimizar el makespan únicamente es
relevante la etapa de asignación ya que la secuencia no influye en el objetivo (Pinedo, 2012). Este
trabajo se centra en este objetivo, por lo que se comentarán los entornos para este caso.

Existen tres problemas diferentes en máquinas paralelas dependiendo de las características de las
máquinas:

- Máquinas paralelas idénticas: fue denotado por Graham (1979) como )|| *+. En este tipo
de problemas el tiempo de proceso de un trabajo en cualquier máquina es el mismo, es decir,
las máquinas son idénticas. En la mayoría de los casos la resolución de estos problemas se
llevan a cabo asignando el trabajo a la primera máquina que quede libre (Framiñan et al.,
2014). En este problema, al minimizar el makespan, se equilibran las cargas entre todas las
máquinas.

- Máquinas paralelas uniformes: en este caso (-|| *+), los tiempos de proceso vienen
dados por la expresión &/ = & / 1/ , donde si es la velocidad de la máquina i, es decir, el
25
tiempo de proceso de un trabajo j se encuentra afectado por la velocidad relativa de la
máquina i (Framinan et al., 2014). Este tipo de problemas es una generalización del caso de
máquinas paralelas idénticas.

- Máquinas paralelas no relacionadas: Se trata del caso más general de los problemas de
máquinas paralelas. En este tipo de problemas los tiempos de proceso de cada trabajo son
distintos en cada máquina donde se procesen. (Graham et al., 1979) clasificó el problema
cuyo objetivo era minimizar el ! como || !.

En este Trabajo Fin de Grado se trata un problema determinista, es decir, se conoce a priori tanto el
número de máquinas y trabajos como los tiempos de procesos de los trabajos en las diferentes
máquinas, en contraposición con los problemas estocásticos, también llamados probabilísticos,
donde hay algún dato que no se conoce, lo que incorpora al problema cierta incertidumbre. Es por
ello que a continuación se analizarán con más detalle algunos problemas de la literatura (Pinedo,
2012):

El Makespan sin interrupción de trabajos: el problema a considerar es el ) || !. La peculiaridad


de este problema es que al minimizar el makespan se consigue un equilibrio de las cargas de las
máquinas. En la actualidad existe un gran número de heurísticas capaces de resolver este tipo de
problemas. En (Pinedo, 2012) vienen explicadas de manera muy detallada dichas heurísticas.

El Makespan con interrupción de trabajos: el problema a estudiar es el ) |&' &| !. En la


mayoría de los casos, el permitir la interrupción de los trabajos simplifica el estudio del problema. Al
igual que en el caso del makespan sin interrupción de trabajos, existen una gran variedad de
algoritmos capaces de resolver este tipo de problemas. Algunos de estos algoritmos vienen detallados
en (Pinedo, 2012).

El Tiempo Total de Finalización sin interrupción de trabajos: en este caso, el problema a resolver es
) || ∑ . El tiempo total de finalización para el caso de una sola máquina puede expresarse
mediante la siguiente expresión:

2 = 3&( ) + (3 − 1)&(7) + ⋯ + 2&( : ) +&

Como se puede observar en la expresión anterior, hay n coeficientes que serán asignados a n tiempos
de proceso (p). El objetivo es asignar los tiempos de proceso de forma que se minimice la suma de
los productos, para ellos se debe asignar el coeficiente n más alto al menor tiempo de proceso, y así
sucesivamente hasta haber asignado a todos los tiempos de proceso un coeficiente. Con esto se
consigue que la regla SPT (Shortest Processing Time first) sea óptima, con lo que se minimiza el
tiempo total de finalización del problema. Esta expresión puede extenderse al caso de máquinas en

26
paralelo. En (Pinedo, 2012) pueden observarse distintos teoremas y heurísticas para conseguir una
solución a estos problemas.

El Tiempo Total de Finalización con interrupción de trabajos: en este caso se van a considerar m
máquinas en paralelo cuyas velocidades de procesamiento son diferentes (- |&' &| ∑ ). En este
problema se pretende asignar el tiempo de proceso más corto a la máquina más rápida (SRPT – FM),
el segundo tiempo de proceso más corto a la segunda máquina más rápida, y así sucesivamente hasta
haber asignado todos los trabajos en todas las máquinas. Una vez que la máquina más rápida haya
terminado su trabajo, la segunda máquina más rápida interrumpe su trabajo y este trabajo es asignado
a la máquina más rápida, seguidamente la tercera máquina más rápida interrumpe igualmente su
trabajo y este es asignado a la segunda máquina más rápida, y así hasta completar todos los cambios
en el problema. Este proceso se repite hasta que se termine el procesamiento de todos los trabajos.
Mediante esta heurística se consigue minimizar el tiempo total de finalización del problema cuando
se permite interrupciones en los trabajos.

Objetivos relacionados con la fecha de entrega: el caso del problema - |&' &| ! es uno de los
cuales es posible resolverlo en un tiempo polinomial. Suponiendo que se necesita establecer un
programa factible con ! = ;, es necesario que el tiempo de terminación Cj del trabajo j sea igual
o inferior a dj + z. Para conseguir un programa factible donde se completen todos los trabajos antes
de estos plazos es equivalente a resolver el problema - <' , &' &< !. Para llevar a cabo este
procedimiento, es necesario invertir la dirección del tiempo aplicando la regla LRPT – FM (Longest
Remaining Processing Time on the Faster Machine first) a partir de la última fecha límite y trabajar
hacia atrás. En el problema original, los plazos juegan el papel de fechas de lanzamiento en el
problema invertido, lo cual es equivalente al problema - <' , &' &< !. Si aplicando esta regla
se consigue un programa factible donde todos los trabajos en el problema original empiecen en el
instante cero o mayor que cero, entonces existe un programa para - <' , &' &< ! con

! ≤ z. Para poder hallar el mínimo ! es necesario realizar una búsqueda simple consiguiendo
con ello encontrar el valor mínimo de z.

3.2. Descripción del problema


El problema a estudiar en el presente Trabajo Fin de Grado consiste en un problema de
programación de la producción de máquinas paralelas no relacionadas, es decir, los tiempos de
proceso de cada trabajo en cada una de las máquinas es distinto e independiente de la máquina en la
que se procese. El objetivo de este problema será el de minimizar el makespan.

Es frecuente encontrar en la literatura el tratamiento de este tipo de problemas suponiendo que las

27
máquinas son idénticas. En las empresas, debido a la evolución tecnológica en el tiempo o por
decisión de la empresa para tener los equipos más adecuados a las necesidades de producción, lo más
común es encontrarse con máquinas paralelas no relacionadas (Arango, Giraldo, & Castrillón, 2013).

En este trabajo se estudia el problema |>?@A@B@?@CD| ! (de acuerdo a la notación presentada


anteriormente), cuyo modelo de programación lineal es el mismo que para el problema || !.

La diferencia con el problema || ! está en los datos de la instancia, ya que la restricción de


elegibilidad implicará dar tiempos de proceso elevados a aquellos trabajos que no puedan ser
procesados en determinadas máquinas, como se explicará más adelante. Esta restricción consiste en
que no todos los trabajos pueden ser procesados en todas las máquinas, existen máquinas que, por
sus propias características o por las del trabajo en particular, no son capaces de procesar el trabajo.

Cada trabajo debe ser procesado por una de las máquinas teniendo en cuenta que hay máquinas que
no pueden realizar algunos trabajos, de esta manera se debe minimizar el makespan.

En relación a la teoría de la complejidad computacional de (Garey and Johnson, 1979) el problema a


estudiar es de complejidad NP-Hard, al igual que en la mayoría de los problemas reales de
producción (Luis Fanjul Peyró, 2010). La resolución del problema puede abordarse desde dos
metodologías diferentes, como se ha comentado en el capítulo anterior:

- Seleccionar un método exacto de resolución. Para los problemas NP-Hard, estos métodos
requieren en su mayoría un tiempo de búsqueda exponencial de la solución óptima, estos
tiempos de cómputo no son razonables para problemas con un número elevado de máquinas
y/o trabajos.

- Búsqueda de una solución aproximada mediante un método heurístico.

En este trabajo se va a resolver el problema aplicando ambos métodos. Se resolverán instancias


pequeñas (números reducidos de trabajos y máquinas) del problema de forma exacta mediante un
modelo de programación lineal que será resuelto mediante un solver de optimización (Gurobi). Para
problemas grandes, el tiempo de cómputo será muy elevado, con lo que es posible que no sea factible
resolver el problema por este método, para ello se utilizará una heurística que obtendrá una solución
aproximada en un tiempo pequeño, solución que puede ser suficiente para el problema que se desea
resolver.

28
3.3. Modelo de Programación Lineal
A continuación, en la Figura 7, se muestra el modelo de programación lineal que es necesario
resolver para obtener las soluciones a las distintas instancias del problema que se desea resolver. El
modelo corresponde al de los problemas || !. En este problema se impondrá la restricción de
elegibilidad.

1, 1@ >? C'*B*FG F >1 *1@A3*HG * ?* áI(@3* @


+/ = E L
0, >3 GC'G K*1G

M@3 !

s.a:

2 +/ = 1 ∀F ∈ P (1)
/

2 &/ · +/ ≤ ! ∀@ ∈ M (2)

+/ ∈ S0,1T ∀F ∈ P, ∀@ ∈ M

Figura 7. Modelo Programación Lineal de Máquinas Paralelas no Relacionadas (Pinedo, 2012)

El conjunto de restricciones 1 logra que un trabajo se realice en una única máquina al hacer que la
suma de la variable +/ sea uno (la suma de las máquinas a las que es asignado un trabajo debe ser
uno).

El conjunto de restricciones 2 hace que la suma de todos los trabajos asignados a cada máquina debe
ser menor o igual al !, el producto de la variable +/ por el tiempo de proceso nos proporciona lo
que tarda cada máquina en terminar de procesar todos los trabajos que tenga asignados, siendo esta
suma menor o igual al !.

Para conocer en mayor profundidad este tipo de problemas, y a modo de una primera toma de
contacto, se resolverá a continuación de forma óptima un ejemplo pequeño, en el que se considerará
un número reducido de trabajos y de máquinas.

3.4. Ejemplo numérico


Como se ha mencionado anteriormente, este ejemplo se va a realizar con un número pequeño de
trabajos y máquinas. Los datos a considerar para este caso son los tiempos de proceso que vienen
dados en la Tabla 1 que se muestra a continuación. Se debe tener en cuenta que hay trabajos que no
pueden ser procesados en alguna máquina. Así, el trabajo 1 no puede ser asignado en la máquina 3.
29
De igual manera ocurre con el trabajo 4 en la máquina 1 y con el trabajo 5 en la máquina 2.

Máquinas (i)

M1 M2 M3

1 5 3
Trabajos (j) 2 8 1 5

3 2 6 7

4 5 4

5 4 1

Tabla 1. Datos del ejemplo numérico del modelo

Primero se resolverá de forma exacta este problema mediante el uso de la herramienta Solver del
programa Microsoft Excel. Al ser un problema pequeño, la solución óptima se obtiene en un tiempo
aceptable. El modelo usado es el mostrado anteriormente en la Figura 7. En la Figura 8 se puede
observar el modelo resuelto por Excel.

VARIABLES
máquinas
Xij 1 2 3
1 0 1 0
2 0 1 0
Trabajos 3 1 0 0
4 0 0 1
5 0 0 1

F.O Min Cmax 5

RESTRICCIONES
R1 1 = 1
R2 1 = 1
R3 1 = 1
R4 1 = 1
R5 1 = 1

R6 2 <= 5
R7 4 <= 5
R8 5 <= 5
Figura 8. Resolución en Excel del ejemplo numérico del modelo

30
Donde las cinco primeras restricciones corresponden al primer conjunto de restricciones
especificadas en el modelo mientras que las tres restricciones restantes corresponden al segundo
conjunto de restricciones.

Para aquellos trabajos que no pueden ser procesados en alguna máquina se les ha dado un valor del
tiempo de proceso elevado, concretamente, en el ejemplo se ha elegido el valor de 1000, de manera
que no será seleccionado por esa máquina.

Mediante este modelo de programación resuelto en Excel obtenemos la solución óptima del
problema consiguiendo un valor del ! de 5 unidades de tiempo. Mediante este modelo en Excel
puede observarse que para problemas pequeños puede conseguirse soluciones de una manera rápida
y sencilla, sin embargo, para problemas de un mayor tamaño, es mucho más complejo, ya que es
necesario introducir todas las restricciones de forma manual, al igual que los tiempos de proceso de
cada trabajo. Por otro lado el tiempo de cómputo necesario para resolver el problema es mucho
mayor que si lo resolvemos con otros optimizadores.

En la Figura 9 se representa la solución óptima de una manera gráfica, mediante un diagrama de


Gantt.

Figura 9. Representación de solución óptima del ejemplo numérico del modelo

En la Figura anterior puede observarse cómo en la máquina 1 se realiza el trabajo 3, a la máquina 2


se le asigna los trabajos 1 y 2. Por último, en la máquina 3 se realizarán los trabajos 4 y 5. Con esta
solución se obtiene el makespan óptimo, siendo de 5 u.t. El makespan corresponde al mayor tiempo
de terminación de las máquinas, en este caso el de la máquina 3.

Notar que el trabajo 5 no puede ser asignado a la máquina 2, y que su asignación a la máquina 1
implicaría un mayor tiempo de proceso, y por tanto el makespan aumentará. La solución dada es la
óptima.

31
32
4 RESOLUCIÓN DEL PROBLEMA DE FORMA
EXACTA
4.1. Introducción
Tras presentar un modelo matemático para resolver el problema y haber realizado algunas pruebas
para entender el problema con un ejemplo pequeño, se va a realizar una serie de pruebas con
problemas de mayor tamaño para poder conocer el límite al que puede llegar el solver y de esta
forma, conocer el número máximo de trabajos que podemos resolver con el modelo sin que el tiempo
de cómputo sea muy alto.

Para realizar este análisis se van a utilizar los programas Matlab y Gurobi. El primero es una
herramienta de software matemático que ofrece un entorno de desarrollo integrado con un lenguaje
de programación propio (lenguaje M). La página web de esta empresa
(http://www.mathworks.es/products/matlab/) lo define como “un lenguaje de alto nivel para el
cálculo numérico, la visualización y el desarrollo de aplicaciones y un entorno interactivo utilizado
por millones de ingenieros y científicos en todo el mundo. Permite explorar y visualizar ideas, así
como colaborar interdisciplinarmente en procesamiento de señales e imagen, comunicaciones,
sistemas de control y finanzas computacionales. Mediante Matlab es posible analizar datos,
desarrollar algoritmos y crear modelos”. Por todos estos motivos, se ha optado por elegir este
software de programación para la creación del modelo matemático.

El otro programa a utilizar es el optimizador de Gurobi. Este programa es un solver para la


programación lineal (LP), programación cuadrática (QP), programación cuadrática entera mixta
(MIQP) y programación cuadrática entera mixta restringido (MIQCP). El optimizador de Gurobi es
capaz de soportar diferentes lenguajes de programación y modelado donde es posible trabajar con
una interface para el uso de Matlab.

4.2. Matlab
A continuación se describirá brevemente el lenguaje Matlab, analizando su funcionamiento,
utilidades y distintas opciones que nos ofrece (http://es.mathworks.com).

Matlab es al mismo tiempo un entorno y un lenguaje de programación. Uno de sus puntos fuertes es
el hecho de que el lenguaje Matlab permite construir nuestras propias herramientas reusables.
Podemos fácilmente crear nuestras propias funciones y programas especiales (archivos-M) en código
Matlab. Los podemos agrupar en Toolbox: colección especializada de archivos-M para trabajar en
33
las clases particulares de problemas.

Como lenguaje de programación, es de alto nivel y orientado a problemas de cálculo intensivo.


Permite el desarrollo de aplicaciones técnicas de maneras más eficiente que la programación en
lenguajes tradicionales como C, C++ o Phyton (Miranda Zambrana, 2010).

Podemos pensar en Matlab como una calculadora totalmente equipada, aunque, realmente, ofrece
muchas más características y es mucho más versátil que cualquier calculadora. Matlab es una
herramienta para hacer cálculos matemáticos. Es una plataforma de desarrollo de aplicaciones, donde
conjuntos de herramientas inteligentes para la resolución de problemas en áreas de aplicación
específica (toolboxes) se pueden desarrollar con facilidad relativa.

Matlab trabaja interpretando las órdenes dadas al sistema, tanto desde la línea de comandos propia,
como a través de ficheros de texto. Todas las funciones deben declararse en el fichero abierto, o
acceder a través de un fichero con el mismo nombre, lo que permite crear funciones y saltos del
programa, a través de ficheros.

Entre sus utilidades se encuentran el cálculo matricial y álgebra lineal, los polinomios e
interpolación, la regresión, el ajuste de funciones, las ecuaciones diferenciales ordinarias, la
integración, las funciones y los gráficos bi y tridimensionales. Además se encuentran disponibles los
módulos (toolboxes) de optimización, procesamiento de señales, ecuaciones en derivadas parciales y
Simulink (simulación no lineal).

4.3. Gurobi
En este apartado se analizará el funcionamiento del optimizador Gurobi y su estructura, así como las
distintas funciones y campos necesarios para poder realizar el modelo (http://www.gurobi.com).

El optimizador Gurobi soporta una gran variedad de lenguajes de programación y modelado


incluyendo.

- Las interfaces orientadas a objetos de C++, Java, .NET y Python.

- Interfaces orientadas a matrices: C, Matlab y R.

- Enlaces a lenguajes de modelado estándar: AIMMS, AMPL, GAMS y MPL.

- Enlaces a Excel a través de Premium Solver Platform y Risk Solver Platform.

Como se ha comentado anteriormente, el optimizador de Gurobi resuelve modelos LP, QP, MILP,
MIQP y MIQCP. Para la resolución de los modelos LP y QP, Gurobi incluye implementaciones de
alto rendimiento del método simplex, el método dual simplex, y un solucionador de barrera paralela.

34
Para los modelos MILP, MIQP y MIQCP, Gurobi incorpora los últimos métodos, incluyendo los
planos de corte y otras heurísticas.

El optimizador Gurobi está escrito en C y es accesible desde varios lenguajes de programación.


Tiene una interface de Python potente e interactiva, un ejecutable simple de línea de comandos y una
interface orientada a la matriz C, que proporcionan orientación a objetos de C++, Java y Python.

En la siguiente Figura se muestra un gráfico de cómo trabaja el optimizador Gurobi:

C++ API Model Data

Java API

.NET API
Gurobi
Interactive Phyton API
C API
Shell
MATLAB API Gurobi Algorithms

R API

Gurobi
Command
Solution Data
Line

Figura 10. Esquema de Gurobi (http://www.gurobi.com)

Para trabajar con Gurobi y Matlab, debemos instalar el optimizador Gurobi en el lenguaje de
programación Matlab mediante la interface necesaria. Tras esto es necesario generar el modelo
matemático que se desea resolver partiendo de unos datos de entrada del problema particular, en este
caso son los tiempos de proceso de cada trabajo en cada una de las máquinas (pij), así como el
número de trabajos (n) y máquinas (m), el número de instancias para cada tipo de problemas (k) y la
probabilidad de que un trabajo no pueda ser realizado en una determinada máquina.

Para la creación del modelo de programación lineal en Matlab es necesario seguir las indicaciones
que da Gurobi para que este pueda resolver el problema. Dicho formato es:

35
min(K W · + + + W · - · + + X)

1. *

Y·+ =B

?≤+≤(

+ W · -Z · + + I W · + ≤ [

La estructura del modelo debe contener los siguientes campos obligatorios descritos a continuación:

- model.A: La matriz de restricciones del modelo.

- model.obj: Vector objetivo lineal.

- model.sense: Signo de las restricciones lineales. Los valores que se permiten son <, = o >. Se
debe especificar un valor para cada fila de Y, o un único valor para especificar que todas las
restricciones tienen el mismo signo. Debe ser un vector de caracteres.

- model.rhs: Es el vector de término independiente de las restricciones lineales. Debe


especificar un valor para cada fila de la matriz Y.

El modelo también puede contener los siguientes campos opcionales:

- model.lb: Los límites inferiores de las variables. Se debe especificar un valor para cada
columna de la matriz Y.

- model.ub: Los límites superiores de las variables. Se debe especificar un valor para cada
columna de la matriz Y.

- model.vtype: Los tipos de variables. Es un vector de caracteres. Los valores que se permiten
son “C” (continua), “B” (binario), “I” (entero), “S” (semi-continuo), o “N” (semi-entero). Se
debe especificar un valor para cada columna de la matriz Y, o un solo valor para especificar
que todas las variables deben tener el mismo tipo de variable. Cuando está ausente, cada
variable se trata como una variable continua.

- model.modelsense: El objetivo de optimización. Los valores permitidos son “min”


(Minimizar) o “max” (Maximizar). Cuando está ausente, el objetivo del modelo por defecto
es de minimización.

- model.modelname: Nombre para todo el modelo.

- model.objcon: Desplazamiento de la función objetivo (α en el modelo descrito


anteriormente).
36
- model.vbasis: El vector de estado de las variables. Se utiliza para proporcionar un avanzado
punto de partida para el algoritmo simplex.

- model.cbasis: El vector de estado de las restricciones. Se utiliza para proporcionar un


avanzado punto de partida para el algoritmo simplex.

- model.Q: La matriz objetivo cuadrática.

- model.cones: Las restricciones de segundo orden.

- model.quadcon: Las restricciones cuadráticas.

- model.start: El vector de inicio MIP. El solucionador MIP intentará construir una solución
inicial de este vector. Cuando está presente debe especificar un valor inicial para cada
variable.

- model.varnames: Nombres de las variables. Cuando está presente, cada elemento de la matriz
define el nombre de una variable. Debe especificar un nombre para cada columna de la
matriz Y.

- model.constrnames: Nombres de las restricciones. Cuando está presente, cada elemento de la


matriz define el nombre de una restricción. Debe especificar un nombre para cada fila de la
matriz Y.

La estructura del resultado de la optimización del problema contendrá el siguiente campo:

- result.status: El estado de la optimización, la devuelve como una cadena. Cuando el resultado


deseado es “óptimo”, indica que se encontró la solución óptima para el modelo. Existen otros
estados especificados en los manuales de Gurobi.

La estructura de los resultados de la optimización puede contener también los siguientes campos
opcionales:

- result.objval: Valor objetivo de la solución encontrada.

- result.objbound: La mejor solución disponible para un límite inferior para la minimización y


un límite superior para la maximización.

- result.runtime: El tiempo en segundos de la resolución de la optimización.

- result.intercount: El número de iteraciones que realiza.

- result.baritercount: El estado de la optimización, la devuelve como una cadena. Cuando el


resultado deseado es “óptimo”, indica que se encontró la solución óptima para el modelo.
Existen otros estados posibles recogidos en los manuales de Gurobi.

37
- result.nodecount: El número de nodos explorados.

- result.x: la solución calculada. Este vector contiene un valor para cada columna de la matriz
Y.

- result.slack: La holgura de cada restricción de la solución. Este vector contiene un valor para
cada fila de la matriz Y.

- result.qcslack: La holgura cuadrática de cada restricción de la solución actual.

- result.rc: El coste reducido de la solución actual. Este solo está disponible para modelos
continuos. Este vector contiene un valor para cada columna de la matriz Y.

- result.pi: Los valores duales para la solución computarizada. Este vector contiene un valor
para cada fila de la matriz Y.

- result.qcpi: Los valores duales asociados a las restricciones cuadráticas.

- result.vbasis: Los valores de estado de las variables para el óptimo.

- result.cbasis: Los valores de estado de las restricciones para el óptimo.

4.4. Batería de Problemas


Con objeto de comprobar la capacidad del solver para resolver el problema planteado se ha generado
una serie de problemas, con un número determinado de instancias (k) para cada tamaño de problema.
Esta generación de problemas se realiza mediante una batería de problemas generada mediante un
código en Matlab (Anexo 1), y cuyas salidas son archivos con extensión .txt. Por cada instancia
creada se genera un problema con un número de trabajos (n) y un número de máquinas (m). El
usuario debe introducir en un vector (numtrab) los distintos números de trabajos cuyos problemas se
desea generar, de manera que se generan distintos problemas con distintos números de trabajos.

Al igual que con el número de trabajos, el número de máquinas de los problemas deben ser
introducidos en otro vector (nummaq) el cual debe contener distintos números de máquinas, de
manera que se generen distintas instancias con cada número de trabajos y de máquinas, logrando una
gran variedad de problemas sin necesidad de modificar constantemente los parámetros del código
Matlab.

Por otro lado, se debe tener en cuenta que no todos los trabajos pueden ser procesados en todas las
máquinas. Para lograr esto, se ha generado una variable B que sigue una distribución aleatoria
uniforme entre 0 y 1, esta variable dará un valor, si este valor es inferior a la probabilidad de que un
trabajo no se pueda procesar en una máquina determinada el trabajo no podrá realizarse en dicha

38
máquina, asignándole un tiempo de proceso suficientemente grande para que no sea asignado dicho
trabajo a la máquina en ningún caso.

El resultado de esta batería de problemas es una serie de archivos .txt, los cuales cada uno de ellos
contiene una instancia con un número determinado de trabajos y de máquinas. Dichos archivos están
compuestos por los tiempos de proceso de cada trabajo en cada máquina. Estos tiempos de proceso
son generados mediante una variable A que sigue una distribución aleatoria uniforme entre 1 y 100,
teniendo en cuenta que algunos de estos trabajos tomarán valores superiores debido a la posibilidad
de que no se pueda procesar un determinado trabajo en una máquina. En ese caso el tiempo de
proceso será 1000, tiempo lo suficientemente grande como para que, a la hora de optimizar, el
modelo de programación lineal no asigne dicho trabajo a esa máquina.

A continuación se muestra un ejemplo de uno de los archivos .txt que se genera mediante esta batería
de problemas para 5 trabajos en 2 máquinas:

24 89

60 92

29 30

5 21

35 1000

Cada trabajo corresponde a cada una de las filas de la matriz, mientras que cada máquina está
asignada a cada una de las columnas de la matriz, de tal modo conseguimos una matriz de 3 +
tiempos de proceso. Podemos observar como el trabajo 5 en la máquina 2 tiene un tiempo de proceso
de 1000, lo que implica que dicho trabajo no debe ser asignado a la máquina 2.

Para estudiar este problema se realizan dos baterías distintas de problemas, la primera, denominada
BP (Batería Pequeña) en la cual se utilizan n ∈{100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}
trabajos y m ∈{2, 4, 6, 8, 10} máquinas. Para cada tipo de problema se van a resolver k = 5
instancias distintas, de esta manera se resolverá un total de 250 instancias diferentes.

La segunda batería de problemas llamada BG (Batería Grande) utiliza n ∈{100, 200, 300, 400, 500}
trabajos y m ∈{20, 30, 40, 50, 100, 200} máquinas. Al igual que en el caso anterior se resolverán
k = 5 instancias distintas de cada problema, lo que supone un total de 150 instancias diferentes.

El código de batería de problemas también genera otro conjunto de archivos, los cuales pertenecen a
las mismas baterías de problemas descritas anteriormente pero con un formato distinto. Estas baterías
de problemas son las necesarias para poder estudiar el problema mediante una heurística
posteriormente. El nombre de estos archivos sigue el siguiente formato: H_BP o H_BG. A
39
continuación se muestra un ejemplo de uno de los archivos .txt generado mediante esta batería:

24 89

60 92

29 30

21 78

35 1000

En este caso, corresponde con un problema de 2 máquinas y 5 trabajos. Al igual que en el caso
anterior cada fila pertenece a un trabajo, mientras que las columnas se corresponden a las máquinas.
Cabe destacar que las dos primeras filas pertenecen al número de máquinas y el número de trabajos
respectivamente.

El código en Matlab de programación de la batería de problemas se encuentra en el Anexo 1.

4.5. Resultados del MILP


A continuación se va a estudiar para cada instancia el tiempo de cómputo que Gurobi necesita para
resolverla. De esta manera se determinará el comportamiento del modelo planteado y la capacidad de
Gurobi para resolverlo de forma óptima.

Para cada instancia se tomarán los datos y se generará el modelo matemático en Matlab con la
interface de Gurobi. Una vez generado el modelo de cada instancia, se generará un archivo
denominado “Solución.txt” donde se mostrará tanto el valor óptimo de la función objetivo como el
tiempo de cómputo que ha necesitado Gurobi para alcanzar dicho valor. Estos archivos .txt tienen el
siguiente formato:

40
Problema01_10x2 247 0.01700

Problema 02_10x2 205 0.01000

Problema 03_10x2 188 0.01100

Problema 04_10x2 157 0.01700

Problema 05_10x2 229 0.01100

Problema 01_10x4 67 0.01700

Problema 02_10x4 70 0.02100

Problema 03_10x4 85 0.01400

Problema 04_10x4 77 0.01600

Problema 05_10x4 89 0.01500

Cada una de las filas de la tabla pertenece a un problema distinto. Cada fila se divide en tres
columnas, donde la primera muestra los datos del problema. Esta columna está compuesta, en primer
lugar, por el número de la instancia, en nuestro problema se han generado cinco instancias para cada
tipo de problema, indicando el número de trabajos y de máquinas (nxm). La segunda columna
muestra el makespan para ese problema mientras que la tercera columna contiene el tiempo de
cómputo, es decir, el tiempo que Gurobi tarda en obtener la solución óptima al problema.

Para estudiar estos resultados se van a analizar estos tiempos de cómputo para cada valor del número
de máquinas. Cabe destacar que se ha utilizado un criterio de parada de 45.000 segundos, es decir, si
el modelo no ha proporcionado el óptimo en este tiempo, parará de buscarlo sin proporcionar
ninguna solución. En una primera prueba se van a analizar los resultados obtenidos utilizando la
Batería Pequeña (BP), cuyo número de trabajos y máquinas fueron comentados en el apartado
anterior, para ver cómo se comporta el modelo. En la siguiente Tabla se muestran, en resumen, los
resultados obtenidos por Gurobi y cuyos resultados pueden observarse de una manera más detallada
en el Anexo 3.

41
m 2 4 6 8 10
Tiempo Medio Desv. St Tiempo Medio Desv. St Tiempo Medio Desv. St Tiempo Medio Desv. St Tiempo Medio Desv. St
n (seg) (seg) (seg) (seg) (seg) (seg) (seg) (seg) (seg) (seg)
100 0,0676 0,0592 0,2896 0,0967 1,3831 0,5429 1,8565 1,9914 6,1132 5,5867
200 0,0240 0,0050 0,4692 0,1389 3,2135 1,3251 4,6603 5,3151 15,0237 8,1831
300 0,0556 0,0271 0,6744 0,3397 3,2751 2,0843 26,9921 24,0554 385,1370 655,7735
400 0,0564 0,0152 0,8715 0,5197 2,4473 1,548 108,2386 74,0246 115,1596 100,7548
500 0,0560 0,0168 0,8949 0,3236 4,8811 4,4019 10,5204 9,7570 2332,7603 4015,9932
600 0,0648 0,0185 0,9627 0,2265 14,5958 9,0306 23,5181 29,2545 159,3929 122,4857
42

700 0,0802 0,0196 1,0067 0,5496 2,5667 3,5244 25,1582 18,4680 400,9519 436,6598
800 0,0698 0,0156 0,9099 0,3596 1,3177 1,0599 17,8684 20,2313 59,3008 71,1832
900 0,0796 0,0159 1,8351 1,1807 14,5958 24,4606 195,3192 202,1155 288,4547 524,5349
1000 0,0954 0,0183 1,2657 0,3866 18,1296 33,0213 46,4169 14,9628 866,2115 1137,9016
Total 0,0649 0,0211 0,9180 0,4122 6,6406 8,0999 46,0549 40,0176 462,8506 707,9057

Tabla 2. Datos de Tiempos medios y Desviación Típica de BP para el modelo de PL.


En la Tabla 2 se observa que a medida que crece el número de trabajos (n) el tiempo de cómputo
crece. También se puede apreciar como los valores de la desviación típica no siguen un patrón claro.
Tanto los valores medios como las desviaciones típicas aumentan con el número de máquinas (m),
como se esperaba, observándose un salto importante en los valores medios totales (última fila) para
m = 8 y m = 10.

En las Figuras que se muestran a continuación se puede observar el comportamiento del modelo para
cada número de máquina conforme aumenta el número de trabajos (Figuras 11, 12, 13, 14 y 15):

0,12

0,1
Tiempo de ejecución (Seg)

0,08

0,06

0,04

0,02

0
0 200 400 600 800 1000 1200
Nº Trabajos

Figura 11. Tiempos medios para los valores de n para el modelo de PL. m = 2

2
1,8
Tiempo de ejecución (seg)

1,6
1,4
1,2
1
0,8
0,6
0,4
0,2
0
0 200 400 600 800 1000 1200
Nº Trabajos

Figura 12. Tiempos medios para los valores de n para el modelo de PL. m = 4

43
20
18
Tiempo de ejecución (seg)

16
14
12
10
8
6
4
2
0
0 200 400 600 800 1000 1200
Nº Trabajos

Figura 13. Tiempos medios para los valores de n para el modelo de PL. m = 6

250
Tiempo de ejecución (seg)

200

150

100

50

0
0 200 400 600 800 1000 1200
Nº Trabajos

Figura 14. Tiempos medios para los valores de n para el modelo de PL. m = 8

44
2500

Tiempo de ejecución (seg) 2000

1500

1000

500

0
0 200 400 600 800 1000 1200
Nº Trabajos

Figura 15. Tiempos medios para los valores de n para el modelo de PL. m = 10

Como se puede apreciar en las Figuras 11, 12, 13, 14 y 15, para números de máquinas pequeños, el
modelo se comporta de una manera muy inestable, habiendo una gran variabilidad entre las
instancias de igual tamaño.

En las Figuras 16 y 17 que a continuación se muestran puede observarse el tiempo medio de


ejecución y la desviación estándar media para cada número de máquinas:

500
Tiempo de ejecución medio (seg)

450
400
350
300
250
200
150
100
50
0
0 2 4 6 8 10 12
Nº Máquinas

Figura 16. Comparación por máquinas de Tiempos de ejecución medios en BP para el modelo de PL

45
800
Desviación estándar media (seg) 700
600
500
400
300
200
100
0
0 2 4 6 8 10 12
Nº Máquinas

Figura 17. Comparación por máquinas de Desviación estándar medias en BP para el modelo de PL

Puede observarse como hasta las 8 máquinas, tanto el tiempo de ejecución como la desviación
estándar son pequeños, es a partir de 10 máquinas cuando estos dos valores aumentan
considerablemente destacando sobre los números de máquinas inferiores de forma notable.

Por último, en la Figura 18, se muestra una comparación de los tiempos medios ejecución de los
distintos números de máquinas:

2500
Tiempo de ejecución (seg)

2000

1500 2 Máquinas
4 Máquinas
1000 6 Máquinas
8 Máquinas
500
10 Máquinas

0
0 200 400 600 800 1000 1200
Nº Trabajos

Figura 18. Tiempo de cómputo de Gurobi para BP. Comparación de tiempos medios

Con estos datos se llega a la conclusión que para números de máquinas pequeños (hasta m = 8),
Gurobi resuelve el problema en un tiempo aceptable.

46
Para poner a prueba el modelo y comprobar cuál es el límite de Gurobi, se va a aumentar
considerablemente el número de máquinas. Al igual que en la prueba anterior, para cada tipo de
problema se va a realizar 5 instancias, obteniendo valores de tiempos de ejecución que se analizarán
más adelante. En este caso se analizará la Batería Grande (BG) cuyos valores de número de
máquinas y de trabajos fueron comentados anteriormente. Al igual que en la BP, el criterio de parada
será de 45.000 segundos, interrumpiendo la búsqueda si el modelo llega a este tiempo. En la Tabla 3
se muestra un resumen de las tablas obtenidas por Gurobi para cada número de máquinas y cuyos
resultados se muestran en el Anexo 3 de manera más detallada.

En las Figuras 19, 20, 21, 22, 23 y 24 se muestra el comportamiento del modelo para cada número de
máquina conforme aumenta el número de trabajos. En la Figura 19 se puede observar como para un
problema de 20 máquinas, el modelo funciona muy bien para problemas con hasta 400 trabajos, una
vez que se pasa a los 500 trabajos se observa cómo el tiempo de cómputo aumenta
considerablemente, llegando hasta los 10.337 segundos (alrededor de las 3 horas). Aumentando a 30
máquinas, en la Figura 20, para número de trabajos inferiores a 500, el modelo se comporta muy bien
con un tiempo de cómputo considerablemente pequeño. A partir de este valor el tiempo de ejecución
se dispara, siendo este tiempo de unos 28.000 segundos (8 horas aproximadamente). Con estos datos
se llega a la conclusión que el límite es de unos 400 trabajos aproximadamente. Para problemas con
40 máquinas, a diferencia de los casos anteriores, el modelo se comporta bien para un número de
trabajos de 300 como máximo, con tiempos de ejecución muy pequeños (Figura 21). Sin embargo,
cuando se pasa a los 400 trabajos, Gurobi tarda un tiempo considerable en resolver el problema, este
tiempo es de unos 40.000 segundos (11 horas aproximadamente), lo cual implica que el límite del
modelo cuando se tienen 40 máquinas es de unos 300 trabajos. Como se aprecia en la Figura 22, con
50 máquinas, el número máximo de trabajos que soporta el modelo es 200, ya que en el momento en
que se pasa a los 300 trabajos el tiempo de cómputo aumenta considerablemente estableciendo el
límite en 200 trabajos. En la Figura 23 observamos que tenemos 100 máquinas, hasta los 100
trabajos Gurobi consigue resolver los problemas en un tiempo de cómputo muy pequeño, sin
embargo, cuando pasamos a analizar 200 trabajos, Gurobi no consigue resolver el problema en un
tiempo razonable. Para este caso, el tiempo de ejecución para resolver un problema con 200 trabajos
es de unos 14.000 segundos (alrededor de unas 4 horas). Con lo cual se llega a la conclusión que el
límite para problemas con 100 máquinas es de unos 100 trabajos. Por último, se han analizado
problemas con número de máquinas de 200. Como se aprecia en la Figura 24, con 200 máquinas,
Gurobi consigue resolver un problema con 100 trabajos en un tiempo bastante aceptable, no obstante,
si se aumenta a 200, Gurobi ya no consigue resolverlo en tiempos adecuados, siendo este tiempo de
unos 23.000 segundos (6 horas aproximadamente). Con esto llegamos a la conclusión que el límite
para problemas con 200 máquinas es de unos 100 trabajos aproximadamente.
47
m 20 30 40 50 100 200
Tiempo Desv. St Tiempo Desv. St Tiempo Desv. St Tiempo Desv. St Tiempo Desv. St Tiempo Desv. St
n Medio (seg) (seg) Medio (seg) (seg) Medio (seg) (seg) Medio (seg) (seg) Medio (seg) (seg) Medio (seg) (seg)
100 0,3274 0,2108 0,4900 0,3089 0,5294 0,1772 0,6464 0,0418 0,8010 0,0218 0,9487 0,9487
200 171,4956 283,0304 616,6825 1074,6439 746,3883 66,1722 926,6562 69,0117 14172,1513 3831,0343 23276,1201 23276,1201
300 943,2393 1636,4027 995,7762 450,7958 1143,8645 270,8220 14168,0759 2932,2695 > 45000 - > 45000 -
48

400 1502,5142 317,3385 3309,7865 4135,3501 40415,2911 59324,5426 > 45000 - > 45000 - > 45000 -
500 10337,0884 1248,3481 28616,5653 17450,1896 > 45000 - > 45000 - > 45000 - > 45000 -
Total 2590,9330 697,0661 6707,8601 4622,2577 17461,1215 - 21019,0757 - 29834,5905 - 316554,4138 -
Tabla 3. Datos de Tiempos medios y Desviación Típica de BG para el modelo de PL
Puede observarse en la Tabla 3 como, al igual que ocurre con la Batería Pequeña, a medida que
aumenta el número de trabajos, el tiempo medio de cómputo crece. Los valores de la desviación
típica tienden a crecer aunque no siguen un patrón claro. Con respecto al número de máquinas, los
valores de los tiempos medios crecen conforme se aumenta el número de máquinas, mientras que la
desviación típica, como ocurre respecto al número de trabajos, no sigue un patrón claro. Como se
aprecia en la Tabla 3, hay problemas en los que Gurobi no ha podido obtener el óptimo debido a su
tamaño, superando el tiempo de cómputo establecido anteriormente de 45.000 seg. En estos casos,
para poder realizar el posterior análisis, se les ha dado un tiempo de cómputo de 45.000 seg. En
cuanto a las desviaciones típicas de estos problemas en los que no se han podido calcular el óptimo,
no se le ha asignado ningún valor, ya que si se utiliza el tiempo de 45.000 seg la desviación que se
obtiene es de 0, desvirtuando la media total considerablemente.

12000

10000
Tiempo de ejecución (seg)
60

8000

6000

4000

2000

0
0 100 200 300 400 500 600
Nº Trabajos

Figura 19. Tiempos medios para los valores de n para el modelo de PL. m = 20

49
35000

30000
Tiempo de ejecución (seg)

25000

20000

15000

10000

5000

0
0 100 200 300 400 500 600
Nº Trabajos

Figura 20. Tiempos medios para los valores de n para el modelo de PL. m = 30

50000
45000
Tiempo de ejecución (seg)

40000
35000
30000
25000
20000
15000
10000
5000
0
0 100 200 300 400 500 600
Nº Trabajos

Figura 21. Tiempos medios para los valores de n para el modelo de PL. m = 40

50
50000
45000
Tiempo de ejecución (seg)

40000
35000
30000
25000
20000
15000
10000
5000
0
0 100 200 300 400 500 600
Nº Trabajos

Figura 22. Tiempos medios para los valores de n para el modelo de PL. m = 50

50000
45000
Tiempo de ejecución (seg)

40000
35000
30000
25000
20000
15000
10000
5000
0
0 100 200 300 400 500 600
Nº Trabajos

Figura 23. Tiempos medios para los valores de n para el modelo de PL. m = 100

51
50000
45000
Tiempo de ejecución (seg)

40000
35000
30000
25000
20000
15000
10000
5000
0
0 100 200 300 400 500 600
Nº Trabajos

Figura 24. Tiempos medios para los valores de n para el modelo de PL. m = 200

35000
Tiempo de ejecución medio (seg)

30000

25000

20000

15000

10000

5000

0
0 50 100 150 200 250
Nº Máquinas

Figura 25. Comparación por máquinas de Tiempos de ejecución medios en BG para el modelo de PL

En la Figura 25 puede observarse el tiempo medio de ejecución medio para cada número de
máquinas. En dicha Figura se aprecia claramente como a medida que aumenta el número de
máquinas, a Gurobi le cuesta más tiempo dar con la solución óptima.

52
En la Figura 26 que se muestra a continuación se aprecia la comparación de los tiempos medios de
proceso de cada máquina:

50000
45000
Tiempo de ejecución (seg)

40000
35000 20 Máquinas
30000
30 Máquinas
25000
40 Máquinas
20000
50 Máquinas
15000
10000 100 Máquinas
5000 200 Máquinas
0
0 100 200 300 400 500 600
Nº Trabajos

Figura 26. Tiempo de cómputo de Gurobi para BG. Comparación de tiempos medios

Analizando todas las pruebas efectuadas con Matlab y Gurobi, se concluye que el número de trabajos
no es un factor de importancia (para lo que se consideran tamaños teóricos en la literatura de
programación de la producción, de hasta 1000 trabajos diferentes) a la hora de resolver el problema,
ya que cuando el número de máquinas es pequeño, el modelo es resuelto en tiempos aceptables. No
ocurre así si usamos un gran número de máquinas, ya que en este caso a medida que aumentamos el
número de trabajos, el tiempo de ejecución que necesita Gurobi para resolver el problema aumenta
considerablemente llegando a necesitar varias horas para conseguir la solución óptima del problema.

53
54
5 RESOLUCIÓN DEL PROBLEMA DE FORMA
APROXIMADA
5.1. Introducción
En ocasiones no es posible obtener una solución óptima de un problema determinado debido a la
complejidad y tamaño del mismo. La idea de heurística persigue, no encontrar la mejor solución,
sino obtener una buena solución en un corto periodo de tiempo.

Se puede definir una heurística como una técnica que aumenta la eficacia de un proceso de búsqueda,
sacrificando demandas de completitud (Ramos, 1995). Si la heurística utilizada es buena se pueden
conseguir soluciones aceptables (cercanas al óptimo) a problemas difíciles.

Debido a la gran diversidad de métodos heurísticos existentes, no es fácil dar una clasificación
completa. A esto hay que sumarle que muchas heurísticas han sido diseñadas para problemas
concretos sin posibilidad de ser generalizados o aplicarlo a problemas similares. A continuación se
clasifican según (Martí, 2010) los heurísticos más conocidos:

- Métodos de descomposición: consiste en la descomposición del problema en subproblemas


más sencillos de resolver.

- Métodos inductivos: estos métodos generalizan versiones pequeñas o sencillas al caso


completo. Pueden aplicarse al problema completo técnicas identificadas más fáciles de
analizar.

- Métodos de reducción: el objetivo de estas heurísticas es restringir el espacio de soluciones


de manera que se simplifique el problema identificando propiedades que se cumplen por las
buenas soluciones e introduciendolas como restricciones del problema. El inconveniente
principal de estos métodos es la posibilidad de dejar fuera soluciones óptimas del problema
original.

- Métodos constructivos: en estos métodos se construyen paso a paso una solución del
problema. Estos métodos suelen ser deterministas y están basados en la mejor elección en
cada iteración. Un problema clásico donde se utiliza este método es el problema del viajante.

- Métodos de búsqueda local: estos métodos comienzan con una solución inicial del problema,
mejorándola paso a paso. En cada paso se realiza un movimiento de una solución a otra con
un valor mejor. El criterio de parada de estos métodos se alcanza cuando no exista una
solución posible que mejore la anterior.

55
La calidad de un heurístico se puede medir mediante diferentes procedimientos, entre los que
destacan los siguientes (Martí, 2010):

- Comparación con la solución óptima: para ello es necesario disponer de un procedimiento


que proporcione la solución óptima para un conjunto reducido de ejemplos. Lo más habitual
es medir en cada uno de los ejemplos la desviación porcentual de la solución proporcionada
por la heurística frente a la óptima, calculando el promedio de dichas desviaciones. Para
obtener la desviación porcentual de un problema de minimización se utiliza la siguiente
\] :\^_`
expresión:
\^_`
· 100.

- Comparación con una cota: cuando no es posible obtener la solución óptima del problema, se
puede comparar el valor de la solución proporcionada por la heurística con una cota del
problema (en el caso de un problema de minimización es necesaria una cota inferior y en el
caso de un problema de maximización la cota necesaria debe ser superior). Cuanto más cerca
esté esta cota del óptimo del problema, mejor será la solución obtenida por el heurístico. Esto
obliga a tener cierta información de la bondad de dicha cota.

- Comparación con un método exacto truncado: los métodos enumerativos exploran una gran
cantidad de soluciones, sin embargo, es posible establecer un criterio de parada (número de
iteraciones máximas o tiempo máximo) para el algoritmo. En los problemas de
maximización es posible saturar algún nodo en el caso en que su cota inferior sea menor o
igual que la cota superior global más un cierto α (de forma análoga puede usarse para
problemas de minimización). Con esto se consigue que el valor de la mejor solución obtenida
por la heurística no se desvia más de α del óptimo del problema. Mediante la mejor solución
obtenida por este procedimiento es posible contrastar el heurístico con la cota obtenida.

- Comparación con otros heurísticos: este método es el más utilizado para problemas NP-Hard,
en el que el resultado de dicha comparación depende de la bondad de la heurística escogida.

- Análisis del peor caso: consiste en analizar el comportamiento del heurístico en el peor caso
posible, para ello es necesario considerar los ejemplos más desfavorables para el algoritmo y
acotar de forma analítica la máxima desviación respecto del óptimo. Debido a que se acota el
resultado del algoritmo para cualquier ejemplo, los resultados no son representativos.

56
5.2. Presentación de la heurística
La heurística simple que se propone en este Trabajo Fin de Grado ha sido diseñada con la finalidad
de aumentar las cargas de trabajo de las máquinas lo menos posible asignando y secuenciando
iterativamente los trabajos a las máquinas. El objetivo de esta heurística es el de obtener como
resultado un programa de producción que logre un menor balance de las cargas de trabajo en las
máquinas y un menor makespan ( ! ). Según la clasificación anterior, se trata de una heurística
constuctiva en la que se va construyendo paso a paso una solución al problema.

Sea n la cantidad de trabajos y m la cantidad de máquinas, se denominará pij al tiempo de proceso del
trabajo j en la máquina i y L(i) a la carga de trabajo de la máquina i.

La carga de trabajo de una máquina se obtiene mediante la suma de todos los tiempos de proceso de
los trabajos que son asignados a dicha máquina (Pérez González, 2014):

(@) = 2 &/ ∀@
∀ ∈/

Los pasos a seguir para la resolución de la heurística son los siguientes:

- Paso 1: Inicializar a 0 las cargas de todas las máquinas.

- Paso 2: Seleccionar el primer trabajo y asignarlo a la máquina cuyo tiempo de proceso sea
menor. En caso de igualdad de tiempos de proceso, colocar aleatoriamente.

- Paso 3: Actualizar las cargas de las máquinas sumando al tiempo de proceso la carga de la
máquina donde ha sido asignado el trabajo.

- Paso 4: Seleccionar el siguiente trabajo y asignarlo a la máquina cuya suma de su carga y del
tiempo de proceso del trabajo en esa máquina sea menor. En el caso de igualdad en dicho
valor, colocar aleatoriamente.

- Paso 5: Actualizar las cargas de las máquinas sumando al tiempo de proceso la carga de la
máquina donde ha sido asignado el trabajo.

- Paso 6: Si quedan trabajos por asignar volver al paso 4.

- Paso 7: Calcular el makespan del problema. El makespan corresponde al valor de la mayor


carga de todas las máquinas.

En la Figura 27 que se muestra a continuación se muestra el diagrama de flujo del algoritmo


propuesto para este problema:

57
INICIO

Inicializar carga
de máquinas

¿Primer
trabajo a No

asignar?

Pasar al siguiente Si
trabajo
Asignar trabajo
a máquina más
Si rápida

¿Quedan Actualizar la Asignar trabajo a máquina


trabajos por carga de las cuya suma de carga de la
asignar? máquinas máquina y tiempo de
proceso sea menor

No

Calcular
makespan

FIN

Figura 27. Diagrama de flujo del algoritmo

5.3. Ejemplo numérico


En este apartado se va a realizar un ejemplo numérico sencillo con el fin de comprender de una
manera más clara el funcionamiento de la heurística presentada. Para la realización del ejemplo se
van a utilizar los datos del problema presentado en el ejemplo numérico del apartado 3.4. donde se
realizó el mismo problema pero resuelto mediante el Solver de Excel, lo cual proporcionó el óptimo
de dicho problema. Al utilizar el mismo ejemplo podremos posteriormente realizar una comparación
entre ambas soluciones y ver si la heurística proporciona una solución cercana al óptimo. Los
tiempos de proceso de cada trabajo en cada máquina se exponen en la Tabla 1.

Para empezar a aplicar la heurística lo primero es definir la variable L(i) correspondiente a las cargas

58
de trabajo que tiene cada una de las máquinas. Inicialmente esta carga de trabajo es 0 para todas las
máquinas:

L(1) = L(2) = L(3) = 0

Tras esto se selecciona el primer trabajo y observamos en qué máquina se realiza en menor tiempo.
Puede apreciarse que en la máquina 2 el trabajo 1 se realiza en menos tiempo que en las demás
máquinas, con lo cual asignamos este trabajo a esta máquina.

Figura 28. Paso 1. Ejemplo numérico de la heurística

Una vez asignado el primer trabajo, las cargas de las máquinas pasan ser:

L(1) = L(3) = 0

L(2) = 3

Se selecciona el segundo trabajo para asignarlo a la máquina correspondiente. Para ello se calcula la
suma del tiempo de proceso de ese trabajo en esa máquina más la carga de la máquina. En la
máquina en que la que esta suma sea menor se asignará dicho trabajo.

M1: 8 + 0 = 8

M2: 1 + 3 = 4

M3: 5 + 0 = 5

Vemos que el mínimo se corresponde a la máquina 2, por lo tanto será la máquina seleccionada para
asignar el trabajo 2.

59
Figura 29. Paso 2. Ejemplo numérico de la heurística

Las cargas de las máquinas quedan de la siguiente manera:

L(1) = L(3) = 0

L(2) = 4

Se procede igual con el siguiente trabajo, el trabajo 3, y se vuelve a comprobar en que máquina su
tiempo de trabajo más la carga de la máquina es menor para colocar el trabajo en dicha máquina.

M1: 2 + 0 = 2

M2: 6 + 4 = 10

M3: 7 + 0 = 7

Se observa como el mínimo se corresponde a la máquina 1, es ahí donde se colocará el trabajo 3.

Figura 30. Paso 3. Ejemplo numérico de la heurística

60
Tras esta operación, las cargas de las máquinas se distribuyen de la siguiente manera:

L(1) = 2

L(2) = 4

L(3) = 0

El siguiente trabajo a colocar es el 4, volvemos a realizar el procedimiento anterior calculando la


suma del tiempo de proceso más la carga de la máquina en cada una de las máquinas. Se debe tener
en cuenta que el trabajo 4 no puede ser procesado por la máquina 1.

M2: 5 + 4 = 9

M3: 4 + 0 = 4

El valor menor se corresponde con la máquina 3, es ahí donde será asignado el trabajo 4.

Figura 31. Paso 4. Ejemplo numérico de la heurística

Las cargas de las máquinas, tras esta última operación, quedan de la siguiente manera:

L(1) = 2

L(2) = 4

L(3) = 4

Por último se comprueba para el trabajo 5 en que máquina su tiempo de proceso más la carga de la
máquina es menor. Este trabajo no puede ser procesado en la máquina 2, con lo que no se tendrá en
cuenta dicha máquina.

M1: 4 + 2 = 6

M3: 1 + 4 = 5

Comprobamos que el valor menor se corresponde con el de la máquina 3, con lo cual será en dicha
máquina donde irá asignado el trabajo 5.

61
Figura 32. Paso 5. Ejemplo numérico de la heurística

Tras haber asignado cada trabajo a una máquina, el último paso es calcular el makespan, este valor
corresponde al máximo de los valores de las cargas de cada máquina.

L(1) = 2

L(2) = 4

L(3) = 5

El máximo es 5, correspondiente a la máquina 3. Es decir, el makespan de este problema es 5.

Comparando el resultado obtenido por la heurística con el valor del makespan obtenido por el Solver
de Excel, podemos apreciar como el makespan obtenido es el mismo, al igual que la secuencia.
Podemos concluir que mediante esta heurística hemos obtenido el óptimo, aunque no necesariamente
debe ocurrir así con el resto de problemas.

Para comprobar de una manera más exacta la desviación de las soluciones proporcionadas con la
heurística respecto al óptimo se va a utilizar el porcentaje de desviación relativa (PDR) (Martí, 2010)
que viene dada por la siguiente expresión:

b*?G' ó&C@ G − b*?G' ℎ>('í1C@K*


)a = +100
b*?G' ó&C@ G

Para este ejemplo sencillo podemos comprobar mediante la fórmula anterior como este porcentaje de
desviación es 0, ya que la solución obtenida con la heurística coincide con el óptimo:

5−5
)a = +100 = 0
5

62
5.4. Resultados
En este apartado se van a analizar los resultados obtenidos por la heurística programada en lenguaje
C. Los resultados a analizar van a ser tanto el tiempo que tarda la heurística en proporcionar la
solución como el makespan. Este último valor nos aportará, mediante el cálculo del PDR, lo cerca
que está dicho valor del óptimo y se podrá comprobar la bondad de esta heurística y para qué valores
proporciona una solución más cercana al óptimo. Al igual que con el modelo anteriormente descrito,
se van a analizar los resultados para la Batería Pequeña (BP) y la Batería Grande (BG) (ver apartado
4.4) que se usaron para el modelo y así poder comparar resultados.

A continuación se muestra un resumen de los resultados obtenidos por la heurística en la batería de


problemas con un número de máquinas pequeño (BP), cuyos valores de número de máquinas y de
trabajos se muestran en el apartado 4.4. Para cada tipo de problema se han usado 5 instancias y se ha
calculado la media de cada tipo de problema. En el Anexo 4 pueden verse los resultados de todos los
problemas de manera más detallada.

En las Figuras 33, 34, 35, 36 y 37 se muestran los resultados del PDR de cada máquina para los
distintos trabajos correspondientes a la Batería Pequeña, es decir, el porcentaje de la diferencia que
existe entre la solución óptima proporcionada por el modelo de programación lineal y la heurística.

Como se muestra en la Figura 33, el PDR medio para problemas con 2 máquinas ronda el 15% de
media, sin producirse grandes variaciones conforme se aumenta el número de trabajos. Para
problemas con 4 máquinas se puede apreciar que el PDR medio aumenta respecto al caso anterior
con 2 máquinas (Figura 34). Al igual que en el caso anterior con 2 máquinas, no se producen grandes
variaciones conforme se aumenta el número de trabajos, siendo la media de un 25%
aproximadamente con un rango de ± 2% sobre la media. En la Figura 35 se muestra el caso en el que
se utilizan 6 máquinas. En estos problemas el PDR medio vuelve a aumentar hasta alcanzar un
30,83%. Como ocurre en los casos anteriores, el PDR medio no aumenta conforme se aumenta el
número de trabajos, siendo el PDR más pequeño de 28,52% en el caso en el que se procesan 900
trabajos y el más grande de 33,41% cuando el número de trabajos es de 300. Aumentando el número
de máquinas a 8, podemos observar en la Figura 36 que sigue aumentando el PDR medio, en este
caso es de un 33,16%. Se produce una variabilidad mínima respecto al número de trabajos,
volviendo a ser el número de trabajos un dato sin relevancia a la hora de calcular el PDR del
problema. Como se observa en la Figura 37, en el último caso de la Batería Pequeña (10 máquinas),
el PDR medio es de un 35,30%. Como ocurre en el resto de problemas de la Batería Pequeña, el
número de trabajos no influye significativamente en el PDR del problema ya que no aumenta
conforme aumenta el número de trabajos, siendo la variabilidad del problema de un 9%
aproximadamente.
63
m 2 4 6 8 10
Media Media Media Media Media Media Media Media Media Media
PDR PDR PDR PDR PDR
Modelo Heurística Modelo Heurística Modelo Heurística Modelo Heurística Modelo Heurística
n Medio Medio Medio Medio Medio
(seg) (seg) (seg) (seg) (seg) (seg) (seg) (seg) (seg) (seg)
100 0,0676 0,0422 19,65% 0,2896 0,0290 27,18% 1,3831 0,0386 31,55% 1,8565 0,0552 34,48% 6,1132 0,0652 41,58%
200 0,0240 0,0324 16,70% 0,4692 0,0540 26,32% 3,2135 0,0758 31,45% 4,6603 0,0996 37,72% 15,0237 0,1230 37,72%
300 0,0556 0,0472 12,77% 0,6744 0,0830 23,39% 3,2751 0,1146 33,41% 26,9921 0,1472 31,54% 385,1370 0,1934 34,09%
400 0,0564 0,0922 13,91% 0,8715 0,1938 25,75% 2,4473 0,1770 30,71% 108,2386 0,2842 36,01% 115,1596 0,2982 35,42%
500 0,0560 0,0938 14,18% 0,8949 0,1470 26,01% 4,8811 0,2072 31,39% 10,5204 0,2736 31,74% 2332,7606 0,2736 37,46%
600 0,0648 0,1106 16,64% 0,9627 0,1786 24,64% 14,5958 0,2452 30,11% 23,5181 0,3204 33,76% 159,3929 0,3968 33,18%
64

700 0,0802 0,1218 15,13% 1,0067 0,2416 25,96% 2,5667 0,3962 30,73% 25,1582 0,4302 31,52% 400,9519 0,4750 34,16%
800 0,0698 0,1420 14,26% 0,9099 0,2374 25,41% 1,3177 0,3324 30,05% 17,8684 0,4330 32,17% 59,3008 0,5420 33,96%
900 0,0796 0,1592 15,88% 1,8351 0,2684 23,67% 14,5958 0,3778 28,52% 195,3192 0,4896 31,97% 288,4547 0,6060 32,54%
1000 0,0954 0,1738 14,65% 1,2657 0,2988 24,55% 18,1296 0,4208 30,32% 46,4169 0,5460 30,72% 866,2115 0,6678 32,86%
Total 0,0649 0,1015 15,38% 0,9180 0,1732 25,29% 6,6406 0,2386 30,83% 46,0549 0,3079 33,16% 462,8506 0,3641 35,30%

Tabla 4. Datos de Tiempos medios del modelo de PL y Heurística y PDR Medio para BP
En la Tabla 4 se puede observar una comparación de los tiempos de cómputo obtenidos por el
modelo y los proporcionados por la heurística a la hora de resolver los distintos problemas de la
Batería Pequeña. Se aprecia una gran diferencia entre el tiempo de cómputo que proporciona el
modelo y el que proporciona la heurística, en este último caso, en ninguno de los problemas resueltos
se llega al tiempo de cómputo de un segundo. A pesar de que a medida que se aumenta el número de
máquinas, aumenta el tiempo de cómputo de la heurística, este aumento es muy pequeño, del orden
de centésimas. Puede observarse como el Porcentaje de Desviación Relativa (PDR) aumenta
conforme aumenta el número de máquinas, sin embargo, el PDR no sigue una tendencia clara
conforme aumenta el número de trabajos.

25,00%

20,00%
PDR Medio

15,00%

10,00%

5,00%

0,00%
0 100 200 300 400 500 600 700 800 900 1000 1100
Nº Trabajos

Figura 33. PDR medio para los valores de n. m = 2

27,50%
27,00%
26,50%
26,00%
PDR Medio

25,50%
25,00%
24,50%
24,00%
23,50%
23,00%
0 100 200 300 400 500 600 700 800 900 1000 1100
Nº Trabajos

Figura 34. PDR medio para los valores de n. m = 4

65
34,00%

33,00%

32,00%
PDR Medio

31,00%

30,00%

29,00%

28,00%
0 100 200 300 400 500 600 700 800 900 1000 1100
Nº Trabajos

Figura 35. PDR medio para los valores de n. m = 6

40,00%
35,00%
30,00%
25,00%
PDR Medio

20,00%
15,00%
10,00%
5,00%
0,00%
0 100 200 300 400 500 600 700 800 900 1000 1100
Nº Trabajos

Figura 36. PDR medio para los valores de n. m = 8

66
45,00%
40,00%
35,00%
30,00%
PDR Medio

25,00%
20,00%
15,00%
10,00%
5,00%
0,00%
0 100 200 300 400 500 600 700 800 900 1000 1100
Nº Trabajos

Figura 37. PDR medio para los valores de n. m = 10

Como puede apreciarse en la Tabla y las Figuras anteriores, para la batería BP, el porcentaje de
desviación relativa (PDR) no es muy elevado tratándose de una heurística constructiva, en la que no
se utiliza una búsqueda local ni métodos complejos. A medida que se aumenta el número de
máquinas este porcentaje va aumentando, llegando al 40% en el caso más elevado en el que el
número de máquinas es 10 y el de trabajos es 100. A pesar de ser una heurística en la que la
diferencia con el óptimo es elevada, el verdadero valor de esta heurística es que proporciona
soluciones de una manera muy rápida como se muestra en los tiempos de cómputo presentados en la
Tabla 4.

En la Figura 38 se recogen todas las Figuras anteriores para ver de una manera más clara como
aumenta el PDR conforme aumenta el número de máquinas:

45,00%
40,00%
35,00%
30,00%
PDR Medio

2 Máquinas
25,00%
4 Máquinas
20,00%
6 Máquinas
15,00%
8 Máquinas
10,00%
10 Máquinas
5,00%
0,00%
0 100 200 300 400 500 600 700 800 900 1000 1100
Nº Trabajos

Figura 38. Resumen de PDR medios para los valores de m de la BP

67
A continuación se muestra la Figura 39 el porcentaje de desviación medio dependiendo del número
de máquinas en la que se puede observar claramente como a medida que aumenta el número de
máquinas y el problema es más grande esta diferencia con el óptimo aumenta:

40,00%
35,00%
30,00%
25,00%
PDR Medio

20,00%
15,00%
10,00%
5,00%
0,00%
0 2 4 6 8 10 12
Nº Máquinas

Figura 39. PDR medio para BP de las distintas máquinas

Por último, para observar de una manera más clara la diferencia de tiempos de cómputo que existe
entre el modelo de programación lineal y la heurística, en la Figura 40 se muestra esta diferencia,
pudiendo observarse como la heurística otorga soluciones en tiempos mucho más cortos que el
modelo.

500
450
Tiempo de cómputo (Seg)

400
350
300
250
Modelo
200
Heurística
150
100
50
0
0 2 4 6 8 10 12
Nº máquinas

Figura 40. Diferencia de tiempos de cómputo entre modelo y heurística en BP

68
Tras realizar el análisis con un número pequeño de máquinas, al igual que con el modelo, se va a
analizar otra batería de problemas con la batería grande BG. Los números de máquinas y trabajos
utilizados pueden observarse en el apartado 4.4. En la Tabla 5 se muestra un resumen de los
resultados obtenidos por la heurística y su comparación con los obtenidos por el modelo. En el
Anexo 4 se presentan de una forma más detallada los resultados obtenidos por la heurística.

En las Figuras 41, 42, 43, 44, 45 y 46 se muestran los resultados del porcentaje de desviación relativa
existente entre la solución óptima otorgada por el modelo de programación lineal y la heurística
programada de cada máquina para los distintos trabajos correspondientes a la Batería Grande.

Como se muestra en la Figura 41, en el caso en que se utilizan 20 máquinas, el PDR medio es un
66,23%. Se puede observar como hasta los 300 trabajos, este PDR es de un 40% aproximadamente,
es a partir de 400 trabajos cuando el PDR aumenta considerablemente, llegando a un 90% y
aumentando a partir de ese dato. En la Figura 42 se observa como a medida que se aumenta el
número de trabajos, el PDR se incrementa llegando a un 70% aproximadamente. Para estos
problemas con 30 máquinas el PDR medio que se consigue es de un 53,40% aproximadamente, un
PDR medio ligeramente inferior que el obtenido en el caso anterior de 20 máquinas. Para problemas
con 40 máquinas (Figura 43), el PDR medio obtenido es de 57,38%, dato ligeramente superior al
caso de 30 máquinas, aunque muy parecido. En la Figura puede apreciarse como hasta los 300
trabajos el PDR es de un 55% aproximadamente. Cuando se aumenta el número de trabajos a 400
este PDR aumenta considerablemente hasta un 63% aproximadamente. Al aumentar el número de
máquinas a 50, podemos observar en la Figura 44 como los datos de PDR van desde un 38%
aproximadamente para el caso en que se utilizan 100 trabajos hasta un 60% cuando se utilizan 200
trabajos, disminuyendo sensiblemente cuando se aumenta este número de trabajos a 300 llegando
hasta un 55% aproximadamente. El PDR medio para estos problemas en que se utilizan 50 máquinas
es de 51,55%, porcentaje inferior a todos los casos anteriores en que el número de máquinas era
inferior. En la Figura 45 puede apreciarse como el PDR medio para los problemas con 100 máquinas
es de un 36% aproximadamente, dato que vuelve a disminuir al igual que en los casos anteriores. Los
datos obtenidos son de un 32% aproximadamente cuando se tienen 100 trabajos y de un 41%
aproximadamente en el caso en que se utilizan 200 trabajos. Por último, en la Figura 46, se muestra
el problema en que se utilizan 200 trabajos. En estos problemas se obtiene un PDR medio de un
19,83%. Comparando este dato con todos los casos anteriormente analizados, podemos comprobar
cómo es el dato de PDR más pequeño obtenido hasta el momento.

69
m 20 30 40 50 100 200
Media Media PDR Media Media PDR Media Media PDR Media Media PDR Media Media PDR Media Media
PDR Medio
n Modelo Heurística Medio Modelo Heurística Medio Modelo Heurística Medio Modelo Heurística Medio Modelo Heurística Medio Modelo Heurística
100 0,3274 0,1556 46,91% 0,4900 0,2260 33,79% 0,5294 0,2534 53,85% 0,6464 0,3184 37,96% 0,8010 0,6278 32,67% 0,9487 1,2604 10,00%

200 171,4956 0,2532 45,44% 616,6825 0,3756 52,09% 746,3883 0,5006 56,87% 926,6562 0,6340 60,84% 14172,1513 1,2454 40,89% 23276,1201 2,5188 29,67%

300 943,2393 0,4192 41,57% 995,7762 0,5798 47,68% 1143,8645 0,7492 55,52% 14168,0759 0,9464 55,87% > 45000 1,8684 - > 45000 3,7520 -
70

400 1502,5142 0,5080 90,34% 3309,7865 0,7534 60,63% 40415,2911 0,9986 63,28% > 45000 1,2586 - > 45000 2,5218 - > 45000 4,9430 -

500 10337,0884 0,6202 106,89% 28616,5653 0,9296 72,81% > 45000 1,2146 - > 45000 1,5462 - > 45000 8,5160 - > 45000 6,9818 -

Total 2590,9330 0,3912 66,23% 6707,8601 0,5729 53,40% 17461,2147 0,7433 57,38% 21019,0757 0,9407 51,55% 29834,5905 2,9559 36,78% 31655,4138 3,8912 19,83%

Tabla 5. Datos de Tiempos medios del modelo de PL y Heurística y PDR Medio para BG
En la Tabla 5 puede apreciarse la comparación entre el tiempo de cómputo que proporciona Gurobi
al resolver el modelo de programación lineal y el que proporciona la heurística. Puede apreciarse
como a medida que aumenta el número de máquinas, el tiempo de cómputo de la heurística aumenta,
aunque este incremento es muy pequeño, llegando a los 4 segundos aproximadamente en el caso de
200 máquinas. La diferencia de tiempos entre la heurística y el modelo aumenta considerablemente a
medida que aumenta el número de máquinas. En cuanto al PDR se observa que, conforme aumenta
el número de máquinas, este índice disminuye. Respecto al número de trabajos, el PDR no sigue un
patrón claro si lo aumentamos.

Cabe destacar que hay problemas en los que el modelo no pudo obtener la solución óptima. En estos
casos el tiempo de cómputo que se le asigna es de 45000 seg. Sin embargo, al no obtener el
makespan óptimo de estos problemas, no se ha podido calcular el PDR.

120,00%

100,00%

80,00%
PDR Medio

60,00%

40,00%

20,00%

0,00%
0 100 200 300 400 500 600
Nº Trabajos

Figura 41. PDR medio para los valores de n. m = 20

71
80,00%
70,00%
60,00%
50,00%
PDR Medio

40,00%
30,00%
20,00%
10,00%
0,00%
0 100 200 300 400 500 600
Nº Trabajos

Figura 42. PDR medio para los valores de n. m = 30

64,00%

62,00%

60,00%
PDR Medio

58,00%

56,00%

54,00%

52,00%
0 100 200 300 400 500
Nº Trabajos

Figura 43. PDR medio para los valores de n. m = 40

72
70,00%

60,00%

50,00%
PDR Medio

40,00%

30,00%

20,00%

10,00%

0,00%
0 100 200 300 400
Nº Trabajos

Figura 44. PDR medio para los valores de n. m = 50

45,00%
40,00%
35,00%
30,00%
PDR Medio

25,00%
20,00%
15,00%
10,00%
5,00%
0,00%
0 100 200 300
Nº Trabajos

Figura 45. PDR medio para los valores de n. m = 100

73
35,00%

30,00%

25,00%
PDR Medio

20,00%

15,00%

10,00%

5,00%

0,00%
0 100 200 300
Nº Trabajos

Figura 46. PDR medio para los valores de n. m = 200

Cabe destacar que hay problemas en los que no pudo obtenerse una solución mediante el modelo ya
que su tiempo de ejecución era muy elevado, no obstante por medio de la heurística se han obtenido
soluciones en tiempos muy reducidos, por lo que para estos tipos de problemas es imprescindible el
uso de la heurística si se desea obtener una solución factible en un tiempo muy reducido

En la Figura 47 se recogen todas las Figuras anteriores para ver de una manera más clara como se
comporta el PDR conforme aumenta el número de máquinas:

120,00%

100,00%

80,00% 20 Máquinas
PDR Medio

30 Máquinas
60,00%
40 Máquinas
40,00% 50 Máquinas
100 Máquinas
20,00%
200 Máquinas
0,00%
0 100 200 300 400 500 600
Nº Trabajos

Figura 47. Resumen de PDR medios para los valores de m de la BG

74
A continuación se muestra en la Figura 48 el porcentaje de desviación medio dependiendo del
número de máquinas en la que se puede observar claramente como a medida que aumenta el número
de máquinas y el problema es más grande, esta diferencia con el óptimo disminuye:

70,00%

60,00%

50,00%
PDR Medio

40,00%

30,00%

20,00%

10,00%

0,00%
0 50 100 150 200 250
Nº Máquinas

Figura 48. PDR medio para BG de las distintas máquinas

Se puede apreciar como el porcentaje de desviación relativa aumenta considerablemente respecto a la


batería de problemas anterior (BP). A pesar de ser datos de PDR elevados, puede observarse en la
Tabla 5 como las soluciones se obtienen en tiempos muy rápidos, lo que le otorga a esta heurística
cierta relevancia para problemas en que al modelo le cuesta mucho tiempo dar el óptimo o es incapaz
de darlo en tiempos razonables. Puede apreciarse que para problemas cuyo número de máquinas es
más grande, el PDR es más pequeño, lo que proporciona cierta importancia a esta heurística, ya que
son en estos problemas más grande dónde el modelo encuentra una mayor dificultad a la hora de
proporcionar el óptimo, mientras que la heurística otorga una solución en un tiempo muy razonable.

Para observar de una manera más evidente la diferencia de tiempos de cómputo que existe entre el
modelo de programación lineal y la heurística, en la Figura 49 se muestra esta diferencia, como ya se
ha comentado anteriormente, la heurística proporciona soluciones en tiempos mucho más cortos (en
torno al segundo) que el modelo.

75
30000

25000

Tiempode cómputo (seg)


20000

15000
Modelo
10000 Heurística

5000

0
0 50 100 150 200 250
Nº Máquinas

Figura 49. Diferencia de tiempos de cómputo entre modelo y heurística en BG

76
6 CONCLUSIONES

En el Trabajo Fin de Grado se ha estudiado un problema de programación de la producción. Para


poder llevar a cabo este estudio se ha resuelto de dos maneras distintas: mediante un modelo de
programación lineal y mediante una heurística. El problema que se ha estudiado es de programación
en máquinas paralelas no relacionadas, con la restricción de elegibilidad y cuyo objetivo ha sido
minimizar su makespan. Para llevar a cabo este estudio, el Trabajo Fin de Grado comienza con unos
capítulos en los que se explica brevemente la historia y evolución de la programación de la
producción continuando con sus características, particularidades y tipos de problemas.

Tras estos capítulos teóricos, el capítulo 3 describe el problema que se aborda, explicando el tipo de
problema y todas las características y peculiaridades a tener en cuenta para poder obtener la solución
al problema. Este capítulo concluye con un ejemplo sencillo resuelto mediante el optimizador Solver
de Excel.

El problema de máquinas paralelas se resuelve de forma óptima en el capítulo 4. Para ello se ha


programado mediante el software Matlab el modelo a resolver habiendo, previamente, programado
mediante el mismo software la creación de las dos baterías de problemas. Estas dos baterías se han
diferenciado por el tamaño de los problemas que generan, una batería de problemas pequeños (BP) y
otra de problemas más grandes (BG) de manera que se pueda estudiar el comportamiento del modelo
ante distintos tamaños de problemas. Para poder resolver el modelo de programación lineal
programado en Matlab se ha utilizado el optimizador Gurobi el cual nos proporciona en archivos .txt
las soluciones a los distintos problemas que se han generado por la batería de problemas. Ante la
inexperiencia y poco conocimiento del lenguaje Matlab y más en concreto del optimizador Gurobi, la
programación y resolución de los problemas no ha sido un trabajo fácil, requiriendo muchas
modificaciones y pruebas hasta conseguir el programa necesario para que se genere y resuelvan de
manera satisfactoria los distintos problemas que se querían estudiar. Tras haber conseguido estas
soluciones en archivos .txt, estos archivos fueron exportados a Excel, donde mediante tablas y
gráficos se ha conseguido obtener una vista de los resultados más fáciles de estudiar y observar. Se
ha demostrado que Gurobi resuelve en tiempos razonables problemas de hasta 8 máquinas,
independientemente del número de trabajos. Para la Batería Grande los tiempos han sido muy
elevados con más de 3 horas para problemas de 20 máquinas y 500 trabajos.

Se observa que hay problemas en los que, debido a su tamaño, el optimizador no es capaz de resolver
en tiempos aceptables. Debido a esta incapacidad del modelo de obtener el óptimo en un tiempo

77
razonable, se ha optado por programar una heurística que, a pesar de no proporcionar la solución
óptima, otorga soluciones factibles en tiempos muy cortos.

La heurística constructiva propuesta para resolver los problemas está basada en la carga de las
máquinas, asignando los trabajos a las máquinas cuya carga sea menor, de manera que se equilibren
las cargas de todas las máquinas. Esta heurística, programada en lenguaje C, lee los mismos archivos
.txt de los distintos problemas generados por la batería de problemas y que se resolvieron por el
modelo de programación lineal. Al igual que con el modelo de programación lineal, la heurística
proporciona archivos .txt con las soluciones de los problemas, soluciones que son exportadas a Excel
obteniéndose las gráficas y tablas necesarias para su estudio posterior.

Tras obtener las soluciones que proporciona la heurística y el óptimo que calcula el modelo de
programación lineal, se ha procedido a estudiar la diferencia entre las soluciones que proporcionan
ambos métodos. Esto se ha realizado mediante el Porcentaje de Desviación Relativa (PDR) que
estudia la diferencia de makespan entre ambos métodos. Una vez obtenido este índice ya puede
estudiarse la diferencia que existe entre las soluciones obtenidas. Tras el análisis se llega a la
conclusión de que la diferencia entre ambas soluciones es muy elevada, no obteniéndose, mediante la
heurística, soluciones muy cercanas al óptimo, sin embargo, se consiguen soluciones a problemas
que el modelo no ha podido resolver, a la vez que los tiempos de cómputo de la heurística son muy
inferiores a los del modelo. Con todos estos datos se puede concluir que para problemas grandes en
los que el modelo no es capaz de proporcionar el óptimo, o para aquellos cuyos tiempos de cómputo
sean muy elevados la heurística es una buena salida para obtener una solución en tiempos muy
cortos.

78
BIBLIOGRAFÍA

[Arango, Giraldo, & Castrillón, 2013] Arango, J. a., Giraldo, J. a., & Castrillón, O. D. (2013).
Programación de máquinas paralelas no relacionadas con tiempos de montaje dependientes
de la secuencia y entrada dinámica usando algoritmos genéticos.Información Tecnológica,
Vol. 24 (3), 73-84.

[Companys Pascual, 1989] Companys Pascual, R. (1989). Planificación y programación de la


producción.Marcombo-Boixerau.

[Martí, 2010] Martí, Rafael (2010). Algoritmos Heurísticos en Optimización


Combinatoria.Departamento de Estadística e Investigación Operativa. Facultad de Ciencias
Matemáticas. Universidad de Valencia.

[Framiñan, Leisten, & Ruiz García, 2014] Framinan, J. M., Leisten, R., & Ruiz García, R. (2014).
Manufacturing Scheduling System : An Integrated View on Models, Methods and Tools.
Springer

[Gantt, 1910] Gantt, H. (1910). Work, Wages and Profit. Their influence on the cost of living.The
Engineering Magazine, New York.

[Gantt, 1919] Gantt, H. (1919). Organizing for Work. Harcourt, Brace and Howe, New York.

[Garey and Johnson, 1979] Garey, M. and Johnson, D. D. (1979). Computers and Intractability: A
Guide to the Theory of NP-Completeness.W. H. Freemangantt

[Graham, 1969] Graham, R. L. (1969). Bounds on multiprocessing timing anomalies.SIAM Journal


on Applied Mathematics, Vol. 17 (2), 416-429.

[Graham, 1979] Graham, R. L, Lawler, E. L., Lenstra, J. K., y Rinnooy Kan, A. H. G. (1979).
Optimization and Approximation in Deterministic Sequencing and Scheduling.Annals of
Discrete Mathematics, Vol. 5 (1), 287-326.

[Jackson, 1956] Jackson, J. R. (1956) An extension of Johnson’s results on job lot scheduling.Naval
Research Logistics Quarterly, Vol. 3 (3), 201-203.

[Johnson, 1954] Johnson, S.M. (1954). Optimal Two- and Three- Stage Production Schedules With
Set- up Time Included.Naval Research Logistics Quarterly, Vol. 1 (1), 61-68.

[Juan Velasco Sánchez, 2013] Juan Velasco Sánchez, J. A. C. M. (2013). Gestión de la


producción en la empresa : planificación, programación y control.Pirámide.

79
[Karp, 1975] Karp, R. M. (1975). Reducibility among combinational problems.The Journal of
Symbolic Logic, Vol. 40 (4), 618-619.

[Luis Fanjul Peyró, 2010] Fanjul Peyró, L. y Ruiz, R. (2010). Nuevos Algoritmos para el Problema
de Secuenciación en Máquinas Paralelas no Relacionadas y Generalizaciones.Tesis
Doctoral. Universidad de Valencia.

[Miranda Zambrana, 2010] Miranda Zambrana, A. (2010). Diseño del Software de control de
instrumento HP4142B para caracterización de dispositivos.Proyecto Fin de Carrera.
Universidad Politécnica de Cataluña.

[Pérez González, 2014] Pérez González, P. (2014). Programación y Control de la Producción.


Universidad de Sevilla.

[Pinedo 2009] Pinedo, M. L. (2009). Planning and Scheduling in Manufacturing and Services.
Springer

[Pinedo, 2012] Pinedo, M. L. (2012). Scheduling: Theory, Algorithms, and Systems.Springer

[Ramos, 1995] Ramos, S. A. (1995). Heurísticas y Problemas Combinatorios.Modelos y


Optimización I. Universidad de Buenos Aires.

[Smith, 1956] Smith, W. E. (1956). Various optimizers for single- stage production.Naval Research
Logistics Quarterly, Vol. 3, (1-2), 59-66.

[http://es.mathworks.com] MathWorks - MATLAB and Simulink for Technical Computing.

[http://www.gurobi.com] Gurobi Optimization - The Best Mathematical Programming Solver.

80
Anexos
Anexo 1: Batería de problemas y modelo matemático en Matlab

%Batería de problemas

numtrab=[100,200,300,400,500];
nummaq=[20,30,40,50,100,200];
fich2= sprintf('solucionBG.txt');
fi2=fopen(fich2,'wt');
v=1;
for q=1:5
for p=1:6
for k=1:5
T=[];

fich= sprintf('BG%0.3d.txt',v);
fich3=sprintf('H_BG%0.3d.txt',v);
save fich
fi=fopen(fich,'wt');
fi3=fopen(fich3,'wt');
fprintf(fi3,'%d\n%d\n',nummaq(p),numtrab(q));
for i=1:numtrab(q)
for j=1:nummaq(p)
A=floor(random('unif',1,101));
B=rand;
if B<0.1
A=1000;
end
T=[T A];
fprintf(fi,'%d ',A);
fprintf(fi3,'%d ',A);
end

81
fprintf(fi,'\n');
fprintf(fi3,'\n');
end
fclose(fi);

%Matriz de restricciones
a=0;
b=0;
c=0;
d=0;
m=nummaq(p);
n=numtrab(q);
x=zeros(m+n,m*n+1);
for h=1:n
a=a+1;
for g=1+b:m+b
x(h,g)=1;
end
b=b+m;
end
o=1;
e=0;
for g=a+1:m+n
for h=1:n
x(g,h+c)=T(o+e);
o=o+m;
c=c+m-1;
end
o=1;
e=e+1;
x(g,m*n+1)=-1;
d=d+1;
c=d;
a=a+1;
end

82
model.A=sparse(x)

%Vector de término independiente


B=[];
a=0;
for j=1:n
B=[B 1];
a=a+1;
end
for j=a+1:m+n
B=[B 0];
end
model.rhs=B;

%Criterio Funcion Objetivo


model.modelsense='Min';

%Signo de restricciones
SIGNO=[];
for i=1:n
SIGNO=[SIGNO '='];
end
for i=n+1:m+n
SIGNO=[SIGNO '<'];
end
model.sense=SIGNO;

%Vector Función Objetivo


objetivo=[];
for i=1:m*n
objetivo=[objetivo 0];
end
for i=m*n+1
objetivo=[objetivo 1];
end

83
model.obj=objetivo;

%Tipo de variables
V=[];
for i=1:m*n
V=[V 'B'];
end
for i=m*n+1
V=[V 'I'];
end
model.vtype=V;

%Resolucion del modelo


result=gurobi(model)
disp(result.objval)
disp(result.runtime)
resultad=result.x'

fprintf(fi2,'BG%0.3d: Problema%0.2d_%dx%d %d %10.5f


\n',v,k,numtrab(q),nummaq(p),result.objval,result.runtime);
v=v+1;
end
p=p+1;
end
q=q+1;
end

84
Anexo 2: Programación de heurística en C
#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <D:\Nueva carpeta\UNIVERSIDAD\INGENIERÍA ORGANIZACIÓN


INDUSTRIAL\Cuarto\Programación y Control de la Producción\C\Libreria
definitiva\schedule_lib.h>

int main(int argc,char *argv[])

//Variables de reloj

clock_t tini;

clock_t tfin;

double z;

z=0;

tini=clock();

FILE *output;

int n;

int m;

int nummaq=m; //Número de máquinas

int numtrab=n; //Número de trabajos

MAT_LONG pt; //Definición de la matriz de tiempos

pt=loadPTimes_nrows(argv[1], &numtrab,&nummaq,YES);

int k=0;

int x=0;

int j=0;

int i=0;

85
int L[nummaq]; //Carga de las máquinas

int maximo;

int minimo[numtrab];

for(k=0;k<nummaq;k++)//Bucle para poner todas las cargas de las máquinas a 0

L[k]=0;

for (i=0;i<numtrab;i++)

k=0;

if(i==0)//Si es el primer trabajo en colocar

minimo[i]=pt[i][0];//El tiempo de proceso del primer trabajo en la primera máquina se considera

el mínimo

for(j=1;j<nummaq;j++) //Bucle para recorrer cada máquina

k=x;

if (pt[i][j]<minimo[i])//Si el tiempo de proceso del trabajo en la máquina es menor que el

mínimo

minimo[i]=pt[i][j];//El minimo pasa a ser dicho tiempo de proceso

k=j;

x++;

else

x++;

86
}

L[k]=minimo[i]; //La carga de la máquina es el valor del mínimo

else //Si no es el primer trabajo en colocar

minimo[i]=pt[i][0]+L[0];

x=1;

for (j=1;j<nummaq;j++) //Bucle para recorrer cada máquina

if(pt[i][j]+L[x]<minimo[i]) //Si el tiempo de proceso + la carga de la máquina es menor

que el mínimo

minimo[i]=pt[i][j]+L[x]; //El mínimo pasa a ser dicho valor

k=j;

x++;

else

x++;

L[k]=minimo[i];//La carga de la máquina es el valor del mínimo

87
for (k=0;k<nummaq;k++)

printf("L[%d] = %d\n",k,L[k]);

//Cálculo del makespan

maximo=L[0];

for (k=1;k<nummaq;k++)//Bucle para ordenar las cargas de cada máquina

if(L[k]>maximo)

maximo=L[k];

printf("Cmax = %d",maximo);//El makespan es la mayor carga de las máquinas

// Cálculo del tiempo de cómputo

tfin=clock();

z=(double)(tfin-tini)/CLOCKS_PER_SEC;

printf("\nProcessing time\n%lg\n\n",z);

// Escribir en el archivo de salida

output = fopen(argv[2],"a");

fprintf(output,"%s %d %10.5f\n", argv[1], maximo, z);

fclose(output);// Cerrar archivo

return 0;

88
Anexo 3: Resultados del modelo

Batería Pequeña:

- 2 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP001 Problema01_100x2 1791 0,0180
BP002 Problema02_100x2 2515 0,0730
BP003 Problema03_100x2 1821 0,0600 2034 0,0676
BP004 Problema04_100x2 2219 0,1760
BP005 Problema05_100x2 1824 0,0110
BP026 Problema01_200x2 5850 0,0270
BP027 Problema02_200x2 3614 0,0160
BP028 Problema03_200x2 4763 0,0230 4874 0,0240
BP029 Problema04_200x2 3821 0,0310
BP030 Problema05_200x2 6324 0,0230
BP051 Problema01_300x2 6512 0,0330
BP052 Problema02_300x2 5576 0,0250
BP053 Problema03_300x2 7349 0,0510 6828 0,0556
BP054 Problema04_300x2 6897 0,0680
BP055 Problema05_300x2 7805 0,1010
BP076 Problema01_400x2 8216 0,0810
BP077 Problema02_400x2 9566 0,0530
BP078 Problema03_400x2 9991 0,0480 9610 0,0564
BP079 Problema04_400x2 11016 0,0360
BP080 Problema05_400x2 9262 0,0640
BP101 Problema01_500x2 9306 0,0840
BP102 Problema02_500x2 12802 0,0400
BP103 Problema03_500x2 12804 0,0660 11468 0,0560
BP104 Problema04_500x2 11247 0,0490
BP105 Problema05_500x2 11183 0,0410
BP126 Problema01_600x2 16898 0,0450
BP127 Problema02_600x2 14574 0,0540
BP128 Problema03_600x2 14690 0,0950 14394 0,0648
BP129 Problema04_600x2 11944 0,0530
BP130 Problema05_600x2 13863 0,0770
BP151 Problema01_700x2 15231 0,0580
BP152 Problema02_700x2 18097 0,0570
BP153 Problema03_700x2 14919 0,1030 16071 0,0802
BP154 Problema04_700x2 15427 0,0840
BP155 Problema05_700x2 16680 0,0990

89
Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP176 Problema01_800x2 17958 0,0810
BP177 Problema02_800x2 19903 0,0560
BP178 Problema03_800x2 16526 0,0950 18667 0,0698
BP179 Problema04_800x2 19352 0,0560
BP180 Problema05_800x2 19595 0,0610
BP201 Problema01_900x2 20017 0,0640
BP202 Problema02_900x2 19198 0,1030
BP203 Problema03_900x2 26226 0,0940 20887 0,0796
BP204 Problema04_900x2 18091 0,0710
BP205 Problema05_900x2 20904 0,0660
BP226 Problema01_1000x2 22979 0,1040
BP227 Problema02_1000x2 21685 0,0880
BP228 Problema03_1000x2 22863 0,1260 22809 0,0954
BP229 Problema04_1000x2 23762 0,0720
BP230 Problema05_1000x2 22755 0,0870

Tabla 6. Resultados del Modelo. 2 Máquinas

- 4 Máquinas

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP006 Problema01_100x4 559 0,3540
BP007 Problema02_100x4 644 0,4170
BP008 Problema03_100x4 583 0,3210 561 0,2896
BP009 Problema04_100x4 485 0,1940
BP010 Problema05_100x4 532 0,1620
BP031 Problema01_200x4 1058 0,5450
BP032 Problema02_200x4 1230 0,5540
BP033 Problema03_200x4 1193 0,2840 1121 0,4692
BP034 Problema04_200x4 1094 0,3250
BP035 Problema05_200x4 1031 0,6380
BP056 Problema01_300x4 1625 0,5370
BP057 Problema02_300x4 1767 0,3950
BP058 Problema03_300x4 1774 1,3431 1730 0,6744
BP059 Problema04_300x4 1753 0,5750
BP060 Problema05_300x4 1731 0,5220
BP081 Problema01_400x4 2247 1,8431
BP082 Problema02_400x4 2311 0,5540
BP083 Problema03_400x4 2273 0,7460 2309 0,8715
BP084 Problema04_400x4 2228 0,3330
BP085 Problema05_400x4 2487 0,8811

90
Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP106 Problema01_500x4 2870 0,3650
BP107 Problema02_500x4 2971 0,7900
BP108 Problema03_500x4 2893 1,1721 2872 0,8949
BP109 Problema04_500x4 2771 0,8601
BP110 Problema05_500x4 2857 1,2871
BP131 Problema01_600x4 3407 1,0011
BP132 Problema02_600x4 3394 1,3151
BP133 Problema03_600x4 3437 1,0381 3414 0,9627
BP134 Problema04_600x4 3473 0,8201
BP135 Problema05_600x4 3357 0,6390
BP156 Problema01_700x4 4017 0,5320
BP157 Problema02_700x4 3827 0,4470
BP158 Problema03_700x4 4131 1,8391 3929 1,0067
BP159 Problema04_700x4 3664 1,4671
BP160 Problema05_700x4 4007 0,7480
BP181 Problema01_800x4 4543 0,2810
BP182 Problema02_800x4 4640 1,1731
BP183 Problema03_800x4 4784 0,8161 4619 0,9099
BP184 Problema04_800x4 4529 0,9561
BP185 Problema05_800x4 4597 1,3231
BP206 Problema01_900x4 5260 4,0352
BP207 Problema02_900x4 5119 0,6300
BP208 Problema03_900x4 5148 1,8121 5175 1,8351
BP209 Problema04_900x4 5131 1,0291
BP210 Problema05_900x4 5218 1,6691
BP231 Problema01_1000x4 5702 0,7670
BP232 Problema02_1000x4 5840 1,7831
BP233 Problema03_1000x4 5838 1,0091 5756 1,2657
BP234 Problema04_1000x4 5577 1,6461
BP235 Problema05_1000x4 5822 1,1231

Tabla 7. Resultados del Modelo. 4 Máquinas

91
- 6 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP011 Problema01_100x6 277 1,9031
BP012 Problema02_100x6 259 2,0361
BP013 Problema03_100x6 284 0,5380 288 1,3831
BP014 Problema04_100x6 328 1,1521
BP015 Problema05_100x6 290 1,2861
BP036 Problema01_200x6 599 2,4871
BP037 Problema02_200x6 574 4,2843
BP038 Problema03_200x6 549 0,9471 571 3,2136
BP039 Problema04_200x6 575 4,4203
BP040 Problema05_200x6 557 3,9292
BP061 Problema01_300x6 821 7,2754
BP062 Problema02_300x6 849 2,2441
BP063 Problema03_300x6 818 2,3201 798 3,2752
BP064 Problema04_300x6 746 1,3421
BP065 Problema05_300x6 755 3,1942
BP086 Problema01_400x6 1126 3,6962
BP087 Problema02_400x6 1072 0,3850
BP088 Problema03_400x6 1080 2,5161 1110 2,4473
BP089 Problema04_400x6 1119 1,1041
BP090 Problema05_400x6 1154 4,5353
BP111 Problema01_500x6 1302 13,5528
BP112 Problema02_500x6 1314 3,5062
BP113 Problema03_500x6 1363 3,5852 1338 4,8811
BP114 Problema04_500x6 1311 2,1131
BP115 Problema05_500x6 1398 1,6481
BP136 Problema01_600x6 1641 21,4782
BP137 Problema02_600x6 1603 23,8374
BP138 Problema03_600x6 1623 2,3571 1642 14,5958
BP139 Problema04_600x6 1689 4,9833
BP140 Problema05_600x6 1654 20,3232
BP161 Problema01_700x6 1881 1,2911
BP162 Problema02_700x6 1864 0,2990
BP163 Problema03_700x6 2007 0,2110 1939 2,5667
BP164 Problema04_700x6 2013 1,4921
BP165 Problema05_700x6 1929 9,5406

92
Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP186 Problema01_800x6 2143 2,5902
BP187 Problema02_800x6 2294 0,5820
BP188 Problema03_800x6 2132 0,2370 2186 1,3177
BP189 Problema04_800x6 2244 2,6242
BP190 Problema05_800x6 2117 0,5550
BP211 Problema01_900x6 2395 0,2050
BP212 Problema02_900x6 2375 3,3662
BP213 Problema03_900x6 2371 3,6622 2405 14,0810
BP214 Problema04_900x6 2486 0,2580
BP215 Problema05_900x6 2400 62,9136
BP236 Problema01_1000x6 2651 0,2230
BP237 Problema02_1000x6 2771 4,2612
BP238 Problema03_1000x6 2764 1,8431 2744 18,1296
BP239 Problema04_1000x6 2744 0,2150
BP240 Problema05_1000x6 2789 84,1058

Tabla 8. Resultados del Modelo. 6 Máquinas

- 8 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP016 Problema01_100x8 139 0,9331
BP017 Problema02_100x8 167 1,1531
BP018 Problema03_100x8 160 5,8223 162 1,8565
BP019 Problema04_100x8 172 0,5920
BP020 Problema05_100x8 173 0,7821
BP041 Problema01_200x8 327 3,2142
BP042 Problema02_200x8 352 15,2009
BP043 Problema03_200x8 334 1,4361 342 4,6603
BP044 Problema04_200x8 356 1,2601
BP045 Problema05_200x8 343 2,1901
BP066 Problema01_300x8 461 65,5138
BP067 Problema02_300x8 450 5,9813
BP068 Problema03_300x8 502 21,0112 480 26,9921
BP069 Problema04_300x8 517 0,4220
BP070 Problema05_300x8 472 42,0324
BP091 Problema01_400x8 631 0,1890
BP092 Problema02_400x8 650 149,5806
BP093 Problema03_400x8 653 210,8281 647 108,2386
BP094 Problema04_400x8 643 52,5750
BP095 Problema05_400x8 659 128,0203

93
Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP116 Problema01_500x8 822 6,1194
BP117 Problema02_500x8 802 3,2002
BP118 Problema03_500x8 851 3,0812 830 10,5204
BP119 Problema04_500x8 836 11,0416
BP120 Problema05_500x8 837 29,1597
BP141 Problema01_600x8 970 1,4111
BP142 Problema02_600x8 1052 80,9076
BP143 Problema03_600x8 979 10,6536 981 23,5181
BP144 Problema04_600x8 949 5,9813
BP145 Problema05_600x8 957 18,6371
BP166 Problema01_700x8 1198 30,8448
BP167 Problema02_700x8 1144 38,0032
BP168 Problema03_700x8 1104 49,2868 1139 25,1582
BP169 Problema04_700x8 1131 6,6464
BP170 Problema05_700x8 1119 1,0101
BP191 Problema01_800x8 1252 0,4800
BP192 Problema02_800x8 1349 39,0022
BP193 Problema03_800x8 1273 45,9376 1290 17,8684
BP194 Problema04_800x8 1277 3,2952
BP195 Problema05_800x8 1299 0,6270
BP216 Problema01_900x8 1488 591,3878
BP217 Problema02_900x8 1443 160,1652
BP218 Problema03_900x8 1457 59,9784 1453 195,3192
BP219 Problema04_900x8 1430 117,0887
BP220 Problema05_900x8 1446 47,9757
BP241 Problema01_1000x8 1626 20,6902
BP242 Problema02_1000x8 1621 49,3998
BP243 Problema03_1000x8 1531 62,9456 1608 46,4169
BP244 Problema04_1000x8 1640 58,3603
BP245 Problema05_1000x8 1620 40,6883

Tabla 9. Resultados del Modelo. 8 Máquinas

94
- 10 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BP021 Problema01_100x10 120 2,2491
BP022 Problema02_100x10 96 14,4508
BP023 Problema03_100x10 105 0,1210 109 6,1132
BP024 Problema04_100x10 115 2,7162
BP025 Problema05_100x10 111 11,0286
BP046 Problema01_200x10 201 14,4368
BP047 Problema02_200x10 223 15,1279
BP048 Problema03_200x10 231 30,0027 211 15,0237
BP049 Problema04_200x10 187 6,1924
BP050 Problema05_200x10 213 9,3585
BP071 Problema01_300x10 352 1693,9399
BP072 Problema02_300x10 326 102,5529
BP073 Problema03_300x10 353 107,2001 328 385,1370
BP074 Problema04_300x10 287 1,9431
BP075 Problema05_300x10 323 20,0492
BP096 Problema01_400x10 454 235,0645
BP097 Problema02_400x10 397 13,3308
BP098 Problema03_400x10 422 232,1793 424 115,1596
BP099 Problema04_400x10 440 87,5640
BP100 Problema05_400x10 406 7,6594
BP121 Problema01_500x10 567 78,5405
BP122 Problema02_500x10 525 10328,0057
BP123 Problema03_500x10 478 66,3858 528 2332,7606
BP124 Problema04_500x10 531 1076,3206
BP125 Problema05_500x10 537 114,5506
BP146 Problema01_600x10 671 311,5318
BP147 Problema02_600x10 622 306,7195
BP148 Problema03_600x10 664 55,4152 636 159,3929
BP149 Problema04_600x10 632 72,6782
BP150 Problema05_600x10 590 50,6199
BP171 Problema01_700x10 732 291,1317
BP172 Problema02_700x10 779 132,5996
BP173 Problema03_700x10 776 1264,9994 749 400,9519
BP174 Problema04_700x10 723 206,3388
BP175 Problema05_700x10 734 109,6903

95
Tiempo
Código Problema Cmax Cmax Medio Tiempo Medio (Seg)
(Seg)
BP196 Problema01_800x10 826 6,8534
BP197 Problema02_800x10 817 4,0212
BP198 Problema03_800x10 911 74,5693 865 59,3008
BP199 Problema04_800x10 874 18,8661
BP200 Problema05_800x10 897 192,1940
BP221 Problema01_900x10 951 1337,0625
BP222 Problema02_900x10 952 1,1931
BP223 Problema03_900x10 927 24,0194 943 288,4547
BP224 Problema04_900x10 956 50,0129
BP225 Problema05_900x10 930 29,9857
BP246 Problema01_1000x10 1076 65,9588
BP247 Problema02_1000x10 1028 3020,9978
BP248 Problema03_1000x10 968 143,4652 1051 866,2115
BP249 Problema04_1000x10 1091 66,2458
BP250 Problema05_1000x10 1091 1034,3902

Tabla 10. Resultados del Modelo. 10 Máquinas

Batería Grande:

- 20 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BG001 Problema01_100x20 37 0,4820
BG002 Problema02_100x20 32 0,1445
BG003 Problema03_100x20 35 0,6650 35 0,3274
BG004 Problema04_100x20 39 0,1340
BG005 Problema05_100x20 34 0,2115
BG031 Problema01_200x20 62 3,1672
BG032 Problema02_200x20 65 37,2411
BG033 Problema03_200x20 65 31,7318 64 171,4956
BG034 Problema04_200x20 64 736,7641
BG035 Problema05_200x20 62 48,5738
BG061 Problema01_300x20 90 325,8742
BG062 Problema02_300x20 86 4209,1598
BG063 Problema03_300x20 87 107,5746 88 943,2393
BG064 Problema04_300x20 88 30,7985
BG065 Problema05_300x20 89 42,7896

96
Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BG091 Problema01_400x20 95 1473,5564
BG092 Problema02_400x20 94 1135,9431
BG093 Problema03_400x20 94 1730,0046 95 1502,5142
BG094 Problema04_400x20 97 1197,6661
BG095 Problema05_400x20 96 1975,4006
BG121 Problema01_500x20 102 5748,2514
BG122 Problema02_500x20 98 34920,8084
BG123 Problema03_500x20 101 1084,2100 101 10337,0884
BG124 Problema04_500x20 106 2613,8115
BG125 Problema05_500x20 100 7318,3606

Tabla 11. Resultados del Modelo. 20 Máquinas

- 30 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BG006 Problema01_100x30 26 0,1230
BG007 Problema02_100x30 19 0,4500
BG008 Problema03_100x30 22 0,6550 21 0,4900
BG009 Problema04_100x30 20 0,2340
BG010 Problema05_100x30 18 0,9881
BG036 Problema01_200x30 28 2,4931
BG037 Problema02_200x30 29 158,0990
BG038 Problema03_200x30 29 0,6980 29 616,6825
BG039 Problema04_200x30 29 2761,3269
BG040 Problema05_200x30 29 160,7952
BG066 Problema01_300x30 45 925,4712
BG067 Problema02_300x30 43 1058,8651
BG068 Problema03_300x30 45 1320,1559 44 995,7762
BG069 Problema04_300x30 42 184,6446
BG070 Problema05_300x30 47 1489,7443
BG096 Problema01_400x30 53 5,7073
BG097 Problema02_400x30 51 9929,3499
BG098 Problema03_400x30 53 158,8651 52 3309,7865
BG099 Problema04_400x30 52 0,4170
BG100 Problema05_400x30 52 6454,5932
BG126 Problema01_500x30 63 51278,2500
BG127 Problema02_500x30 62 20621,0265
BG128 Problema03_500x30 57 47841,0000 61 28616,5653
BG129 Problema04_500x30 58 10896,5547
BG130 Problema05_500x30 65 12445,9954

Tabla 12. Resultados del Modelo. 30 Máquinas

97
- 40 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BG011 Problema01_100x40 11 0,5730
BG012 Problema02_100x40 13 0,1850
BG013 Problema03_100x40 11 0,6350 12 0,5294
BG014 Problema04_100x40 13 0,6830
BG015 Problema05_100x40 13 0,5710
BG041 Problema01_200x40 17 783,7690
BG042 Problema02_200x40 21 670,1138
BG043 Problema03_200x40 19 727,0754 19 746,3883
BG044 Problema04_200x40 19 854,9009
BG045 Problema05_200x40 20 696,0821
BG071 Problema01_300x40 27 914,8469
BG072 Problema02_300x40 28 1590,3480
BG073 Problema03_300x40 26 1323,7835 27 1143,8645
BG074 Problema04_300x40 27 987,5864
BG075 Problema05_300x40 26 902,7579
BG101 Problema01_400x40 32 9,7296
BG102 Problema02_400x40 31 13403,6436
BG103 Problema03_400x40 33 18752,2247 32 40415,2911
BG104 Problema04_400x40 32 158432,7454
BG105 Problema05_400x40 31 11478,1123

Tabla 13. Resultados del Modelo. 40 Máquinas


- 50 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)

BG016 Problema01_100x50 13 0,7290


BG017 Problema02_100x50 13 0,6340
BG018 Problema03_100x50 12 0,6300 12 0,6464
BG019 Problema04_100x50 12 0,6160
BG020 Problema05_100x50 11 0,6230
BG046 Problema01_200x50 17 1014,4030
BG047 Problema02_200x50 13 911,5271
BG048 Problema03_200x50 12 950,8243 14 926,6562
BG049 Problema04_200x50 14 805,4043
BG050 Problema05_200x50 13 951,1221
BG076 Problema01_300x50 20 11772,9815
BG077 Problema02_300x50 18 15795,2462
BG078 Problema03_300x50 17 18819,3583 18 14168,0759
BG079 Problema04_300x50 20 13874,4558
BG080 Problema05_300x50 16 10578,3378

Tabla 14. Resultados del Modelo. 50 Máquinas

98
- 100 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BG021 Problema01_100x100 6 0,8070
BG022 Problema02_100x100 5 0,8180
BG023 Problema03_100x100 4 0,8000 5 0,8010
BG024 Problema04_100x100 5 0,7600
BG025 Problema05_100x100 5 0,8200
BG051 Problema01_200x100 12 15847,7889
BG052 Problema02_200x100 9 12974,1528
BG053 Problema03_200x100 5 20715,4463 8 14172,1513
BG054 Problema04_200x100 5 9745,2540
BG055 Problema05_200x100 9 11578,1146

Tabla 15. Resultados del Modelo. 100 Máquinas

- 200 Máquinas:

Código Problema Cmax Tiempo (Seg) Cmax Medio Tiempo Medio (Seg)
BG026 Problema01_100x200 3 0,9021
BG027 Problema02_100x200 4 0,9601
BG028 Problema03_100x200 4 0,9441 3 0,9487
BG029 Problema04_100x200 3 0,9611
BG030 Problema05_100x200 2 0,9761
BG056 Problema01_200x200 5 20479,1477
BG057 Problema02_200x200 4 18732,1100
BG058 Problema03_200x200 3 22711,3345 4 23276,1201
BG059 Problema04_200x200 4 28456,2279
BG060 Problema05_200x200 4 26001,7805

Tabla 16. Resultados del Modelo. 200 Máquinas

99
100
Anexo 4: Resultados de la Heurística

Bateria Pequeña:

Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP001 Problema01_100x2 1791 0,0180 2054 0,0620 14,68%
BP002 Problema02_100x2 2515 0,0730 3271 0,0630 30,06%
BP003 Problema03_100x2 1821 0,0600 2082 0,0520 14,33% 19,65%
BP004 Problema04_100x2 2219 0,1760 2689 0,0170 21,18%
BP005 Problema05_100x2 1824 0,0110 2152 0,0170 17,98%
BP006 Problema01_100x4 559 0,3540 703 0,0290 25,76%
BP007 Problema02_100x4 644 0,4170 831 0,0280 29,04%
BP008 Problema03_100x4 583 0,3210 802 0,0300 37,56% 27,18%
BP009 Problema04_100x4 485 0,1940 605 0,0290 24,74%
BP010 Problema05_100x4 532 0,1620 632 0,0290 18,80%
BP011 Problema01_100x6 277 1,9031 380 0,0390 37,18%
BP012 Problema02_100x6 259 2,0361 315 0,0380 21,62%
BP013 Problema03_100x6 284 0,5380 367 0,0380 29,23% 31,55%
BP014 Problema04_100x6 328 1,1521 421 0,0380 28,35%
BP015 Problema05_100x6 290 1,2861 410 0,0400 41,38%
BP016 Problema01_100x8 139 0,9331 188 0,0510 35,25%
BP017 Problema02_100x8 167 1,1531 227 0,0500 35,93%
BP018 Problema03_100x8 160 5,8223 232 0,0500 45,00% 34,48%
BP019 Problema04_100x8 172 0,5920 211 0,0520 22,67%
BP020 Problema05_100x8 173 0,7821 231 0,0730 33,53%
BP021 Problema01_100x10 120 2,2491 160 0,0750 33,33%
BP022 Problema02_100x10 96 14,4508 128 0,0620 33,33%
BP023 Problema03_100x10 105 0,1210 165 0,0630 57,14% 41,58%
BP024 Problema04_100x10 115 2,7162 163 0,0630 41,74%
BP025 Problema05_100x10 111 11,0286 158 0,0630 42,34%
BP026 Problema01_200x2 5850 0,0270 6432 0,0340 9,95%
BP027 Problema02_200x2 3614 0,0160 3975 0,0320 9,99%
BP028 Problema03_200x2 4763 0,0230 5833 0,0320 22,46% 16,70%
BP029 Problema04_200x2 3821 0,0310 4419 0,0310 15,65%
BP030 Problema05_200x2 6324 0,0230 7932 0,0330 25,43%
BP031 Problema01_200x4 1058 0,5450 1358 0,0540 28,36%
BP032 Problema02_200x4 1230 0,5540 1543 0,0540 25,45%
BP033 Problema03_200x4 1193 0,2840 1504 0,0530 26,07% 26,32%
BP034 Problema04_200x4 1094 0,3250 1397 0,0550 27,70%
BP035 Problema05_200x4 1031 0,6380 1279 0,0540 24,05%

101
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP036 Problema01_200x6 599 2,4871 798 0,0750 33,22%
BP037 Problema02_200x6 574 4,2843 754 0,0780 31,36%
BP038 Problema03_200x6 549 0,9471 746 0,0760 35,88% 31,45%
BP039 Problema04_200x6 575 4,4203 757 0,0740 31,65%
BP040 Problema05_200x6 557 3,9292 697 0,0760 25,13%
BP041 Problema01_200x8 327 3,2142 425 0,1020 29,97%
BP042 Problema02_200x8 352 15,2009 469 0,0990 33,24%
BP043 Problema03_200x8 334 1,4361 457 0,0990 36,83% 35,44%
BP044 Problema04_200x8 356 1,2601 503 0,0990 41,29%
BP045 Problema05_200x8 343 2,1901 466 0,0990 35,86%
BP046 Problema01_200x10 201 14,4368 278 0,1230 38,31%
BP047 Problema02_200x10 223 15,1279 314 0,1240 40,81%
BP048 Problema03_200x10 231 30,0027 300 0,1220 29,87% 37,72%
BP049 Problema04_200x10 187 6,1924 263 0,1220 40,64%
BP050 Problema05_200x10 213 9,3585 296 0,1240 38,97%
BP051 Problema01_300x2 6512 0,0330 7336 0,0470 12,65%
BP052 Problema02_300x2 5576 0,0250 6167 0,0470 10,60%
BP053 Problema03_300x2 7349 0,0510 8276 0,0480 12,61% 12,77%
BP054 Problema04_300x2 6897 0,0680 7937 0,0470 15,08%
BP055 Problema05_300x2 7805 0,1010 8811 0,0470 12,89%
BP056 Problema01_300x4 1625 0,5370 2006 0,0870 23,45%
BP057 Problema02_300x4 1767 0,3950 2171 0,0800 22,86%
BP058 Problema03_300x4 1774 1,3431 2205 0,0890 24,30% 23,39%
BP059 Problema04_300x4 1753 0,5750 2146 0,0790 22,42%
BP060 Problema05_300x4 1731 0,5220 2145 0,0800 23,92%
BP061 Problema01_300x6 821 7,2754 1115 0,1120 35,81%
BP062 Problema02_300x6 849 2,2441 1149 0,1170 35,34%
BP063 Problema03_300x6 818 2,3201 1100 0,1180 34,47% 33,41%
BP064 Problema04_300x6 746 1,3421 910 0,1130 21,98%
BP065 Problema05_300x6 755 3,1942 1053 0,1130 39,47%
BP066 Problema01_300x8 461 65,5138 611 0,1470 32,54%
BP067 Problema02_300x8 450 5,9813 569 0,1450 26,44%
BP068 Problema03_300x8 502 21,0112 639 0,1460 27,29% 31,54%
BP069 Problema04_300x8 517 0,4220 700 0,1510 35,40%
BP070 Problema05_300x8 472 42,0324 642 0,1470 36,02%
BP071 Problema01_300x10 352 1693,9399 476 0,1910 35,23%
BP072 Problema02_300x10 326 102,5529 451 0,2110 38,34%
BP073 Problema03_300x10 353 107,2001 467 0,1870 32,29% 34,09%
BP074 Problema04_300x10 287 1,9431 387 0,1900 34,84%
BP075 Problema05_300x10 323 20,0492 419 0,1880 29,72%

102
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP076 Problema01_400x2 8216 0,0810 9272 0,0660 12,85%
BP077 Problema02_400x2 9566 0,0530 10875 0,0620 13,68%
BP078 Problema03_400x2 9991 0,0480 11423 0,0640 14,33% 13,91%
BP079 Problema04_400x2 11016 0,0360 12295 0,0650 11,61%
BP080 Problema05_400x2 9262 0,0640 10845 0,2040 17,09%
BP081 Problema01_400x4 2247 1,8431 2896 0,3620 28,88%
BP082 Problema02_400x4 2311 0,5540 2839 0,2250 22,85%
BP083 Problema03_400x4 2273 0,7460 2883 0,1300 26,84% 25,75%
BP084 Problema04_400x4 2228 0,3330 2822 0,1180 26,66%
BP085 Problema05_400x4 2487 0,8811 3072 0,1340 23,52%
BP086 Problema01_400x6 1126 3,6962 1455 0,1890 29,22%
BP087 Problema02_400x6 1072 0,3850 1335 0,1690 24,53%
BP088 Problema03_400x6 1080 2,5161 1478 0,1720 36,85% 30,71%
BP089 Problema04_400x6 1119 1,1041 1520 0,1790 35,84%
BP090 Problema05_400x6 1154 4,5353 1467 0,1760 27,12%
BP091 Problema01_400x8 631 0,1890 886 0,2320 40,41%
BP092 Problema02_400x8 650 149,5806 862 0,2160 32,62%
BP093 Problema03_400x8 653 210,8281 887 0,5310 35,83% 36,01%
BP094 Problema04_400x8 643 52,5750 890 0,2160 38,41%
BP095 Problema05_400x8 659 128,0203 875 0,2260 32,78%
BP096 Problema01_400x10 454 235,0645 602 0,2640 32,60%
BP097 Problema02_400x10 397 13,3308 543 0,2760 36,78%
BP098 Problema03_400x10 422 232,1793 575 0,2670 36,26% 35,42%
BP099 Problema04_400x10 440 87,5640 593 0,2690 34,77%
BP100 Problema05_400x10 406 7,6594 555 0,4150 36,70%
BP101 Problema01_500x2 9306 0,0840 10451 0,0990 12,30%
BP102 Problema02_500x2 12802 0,0400 14476 0,0940 13,08%
BP103 Problema03_500x2 12804 0,0660 14458 0,0940 12,92% 14,18%
BP104 Problema04_500x2 11247 0,0490 13483 0,0910 19,88%
BP105 Problema05_500x2 11183 0,0410 12604 0,0910 12,71%
BP106 Problema01_500x4 2870 0,3650 3628 0,1470 26,41%
BP107 Problema02_500x4 2971 0,7900 3707 0,1450 24,77%
BP108 Problema03_500x4 2893 1,1721 3722 0,1430 28,66% 26,01%
BP109 Problema04_500x4 2771 0,8601 3549 0,1530 28,08%
BP110 Problema05_500x4 2857 1,2871 3489 0,1470 22,12%
BP111 Problema01_500x6 1302 13,5528 1694 0,2080 30,11%
BP112 Problema02_500x6 1314 3,5062 1755 0,2050 33,56%
BP113 Problema03_500x6 1363 3,5852 1777 0,2050 30,37% 31,39%
BP114 Problema04_500x6 1311 2,1131 1772 0,2140 35,16%
BP115 Problema05_500x6 1398 1,6481 1786 0,2040 27,75%

103
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP116 Problema01_500x8 822 6,1194 1065 0,2750 29,56%
BP117 Problema02_500x8 802 3,2002 1052 0,2660 31,17%
BP118 Problema03_500x8 851 3,0812 1123 0,2760 31,96% 31,74%
BP119 Problema04_500x8 836 11,0416 1138 0,2840 36,12%
BP120 Problema05_500x8 837 29,1597 1087 0,2670 29,87%
BP121 Problema01_500x10 567 78,5405 754 0,3470 32,98%
BP122 Problema02_500x10 525 10328,0057 741 0,3380 41,14%
BP123 Problema03_500x10 478 66,3858 661 0,3350 38,28% 37,46%
BP124 Problema04_500x10 531 1076,3206 734 0,3840 38,23%
BP125 Problema05_500x10 537 114,5506 734 0,3980 36,69%
BP126 Problema01_600x2 16898 0,0450 20307 0,1230 20,17%
BP127 Problema02_600x2 14574 0,0540 17008 0,1110 16,70%
BP128 Problema03_600x2 14690 0,0950 16461 0,1050 12,06% 16,64%
BP129 Problema04_600x2 11944 0,0530 14054 0,1060 17,67%
BP130 Problema05_600x2 13863 0,0770 16167 0,1080 16,62%
BP131 Problema01_600x4 3407 1,0011 4276 0,1830 25,51%
BP132 Problema02_600x4 3394 1,3151 4255 0,1770 25,37%
BP133 Problema03_600x4 3437 1,0381 4213 0,1780 22,58% 24,64%
BP134 Problema04_600x4 3473 0,8201 4371 0,1760 25,86%
BP135 Problema05_600x4 3357 0,6390 4159 0,1790 23,89%
BP136 Problema01_600x6 1641 21,4782 2158 0,2470 31,51%
BP137 Problema02_600x6 1603 23,8374 2098 0,2430 30,88%
BP138 Problema03_600x6 1623 2,3571 2040 0,2460 25,69% 30,11%
BP139 Problema04_600x6 1689 4,9833 2200 0,2470 30,25%
BP140 Problema05_600x6 1651 20,3232 2183 0,2430 32,22%
BP141 Problema01_600x8 970 1,4111 1333 0,3160 37,42%
BP142 Problema02_600x8 1052 80,9076 1412 0,3220 34,22%
BP143 Problema03_600x8 979 10,6536 1292 0,3130 31,97% 33,76%
BP144 Problema04_600x8 949 5,9813 1271 0,3300 33,93%
BP145 Problema05_600x8 957 18,6371 1256 0,3210 31,24%
BP146 Problema01_600x10 671 311,5318 867 0,3940 29,21%
BP147 Problema02_600x10 622 306,7195 829 0,3940 33,28%
BP148 Problema03_600x10 664 55,4152 887 0,3920 33,58% 33,18%
BP149 Problema04_600x10 632 72,6782 860 0,4000 36,08%
BP150 Problema05_600x10 590 50,6199 789 0,4040 33,73%
BP151 Problema01_700x2 15231 0,0580 17791 0,1200 16,81%
BP152 Problema02_700x2 18097 0,0570 20588 0,1230 13,76%
BP153 Problema03_700x2 14919 0,1030 16938 0,1220 13,53% 15,13%
BP154 Problema04_700x2 15427 0,0840 17697 0,1180 14,71%
BP155 Problema05_700x2 16680 0,0990 19487 0,1260 16,83%

104
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP156 Problema01_700x4 4017 0,5320 5034 0,2060 25,32%
BP157 Problema02_700x4 3827 0,4470 4883 0,2050 27,59%
BP158 Problema03_700x4 4131 1,8391 5214 0,2770 26,22% 25,96%
BP159 Problema04_700x4 3664 1,4671 4613 0,2800 25,90%
BP160 Problema05_700x4 4007 0,7480 5000 0,2400 24,78%
BP161 Problema01_700x6 1881 1,2911 2462 0,4440 30,89%
BP162 Problema02_700x6 1864 0,2990 2460 0,4310 31,97%
BP163 Problema03_700x6 2007 0,2110 2575 0,3550 28,30% 30,73%
BP164 Problema04_700x6 2013 1,4921 2679 0,3560 33,08%
BP165 Problema05_700x6 1929 9,5406 2496 0,3950 29,39%
BP166 Problema01_700x8 1198 30,8448 1559 0,4560 30,13%
BP167 Problema02_700x8 1144 38,0032 1508 0,5290 31,82%
BP168 Problema03_700x8 1104 49,2868 1423 0,3960 28,89% 31,52%
BP169 Problema04_700x8 1131 6,6464 1500 0,3880 32,63%
BP170 Problema05_700x8 1119 1,0101 1501 0,3820 34,14%
BP171 Problema01_700x10 732 291,1317 995 0,4800 35,93%
BP172 Problema02_700x10 779 132,5996 1035 0,4790 32,86%
BP173 Problema03_700x10 776 1264,9994 1023 0,4810 31,83% 34,16%
BP174 Problema04_700x10 723 206,3388 1003 0,4650 38,73%
BP175 Problema05_700x10 734 109,6903 965 0,4700 31,47%
BP176 Problema01_800x2 17958 0,0810 20627 0,1420 14,86%
BP177 Problema02_800x2 19903 0,0560 22993 0,1380 15,53%
BP178 Problema03_800x2 16526 0,0950 18751 0,1400 13,46% 14,26%
BP179 Problema04_800x2 19352 0,0560 21991 0,1530 13,64%
BP180 Problema05_800x2 19595 0,0610 22303 0,1370 13,82%
BP181 Problema01_800x4 4543 0,2810 5802 0,2390 27,71%
BP182 Problema02_800x4 4640 1,1731 5796 0,2320 24,91%
BP183 Problema03_800x4 4784 0,8161 5951 0,2390 24,39% 25,41%
BP184 Problema04_800x4 4529 0,9561 5551 0,2300 22,57%
BP185 Problema05_800x4 4597 1,3231 5859 0,2470 27,45%
BP186 Problema01_800x6 2143 2,5902 2800 0,3190 30,66%
BP187 Problema02_800x6 2294 0,5820 2955 0,3420 28,81%
BP188 Problema03_800x6 2132 0,2370 2774 0,3410 30,11% 30,05%
BP189 Problema04_800x6 2244 2,6242 2908 0,3230 29,59%
BP190 Problema05_800x6 2117 0,5550 2775 0,3370 31,08%
BP191 Problema01_800x8 1252 0,4800 1660 0,4380 32,59%
BP192 Problema02_800x8 1349 39,0022 1759 0,4300 30,39%
BP193 Problema03_800x8 1273 45,9376 1652 0,4390 29,77% 32,17%
BP194 Problema04_800x8 1277 3,2952 1735 0,4260 35,87%
BP195 Problema05_800x8 1299 0,6270 1718 0,4320 32,26%

105
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP196 Problema01_800x10 826 6,8534 1114 0,5390 34,87%
BP197 Problema02_800x10 817 4,0212 1096 0,5480 34,15%
BP198 Problema03_800x10 911 74,5693 1185 0,5380 30,08% 33,96%
BP199 Problema04_800x10 874 18,8661 1191 0,5480 36,27%
BP200 Problema05_800x10 897 192,1940 1206 0,5370 34,45%
BP201 Problema01_900x2 20017 0,0640 22981 0,1520 14,81%
BP202 Problema02_900x2 19198 0,1030 21887 0,1660 14,01%
BP203 Problema03_900x2 26226 0,0940 30220 0,1610 15,23% 15,88%
BP204 Problema04_900x2 18091 0,0710 21567 0,1510 19,21%
BP205 Problema05_900x2 20904 0,0660 24281 0,1660 16,15%
BP206 Problema01_900x4 5260 4,0352 6561 0,2610 24,73%
BP207 Problema02_900x4 5119 0,6300 6331 0,2720 23,68%
BP208 Problema03_900x4 5148 1,8121 6433 0,2620 24,96% 23,67%
BP209 Problema04_900x4 5131 1,0291 6226 0,2750 21,34%
BP210 Problema05_900x4 5218 1,6691 6452 0,2720 23,65%
BP211 Problema01_900x6 2395 0,2050 3066 0,3660 28,02%
BP212 Problema02_900x6 2375 3,3662 3024 0,3770 27,33%
BP213 Problema03_900x6 2371 3,6622 3063 0,3920 29,19% 28,52%
BP214 Problema04_900x6 2486 0,2580 3202 0,3850 28,80%
BP215 Problema05_900x6 2400 62,9136 3103 0,3690 29,29%
BP216 Problema01_900x8 1488 591,3878 1981 0,4880 33,13%
BP217 Problema02_900x8 1443 160,1652 1842 0,4940 27,65%
BP218 Problema03_900x8 1457 59,9784 1933 0,4940 32,67% 31,97%
BP219 Problema04_900x8 1430 117,0887 1879 0,4840 31,40%
BP220 Problema05_900x8 1446 47,9757 1952 0,4880 34,99%
BP221 Problema01_900x10 951 1337,0625 1261 0,6230 32,60%
BP222 Problema02_900x10 952 1,1931 1235 0,6030 29,73%
BP223 Problema03_900x10 927 24,0194 1227 0,6050 32,36% 32,54%
BP224 Problema04_900x10 956 50,0129 1298 0,6060 35,77%
BP225 Problema05_900x10 930 29,9857 1230 0,5930 32,26%
BP226 Problema01_1000x2 22979 0,1040 26564 0,1710 15,60%
BP227 Problema02_1000x2 21685 0,0880 24559 0,1720 13,25%
BP228 Problema03_1000x2 22863 0,1260 26386 0,1880 15,41% 14,65%
BP229 Problema04_1000x2 23762 0,0720 27559 0,1680 15,98%
BP230 Problema05_1000x2 22755 0,0870 25720 0,1700 13,03%
BP231 Problema01_1000x4 5702 0,7670 6986 0,3010 22,52%
BP232 Problema02_1000x4 5840 1,7831 7436 0,3050 27,33%
BP233 Problema03_1000x4 5838 1,0091 7319 0,2860 25,37% 24,55%
BP234 Problema04_1000x4 5577 1,6461 6970 0,3030 24,98%
BP235 Problema05_1000x4 5822 1,1231 7134 0,2990 22,54%

106
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BP236 Problema01_1000x6 2651 0,2230 3453 0,4030 30,25%
BP237 Problema02_1000x6 2771 4,2612 3678 0,4260 32,73%
BP238 Problema03_1000x6 2764 1,8431 3556 0,4310 28,65% 30,32%
BP239 Problema04_1000x6 2744 0,2150 3645 0,4240 32,84%
BP240 Problema05_1000x6 2789 84,1058 3546 0,4200 27,14%
BP241 Problema01_1000x8 1626 20,6902 2176 0,5490 33,83%
BP242 Problema02_1000x8 1621 49,3998 2095 0,5410 29,24%
BP243 Problema03_1000x8 1531 62,9456 1979 0,5360 29,26% 30,72%
BP244 Problema04_1000x8 1640 58,3603 2150 0,5470 31,10%
BP245 Problema05_1000x8 1620 40,6883 2109 0,5570 30,19%
BP246 Problema01_1000x10 1076 65,9588 1460 0,6610 35,69%
BP247 Problema02_1000x10 1028 3020,9978 1365 0,6790 32,78%
BP248 Problema03_1000x10 968 143,4652 1279 0,6670 32,13% 32,86%
BP249 Problema04_1000x10 1091 66,2458 1448 0,6640 32,72%
BP250 Problema05_1000x10 1091 1034,3902 1429 0,6680 30,98%

Tabla 17. Resultados de la Heurística. Batería Pequeña

Batería Grande:

Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (seg)
BG001 Problema01_100x20 37 0,4820 48 0,2360 29,73%
BG002 Problema02_100x20 32 1,1751 49 0,1590 53,13%
BG003 Problema03_100x20 35 0,6650 56 0,1270 60,00% 46,91%
BG004 Problema04_100x20 39 14,1028 61 0,1280 56,41%
BG005 Problema05_100x20 34 1,7001 46 0,1280 35,29%
BG006 Problema01_100x30 26 0,1230 32 0,1890 23,08%
BG007 Problema02_100x30 19 0,4500 27 0,3700 42,11%
BG008 Problema03_100x30 22 0,6550 32 0,1910 45,45% 33,79%
BG009 Problema04_100x30 20 0,2340 25 0,1910 25,00%
BG010 Problema05_100x30 18 0,9881 24 0,1890 33,33%
BG011 Problema01_100x40 11 0,1730 18 0,2550 63,64%
BG012 Problema02_100x40 13 0,1850 24 0,2510 84,62%
BG013 Problema03_100x40 11 0,6350 15 0,2530 36,36% 53,85%
BG014 Problema04_100x40 13 0,1830 21 0,2510 61,54%
BG015 Problema05_100x40 13 0,1710 16 0,2570 23,08%
BG016 Problema01_100x50 13 0,2290 17 0,3180 30,77%
BG017 Problema02_100x50 13 0,2340 19 0,3160 46,15%
BG018 Problema03_100x50 12 0,2300 15 0,3210 25,00% 37,96%
BG019 Problema04_100x50 12 0,2160 16 0,3140 33,33%
BG020 Problema05_100x50 11 0,2230 17 0,3230 54,55%

107
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BG021 Problema01_100x100 6 0,4070 8 0,6280 33,33%
BG022 Problema02_100x100 5 0,4180 6 0,6240 20,00%
BG023 Problema03_100x100 4 0,4000 6 0,6190 50,00% 32,67%
BG024 Problema04_100x100 5 0,4600 7 0,6280 40,00%
BG025 Problema05_100x100 5 0,4200 6 0,6400 20,00%
BG026 Problema01_100x200 3 0,9021 3 1,2670 0,00%
BG027 Problema02_100x200 4 0,9601 4 1,2520 0,00%
BG028 Problema03_100x200 4 0,9441 4 1,2530 0,00% 10,00%
BG029 Problema04_100x200 3 0,9611 3 1,2500 0,00%
BG030 Problema05_100x200 2 0,9761 3 1,2800 50,00%
BG031 Problema01_200x20 62 3,1672 99 0,2530 59,68%
BG032 Problema02_200x20 65 37,2411 95 0,2500 46,15%
BG033 Problema03_200x20 65 31,7318 85 0,2570 30,77% 45,44%
BG034 Problema04_200x20 64 736,7641 91 0,2540 42,19%
BG035 Problema05_200x20 62 48,5738 92 0,2520 48,39%
BG036 Problema01_200x30 28 2,4931 43 0,3810 53,57%
BG037 Problema02_200x30 29 158,0990 45 0,3760 55,17%
BG038 Problema03_200x30 29 0,6980 48 0,3740 65,52% 52,09%
BG039 Problema04_200x30 29 2761,3269 42 0,3740 44,83%
BG040 Problema05_200x30 29 160,7952 41 0,3730 41,38%
BG041 Problema01_200x40 17 0,7690 26 0,4970 52,94%
BG042 Problema02_200x40 21 67,1138 35 0,4980 66,67%
BG043 Problema03_200x40 19 7,0754 28 0,5020 47,37% 56,87%
BG044 Problema04_200x40 19 85,9009 28 0,5020 47,37%
BG045 Problema05_200x40 20 2,0821 34 0,5040 70,00%
BG046 Problema01_200x50 17 0,4030 24 0,6370 41,18%
BG047 Problema02_200x50 13 1,5271 20 0,6390 53,85%
BG048 Problema03_200x50 12 5,8243 22 0,6280 83,33% 60,84%
BG049 Problema04_200x50 14 5,4043 23 0,6280 64,29%
BG050 Problema05_200x50 13 1,1221 21 0,6380 61,54%
BG051 Problema01_200x100 12 0,8581 12 1,2620 0,00%
BG052 Problema02_200x100 9 0,8491 12 1,2480 33,33%
BG053 Problema03_200x100 5 0,9631 9 1,2390 80,00% 40,89%
BG054 Problema04_200x100 5 0,8771 9 1,2440 80,00%
BG055 Problema05_200x100 9 0,8701 10 1,2340 11,11%
BG056 Problema01_200x200 5 2,5822 7 2,5080 40,00%
BG057 Problema02_200x200 4 2,3511 5 2,4780 25,00%
BG058 Problema03_200x200 3 2,3481 4 2,5230 33,33% 29,67%
BG059 Problema04_200x200 4 2,3961 5 2,4730 25,00%
BG060 Problema05_200x200 4 2,7262 5 2,6120 25,00%

108
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BG061 Problema01_300x20 90 19,8101 128 0,4250 42,22%
BG062 Problema02_300x20 86 34920,8084 124 0,4710 44,19%
BG063 Problema03_300x20 87 1084,2100 117 0,4020 34,48% 41,57%
BG064 Problema04_300x20 88 2613,8115 122 0,3860 38,64%
BG065 Problema05_300x20 89 7318,3606 132 0,4120 48,31%
BG066 Problema01_300x30 45 5,7073 66 0,6180 46,67%
BG067 Problema02_300x30 43 9929,3499 65 0,5750 51,16%
BG068 Problema03_300x30 45 158,8651 66 0,5710 46,67% 47,68%
BG069 Problema04_300x30 42 0,4170 60 0,5690 42,86%
BG070 Problema05_300x30 47 6454,5932 71 0,5660 51,06%
BG071 Problema01_300x40 27 9,7296 43 0,7580 59,26%
BG072 Problema02_300x40 28 13403,6436 40 0,7500 42,86%
BG073 Problema03_300x40 26 0,9711 50 0,7430 92,31% 55,52%
BG074 Problema04_300x40 27 987,5864 37 0,7420 37,04%
BG075 Problema05_300x40 26 902,7579 38 0,7530 46,15%
BG076 Problema01_300x50 20 1172,9815 29 0,9350 45,00%
BG077 Problema02_300x50 18 15795,2462 27 0,9480 50,00%
BG078 Problema03_300x50 17 18819,3583 29 0,9600 70,59% 55,87%
BG079 Problema04_300x50 20 13874,4558 29 0,9360 45,00%
BG080 Problema05_300x50 16 105778,3378 27 0,9530 68,75%
BG081 Problema01_300x100 - - 13 1,8730 -
BG082 Problema02_300x100 - - 9 1,8630 -
BG083 Problema03_300x100 - - 11 1,8730 - -
BG084 Problema04_300x100 - - 9 1,8730 -
BG085 Problema05_300x100 - - 12 1,8600 -
BG086 Problema01_300x200 - - 5 3,7310 -
BG087 Problema02_300x200 - - 6 3,7190 -
BG088 Problema03_300x200 - - 4 3,7080 - -
BG089 Problema04_300x200 - - 5 3,7020 -
BG090 Problema05_300x200 - - 5 3,9000 -
BG091 Problema01_400x20 95 1473,5564 183 0,5080 92,63%
BG092 Problema02_400x20 94 1135,9431 179 0,5030 90,43%
BG093 Problema03_400x20 94 1730,0046 177 0,5130 88,30% 90,34%
BG094 Problema04_400x20 97 1197,6661 180 0,5090 85,57%
BG095 Problema05_400x20 96 1975,4006 187 0,5070 94,79%
BG096 Problema01_400x30 53 5,7073 82 0,7430 54,72%
BG097 Problema02_400x30 51 9929,3499 88 0,7570 72,55%
BG098 Problema03_400x30 53 158,8651 81 0,7690 52,83% 60,63%
BG099 Problema04_400x30 52 0,4170 86 0,7500 65,38%
BG100 Problema05_400x30 52 6454,5932 82 0,7480 57,69%

109
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BG101 Problema01_400x40 32 9,7296 58 0,9840 81,25%
BG102 Problema02_400x40 31 13403,6436 48 1,0000 54,84%
BG103 Problema03_400x40 33 18752,2247 58 0,9920 75,76% 63,28%
BG104 Problema04_400x40 32 158432,7454 51 0,9990 59,38%
BG105 Problema05_400x40 31 11478,1123 45 1,0180 45,16%
BG106 Problema01_400x50 - - 39 1,2480 -
BG107 Problema02_400x50 - - 34 1,2640 -
BG108 Problema03_400x50 - - 35 1,2460 - -
BG109 Problema04_400x50 - - 37 1,2430 -
BG110 Problema05_400x50 - - 37 1,2920 -
BG111 Problema01_400x100 - - 15 2,5680 -
BG112 Problema02_400x100 - - 13 2,5240 -
BG113 Problema03_400x100 - - 13 2,4860 - -
BG114 Problema04_400x100 - - 14 2,4990 -
BG115 Problema05_400x100 - - 13 2,5320 -
BG116 Problema01_400x200 - - 6 5,0830 -
BG117 Problema02_400x200 - - 6 4,9660 -
BG118 Problema03_400x200 - - 6 4,9580 - -
BG119 Problema04_400x200 - - 6 4,8090 -
BG120 Problema05_400x200 - - 5 4,8990 -
BG121 Problema01_500x20 102 5748,2514 215 0,6140 110,78%
BG122 Problema02_500x20 98 34920,8084 208 0,6250 112,24%
BG123 Problema03_500x20 101 1084,2100 203 0,6240 100,99% 106,89%
BG124 Problema04_500x20 106 2613,8115 204 0,6190 92,45%
BG125 Problema05_500x20 100 7318,3606 218 0,6190 118,00%
BG126 Problema01_500x30 63 51278,2500 107 0,9210 69,84%
BG127 Problema02_500x30 62 20621,0265 102 0,9240 64,52%
BG128 Problema03_500x30 57 47841,0000 106 0,9230 85,96% 72,81%
BG129 Problema04_500x30 58 10896,5547 103 0,9420 77,59%
BG130 Problema05_500x30 65 12445,9954 108 0,9380 66,15%
BG131 Problema01_500x40 - - 64 1,2230 -
BG132 Problema02_500x40 - - 60 1,2110 -
BG133 Problema03_500x40 - - 70 1,2100 - -
BG134 Problema04_500x40 - - 64 1,2180 -
BG135 Problema05_500x40 - - 64 1,2110 -
BG136 Problema01_500x50 - - 46 1,5410 -
BG137 Problema02_500x50 - - 46 1,5370 -
BG138 Problema03_500x50 - - 43 1,5560 - -
BG139 Problema04_500x50 - - 49 1,5410 -
BG140 Problema05_500x50 - - 47 1,5560 -

110
Modelo Heurística
Código Problema PDR PDR Medio
Makespan Tiempo (Seg) Makespan Tiempo (Seg)
BG141 Problema01_500x100 - - 14 4,5090 -
BG142 Problema02_500x100 - - 15 5,3670 -
BG143 Problema03_500x100 - - 15 13,2000 - -
BG144 Problema04_500x100 - - 14 6,6640 -
BG145 Problema05_500x100 - - 16 12,8400 -
BG146 Problema01_500x200 - - 6 7,5680 -
BG147 Problema02_500x200 - - 6 7,3740 -
BG148 Problema03_500x200 - - 7 6,6700 - -
BG149 Problema04_500x200 - - 6 6,6850 -
BG150 Problema05_500x200 - - 6 6,6120 -

Tabla 18. Resultados de la Heurística. Batería Grande

111

Vous aimerez peut-être aussi