trabajo fin de gradobibing.us.es/proyectos/abreproy/90240/fichero/tfg_francisco+domí… · 3.2.1...
Post on 05-Sep-2020
13 Views
Preview:
TRANSCRIPT
1
Trabajo Fin de Grado
Grado en Ingeniería de Tecnologías Industriales
Programación de heurísticas para minimizar
tiempos de retraso de trabajos con máquinas en
paralelo
Autor: Francisco José Domínguez Barbadillo
Tutor: José Manuel García Sánchez
Dep. Organización Industrial y Gestión de Empresas I
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
20
Sevilla, 2015
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
2
ÍNDICE
1. Introducción y objetivos del proyecto.
2. Scheduling.
2.1 Introducción al scheduling.
2.2 Tipos de arquitectura
2.3 Representación; diagramas de Gantt
2.4 Notación.
2.5 Restricciones de procesamiento de trabajos.
2.6 Objetivos
2.7 Caracterización de nuestro problema.
3. Heurísticas
3.1 Introducción
3.2 Apuntes de optimización
3.2.1 Tipos de resolución de un problema de optimización
3.2.2 Tipos de problemas de optimización según su complejidad
3.2.3 Tipos de problemas de optimización según las características
del modelo
3.2.4 Modelo matemático
3.3 Heurística 1
3.4 Heurística 2
3.5 Heurística 3
4. Experimentación
4.1 Introducción.
4.2 Visual Basic.
4.3 LINGO.
4.4 Generación de problemas.
4.5 Búsqueda del óptimo.
4.6 Soluciones heurísticas.
4.7 Obtención de errores.
5. Resultados
5.1 Resultados aportados por nuestras heurísticas
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
3
5.2 Comportamiento de las heurísticas en función del número de
trabajos
5.3 Comportamiento de las heurísticas en función del número de
máquinas
5.4 Conclusiones
6. Conclusiones finales
7. Bibliografía.
8. Anexos.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
4
1. INTRODUCCIÓN Y OBJETIVOS DEL PROYECTO
Los problemas de programación de tareas (scheduling) son muy importantes en
el mundo actual. Se puede decir que se presentan en todos los fundamentos de
la industria moderna, de ahí la importancia de hallar valores óptimos o lo más
cercanos posible a éstos, de forma que se pueda ahorrar recursos que estén
asociados al problema. La programación adecuada de trabajos en procesos de
fabricación, constituye un importante problema que se plantea dentro de la
producción en muchas empresas. El orden en que estos son procesados, no
resulta indiferente, sino que determinará algún parámetro de interés, cuyos
valores convendrá optimizar en la medida de lo posible. Así podrá verse afectado
el coste total de ejecución de los trabajos, el tiempo necesario para concluirlos o
el stock de productos en curso que será generado. Esto conduce de forma directa
al problema de determinar cuál será el orden más adecuado para llevar a cabo
los trabajos con vista a optimizar algunos de los anteriores parámetros u otros
similares, como puede ser el objetivo que es objeto de nuestro estudio, ligado a
disminuir los tiempos de retraso en la entrega de los pedidos.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
5
El objetivo principal de este proyecto es el análisis de algunas heurísticas para
resolver el problema de scheduling asociado a la minimización de la suma de los
tiempos de retraso en la finalización de los trabajos, en un entorno con máquinas
idénticas en paralelo. El análisis de las heurísticas pasa por el diseño, la
implementación y el estudio experimental de su comportamiento con respecto a la
solución óptima o una cota superior de la misma, así como al análisis
comparativo entre las diferentes heurísticas.
Antes de la realización de dichas heurísticas, haremos una introducción a los
problemas de scheduling de forma general y nos centraremos en el caso de
problemas de máquinas en paralelo y el problema que es objeto de nuestro
estudio (Capítulo 2). Después haremos una explicación de los conceptos de
problemas de optimización que usaremos durante el trabajo y explicaremos
nuestras heurísticas (Capítulo 3). El siguiente paso será explicar cómo se ha
llevado a cabo la experimentación (Capítulo 4). Tras esto, se mostrarán los
resultados obtenidos y las conclusiones de dicha experimentación (Capítulo 5).
Además, se explicarán todas las conclusiones del proyecto (Capítulo 6). Al final
del mismo se encuentran los anexos y la bibliografía.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
6
2. Scheduling
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
7
2.1 INTRODUCCIÓN AL SCHEDULING.
Los problemas de secuenciación se presentan en entornos económicos
(industriales y de servicios) en el que hay que gestionar una serie de recursos
para realizar una determinada actividad, utilizando un criterio determinado.
Por su parte, el criterio a seguir puede ser tanto de minimizar una variable
determinada, o de maximizar, como puede ser maximizar los beneficios
obtenidos.
Son problemas de optimización, puesto que son problemas donde se intenta
optimizar la utilización de ese conjunto de recursos.
En la amplia mayoría de ellos el uso del modelo matemático es ineficiente,
incluso en los problemas No Complejos. Por ello, se declina el uso de esta
alternativa de resolución y únicamente se buscará para su resolución
procedimientos exactos o aproximados, según la complejidad del problema.
A partir de un determinado criterio, se trata de establecer la secuencia para el
procesamiento de una serie de trabajos sobre un conjunto de máquinas.
Existe un amplio espectro de características que pueden asociarse a los trabajos
y al modo de procesamiento en el sistema.
Un problema se determina según 3 factores:
La arquitectura del taller
Las características de los trabajos
El criterio de optimización
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
8
2.2 TIPOS DE ARQUITECTURA
Respecto a la arquitectura del sistema en relación con la disposición de las
máquinas, se distinguen en una primera clasificación, los sistemas con
máquinas en serie y máquinas en paralelo. En los entornos con máquinas en
serie, cada máquina realiza una operación diferente, del conjunto de
operaciones a las que se someten los trabajos. Cuando hablamos de máquinas
en paralelo, se entiende que una determinada operación sobre un trabajo puede
ser procesada sobre una cualquiera de entre un conjunto de máquinas.
-Máquinas en serie:
Los entornos de máquinas en serie se clasifican en función del modelo o
esquema de paso de los trabajos por las diferentes máquinas:
Sistemas de flujo uniforme (Flow shop): El modelo de paso es el
mismo para todos los trabajos. Todos los trabajos pasan por cada
una de las máquinas del sistema usando el mismo orden de paso por
las mismas.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
9
Sistemas de tipo taller (Job shop): Cada trabajo tiene su propio
esquema de paso por las máquinas.
Sistemas de taller abierto (Open shop): El modelo de paso de
cada trabajo por las máquinas es libre.
-Máquinas en paralelo:
Respecto a los sistemas de máquinas en paralelo se distinguen tres tipos
Máquinas idénticas: El tiempo de proceso de una operación es
idéntico en cada máquina.
Máquinas uniformes: Cada máquina posee una velocidad de proceso
diferente, independiente de los trabajos.
Máquinas no relacionadas: Cada máquina posee una velocidad de
proceso diferente sobre cada trabajo.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
10
Sistema Híbrido: Taller flexible
Además de los sistemas con máquinas en serie y máquinas en paralelo,
también se distingue un sistema híbrido denominado sistema de flujo
uniforme con máquinas en paralelo (Flexible Flow Shop). Un sistema
híbrido es el caso del “Taller flexible”, que cuenta con m centros o
estaciones de máquinas en serie, cada uno de ellas formado por un
conjunto de máquinas en paralelo
m centros o estaciones de máquinas en serie, cada uno de ellas formado
por un conjunto de máquinas en paralelo .
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
11
2.3 REPRESENTACIÓN; DIAGRAMAS DE GANTT
Un diagrama de Gantt es una representación gráfica y simultánea tanto de
planificación como de programación concreta de procesos y/o proyecto
desarrollada por Henry L. Gantt a principios del siglo XX. Mediante el uso del
diagrama de Gantt podemos representar y monitorizar el desarrollo de las
distintas actividades de un proceso y / o proyecto durante un período de tiempo,
de manera fácil y rápida.
En este tipo de diagramas se representan de forma muy clara las distintas fases
de un proceso, de manera ordenada y en forma de gráfica (barras horizontales),
permitiéndonos planificar y programar las distintas fases de un proceso.
Los diagramas de Gantt se utiliza concretamente para:
La planificación y programar las actividades a realizar en la resolución de
problemas.
La planificación y programación de tareas derivadas de procesos de
mejora.
La planificación y programación de proyectos.
La planificación y programación de planes de acción.
Básicamente el diagrama está compuesto por un eje vertical donde se
establecen las actividades que constituyen el trabajo que se va a ejecutar, y un
eje horizontal que muestra en un calendario la duración de cada una de ellas.
Para la representación de los trabajos es muy común usar el diagrama de Gantt:
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
12
Donde el eje vertical muestra el número de máquinas que disponemos y en el
eje horizontal se muestra el tiempo. J1 y J2 son los trabajos que tienen que
pasar por las máquinas.
2.4 NOTACIÓN
Existen varias formas de representar un problema de secuenciación. Una de de
las más usadas se describe por una tripleta / / .
El primer campo indica el entorno de las máquinas (número de máquinas y tipo
de arquitectura del sistema) . El segundo describe las características y
restricciones de procesamiento de los trabajos. Por su parte, el tercer campo
especifica el objetivo del problema.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
13
Terminología para los entornos de máquinas
M = {M1, M2,.., Mj, ..., Mm}: Conjunto de m máquinas
Fm: Sistema de flujo uniforme con m máquinas en serie
Jm: Sistema de taller con m máquinas en serie
Om: Sistema de taller abierto con m máquinas en serie
Pm: m máquinas idénticas en paralelo
Qm: m máquinas uniformes en paralelo
Rm: m máquinas no relacionadas en paralelo
Sm: Sistema de flujo uniforme con m centros de máquinas en paralelo
-Terminología asociada a los trabajos
J = {J1, J2,.., Ji, .., Jn}: Conjunto de n trabajos;
pij : Tiempo de proceso del trabajo Ji en la máquina Mj. (pi para el caso de
una sola máquina)
ri : Instante de llegada de Ji al sistema. Cuando todos los trabajos están
disponibles al comienzo del procesamiento, ri = 0.
di : Fecha de entrega del trabajo Ji.
wi : Peso(coste o valor) del trabajo Ji.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
14
-variables
Ci : Tiempo de finalización de Ji. Cij tiempo de Ji en Mj
Fi = Ci – ri : Tiempo de permanencia del trabajo en el sistema.
Li = Ci – di : Mide la desviación respecto a la fecha de entrega. Si Li<0
(retraso negativo), |Li| representa las unidades de adelanto.
Ti = máximo {0, Li}= máximo {0, Ci – di}: Tardanza de Ji o número de
instantes de retraso de Ji;
Ei = máximo {0, di - Ci}: Número de instantes de adelanto de Ji.
Variables booleanas para el control de los trabajos que se retrasan y adelantan:
De manera análoga, se pueden definir variables booleanas para el control de
los trabajos finalizados sin retraso ni adelanto:
1 si
0 en otro caso
i i
i
C dU
1 si
0 en otro caso
i i
i
C dV
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
15
2.5 RESTRICCIONES DE PROCESAMIENTO DE LOS
TRABAJOS.
En este apartado destacamos determinadas características que pueden
presentarse en el procesamiento de los trabajos:
Preemption (prmt): Rotura de trabajos. Esta característica hace
referencia a la posibilidad de abandonar el procesamiento de un
trabajo en una máquina sin haber concluido la operación, regresando
más tarde para finalizarla.
Restricciones de precedencia (pre): En algunos entornos
aparecen relaciones de precedencia obligada entre pares de
trabajos.
No-wait (No-Wait): Aparece en entornos de máquinas en serie en los
que los trabajos deben ser procesados desde su inicio en la primera
máquina, hasta su finalización en la última máquina, sin ninguna
interrupción entre máquinas.
Blocking (Block): Esta característica aparece en sistemas de
fabricación en serie en los que no están permitidos los buffers
intermedios de un cierto tamaño entre máquinas, puesto que
bloquean el funcionamiento de las mismas.
Tiempos de setup (sik): Tiempo de cambio de procesamiento
entre trabajo i y trabajo k.
2.6 OBJETIVOS
Los objetivos o criterios para la búsqueda de soluciones se pueden agrupar en
tres grandes grupos:
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
16
Criterios basados en tiempos de finalización de los trabajos:
Ci : Minimizar la suma de los tiempos de finalización de los trabajos.
wiCi : Minimizar el coste total asociado a la finalización de los trabajos.
El peso wi se entiende como un coste de espera o un valor añadido al
trabajo Ji.
Cmax = Max{C1,…,Cn}: Minimizar el tiempo de finalización de todos
los trabajos, también llamado longitud de la programación (makespan).
Criterios basados en fechas de entregas:
Li : Minimizar la suma de retrasos o retraso total. Equivalente a minimizar
el retraso medio. De forma análoga al grupo anterior se estudian wiLi y
Lmax.
Ti : Minimizar la tardanza total. De forma análoga se definen wiTi y
Tmax.
(Ei + Ti): Minimizar la suma de las desviaciones de los instantes de
finalización de los trabajos respecto a sus fechas de entrega di. Cuando
se establecen penaltis ui para los adelantos y vi para los retrasos de
cada trabajo, el objetivo viene a ser (uiEi + viTi).
Ui : Minimizar el número de trabajos retrasados. También se estudia la
minimización del coste de los trabajos retrasados, representado por wiUi.
(Ui + Vi) : Minimizar el número de trabajos adelantados y retrasados.
Igual que anteriormente, también se plantea el criterio wi(Ui + Vi). Este
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
17
objetivo es equivalente al de maximizar los trabajos terminados justo en
su fecha de entrega (on time).
Criterios basados en costes de inventario y utilización de máquinas
Ij : Minimizar el tiempo total en que están desocupadas las máquinas,
siendo Ij = Cmax - pij , y pij la suma de los tiempos de procesado de
todos los trabajos sobre la máquina Mj.
vjIj : Minimizar el tiempo ponderado de desocupación de las
máquinas, siendo vj un peso por unidad de operación.
2.7 CARACTERIZACIÓN DE NUESTRO PROBLEMA
Una vez que hemos comentado en qué consiste el scheduling, la forma de definir
los problemas y de representarlos, vamos a describir nuestro problema en
concreto, cuyo objetivo era minimizar la suma de tiempos de retraso con
máquinas en paralelo. Siguiendo la nomenclatura que hemos ido explicando,
nuestro problema sería el siguiente:
Por tanto, nuestros problemas vendrán definidos por una serie trabajos, que
tendrán como características el tiempo de proceso y la fecha de entrega, y el
número de máquinas.
Pasamos a definir el modelo matemático.
Pi / / ∑Ti
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
18
Actores Tipología Características
Trabajos Conjunto
i=1..N Tiempo de proceso pi
Fecha de entrega di
Máquina Conjunto k=1..R
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
19
3. HEURÍSTICAS
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
20
3.1 INTRODUCCIÓN
Los problemas de scheduling , como hemos indicado anteriormente, son
problemas de optimización. ¿Cómo se distingue un problema de optimización?
Siempre hay que realizar alguna actividad y se está obligado a ello
Existen muchas formas de realizar esa actividad
Existe una valoración de cada forma de realizar esa actividad y lo
que se pretende es obtener la forma más eficiente según un
determinado criterio
Toda la información asociada a los recursos está determinada (es
conocida)
Pasamos a continuación a desarrollar algunas características e ideas de los
problemas de optimización a las que haremos referencia a lo largo de nuestro
proyecto.
3.2 APUNTES DE OPTIMIZACIÓN
3.2.1 tipos de resolución de un problema de optimización.
Resolución exacta
Se busca la mejor solución (denominada Óptimo) con respecto al criterio de
eficiencia.
Resolución aproximada o heurística
Dada la dificultad práctica para resolver de forma exacta (simplex,
“ramificación y acotación”, teoría de grafos, …) toda una serie de
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
21
importantes problemas combinatorios para los cuales, por otra parte, es
necesario ofrecer alguna solución dado su interés práctico, comenzaron a
aparecer algoritmos que proporcionan soluciones factibles (es decir; que
satisfacen las restricciones del problema), las cuales, aunque no optimicen
la función objetivo, se suponen que al menos se acercan al valor óptimo en
un tiempo de cálculo razonable. Podríamos llamarlas en lugar de óptimas,
“satisfactorias”, pues al menos es de suponer que son lo suficientemente
buenas para servirnos.
Este tipo de algoritmos se denominan heurísticas, del griego “heuriskein”,
encontrar (palabra quizá no demasiado afortunada ya que, siendo más exactos,
en principio lo que hacen es buscar). En un primer momento, las heurísticas no
eran bien vistas debido a su escaso rigor matemático, si bien, poco a poco, se
les fueron “abriendo las puertas” debido a la proliferación de resultados.
Una posible definición de estos métodos es la siguiente:
“Son procedimientos simples, a menudo basados en el sentido común, que se
supone ofrecerán una buena solución (no necesariamente la óptima) a
problemas difíciles, de un modo fácil y rápido”.
Las heurísticas se suelen utilizar en las siguientes situaciones:
Cuando no existe un método exacto de resolución o éste
requiere mucho tiempo de cálculo o memoria.
Cuando no es realmente necesario la obtención de la
solución óptima, basta con un acercamiento.
Cuando los datos son poco fiables
Cuando existen fuertes limitaciones temporales
Dentro de un algoritmo más complejo
Una importante ventaja que presentan las heurísticas respecto a las técnicas
que buscan soluciones exactas es que, por lo general, permiten una mayor
flexibilidad para el manejo de las características del problema.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
22
Por otra parte, al estar fundamentadas en el sentido común en la mayoría de los
casos, suele ser más fácil de entender (por parte de los directivos de las
empresas y gente no experta en este tipo de problemas) la fundamentación de
las heurísticas que los complejos métodos matemáticos que utilizan la mayoría
de las técnicas exactas.
3.2.2 Tipos de problemas de optimización según su complejidad.
1. Clase
Son problemas No Complejos. Resolverlos de forma exacta no implica
mucho tiempo.
2. Clase
Son problemas Complejos. Obtener el óptimo suele ser costoso en
tiempo de proceso siempre que el tamaño del problema sea de una cierta
dimensión.
3.2.3 Tipos de problemas de optimización según las características del
modelo.
Los problemas de optimización dependen fundamentalmente para su
resolución del tipo de variables que forman parte del mismo y del carácter
lineal o no lineal de las restricciones.
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
23
Programación de heurísticas para minimizar tiempos de retraso de trabajos con máquinas en paralelo
24
3.2.4 Modelo matemático
Un modelo matemático es una representación del problema en forma
matemática. El modelo matemático de problemas de optimización suele tener 3
partes bien diferenciadas:
Una ecuación que representa la función objetivo.
Una serie de ecuaciones e inecuaciones que representan las
restricciones del problema.
La definición de las variables del problema, indicando el tipo de variable
(Entera, binaria…).
Cuando se posee el modelo matemático del problema, se simplifica mucho la
fase de resolución. Existen métodos de resolución exacta estándares que
pueden usarse para cualquier problema.
Un usuario puede parametrizar estos métodos para un uso más eficiente,
aunque ello no es necesario. Las librerías de optimización llevan
implementados estos métodos y no necesitan de la participación del usuario en
la resolución.
Se simplifica la fase de implementación, puesto que lo único que necesitamos
es el modelo.
Con el modelo matemático también se puede optar por una resolución
aproximada.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
25
3.3 HEURÍSTICA 1
Pasamos ahora a mostrar la primera de las heurísticas (H1 en adelante) que
hemos probado. Básicamente en una adaptación de la regla MDD (modificied
Due Date) que consiste en asignar en cada momento el trabajo con menor
holgura para incurrir en retraso. Esta regla se usa principalmente para los
problemas con una sola máquina con el objetivo de minimizar la suma de los
tiempos de retraso. La adaptación que hacemos trata de asignar el trabajo con
menor holgura para incurrir en retraso a la máquina menos cargada, pues al
tener más de una máquina en nuestro problema (recordar que teníamos
máquinas en paralelo) tenemos más de una opción a la hora de elegir la
máquina a asignar. En cada iteración del algoritmo se introduce un trabajo, en
concreto, aquél cuyo valor ni sea menor, donde ni = Max (di; t + pi) , siendo “di”
la fecha de entrega del trabajo “i” y “pi” el tiempo de procesado del trabajo “i”,
como hemos explicado en el capítulo anterior, y “t” es el instante en el que se
encontraría la máquina menos cargada.
Mostramos a continuación dos diagramas de flujo que describen de forma más
intuitiva el algoritmo de nuestra heurística.
Variables no aclaradas en el capítulo anterior:
sj= Tiempo de finalización de todos los trabajos asignados a la máquina j
S1=tiempo de finalización de la máquina menos cargada.
P1=Tiempo de proceso del trabajo de menor holgura.
T1=Instante de finalización del trabajo asignado.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
26
Cálculo de las holguras de todos los trabajos no asignados
ni=max(di ; t + pi)
Ordenar trabajos de menor a mayor holgura
Ordenar máquinas de menos cargada a más cargada. Asignar trabajo de menor holgura a la máquina menos cargada.
Calcular tiempo de finalización del trabajo asignado y actualización de
tiempo de carga de la que era la máquina menos cargada.
Actualizar el tiempo de fiinalización de la máquina menos
cargada
Comprobamos si el tiempo de finalización de l trabajo asignado
es mayor que su fecha de entrega.
Actualizamos el valor objetivo añadiéndole el retraso del trabajo asignado
Repetir proceso hasta que queden asignados todos los trabajos.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
27
ni=max(di,ti+pi) ino asignado
Ordenar trabajos de menor a mayor
ni
Ordenar máquinas de menor a mayor
sj
T1=S1+p1;
S1=S1+p1
t=min(sj)
¿T1>d1? ¿T1<d1?
Resultado=Resultado+(T1-d1)
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
28
Además, añadimos aquí parte del código de Visual Basic usado para calcular
los resultados de los diferentes problemas.
For trabajos_asignados = 1 To NumTrabajos
For Contador1 = 1 To NumTrabajos 'calculamos las ni para el t dado
If t + Trabajos(Contador1).pi < Trabajos(Contador1).di Then
Trabajos(Contador1).ni = Trabajos(Contador1).di + Trabajos(Contador1).asig
End If
If t + Trabajos(Contador1).pi >= Trabajos(Contador1).di Then
Trabajos(Contador1).ni = t + Trabajos(Contador1).pi + Trabajos(Contador1).asig
End If
Next
Ordenar Trabajos 'De menor a mayor ni
OrdenarMaq Maquinas 'De menor a mayor sj
Trabajos(1).Ci = Maquinas(1).sj + Trabajos(1).pi
Maquinas(1).sj = Maquinas(1).sj + Trabajos(1).pi
Trabajos(1).maq = Maquinas(1).Indice
If Trabajos(1).Ci > Trabajos(1).di Then
Ti = Ti + Trabajos(1).Ci - Trabajos(1).di
End If
Trabajos(1).asig = 100000
OrdenarMaq Maquinas
t = Maquinas(1).sj
NumArchivo = FreeFile
Next
End sub
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
29
3.4 HEURÍSTICA 2
Una vez que hemos explicado la primera heurística, pasamos a explicar la
segunda (H2 de aquí adelante).
El primer paso, al igual que en la anterior, es calcular las holguras de cada
trabajo para incurrir en retraso.
Siendo la fecha de entrega del trabajo i, t el instante de finalización de los
trabajos asignados a la máquina menos cargada y pi el tiempo de procesado
del trabajo i.
Tras esto, se ordenan las máquinas de mayor a menor tiempo de finalización
(de mayor a menor sj, instante en que la máquina acaba de procesar los
trabajos a ella asignada). En el instante inicial, por tanto, el ordenamiento sería
aleatorio, ya que todas las sj son cero al no haber ningún trabajo asignado.
Tras realizar esta ordenación, se asigna el trabajo con menor holgura (menor
ni) a la máquina más cargada que no conlleve incurrir en retraso; en caso de
que al asignar el trabajo a cualquiera de las máquinas se incurriese en retraso,
se asignaría a la menos cargada. Así sucesivamente, hasta que se hayan
asignado todos los trabajos.
Mostramos a continuación un diagrama de flujo que muestra de forma más
gráfica lo que proponemos.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
30
Se calculan las ni para todos los trabajos que no han sido asignados
ni=max(di ; t + pi)
Se orden las máquinas de más a menos cargada. Se asigna el trabajo con menor ni a la máquina más cargada siempre que no se incurra en retraso. En caso de que asignando el
trabajo a cualquiera de las máquinas se incurriese en trabajo, se asigna a la máquina menos cargada.
Si el instante en que se finalizael trabajo es mayor que la fecha de entrega de dicho trabajo, sumar dicha diferencia
al resultado final
Por último, se actualizan los datos, modificando el tiempo de finalización de la máquina a la que se ha añadido el
trabajo, siendo t igual al instante en que la máquina menos cargada acaba todos los trabajos a ell
Se repite el proceso hasta que todos los trabajos hayan sido asignados a alguna máquina
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
31
Adjuntamos además parte del código de la heurística programada:
While trabajos_asignados < NumTrabajos
For Contador1 = 1 To NumTrabajos 'calculamos las ni para el t dad
If t + Trabajos(Contador1).pi < Trabajos(Contador1).di Then
Trabajos(Contador1).ni = Trabajos(Contador1).di + Trabajos(Contador1).asig
Else: Trabajos(Contador1).ni = t + Trabajos(Contador1).pi + Trabajos(Contador1).asig
End If
Next
Ordenar Trabajos 'De menor a mayor ni
OrdenarMaq Maquinas '''se ordenan de mayor a menor sj
Contador1 = 1
While Contador1 <= NumMaquinas '' busca maquina mas cargada que no de retraso.
If Trabajos(1).pi + Maquinas(Contador1).sj >= Trabajos(1).di Then
Contador1 = Contador1 + 1
Else
Trabajos(1).Ci = Maquinas(Contador1).sj + Trabajos(1).pi
Maquinas(Contador1).sj = Maquinas(Contador1).sj + Trabajos(1).pi
Trabajos(1).maq = Maquinas(Contador1).Indice
Trabajos(1).asig = 1000000000
Contador1 = NumMaquinas
End If
Wend
If Trabajos(1).asig <> 1000000000 Then 'para el caso de que en todas haya retraso, se asigna a la menos cargada
Trabajos(1).Ci = Maquinas(NumMaquinas).sj + Trabajos(1).pi
Maquinas(NumMaquinas).sj = Maquinas(NumMaquinas).sj + Trabajos(1).pi
Trabajos(1).maq = Maquinas(NumMaquinas).Indice
Trabajos(1).asig = 1000000000
End If
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
32
If Trabajos(1).Ci > Trabajos(1).di Then
Ti = Ti + Trabajos(1).Ci - Trabajos(1).di
End If
trabajos_asignados = trabajos_asignados + 1
OrdenarMaq Maquinas
t = Maquinas(NumMaquinas).sj
Wend
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
33
3.5 HEURÍSTICA 3
La tercera heurística que vamos a estudiar (H3 en adelante) difiere en gran
medida de las dos anteriores. En primer lugar se calcula el parámetro aux.
Es decir, aux es igual a la suma de los tiempos de proceso de todos los
trabajos dividido entre el número de máquinas. Con este parámetro
pretendemos estimar el tiempo necesario para acabar todos los trabajos con
las máquinas que tenemos disponibles.
Tras calcular aux, dividimos los trabajos en 2 grupos, los que tienen una fecha
de entrega anterior a aux y los que tienen una fecha de entrega posterior. De
esta manera nos hacemos una idea de los que van a retrasarse y los que no.
El siguiente paso es dividir los trabajos en función de su fecha de entrega. Los
trabajos con una fecha de entrega mayor que aux se agrupan en un grupo, y
los que tienen una fecha de entrega inferior en otro grupo aparte.
Tras esto, se ordenan los trabajos de cada grupo de menor a mayor tiempo de
proceso. Una vez que ya tenemos los dos grupos ordenados, vamos asignando
a la máquina con menos carga de trabajo (aquella que termina antes todos los
trabajos a ella asignados) los trabajos del grupo que contiene los trabajos con
fecha de entrega anterior a aux. Tras programar todos los trabajos de este
grupo, se procede con el otro con el mismo criterio de asignación a máquinas.
En cada asignación, se comprueba si el tiempo de finalización del trabajo es
mayor que su fecha de entrega. En caso afirmativo, se suma dicha diferencia al
resultado final.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
34
En primer lugar se clacula la variable aux, que es igual a la suma los tiempos de proceso de todos los trabajos entre el número de
máquinas del problema.
aux=∑pi/n
Se dividen los trabajos en dos grupos, los que tienen una fecha de entrega mayor que aux y los que tienen una fecha de entrega
menor
Se ordenan los trabajos de cada grupo de menor a mayor tiempo de proceso.
Se van asignando los trabajos del grupo de trabajos con fecha de entrega menor que aux, previamente ordenados, a la máquina menos cargada. En cada asignación, comprobar si el tiempo de finalización del trabajo es mayor que su fecha de entrega. En
caso afirmativo, sumar dicha diferencia al resultado final.
Tras asignar todos los trabajos del primer grupo, se procede con el mismo criterio con el otro. En cada asignación, comprobar si el
tiempo de finalización del trabajo es mayor que su fecha de entrega. En caso afirmativo, sumar dicha diferencia al resultado
final.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
35
Como en los casos anteriores, se muestra parte del código.
For Contador1 = 1 To NumTrabajos
suma_pi = suma_pi + Trabajos(Contador1).pi
Next
aux = suma_pi / NumMaquinas
For Contador1 = 1 To NumTrabajos
If Trabajos(Contador1).di < aux Then
Trabajos_Antes(Contador2) = Trabajos(Contador1)
Contador2 = Contador2 + 1
End If
If Trabajos(Contador1).di > aux Then
Trabajos_Despues(Contador3) = Trabajos(Contador1)
Contador3 = Contador3 + 1
End If
Next
Ordenar Trabajos_Antes ´De menor a mayor ni.
Ordenar Trabajos_Despues ´De menor a mayor ni.
OrdenarMaq Maquinas ´De menor a mayor sj
For trabajos_asignados1 = 0 To Contador2 - 2
Trabajos_Antes(c).Ci = Maquinas(1).sj + Trabajos_Antes(c).pi
Maquinas(1).sj = Maquinas(1).sj + Trabajos_Antes(c).pi
If Trabajos_Antes(c).Ci > Trabajos_Antes(c).di Then
Ti = Ti + Trabajos_Antes(c).Ci - Trabajos_Antes(c).di
End If
OrdenarMaq Maquinas
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
36
c = c + 1
Next
c = 1
For trabajos_asignados2 = 0 To Contador3 - 2
Trabajos_Despues(c).Ci = Maquinas(1).sj + Trabajos_Despues(c).pi
Maquinas(1).sj = Maquinas(1).sj + Trabajos_Despues(c).pi
If Trabajos_Despues(c).Ci > Trabajos_Despues(c).di Then
Ti = Ti + Trabajos_Despues(c).Ci - Trabajos_Despues(c).di
End If
OrdenarMaq Maquinas De menor a mayor sj
c = c + 1
Next
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
37
4. Experimentación
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
38
4.1 INTRODUCCIÓN
En este capítulo vamos a explicar los programas, tipos de fichero y
procesos usados para obtener resultados que nos sirvan para sacar
conclusiones en relación a nuestras heurísticas.
En resumen, el proceso seguido para hallar datos experimentales, una vez que
se han diseñado las heurísticas, consta de los siguientes puntos:
1) Generación de una serie de problemas prototipo lo suficientemente amplia y
variada para poder sacar conclusiones, en formato txt.
2) Generación de los modelos matemáticos que definen los distintos
problemas, en formato lg4. Hallar el óptimo de estos modelos (veremos las
dificultades con las que nos encontramos durante el proceso y la solución
adoptada) mediante Lingo.
3) Hallar el resultado que aportan nuestras heurísticas a nuestros problemas.
4) Obtención de errores y comparación de heurísticas.
4.2 VISUAL BASIC
En el mundo de la programación informática, uno de los lenguajes más
populares y conocidos es e Visual Basic. Creado en 1991 por Alan Cooper para
Microsoft, este paquete permite programar contenidos informáticos gráficos de
manera simple y accesible.
Visual Basic ha sido desarrollado con el objetivo de entregar a los usuarios de
programación informática un paquete de utilidades simples y accesibles. Es por
esto que el Visual Basic puede ser usado y fácilmente comprendido por
expertos como también por usuarios principiantes. Su base parte del dialecto
BASIC pero con componentes novedosos que lo adaptan a los lenguajes
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
39
informáticos modernos. A esto se suma que el Visual Basic es además un
lenguaje de programación guiado por eventos que permite mayor operatibilidad
y mejores resultados.
La creación de interfaces gráficas para diferentes utilidades es una de las
principales funciones del Visual Basic y es por esto que es altamente usado en
espacios profesionales donde se requieren soportes gráficos para mayor
organización de los contenidos y materiales. La programación gráfica se puede
llevar a cabo directamente ya que el Visual Basic no requerirá de los usuarios
la escritura de los códigos de programación. Visual Basic trabaja a partir de
lenguajes RAD, en inglés Rapid Application Development, o desarrollo rápido
de aplicaciones específicas para cada necesidad y función. Al mismo tiempo, el
Visual Basic, gracias a su simple lenguaje, es perfectamente adaptable a las
plataformas de los sistemas Windows y es fácilmente transformable a otros
lenguajes más complejos.
Microsoft ha desarrollado numerosas versiones para Visual Basic. Una de las
más antiguas data de 1992 y si bien presentaba el lenguaje en forma de texto,
permitía ya disfrutar y acceder a algunos de los elementos más importantes del
futuro Visual Basic. Hoy en día, la versión 6.0 es la más difundida a nivel
mundial gracias a la combinación de elementos simples y de elementos
perfeccionados; ésta última es la que nosotros hemos usado.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
40
4.3 LINGO
LINGO: (LINear Generalize Optimizer) es una herramienta simple para formular
problemas lineales y no lineales, resolverlos y analizar su solución. El resultado
que LINGO nos proporciona es la optimización que nos ayuda a encontrar el
mejor resultado: la ganancia más alta, o el costo más bajo. A menudo estos
problemas involucran el uso más eficiente de los recursos. Los problemas de
optimización son clasificados a menudo como lineales o no lineales,
dependiendo si las relaciones en el problema son lineales con respecto a las
variables. Uno de los rasgos más poderosos de LINGO es su aplicación en el
lenguaje de modelo matemático. El cual permite expresar un problema de una
manera muy similar a la anotación matemática normal pudiendo también,
expresar una serie entera de restricciones en una declaración compacta. Esto
lleva a modelos que son mucho más fáciles de mantener. Otro aspecto es la
sección de los datos, que le permite aislar los datos de la formulación del
modelo. De hecho LINGO puede leer datos incluso de una hoja de cálculo
separada, base de datos, o archivo de texto. Con datos independientes del
modelo, es mucho más fácil de hacer cambios, y hay menos oportunidad de
error cuando se realiza el modelo.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
41
Sintaxis de LINGO
La sintaxis que se utiliza en este programa es muy sencilla. Para el nombre de
las variables se establece que deben tener 32 caracteres como máximo, Deben
comenzar con una letra seguido de letras, dígitos o _ . El compilador de LINGO
no distingue entre mayúsculas y minúsculas. Con respecto a las sentencias:
Todas las sentencias deben terminar en un punto y coma. Para darle un
nombre a la función objetivo o a las restricciones, estos se deben colocar entre
corchetes. Para declarar la función objetivo debemos colocar las palabras
reservadas MAX o MIN, resaltadas en azul, seguidas del signo =. Los
comentarios deben comenzar con un signo !, los cuales son resaltados en
verde.
El formato que sigue un modelo en LINGO es el siguiente:
1. Título: descripción del modelo.
2. Función objetivo: Maximizar o minimizar con los valores de los costes de
todas las variables.
3. Restricciones del problema.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
42
4. Restricciones asociadas al tipo de variable.
A continuación se detallan las características más importantes
a cerca de la sintaxis de los modelos de LINGO:
1. Título
Es optativo y debe tener como máximo 128 caracteres.
FORMATO: {TITLE NOMBRE DEL MODELO ;}
2. Función objetivo
Para escribir la función objetivo se colocan las palabras reservadas
MAX o MIN, qué se resaltarán en azul, seguidas de signo =.
FORMATO: {[NOMBRE]} (MAX/MIN) = FUNCIÓN OBJETIVO;
3. Restricciones del problema
LINGO tiene la habilidad de nombrar las restricciones
en su modelo. Ésta es una buena práctica, por dos razones; primero,
los nombres de restricciones se usan en el reporte de las soluciones,
cosa que los hacen más fácil de interpretar. Segundo, muchos de los
mensajes de error de LINGO se refieren a una restricción dada por
nombre. Dar nombre a las restricciones es bastante simple, se
inserta el nombre entre corchetes delante de una línea de código,
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
43
dicho nombre cumplirá los requisitos normales para un nombre
LINGO. Mostramos a continuación un ejemplo de cómo quedan
nuestros problemas modelados el LINGO.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
44
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
45
La siguiente imagen muestra un ejemplo del formato que tendría los
modelos LINGO de nuestros problemas.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
46
4.4 GENERACIÓN DE LA BATERÍA DE PROBLEMAS
Para probar nuestras heurísticas se hizo necesario generar una serie de
problemas de las características de este trabajo lo suficientemente grande y
variada para poder sacar conclusiones. Estos problemas se han realizado con
un código de visual Basic que genera problemas aleatorios con parámetros lo
suficientemente heterogéneos. Aunque los problemas se generan de forma
aleatoria, hay unas variables que aseguran la heterogeneidad en las fechas de
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
47
entrega, tiempos de procesado y diferencia entre estos parámetros dentro de
cada problema. Se han generado 360 problemas diferentes. Podríamos decir
que estos problemas quedan definidos por 3 características diferenciadoras.
Número de máquinas del problema.
Número de trabajos
El tiempo de proceso y la fecha entrega.
De los 360 problemas generados, 120 son problemas con 3 máquinas en
paralelo, 120 con 6 máquinas y los 120 restantes son problemas con 10
máquinas en paralelo. Por su parte, cada uno de estos 3 grupos podría
dividirse en función del número de trabajos, habiendo problemas con 25,50,
100 y 200 trabajos.
Nº de problemas
25 Trabajos 50 Trabajos 100 Trabajos 200 Trabajos
3 MÁQUINAS 30 30 30 30 6 MÁQUINAS 30 30 30 30
10 MÁQUINAS 30 30 30 30
Estos problemas se han realizado con un código de visual Basic que genera
problemas aleatorios con parámetros lo suficientemente heterogéneos. Los
datos que aporta de cada problema son el número de trabajos (Que a su vez
tenemos que indicárselo previamente), y la fecha de entrega y tiempo de
proceso de cada trabajo. Este programa crea unos ficheros formato “txt” de los
que sacamos esta información. Los ficheros “txt” de salida siguen la siguiente
estructura:
En la primera fila vendría un número que representa el número de trabajos del
problema. Después se añadirían tantas filas como trabajos tiene el problema,
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
48
con los datos de tiempo de procesado e instante de entrega respectivamente,
separados por un espacio.
El ejemplo de la imagen representa un problema de 5 trabajos a procesas. El
primer trabajo, por ejemplo, tendría un tiempo de proceso de un periodo y su
fecha de entrega sería el instante 2. Así para cada trabajo.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
49
Se han generado 120 ficheros de este tipo. Observar que en estos no viene
indicado el número de máquinas del problema, por lo que el problema no
estaría completamente definido. Esto es así porque el número de máquinas lo
especificaremos en los códigos de generación de modelos y en el de las
heurísticas. De hecho, como vamos a basar nuestro estudio en problemas con
3, 6 y 10 máquinas en paralelo, los 120 ficheros generados por los 3 grupos de
problemas según el número de máquinas, hacen los 360 problemas que
indicamos anteriormente.
4.5 BÚSQUEDA DEL ÓPTIMO
Una heurística es un método de resolución que pretende dar soluciones
posibles que se acerquen al óptimo, por lo que para saber lo buena o mala que
es una heurística deberemos compararla con éste.
Como hemos explicado anteriormente, hemos usado el programa LINGO para
sacar el óptimo a estos problemas. Recordemos que hasta ahora sólo hemos
generado los problemas, y la información de éstos la tenemos en ficheros “txt”
con un formato muy concreto. Por lo tanto, a partir de estos ficheros deberemos
crear los modelos en formato “lg4” para poder sacar sus óptimos mediante
LINGO. Esto lo hemos realizado mediante otro código de VISUAL BASIC. Los
resultados aportados por Lingo, por su parte, se han ido almacenando en una
hoja de Excel.
Ahora vamos a hacer un paréntesis en cuanto al óptimo hallado. Aunque lo
más apropiado habría sido comparar el resultado de nuestras heurísticas con el
óptimo de los problemas, debido a la complejidad de los problemas de
minimización de la suma de tiempos de retraso con máquinas en paralelo, no
nos es posible hallar el óptimo de los problemas, pues para los más sencillos
necesitábamos más de 72 horas con LINGO funcionando, por lo que era
totalmente inviable. Como solución decidimos hallar el óptimo continuo de
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
50
nuestro problema, que resulta más asequible de hallar. Este valor es el
resultado del modelo del problema pero asumiendo variables continuas en
lugar de enteras. Recordar, por otra parte, que el objetivo principal de nuestro
trabajo es comparar los resultados que aportan las heurísticas propuestas, por
lo que no es necesario encontrar el óptimo. Usaremos los resultados que
aporta el óptimo continuo para comprobar que nuestras heurísticas dan valores
coherentes y para tener una cota inferior de referencia.
Diferencia entre programación lineal continua y programación lineal entera.
Los modelos de Programación Entera son aquellos donde la totalidad o un
subconjunto de las variables de decisión toman valores enteros. En cambio, si
las variables toman valores continuos, estaríamos hablando de programación
continua.
Se puede demostrar (no entra dentro de los objetivos de este trabajo) que si
tenemos dos problemas de programación con las mismas restricciones y
función objetivo, pero uno con variables enteras y otro con variables continuas,
el óptimo del problema con variables enteras será siempre mayor o igual que el
óptimo del problema con variables continuas en problemas de minimizar (Que
es nuestro caso). Dicho de otra manera, el óptimo continuo siempre es “mejor o
igual” que el entero.
¿Cómo afecta esto a nuestros resultados? Como hemos explicado
anteriormente, ante la imposibilidad de calcular el óptimo de los problemas que
hemos planteado para comprobar las heurísticas, hemos hecho una
modificación de los modelos cambiando las variables enteras por continuas.
De esta manera, el modelo usado ya no representa nuestro problema, de
hecho aporta resultados erróneos, pero estos modelos son mucho más
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
51
sencillos de resolver con Lingo y además, como hemos comentado
anteriormente, tienen relación.
El resultado aportado por las heurísticas será siempre peor que el óptimo
(entendiendo en nuestro caso “peor” como “más grande”, ya que nuestro
problema consiste en minimizar una suma de tiempos) debido a que en la
misma definición de solución óptima está implícito que es el valor más pequeño
de todas las soluciones posibles. Por otra parte, hemos dicho que el resultado
de nuestro modelo tomando variables continuas será siempre menor o igual
que el óptimo de nuestro problema sin ningún cambio, por lo que el error de la
heurística con respecto al óptimo será siempre menor o igual que el error con
respecto al óptimo continuo. Dicho de otro modo:
Resultado óptimo continuo ≤ Resultado óptimo ≤ Resultado heurística
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
52
Veamos un sencillo ejemplo práctico de lo que esto supone a la hora de
interpretar nuestros resultados.
Supongamos los siguientes valores:
-Óptimo continuo aportado por Lingo=10,8 (Valor continuo, no representa el
óptimo de nuestro problema ya que hemos variado el modelo matemático).
-Resultado de la heurística=10
Por tanto, el error absoluto de la heurística con respecto al óptimo continuo es:
10,8 – 8 = 2,8.
Teniendo en cuenta que:
Resultado óptimo continuo ≤ Resultado óptimo ≤ Resultado heurística
Deducimos que
10,8≤ óptimo ≤ 8
Por lo que el error absoluto de la heurística con respecto al óptimo es menor o
igual que 2,8.
Esta conclusión es aplicable a todos los tipos de error. De esta manera,
calculando el óptimo continuo (que nos resulta asequible con Lingo) podemos
acotar el error que tiene nuestra heurística con respecto al óptimo.
.
4.6 HALLAR EL RESULTADO QUE APORTAN NUESTRAS HEURÍSTICAS.
En este apartado vamos a explicar el proceso seguido para hallar y almacenar
los resultados que aportan las heurísticas a nuestros problemas. Recordar que
para ello hemos usado códigos de Visual Basic. Pasamos a describir de forma
breve la estructura de estos códigos:
En primer lugar nos encontramos la inicialización de las variables.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
53
Después viene la función principal. Aquí es donde tenemos que indicar
el número de máquinas de los problemas que vamos a resolver. El
código está diseñado para resolver los 120 problemas en formato “txt”
antes comentado, indicando el número de máquinas, en una sola
ejecución. Por tanto, con el bucle “for” que se ve en la imagen, se
ejecuta las sub-funciones leer archivo (Que lo que hace es leer los datos
de cada problema) y algoritmo de cada problema. La función algoritmo
ejecuta el código de la heurística en concreto que estamos estudiando-
Esta función es la que se ha mostrado en el capítulo anterior al describir
las heurísticas.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
54
Los resultados se almacenan en ficheros “txt” en la carpeta indicada. Se ha
hecho una macro para almacenar estos en una hoja Excel de forma
automática, indicando la ubicación de la carpeta que los contiene.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
55
4.6 OBTENCIÓN DE ERRORES.
Una vez que se han obtenido los resultados de las heurísticas y el óptimo
continuo, el siguiente paso es hallar los errores de las heurísticas con respecto
al óptimo. Vamos a basar nuestro estudio de errores usando el error absoluto,
el error relativo y el error cuadrático medio. Dejamos a continuación la
definición de estos errores.
Error absoluto. Es la diferencia entre el valor de la medida y el valor
tomado como exacto. Puede ser positivo o negativo, según si la medida
es superior al valor real o inferior (la resta sale positiva o negativa).
Tiene unidades, las mismas que las de la medida.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
56
Error relativo. Es el cociente (la división) entre el error absoluto y el valor
óptimo. Si se multiplica por 100 se obtiene el tanto por ciento (%) de
error. En nuestro caso será siempre positivo, pues el resultado de las
heurísticas será siempre mayor que el óptimo. no tiene unidades.
Error cuadrático medio. Se calcula como la suma de las diferencias entre
los resultados aportados por la heurística y el óptimo, elevado al
cuadrado, entre el número de problemas.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
57
5. Resultados y conclusiones
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
58
0
5000
10000
15000
20000
25000
30000
35000
1 10 19 28 37 46 55 64 73 82 91
100
109
118
127
136
145
154
163
172
181
190
199
208
217
226
235
244
253
262
Resultados
H1
H2
H3
OPTIMO
5.1 VALORES APORTADOS POR LAS HEURÍSTICAS
En este capítulo vamos a mostrar los resultados de las experimentaciones
antes comentadas, sacando una serie de conclusiones. Para ello vamos a usar
varias gráficas, ya que aportan información de una forma más visual e intuitiva.
Recordar, por otra parte, que en anexos encontraremos las tablas con los
datos generadas durante este trabajo. Pasamos a comentar la siguiente
gráfica. El eje Y representa los resultados aportados por las heurísticas y el
valor del óptimo continuo para los distintos problemas del eje X.
Numeración 1-90 91-180 181-270
Número de trabajos 25 50 100
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
59
De esta gráfica podemos sacar varias conclusiones. En primer lugar, aunque
no se pueda observar claramente, el valor aportado por el óptimo continuo es
siempre menor o igual al aportado por las heurísticas. El caso contrario
significaría que la experimentación es errónea, ya que en la misma definición
de óptimo está implícito que sea el mejor valor, y al ser nuestros problemas de
minimizar, la solución aportada por éste será necesariamente siempre la menor
(más aún tratándose del óptimo continuo). De esta manera, no podemos
asegurar categóricamente que los valores aportados por las heurísticas sean
valores posibles, ya que pueden hallarse en la franja que va desde el óptimo
continuo al óptimo del problema (desconocido), pero esta posibilidad parece
muy remota. Por otra parte, observamos que lo valores de las heurísticas están
relativamente cerca del óptimo aportado, por lo que a priori cumplen su función,
que no es más que aportar un resultado lo más cercano al óptimo posible,
teniendo en cuenta que nunca nos darán un valor mejor que éste. De todas
maneras, comentaremos esto más a fondo cuando hagamos un análisis de los
errores de las distintas heurísticas.
Observar, por otra parte, que no se han tomado datos de todos los problemas,
ya que para los problemas más grandes (los de 200 trabajos) se han
encontrado dificultades para hallar el óptimo continuo, debido a la complejidad
del tipo de problema que es objeto de nuestro estudio. En parte, esto refuerza
uno de los motivos de nuestro trabajo, ya que éste es uno de los puntos fuertes
de las heurísticas, que son capaces de aportar soluciones bastante buenas de
forma sencilla en problemas, como es el caso que estamos comentando, en los
que el valor óptimo es muy difícil de hallar.
Para la correcta interpretación de los cálculos de errores es importante recordar
que se están calculando con respecto al óptimo continuo; es decir, los errores
calculados no son realmente los errores de los resultados de las heurísticas
con respecto al óptimo, sino que es una cota superior de este error.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
60
5.2 COMPORTAMIENTO DE NUESTRAS HEURÍSTICAS EN FUNCIÓN DEL
NÚMERO DE TRABAJOS
Vimos que nuestros problemas quedaban definidos por el número de trabajos,
el número de máquinas, y los parámetros de cada problema; es decir, su
tiempo de realización y el instante de entrega. Pasamos a estudiar cómo se
comportan nuestras heurísticas en función del número de trabajos del
problema.
Para ello, comenzamos agrupando los problemas según el número de trabajos,
y valoramos las soluciones de las heurísticas con el error cuadrático medio
(ECM en adelante) como criterio.
ECM H1 H2 H3
25 827,867246 4878,6574 6385,6367 50 33480,08533 490590,924 235525,354
100 227885,5207 8871899,06 2090034,54 200 550337,7756 74572086,3 6291504,48
*Para el cálculo del error cuadrático medio de los problemas con 200 trabajos
se han tomado 10 valores. Para el resto 90 resultados por cada grupo.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
61
Era evidente que conforme más grande fuese el número de problemas, mayor
sería el ECM. Por otra parte, observamos que la heurística 1 es la que mejor se
comporta, independientemente del número de trabajos. Además, conforme
aumenta el número de trabajos, aumenta el error cuadrático medio de las
soluciones aportadas por nuestras heurísticas.
Pasamos a mostrar gráficas que muestran los resultados para los problemas
de 25 y 50 trabajos respectivamente, ya que no resulta tan claro observando la
gráfica anterior.
0
10000000
20000000
30000000
40000000
50000000
60000000
70000000
80000000
25 50 100 200
Títu
lo d
el e
je
Error cuadrático medio en función del número de trabajos
H1
H2
H3
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
62
0
1000
2000
3000
4000
5000
6000
7000
H1 H2 H3
Error cuadrático medio de las heurísticas para
problemas de 50 trabajos
Podemos observar que a priori la heurística 2 se comporta mejor para
problemas de 25 trabajos que la 3, pero que para problemas más grandes (A
partir de 50 trabajos ya se confirma en nuestro estudio) se comporta mejor la
heurística 3.
0
100000
200000
300000
400000
500000
600000
H1 H2 H3
Error cuadrático medio de las heurísticas para
problemas de 25 trabajos
0
500
1000
1500
2000
2500
3000
3500
4000
1 13 25 37 49 61 73 85 97
109
121
133
145
157
169
181
193
205
217
229
241
253
265
Títu
lo d
el e
je
Errores absolutos
H1
H2
H3
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
63
Aunque no se vea del todo claro (los datos numéricos se muestran en anexos)
la heurística 1 da siempre valores más pequeños que las otras dos heurísticas.
Por otra parte, observamos que conforme aumenta el número de trabajos,
Tanto el ECM como el error absoluto aumentan.
Vemos en esta gráfica y otros muchos datos de este proyecto, que aunque la
H1 de siempre mejores resultados que las otras dos heurísticas, las tres tienen
un comportamiento muy parecido, y por tanto las conclusiones que vamos a ir
sacando a partir de los resultados de la primera heurística se podrían aplicar a
las otras dos.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
64
5.3 COMPORTAMIENTO DE NUESTRAS HEURÍSTICAS EN FUNCIÓN DEL
NÚMERO DE MÁQUINAS.
Recordemos que los problemas venían definidos por el número de trabajos, el
número de máquinas, y los parámetros de cada trabajo (tiempo de procesado e
instante de entrega). Observemos como influye el número de máquinas en el
error de la heurística:
Observamos 2 fenómenos:
Independientemente del número de máquinas, el error relativo de la
heurística se estabiliza a partir de problemas con un determinado
número de trabajos. En problemas con una relación Número de
trabajos/Número de máquinas pequeña la heurística no da resultados
convincentes.
0
5
10
15
20
25
30
35
40
1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77 81 85 89
Tít
ulo
de
l eje
ERRORES RELATIVOS
3 MAQ
6 MAQ
10 MAQ
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
65
Mientras mayor es el número de máquinas, peor funcionará para
problemas con pocos trabajos. Aclarar que el error relativo de los
trabajos anteriores a la zona “inestable” no es cero, sino que no
aparecen en la gráfica porque el resultado del óptimo continuo es cero, y
al estar en el denominador (definición de error relativo) daría valor
infinito.
Por otra parte, comentar que a mayor número de trabajos menor error relativo a
priori, aunque el error absoluto se mayor como vimos anteriormente.
En cuanto al error cuadrático medio, observamos que a mayor número de
máquinas, mayor ECM.
ECM 3 MAQ 6 MAQ 10 MAQ
25 945,794873 995,884234 411,966667 50 11220,1598 23090,7402 32649,2707
100 48239,5873 133769,427 273762,027
0
50000
100000
150000
200000
250000
300000
25 50 100
3 MAQ
6 MAQ
10 MAQ
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
66
5.4 CONCLUSIONES
-Nuestras heurísticas dan valores cercanos al óptimo, y aunque no podamos
demostrarlo, es altamente probable que den siempre valores factibles, por lo
que cumplen su función.
-Amparándonos en los resultados de la experimentación realizada, podemos
afirmar que la heurística que mejor se comporta es la H1 para todos los casos.
Por otra parte, La H3 se comporta mejor que la H2 para problemas de muchos
trabajos, siendo al revés en problemas con pocos trabajos (Aunque hay
bastantes excepciones en ambos casos).
-Las tres heurísticas tienen un comportamiento muy parecido en cuanto a la
variación de los resultados según el número de trabajos, el número de
máquinas o los parámetros de los trabajos.
-Conforme aumenta el número de trabajos, aumenta el error absoluto del
resultado aportado por nuestras heurísticas y el error cuadrático medio. Por su
parte, comentar que respecto al error cuadrático medio, nuestras heurísticas no
dan soluciones factibles cuando la relación número de trabajos / número de
máquinas es bastante baja. Para problemas con muchos trabajos el error
relativo es estable y bastante pequeño.
-En cuanto a la relación existente entre el número de máquinas y el error de
nuestras heurísticas, comentar que a mayor número de máquinas mayor error
cuadrático medio y mayor error absoluto. Pasando a analizar el error relativo,
nuestras heurísticas no dan soluciones factibles cuando la relación número de
trabajos / número de máquinas es bastante baja. Para problemas con muchos
trabajos el error relativo es estable y bastante pequeño independientemente
del número de máquinas.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
67
6. CONCLUSIONES
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
68
Una vez que se ha mostrado los resultados de nuestro trabajo, pasamos a
desarrollar una serie de conclusiones respecto al mismo. Por lo general,
estamos bastante satisfechos con el resultado final, sobre todo teniendo en
cuenta los problemas que nos hemos ido encontrando.
En primer lugar, destacar la cantidad de conocimientos adquiridos en los
estudios previos y durante la realización del mismo. Por otra parte, me ha
servido para poner en práctica conocimientos y técnicas adquiridas durante la
carrera.
El primer paso para la realización de este trabajo fue repasar y ampliar los
conocimientos sobre problemas de scheduling en general, y de nuestro
problema en particular. Tras esto, se realizó una búsqueda de información en
publicaciones sobre el tema en cuestión y en internet. Esto sirvió para tener
una base sobre la que diseñar las heurísticas que iban a ser objeto de nuestro
estudio.
El siguiente paso, por tanto, fue el diseño de nuestras heurísticas. No fue
sencillo, ya que buscábamos que las heurísticas diseñadas diesen valores
parecidos al óptimo. Para comprobarlo, las chequeamos con problemas pocos
complejos de los que conocíamos el óptimo, para comprobar que daban
valores cercanos a éste. De las 4 iniciales, decidimos realizar el estudio de las
3 heurísticas que pensamos que darían mejores resultamos.
Una vez que se había diseñado las heurísticas, hacía falta programarlas en
Visual Basic, ya que nuestro estudio se iba a realizar sobre los resultados
aportados de muchos problemas, algunos imposible de resolver de forma
manual. Además se intentó que el proceso de obtención de los resultados de
las distintas heurísticas fuese lo más automático posible, por lo que el código
de cada heurística se modificó para tal proceso y se creó una macro de Excel
para almacenar los resultados de forma automática.
Tras programar las heurísticas en Visual Basic, realizamos la batería de
problemas sobre la que sacaríamos nuestras conclusiones. Esta batería se
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
69
generó con otro programa de Visual Basic que generaba problemas aleatorios
dentro de unas especificaciones concretas; de esta manera, como hemos
explicado, se consiguió generar una batería de problemas lo suficientemente
heterogénea pero sin contemplar casos extremos.
Una vez que teníamos los problemas sobre los que se iba a probar las
heurísticas y habíamos obtenido los resultados que éstas aportaban a los
problemas generados, pasamos a buscar el óptimo de éstos. Tras intentarlo
para varios problemas mediante LINGO, nos dimos cuenta que no iba a ser
posible hallarlo, debido a la complejidad del tipo de problemas que es objeto de
nuestro estudio (tardaba más de 72 horas para los problemas más sencillos). El
óptimo nos servía para chequear los resultados de nuestras heurísticas, ya que
siempre deben de ser peores que el óptimo; en caso contrario, no darían
resultados válidos a nuestros problemas.
Como decíamos, vimos que no iba a ser posible hallar el óptimo, y como
herramienta alternativa hicimos una modificación de los modelos de LINGO de
nuestros problemas para hallar el óptimo continuo. Este es el resultado de
asumir variables continuas en lugar de variables enteras. Estos resultados no
eran soluciones válidas a nuestros problemas, pues dan valores mejores que el
óptimo (cosa imposible) pero nos servía como cota del error de nuestras
heurísticas.
Tras hallar mediante LINGO el óptimo continuo de los nuestros problemas,
pasamos a realizar un análisis de los datos obtenidos. Lo primero que
observamos fue que los valores de las heurísticas siempre eran mayores que el
óptimo continuo, (lo que era de esperar, pues en caso contrario significaría que
las heurísticas estaban mal programadas) pero a su vez daban valores
relativamente cercanos. Por otra parte, vimos que la primera de nuestras
heurísticas es la que mejores resultados daba en todos los casos.
Tras este primer paso, realizamos un análisis comparativos de las heurísticas,
calculando los errores con respecto al óptimo continuo, que como hemos visto
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
70
nos servía de referencia. De esta manera podíamos comparar el
comportamiento de las heurísticas. Esto nos permitía sacar una serie de
conclusiones en cuanto al comportamiento de las heurísticas según el número
de trabajos del problema o el número de máquinas, entre otras.
Por último, una vez que dimos por concluida la parte experimental, pasamos a
redactar el presente documento, que contiene breves explicaciones de la teoría
que sustenta nuestro estudio. Mostramos de nuevo las conclusiones que
hemos hallado de nuestro proyecto.
-Nuestras heurísticas dan valores cercanos al óptimo, y aunque no podamos
demostrarlo, es altamente probable que den siempre valores factibles, por lo
que cumplen su función.
-Amparándonos en los resultados de la experimentación realizada, podemos
afirmar que la heurística que mejor se comporta es la H1 para todos los casos.
Por otra parte, La H3 se comporta mejor que la H2 para problemas de muchos
trabajos, siendo al revés en problemas con pocos trabajos (Aunque hay
bastantes excepciones en ambos casos).
-Las tres heurísticas tienen un comportamiento muy parecido en cuanto a la
variación de los resultados según el número de trabajos, el número de
máquinas o los parámetros de los trabajos.
- Además, se han sacado un serie de conclusiones en cuanto al
comportamiento de las heurísticas en función del número de máquinas y el
número de trabajos.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
71
Bibliografía
Enciclopedia de Visual Basic. Autor: Francisco Javier Ceballos. Editorial: ra-ma.
Pablo Cortés Achedad, José Manuel García Sánchez, José Guadix
Martín, Ester Gutiérrez Moya, Jesús Muñuzuri Sanz, Luis Onieva
Giménez, Juan Nicolás Ibañez Rivas. (Edición 2008). “Ingeniería de
Organización: Modelos y Aplicaciones”.
Visual Basic. Autor: José Eduardo Maluf de Cervalho. Editorial: McGraw-Hill.
Optimización heurística y redes neuronales. Autores: A.Díaz, F.Glover, H.M.Chaziri, J.L.González, M.Segura, P.Moscato, F.T.Seng. Editorial: Paraninfo.
Sheduling. Theory, Algorithms and Systems. Autor: M.Pinedo. Editorial: Prentice-Hall, 1995.
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
72
Anexos
Los resultados de las columnas H1, H2 y H3 corresponde a los resultados
obtenidos aplicando la primera, segunda y tercera heurística respectivamente.
Por su parte, la columna CONT representa el óptimo continuo obtenido con
Lingo. En el encabezado aparece el número de máquinas del problema.
3 MAQ 6 MAQ 10 MAQ
Problema H1 H2 H3 CONT H1 H2 H3 CONT H1 H2 H3 CONT
1 34 107 122 9,5 9 20 16 0 9 9 9 0
2 74 153 181 36,8 4 15 15 0 4 4 4 0
3 12 91 60 0,0 10 27 11 0 10 11 10 0
4 11 83 83 0,0 0 4 1 0 0 0 0 0
5 30 71 102 0,0 7 10 10 0 7 8 8 0
6 41 92 137 0,0 13 16 21 0 12 12 12 0
7 153 224 255 102,6 35 52 52 0 20 23 22 0
8 40 149 158 0,0 14 24 26 0 14 15 14 0
9 77 136 142 0,0 10 26 27 0 7 8 7 0
10 58 156 130 6,5 6 31 13 0 5 6 6 0
11 228 228 314 198,3 32 56 50 0 13 20 26 0
12 282 370 350 260,7 17 44 63 0 11 14 12 0
13 314 340 414 290,3 10 52 79 0 8 15 12 0
14 298 298 380 281,1 11 53 54 0 8 9 8 0
15 333 333 425 317,9 32 41 95 0 21 23 21 0
16 340 340 443 319,4 67 78 98 0 36 42 46 0
17 197 231 258 180,7 5 36 17 0 5 12 5 0
18 283 283 387 267,6 41 91 96 0 25 27 30 0
19 220 235 304 196,7 14 37 55 0 14 14 14 0
20 306 336 369 290,0 34 103 88 0 13 24 26 0
21 384 430 499 345,2 46 109 104 0 31 31 31 0
22 307 356 391 276,0 27 74 70 0 17 23 18 0
23 283 378 343 260,5 6 38 43 0 6 9 6 0
24 302 340 415 249,7 41 89 65 0 30 30 35 0
25 375 405 458 343,6 37 115 99 0 23 23 33 0
26 346 411 421 329,8 29 89 94 0 7 16 19 0
27 446 517 530 420,6 132 203 194 76,8 42 81 65 0
28 437 465 533 395,7 86 176 129 18,1 26 58 43 0
29 554 586 565 546,0 159 277 211 117,0 51 119 81 0
30 389 389 476 354,0 40 169 98 0,0 18 36 18 0
31 1621 1851 1918 1.521,3 124 546 462 6,0 13 92 79 0
32 822 1372 1104 650,1 62 374 195 0,0 37 129 69 0
33 1764 2390 2056 1.615,9 376 1086 670 115,6 77 318 165 0
34 1613 2180 1919 1.439,6 165 744 657 35,0 55 160 117 0
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
73
35 893 1526 1231 708,8 34 506 179 0,0 19 69 49 0
36 1416 1802 1771 1.264,0 122 515 472 0,0 47 134 101 0
37 928 1394 1288 801,4 21 322 149 0,0 18 66 40 0
38 1211 1830 1507 1.073,8 174 626 426 0,0 38 158 102 0
39 1328 2086 1538 1.224,8 44 659 336 0,0 17 88 48 0
40 1402 2272 1688 1.265,9 140 702 474 0,0 36 77 114 0
41 2478 2535 2657 2.421,1 607 1010 904 516,6 42 324 279 0
42 2597 2711 2867 2.515,9 740 1104 1054 596,7 158 497 303 0
43 2895 3004 3119 2.818,4 794 1214 1076 663,4 83 349 260 0
44 2531 2531 2744 2.464,5 718 1012 1093 563,6 178 328 334 0
45 2215 2438 2452 2.139,0 571 943 878 378,3 108 287 229 0
46 2173 2437 2387 2.115,8 462 949 690 342,4 17 289 137 0
47 2701 2928 2885 2.643,3 936 1262 1149 783,6 324 706 455 58
48 2338 2656 2491 2.272,2 577 1019 841 481,1 31 348 214 0
49 2809 2987 3042 2.757,5 820 1273 1161 688,9 181 428 416 0
50 2633 2821 2872 2.532,7 698 1124 1025 535 75 354 273 0
51 3864 4423 4046 3.799,2 1212 2230 1507 1.058 264 854 500 32
52 4099 4606 4314 4.003,0 1374 1954 1646 1.173 365 890 604 80
53 3258 3381 3559 3.171,1 1095 1674 1425 882 381 797 573 11
54 4091 4755 4311 4.001,8 1404 2142 1732 1.164 387 806 714 71
55 4138 4587 4422 4.047,2 1335 1989 1721 1.163 359 886 714 71
56 4068 4381 4290 3.956,7 1238 1638 1524 1.087 268 844 551 12
57 4053 4359 4275 3.976,2 1436 2069 1727 1.275 513 969 767 230
58 3837 4230 4112 3.744,7 1255 1942 1590 1.069 356 788 676 44
59 4391 4493 4599 4.320,9 1491 2109 1783 1.341 446 913 834 179
60 3718 3972 3946 3.642,9 908 1290 1318 758 87 435 260 0
61 10706 12760 11422 10.427,0 3401 6116 4151 2.972 788 2987 1598 185
62 10927 13467 11512 10.687,4 3441 6106 4246 3.057 824 3327 1873 315
63 13597 16859 14285 13.358,4 4647 7604 5481 4.230 1367 4222 2444 710
64 11510 14801 12057 11.153,5 3441 6063 4198 2.941 608 2903 1589 97
65 11959 14020 12559 11.558,6 3807 6229 4647 3.268 939 2604 1955 292
66 11484 13758 12060 11.267,6 3610 5913 4546 3.223 890 3248 2008 272
67 10729 13285 11450 10.317,5 3305 5704 4207 2.731,254 725 2915 1748 41
68 14088 16645 14733 13.852,0 4610 6385 5584 4.182,582 1206 3126 2354 563
69 12536 14675 13247 12.329,6 3846 6878 4895 3.456 721 3340 1985 345
70 10683 12836 11460 10.440,3 3032 5412 4102 2.548 394 2241 1564 117
71 14702 15002 15320 14.580,4 5512 7029 6278 5.258 2166 3794 3021 1.664
72 16546 16649 17129 16.360,3 6513 7832 7181 6.200 2735 4346 3407 2291,82
73 17845 18622 18255 17.733,4 6821 8006 7510 6.608 2673 4474 3603 2.291
74 18267 19688 18734 18.121,3 6995 8908 7774 6.744 2734 4987 3662 2304,39
75 16781 18320 17341 16.615,9 6286 8120 7043 5.932 2352 4023 3164 1.809
76 18413 19540 18881 18.287,5 7198 9067 7944 6.905 2930 4642 3811 2.513
77 15886 16197 16340 15.784,5 5934 7419 6509 5.756 2321 4131 3073 1.918
78 20077 20600 20523 19.932,6 7953 9245 8554 7.670 3305 4903 4099 2.871
79 17257 17827 17847 17.105,0 6530 8139 7281 6.225 2452 3972 3324 1.984
80 15857 16773 16422 15.761,4 5989 7457 6917 5.743 2414 4222 3386 1.913
Heurísticas para minimizar la suma de tiempos de retraso de trabajos con máquinas en
paralelo
74
81 22204 23586 22714 21.998,7 8584 10877 9373 8.355 3461 5949 4442 2.995
82 21637 22525 22336 21.473,0 8050 9882 9181 7.769 3061 5610 4303 2.544
83 27059 28705 27603 26.868,3 10898 12863 11600 10520,08 4728 7035 5558 4.145
84 25170 27213 25723 24.926,8 10144 12964 10982 9.695 4465 6795 5437 3.800
85 21216 22289 21726 21.028,9 7782 10144 8501 7.512 2912 5756 3646 2.433
86 22330 23180 22940 22.103,6 8443 10549 9174 8.080 3254 5928 4152 2.685
87 23736 25019 24186 23.555,8 8912 11324 9760 8.657 3350 5777 4463 2956
88 27107 28069 27723 26.908,3 11116 13669 11853 10731,93 4965 7581 5870 4.368
89 27893 30217 28389 27.675,2 11664 13706 12300 11274,89 5380 7728 6228 4.798
90 25167 26582 25742 24.980,9 10219 12581 10960 9.862 4490 7319 5402 3.979
91 68424 75036 69813 68.013,5 27726 36242 29537 26907,11 12120 21624 14459 10925,5
92 70904 78375 72256 70.521,9 28719 37985 30557 27961,63 12501 20939 14846 11321
93 71819 78175 73344 71.293,3 29231 37736 31196 28492,25 13067 21708 15571
94 84788 91058 86022 84.480,8 35370 44478 36984 16049 25221 18023
95 75364 82913 76960 74.907,0 31152 38755 33166 30479,3 14267 22949 16698
96 75896 82245 77260 30738 38737 32620 13490 21805 15922
97 73839 80194 75448 30563 39499 32375 13793 22544 15893
98 69074 73709 70667 27622 35200 29676 11712 19594 14061
99 71623 78662 73266 28965 37668 30975 12584 21369 14953
100 75225 82174 76410 31461 39634 33133 14641 23075 16670
101 89175 91805 90281 38875 44300 40254 19145 24935 20746
102 95787 97972 96600 42614 46770 43863 21790 28057 23340
103 101617 103082 102676 44990 50094 46490 22849 29438 24608
104 105778 107271 106611 46774 50320 47987 23702 28721 25453
105 105644 108967 106525 47125 52471 48447 24113 30685 25897
106 93907 95801 94781 41177 46658 42302 20450 26553 21934
107 94989 98149 96031 41278 46087 42716 20343 26864 22112
108 88148 89060 89328 37811 41843 39237 18128 23743 19835
109 109531 112863 110254 48678 54202 50118 24769 30457 26685
110 96864 99195 98008 42111 46293 43698 20741 26624 22608
111 123792 127399 124914 54482 63368 56112 27295 36954 29273
112 134336 136478 135433 58865 67720 60598 29228 37361 31265
113 139218 144487 140552 62243 71892 63999 32042 40725 34080
114 134001 139996 135085 60388 69221 61814 31443 41052 33130
115 132067 136413 132967 58424 65796 59957 29571 38884 31614
116 157016 159634 158031 71040 77757 72443 37164 45389 39044
117 138435 142500 139735 61975 69545 63584 31845 39637 33779
118 145941 150973 147074 65484 73274 67019 33720 42874 35734
119 139053 145196 139979 62315 71450 63732 32100 39938 34080
top related