Parte 3: Gestione dei progetti, Shop
scheduling
Rappresentazione reticolare di un progetto
• Insieme di attività {1,...,n}
• pi durata (nota e deterministica dell’attività i)
• relazione di precedenza fra attività: Grafo G = (V, A) diretto (Activity on Node) aciclico
(Activity on Node) aciclico
• aggiungiamo due nodi fittizi s e t a rappresentare l’inizio e la fine del progetto; inseriamo gli archi:
– (s, j) per ogni nodo j che non ha archi entranti – (i, t) per ogni nodo i che non ha archi uscenti
• associamo una lunghezza lij = pia ciascun arco (i, j)∈A
Durata del progetto
attività durata pred.
a 14 -
b 3 -
c 3 a,b
d 7 a
s
a 14 d
7 e
14 4
e 4 d
f 10 c,e
b c f t
3 3 10
La durata del progetto è quindi pari a yt − ys
Rappresentiamo un schedule con un vettore [y1, ..., yn] (istanti di inizio delle attività)
Minimizzare la durata del progetto (makespan)
s
t
y
y − min
Formulazione PL:
A j
i l
y
y
j−
i≥
ij( , ) ∈
vincoli di precedenzauna sol. con qualche yi < 0 può essere scalata, rimanendo ammissibile e di pari valore
V i
y
i≥ 0 ∈
Problema duale
ij A j i
ij
x
∑ l
∈ ) , (
max
∑
∑
∈ +
∈
∈
=
−
) ( j) (i, )
( i) (j,
} , {
\ 0
- i
ij i
ji
x i V s t
x
δ δ
∑
∈ +
−
=
−
) ( ) , (
1
s j
s
x
sj δ∑
∈ −
=
) ( ) , (
1
t t
j
x
jt δproblema del cammino di lunghezza massima da s a t in G
A j
i
x
ij≥ 0 ( , ) ∈
Algoritmo
• per il teorema della dualità forte il makespan equivale alla lunghezza del cammino massimo in G
• ponendo luv := −luv equivale a calcolare un cammino da s a t di lunghezza minima
• G = (V, E) è aciclico, quindi il cambio di segno non
• G = (V, E) è aciclico, quindi il cambio di segno non introduce cicli di lunghezza negativa
• l’albero dei cammini minimi in un grafo diretto aciclico si calcola in tempo O(m)
Un vettore e(.) di interi definisce un ordinamento topologico dei nodi di G se risulta e(i) < e(j) per ogni arco (i,j)∈ A
Ordinamento topologico
j:=0 repeat
• j := j + 1
• Sceglie un nodo v con grado entrante pari a zero
• Assegna a v l’etichetta e(v) := j
• Assegna a v l’etichetta e(v) := j
• Elimina v e i suoi archi uscenti
until (esiste qualche nodo con grado entrante nullo)
Se la rete rimanente contiene nodi ed archi allora G contiene un ciclo diretto
Altrimenti le etichette definiscono un ordinamento topologico
Esempio
s
a d e
v e(v)
s 1
a 2
b 5
c 6
s
b c f t
c 6
d 3
e 4
f 7
t 8
L’algoritmo ha complessità O(m) [mantenendo il grado dei nodi e la lista dei nodi a grado entrante nullo]
Albero dei cammini minimi
• dato un ordinamento topologico (etichette e(.))
• d(.) vettore delle distanze
• p(.) vettore dei predecessori
Init. d(s) = 0, d(v) =∞, p = NULL, v∈V.
Init. d(s) = 0, d(v) =∞, pv = NULL, v∈V.
loop: for (j = 1 to |V|){
u: e(u) = j
SCAN(u): forall v tale che (u,v)∈A if (d(v)>d(u)+luv)
dv := du + luv; pv := u;
}
Esempio
d p
s 0 -
a 0 s
b 0 s
c − 14 a
a −14 d
− 7 e
− 14 − 4
0 −14 −21
c − 14 a
d − 14 a
e − 21 d
f − 25 e
t − 35 f
s
b − 3 c − 3 f t
− 14 − 4
− 10
0 −14 −25 −35
Earliest start time
• ponendo yv = −dv, v ∈ V, si ha che yv rappresenta il minimo istante di inizio per l’attività v tale da rispettare i vincoli di precedenza.
• Questo è detto Earliest Start Time, EST(v)
• EST(t) equivale quindi al minimo makespan
s
a
b
d
c
e
f t
0 14 21
0 14 25 35
14 7
4
3 3 14
10
14 7
4
Cammino critico
• Ogni cammino di lunghezza massima da s a t è detto cammino critico
• le attività apparenenti ad un cammino critico sono dette attività critiche: un ritardo in una di esse provoca un ritardo dell’intero progetto
s
a
b
d
c
e
f t
0 14 21
0 14 25 35
3 3 10
14 7
14 4
Diagramma di Gantt
s
a
b
d
c
e
f t
0 14 21
3 3 10
14 7
4
b c f t
0 14 25 35
3 3 10
b
a
3
f
21
c d
35
e
14 17 25
Latest start time
• Tipicamente, il progetto deve essere terminato entro una data di consegna T
• ciò vincola ogni attività v ad essere iniziata entro un certo istante, detto Latest Start Time, LST(v)
• Se indichiamo δ(v) con la lunghezza del cammino massimo
• Se indichiamo δ(v) con la lunghezza del cammino massimo da v a t, si ha che LST(v) = T − δ(v)
s
a
b
d
c
14 e
f t
3 3
7
14 4
10
δ(c) = 13
Total float
• La quantità LST(v) − EST(v) è detta total float TF(v)
a 14 d
7 e
δ(c) = 13
s
b c f t
3 3
14 4
10
δ(c) = 13
T = 29
EST(c) = 14 LST(c) = 16 TF(c) = 2
Trade-off tempi-costi
In molti casi, una maggiore allocazione di risorse su una certa attività permette di ridurne la durata.
pendenza costo
ai bi
di
pendenza
durata nominale durata minima
Formulazione
variabili decisionali:
yi istante di inizio dell’attività i,
βi riduzione del tempo di processamento dell’attività i Problema: determinare uno schedule tale che l’intero
progetto abbia durata non superiore a λ
i N
i
d
iβ
∑
∈
min
A j
i a
y
y
j−
i≥
i− β
i∀ ( , ) ∈ V
i b
a
i ii
≤ − ∈
≤ β 0
λ
≤
− s
t y
y
progetto abbia durata non superiore a λ
Formulazione
sostituzione di variabili:
β′ =y − β
i N
i
i N
i
i
i
y d
d − ∑ β ′
∑
∈
∈
min
A j
i a
y
j− β
i′ ≥
i∀ ( , ) ∈ λ
≤
− s
t y
y
β′i =yi − βi
N i
b a
y
i− β
i′ ≤
i−
i∈ N i
y
i− β
i′ ≥ 0 ∀ ∈
yi, β′i non vincolate
ogni riga ha al più un +1 ed un −1, quindi è il duale di un problema di flusso a costo minimo
Job Shop Scheduling
• insiemi J = {1,...,n} di job, M={1,...,m} di macchine
• Ogni job richiede una fissata sequenza di operazioni, ciascuna eseguita su una specifica macchina (con capacità unitaria e buffer di ingresso); cioè, visita le capacità unitaria e buffer di ingresso); cioè, visita le macchine secondo un dato instradamento
• Un job visita una macchina al più una volta (no-ricircolo) Problema: decidere la sequenza di processamento delle operazioni su ciascuna macchina in modo da minimizzare il makespan
Notazione
• (i, j), i∈M, j∈J operazione
• pij durata dell’operazione (i, j)
• N insieme di tutte le operazioni (se ogni job visita tutte le macchine esattamente una volta |N| = nm)
macchine esattamente una volta |N| = nm)
• mj numero di macchine visitate dal job j
• (i(j,1),...,i(j,mj)) instradamento di j (sequenza delle macchine che visita)
• J(i) insieme dei job che visitano la macchina i
Esempio
job i(j,1) [pi(j,1),j]
i(j,2) [pi(j,2),j]
i(j,3) [pi(j,3),j]
A 1
[2]
4 [2]
3 [4]
B 2
[3]
4 [1]
1 [2]
Una soluzione:
•A precede B sulla macchina 1
•A precede B sulla macchina 4
1 A B
[3] [1] [2]
A
B
2 3 4
2
B
A
A B
3 4 5 7 8
se B precedesse A sulla macchina 1 ?
1 4
3
2
Caso particolare: Flow Shop
• Tutti i job hanno la stessa sequenza (1, 2,…, m) di visita delle macchine
J 1 2 m-1 m
• Il buffer di ingresso consente i sorpassi: la sequenza di processamento della macchina i + 1 può essere diversa da quella sulla macchina i. Il numero di soluzioni è pari a (n!)m
• Nel caso senza buffer (no-wait) ci sono n! soluzioni
n
ij
R
t ∈ istante di inizio dell’operazione ij
Formulazione disgiuntiva
minC
A insieme delle coppie
(i(j,h), j),(i(j,h+1), j), h =1,…,mj−1, j=1,…,n
N k
i j
i p
t t
or p
t
t
ij−
ik≥
ik ik−
ij≥
ij( , ), ( , ) ∈
N j
i
t
ij≥ 0 ( , ) ∈
A j
r j
i p
t
t
rj−
ij≥
ij( , ), ( , ) ∈ N j
i p
t
C
max≥
ij+
ij( , ) ∈
minC
max
=
0
i
1
y
jkSe il job j precede k sulla macchina i
Formulazione PLM
minC
maxaltrimenti
N k
i j
i M i
p y
M t
t
ik−
ij+ ( 1 −
ijk) ≥
ij∈ , ( , ), ( , ) ∈
N j
i
t
ij≥ 0 ( , ) ∈
A j
r j
i p
t
t
rj−
ij≥
ij( , ), ( , ) ∈
N j
r j
i p
t
C
max≥
ij+
ij( , ), ( , ) ∈ minC
maxN k
i j
i M i
p My
t
t
ij−
ik+
ijk≥
ik∈ , ( , ), ( , ) ∈
Esempio
job i(1) [pi(1),j] i(2) [pi(2),j] i(3) [pi(3),j] i(4) [pi(4),j]
1 1 [11] 2 [4] 3 [4]
2 4 [8] 1 [3] 2 [5] 3 [6]
3 1[8] 2 [7] 4 [3]
3 1[8] 2 [7] 4 [3]
Grafo disgiuntivo
A archi congiuntivi
rappresentano la relazione di precedenza fra le grafo diretto
s (sorgente) e z (pozzo)
G = (N ∪{s,z}, A, D)
operazioni di ciascun job j
in aggiunta, per ogni j∈J, gli archi
dalla sorgente alle prime operazioni dalle ultime operazioni al pozzo
(i(j,h), j)→(i(j,h+1), j), h =1,…,m
j−1
s →(i(j, 1), j)
(i(j, m
j), j) →z
Esempio (archi congiuntivi)
job i(j,1) [pi(j,1),j] i(j,2) [pi(j,2),j] i(j,3) [pi(j,3),j] i(j,4) [pi(j,4),j]
1 1 [11] 2 [4] 3 [4]
2 4 [8] 1 [3] 2 [5] 3 [6]
3 1[8] 2 [7] 4 [3]
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
Archi disgiuntivi
Rappresentano la sequenza dei job su ciascuna macchina per ogni coppia di operazioni da eseguirsi sulla macchina i, l’ arco (i,j) → (i,k) indica che l’operazione (i,j) precede (i,k)
{ ,
( s z }, , )
G = N ∪ A D
D(i) = {archi disgiuntivi associati alla macchina i}, inducono una clique in G
Per ogni macchina i ∈ M, e ciascuna coppia j,k di job in J(i), D contiene una coppia (disgiuntiva) di archi
( , ) i j → ( , ) i k ( , ) i k → ( , ) i j
Esempio (archi disgiuntivi)
job i(j,1) [pi(j,1),j] i(j,2) [pi(j,2),j] i(j,3) [pi(j,3),j] i(j,4) [pi(j,4),j]
1 1 [11] 2 [4] 3 [4]
2 4 [8] 1 [3] 2 [5] 3 [6]
3 1[8] 2 [7] 4 [3]
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
Lunghezza degli archi
job i(j,1) [pi(j,1),j] i(j,2) [pi(j,2),j] i(j,3) [pi(j,3),j] i(j,4) [pi(j,4),j]
1 1 [11] 2 [4] 3 [4]
2 4 [8] 1 [3] 2 [5] 3 [6]
3 1[8] 2 [7] 4 [3]
1,1 11 2,1 4 3,1
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
0
0 0
11 11
8 8
8
8
8 3
3
3
4 4 5
5 5
7
7
7
4 4 6
6
3 3
Ad ogni arco (i,j)→(h,k) si associa una lunghezza pari a pij
Selezione
Definizione. Un insieme Si ⊆ Di che contiene esattamente un elemento per ciascuna coppia disgiuntiva è detto selezione della macchina i.
• Si è aciclica se (il grafo parziale) non contiene cicli orientati.
• Una selezione aciclica S corrisponde (biunivocamente) ad
• Una selezione aciclica Si corrisponde (biunivocamente) ad un sequenziamento delle operazioni sulla macchina i.
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
S1
Schedule ammissibili
Definizione. L’unione degli archi congiuntivi e delle selezioni Si, i∈M, è detta selezione completa.
Gli schedule ammissibili corrispondono biunivocamente alle selezioni complete acicliche
alle selezioni complete acicliche
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
schedule non ammissibile
Selezioni complete e schedule ammissibili
lunghezza del cammino critico
1,1 2,1 3,1
4,2 1,2 3,2
z s
0
2,2 11
7
6 5
4 2 3 2
1 1
11 8
1
15 3
19 1
3
26 2
22
3
2
29 31
2
37
=
makespan
1,3 2,3 4,3
8
7
Riformulazione
Job shop scheduling: trovare una selezione completa aciclica che minimizzi la lunghezza del cammino critico
Oss. Valutare una soluzione (selezione completa) richiede la Oss. Valutare una soluzione (selezione completa) richiede la soluzione di un problema di ottimizzazione (calcolo del cammino critico)
Cicli
1,1 2,1 3,1
Una selezione completa può formare cicli anche se le selezioni Si sono tutte acicliche
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
Quindi, non è immediato progettare algoritmi che decompongono il problema per macchine
Lower bound I
Supponiamo di aver scelto una selezione aciclica Si, per i∈M′⊂ M. Poniamo S(M′) = ∪i∈M′ Si
Definiamo G(M′) il grafo parziale formato dagli archi congiuntivi e dagli archi in S(M′)
Supponiamo che G(M′) sia aciclico e sia Cmax(M′) la lunghezza del cammino critico in G(M′)
Proprietà. Cmax(M′) è un lower bound di Cmax quando le operazioni su ciascuna macchina i∈M′ sono sequenziate secondo Si
Infatti, ciò equivale a considerare a capacità infinita le macchine in M\M′
Esempio
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
M′ = {1}
0 0 0
11 11
8
8 3
4
5
4 6
3 11
S1
1,3 2,3 4,3
8
8 7
3
Cmax(M′) = 33
lower bound per Cmax nel caso in cui la macchina 1 processa le operazioni secondo S1
Lower bound II
Teniamo adesso conto dell’effetto di sequenziare un’ulteriore macchina
Supponiamo di aver scelto una selezione aciclica Si, per i∈M′⊂ M. Poniamo S = ∪i∈M′ Si
Per ogni operazione (i,j), i ∉ M′, poniamo
• rij = ESTM′′′′(i,j) primo istante ammissibile per l’operazione (i,j) fissate Si, i∈M′
• dij = LSTM′′′′(i,j) + pij due date per l’operazione (i,j) affinché Cmax ≤ Cmax(M′)
Esempio
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
M′ = {1}
0 0 0
11 11
8 3
4
5
4 6 11
Cmax(M′) = 33
S1
1,3 2,3 4,3
0 8
8 7
3
S1
operazione (2,1) (2,2) (2,3) (3,1) (3,2) (4,2) (4,3)
p
ij 4 5 7 4 6 8 3r
ij 11 22 19 15 27 0 26d
ij 29 27 30 33 33 19 331/r
j/L
max• le operazioni (k,j), j∈J(k) associate ad una macchina k, con release date r(k,j) e due date d(k,j), identificano un’istanza del problema 1/rj/Lmax
• Definiamo Lmax(k) il suo valore ottimo
Op. (2,1) (2,2) (2,3)
p
ij 4 5 7r
ij 11 22 19d
ij 29 27 30(2,3) 15
11
(2,1)
27 (2,2)
34
−14 −1 4
Esempio. k = 2
Lmax(k) = 4
22
Lower bound II
Proprietà. Cmax(M′) + Lmax(k) è un lower bound di Cmax quando le operazioni su ciascuna macchina i∈M′ sono sequenziate secondo Si
Infatti, la selezione S è scelta in modo da minimizzare il
• il miglior lower bound si ottiene calcolando Lmax (k), per k ∉M′ e scegliendo il massimo fra questi valori:
Lmax (k*) = maxk ∉∉∉∉M′′′′{Lmax (k)}
Infatti, la selezione Sk è scelta in modo da minimizzare il ritardo sul makespan, mentre tutte le altre macchine (M\M′\{k}) sono assunte a capacità infinita
Lower Bound II
• indichiamo con S*(k) la selezione associata alla soluzione ottima
• Aggiungendo gli archi S*(k) al grafo la lunghezza LB2 del cammino critico aumenta di Lmax(k)
1,1 2,1 3,1
4,2 1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0 0
11 11
8 8
8 3
4
5
7
4 6
3 11
S1
4 4
5
Cmax(M′) = 33 LB2 = 37 Lmax(k=2) = 4
Euristica Shifting Bottleneck
• Costruisce una selezione completa aciclica construendo iterativamente selezioni parziali acicliche M
0insieme delle macchine già sequenziate
inizializzazione M
0= ∅ Passo generico:
• Costruisce il grafo G(M
0) e calcola C
max(M
0)
• sceglie la macchina “critica” (bottleneck) k* = argmax
k ∉∉∉M0∉{L
max(k)}
• fissa (definitivamente) la selezione S*(k*)
• M
0:= M
0∪{k*}
Validità
Teorema. Gli archi orientati associati alla soluzione ottima di un problema a macchina singola non creano cicli nel grafo G(M0).
Conseguenza: la selezione completa ottenuta dalle selezioni acicliche generate nelle singole iterazioni è aciclica.
Esempio
job mj(1) [pm(1),j] mj(2) [pm(2),j] mj(3) [pM(3),j] mj(4) [pM(4),j]
1 1 [11] 2 [4] 3 [4]
2 4 [8] 1 [3] 2 [5] 3 [6]
3 1[8] 2 [7] 4 [3]
init. M
0= ∅
1,1 2,1 3,1
4,2 1,2 3,2 z
s
0
11
4
0
2,2
1,3 2,3
74,3
0
8
8 3 5
3 6
G(M
0)
4
Esempio
1,1
112,1
43,1
Iter 1. Calcola Cmax, rij, dij Cmax(M0) = 22
4,2 1,2 3,2 z
s
0 4
0
2,2
1,3 2,3 4,3
7 0
8 8
3
5
3 6
[0, 14] [11, 18] [15, 22]
[0, 8]
[0, 12]
[8, 11] [11, 16] [16, 22]
[8, 19] [15, 22]
Iter 1: problemi 1/r
j/L
maxJob 1 2 3
pj 11 3 8
rj 0 8 0
d 14 11 12
1 Job 1 2 3
pj 4 5 7
rj 11 11 8
d 18 16 19
2
dj 14 11 12 dj 18 16 19
Job 1 2
pj 4 6
rj 15 16 dj 22 22
3 Job 2 3
pj 8 3
rj 0 15 dj 8 22 4
1/r
j/L
maxmacchina 1
Job 1 2 3
pj 11 3 8
rj 0 8 0
PEDD restituisce la soluzione ammissibile:
1
0 8
3
11
2
22 dj 14 11 12
−4 0 8
1/r
j/L
maxmacchina 2
PEDD restituisce la soluzione non ammissibile:
1
3 2
Job 1 2 3
pj 4 5 7
rj 11 11 8 dj 18 16 19
0 2 5
3
11
8 16 20 24
Soluzione ottima:
1
15 8
3 2
20
-4 4 6
24
L
max= 6
1/r
j/L
maxmacchina 3
Job 1 2
pj 4 6
rj 15 16 dj 22 22
Soluzione ottima:
1
19 15
2
−3 3
25
1/r
j/L
maxmacchina 4
Job 2 3
pj 8 3
rj 0 15 dj 8 22
Soluzione ottima
0 8
2
0 −4
15
3
18
iter. 2
1,1 2,1 3,1
0
11 4
4
M
0= {1}
3 Iter 2. Calcola Cmax
4,2 1,2 3,2 z
s
0 4
0
2,2
1,3 2,3 4,3
7 0
8 8
3
5
3 6
C
max(M
0) = 30
8 8
3
iter. 2
1,1 2,1 3,1
0
11 4
4
M
0= {1}
C
max(M
0) = 30
3
[22, 26] [26, 30]
Iter 2. Calcola rij, dij
4,2 1,2 3,2 z
s
0 4
0
2,2
1,3 2,3 4,3
7 0
8
8 3 5
3 6
8 8
3
[0, 8] [11, 24] [16, 30]
[8, 27] [15, 30]
Iter 2: problemi 1/r
j/L
maxJob 1 2 3
pj 4 5 7
rj 22 11 8 dj 26 24 27
2 2
Job 1 2
pj 4 6
rj 26 16 dj 30 30
3
Job 2 3
pj 8 3
rj 0 15 dj 8 30
4
1/r
j/L
maxmacchina 2
Job 1 2 3
pj 4 5 7
rj 22 11 8 dj 26 24 27
Soluzione ottima:
3
8 15
2
20 22
0 0 0
1
1/r
j/L
maxmacchina 3
Job 1 2
pj 4 6
rj 26 16 dj 30 30
Soluzione ottima:
16 22
2
26 30
−8 0
1
1/r
j/L
maxmacchina 4
Job 2 3
pj 8 3
rj 0 15 dj 8 30
Soluzione ottima:
0 8
2
15 0
3
−12
18
iter. 3
1,1 2,1 3,1
0
11 4
4
M
0= {1,2}
3 Iter 2. Calcola Cmax
4,2 1,2 3,2 z
s
0 4
0
2,2
1,3 2,3 4,3
7 0
8
8 3 5
3 6
C
max(M
0) = 30
8 8
3 5
7 7
iter. 3
1,1
112,1
43,1
M
0= {1,2}
C
max(M
0) = 30
[26, 30]
Iter 2. Calcola rij, dij
1,1 2,1 3,1
4,2 1,2 3,2 z
s
0 4
0
2,2
1,3 2,3 4,3
7 0
8
8 3 5
3 6
8 8
3
[0, 8] [20, 30]
[15, 30]
7
Iter 3: problemi 1/r
j/L
maxJob 1 2
pj 4 6
rj 26 20
3 Job 2 3
pj 8 3
rj 0 15 4
rj 26 20 dj 30 30
rj 0 15 dj 8 30
20
2
26 30
−4 0
1
0 8
2
18 0
3
−12
15
Iter. 4
1,1 2,1 3,1
0
11 4
4
M
0= {1,2,3}
Iter 4. Calcola rij, dij
4,2 1,2 3,2 z
s
0 4
0
2,2
1,3 2,3 4,3
7 0
8
8 3 5
3 6
C
max(M
0) = 30
8 8
3 5
7 7
6
[0, 8]
[15, 30]
STOP
1,1 2,1 3,1
0
11 4
4
M
0= {1,2,3, 4}
3 5 6
La soluzione calcolata è:
4,2 1,2 3,2 z
s
0
2,2
1,3 2,3 4,3
7 0
8
8 3 5
3 6
C
max(M
0) = 30
8 8
7 8 7
Operazioni su schedule
Due operazioni trasformano uno schedule ammissibile in un altro schedule ammissibile:
4 2
3 1 2
3
shift: anticipa un’operazione
3 2
1 1
1 3
1
3 2
2
2
4 2 3 2
1 1
1 3
1
2
3
3
2
2
shift: anticipa un’operazione
jump: anticipa un’operazione in un intervallo in cui la
macchina è ferma
modificando la sequenza
Schedule attivi
Definizione. Uno schedule ammissibile si dice attivo se nessuna operazione può essere anticipata mediante uno shift o un jump senza ritardare un’altra operazione
4 2 3 2
1 1
1 3
1
2
3
3
2
2
Branch-and-bound
• Esiste uno schedule ottimo che è attivo, quindi restringiamo la ricerca agli schedule attivi
• ad ogni livello dell’albero di enumerazione si fissa un’operazione
• le operazioni fissate ad un dato sottoproblema formano
• le operazioni fissate ad un dato sottoproblema formano uno schedule parziale
• un’operazione si dice disponibile se tutte le operazioni che la precedono sono state schedulate. AO = insieme delle operazioni disponibili
Branching
• step 1 (inizializzazione)
calcola l’insieme AO e rij per ogni (i,j)∈AO
• step 2 (selezione della macchina)
calcola t(AO) = min(i,j)∈AO{rij + pij} = ri*j + pi*j
• step 3 (branching)
BO = {operazioni (i*,j) ∈ AO tali che ri*j< t(AO)}
per ogni operazione in BO:
•genera un sottoproblema fissando tale operazione come successiva
Esempio
job i(j,1) [pi(j,1),j] i(j,2) [pi(j,2),j] i(j,3) [pi(j,3),j] i(j,4) [pi(j,4),j]
1 1 [11] 2 [4] 3 [4]
2 4 [8] 1 [3] 2 [5] 3 [6]
3 1[8] 2 [7] 4 [3]
AO = {(1,1),(4,2),(1,3)}
t(AO) = min{0+11, 0+8, 0+8} = 8, i* = 4 r4,2=0 ⇒ BO = {(4,2)}
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo radice:
branching: genera un singolo sottoproblema A fissando l’operazione (4,2)
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo A:
AO = {(1,1),(1,3),(1,2)}
t(AO) = min{0+11, 0+8, 8+3} = 8, i* = 1
r1,1=0, r1,2=8, r1,3=0 ⇒ BO={(1,1), (1,3)} A
B C
(1,1) (1,3)
(4,2)
AO = {(1,3),(1,2),(2,1)} t(AO)=min{11+8,11+3,11+4} = 14, i* = 1 r1,3=11, r1,2=11 ⇒ BO = {(1,2),(1,3)} ⇒ sottoproblemi D,E
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo B:
1
11 11
AO = {(1,1),(1,2),(2,3)} t(AO) =min{8+11, 8+3, 8+7} = 11, i* = 1 r1,1=8, r1,2=8 ⇒ BO = {(1,1),(1,2)} ⇒ sottoproblemi F,G
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo C:
3
8 8
A
B C
(1,1) (1,3)
(4,2)
D E
(1,2) (1,3)
F G
(1,1) (1,2)
AO = {(1,3),(2,1),(2,2)} t(AO)=min{14+8, 11+4, 11+3} = 14, i* = 2 r2,1=11, r2,2=11 ⇒ BO = {(2,1),(2,2)} ⇒ sottoproblemi H,I
nodo D
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2 11 11
4 2 3 2
1 1 2
3
AO = {(1,2),(2,1),(2,3)} t(AO)=min{19+3,11+4, 11+8} = 15, i* = 2 r2,1=11, r2,3=11 ⇒ BO = {(2,1),(2,3)} ⇒ sottoproblemi J,K
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo E
1
11 11
3
8
A
B C
(1,1) (1,3)
(4,2)
D E
(1,2) (1,3)
F G
(1,1) (1,2)
H I
(2,1) (2,2)
J K
(2,1) (2,3)
AO = {(1,2),(2,3),(2,1)} t(AO) =min{19+3, 8+7, 19+4} = 15, i* = 2 r2,3=8, r2,1=19 ⇒ BO = {(2,3)} ⇒ sottoproblema L
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo F
3
8 8
11
1
AO = {(1,1),(2,2),(2,3)} t(AO) =min{11+11, 11+5, 8+7} = 15, i* = 2 r2,2=11, r2,3=8 ⇒ BO = {(2,2),(2,3)} ⇒ sottoproblemi M,N
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo G
3
8 8
2
3
A
B C
(1,1) (1,3)
(4,2)
D E
(1,2) (1,3)
F G
(1,1) (1,2)
H I J K L
(2,3)
M N
(2,2) (2,3)
(2,1) (2,2) (2,1) (2,3)
AO = {(1,3),(2,2),(3,1)} t(AO)=min{14+8, 15+5, 15+4} = 19, i* = 3 r3,1=15 ⇒ BO = {(3,1)} ⇒ sottoproblema O
nodo H
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2 11 11
4 2 3 2
1 1 2
1 3
4
4
AO = {(1,3),(2,1),(3,2)} t(AO)=min{14+8, 19+4, 14+5} = 19, i* = 3 r3,2=11 ⇒ BO = {(3,2)} ⇒ sottoproblema P
nodo I
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2 11 11
4 2 3 2
1 1 2
2 3
5
5
A
B C
(1,1) (1,3)
(4,2)
D E
(1,2) (1,3)
F G
(1,1) (1,2)
H I J K L
(2,3)
M N
(2,2) (2,3)
(2,1) (2,2) (2,1) (2,3)
O
(3,1)
P
(3,2)
AO = {(1,2),(3,1),(2,3)} t(AO)=min{19+3,15+4, 15+7} = 19, i* = 3 r3,1=15 ⇒ BO = {(3,1)} ⇒ sottoproblema R
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo J
1
11 11
3 1 8
4 4
AO = {(1,2),(2,1),(4,3)} t(AO)=min{19+3,15+4, 15+3} = 18, i* = 4 r2,3=15 ⇒ BO = {(4,3)} ⇒ sottoproblema S
4 2 3 2 1
1,1 2,1 3,1
1,2 3,2 z
s 2,2
1,3 2,3 4,3
0 0
0
11
8
8 3
4
5
7
6
3 4
4,2
nodo K
1
11 11
3
3 8 7