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 Sevilla, 2015
74
Embed
Trabajo Fin de Gradobibing.us.es/proyectos/abreproy/90240/fichero/TFG_Francisco+Domí… · 3.2.1 Tipos de resolución de un problema de optimización 3.2.2 Tipos de problemas de
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
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
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.