...

scheduling a macchina singola

by user

on
Category: Documents
180

views

Report

Comments

Transcript

scheduling a macchina singola
Sistemi Organizzativi
docente: Stefano Smriglio
[email protected]
Pre-requisiti:
Classi di complessità
Programmazione Lineare (Intera)
Metodo branch-and-bound
Cammini minimi su grafi
Materiale didattico:
• M. Pinedo, Scheduling (Systems, Models and Algorithms) –
Prentice Hall
• A. Agnetis, dispense http://www.dii.unisi.it/~agnetis/didattica
• Trasparenti dalle lezioni http://www.di.univaq.it/~oil
Parte I:
Scheduling a macchina singola
Indice
1. Introduzione: esempi, elementi di un problema di
scheduling, notazione. Formulazioni PLM, PLB
2. Problemi a macchina singola
• 1//ΣwjCj
algoritmo WSPT
• 1/chain/ΣwjCj
algoritmo polinomiale
• 1/prec/hmax
algoritmo di Lawler
• 1/rj,prmp/Lmax regola preemptive EDD
• 1/rj/Lmax
complessità, branch-and-bound
• 1//ΣUj
algoritmo di Moore
• 1//Σhj
Programmazione dinamica
• 1//ΣTj
algoritmo pseudo-polinomiale
• 1//ΣwjTj
branch-and-bound
Introduzione
problemi di scheduling
esempi
classificazione
Esempio
Silvia (S) e Francesca (F) giungono nello stesso
momento ad una macchina fotocopiatrice. F deve fare 1
fotocopia, S ne deve fare 100.
Il galateo imporrebbe a S di lasciar passare per prima F,
che ha un compito molto più breve.
È una buona idea?
Analisi. Supponiamo che l’esecuzione di una fotocopia
richieda 3 secondi. Due casi:
S precede F
0
303
300
Attesa totale = 300 + 303 = 603
3
0
F precede S
303
Attesa totale = 3 + 303 = 306
Esempio
E se Francesca F arrivasse all’istante rf?
S
0
F
303
300
rf
Attesa totale = 300 + 303 – rf =
= 603 – rf
Di nuovo, il galateo imporrebbe a Silvia di interrompere le
proprie copie in favore di Francesca:
rf + 3
Attesa totale = 3 + 303 = 306
0
rf
303
Ricapitolando
• Attività: 2 blocchi di fotocopie (di durata nota)
• Risorse: una macchina fotocopiatrice
• Vincoli:
Capacità: al più una fotocopia alla volta
(caso 2) F non può iniziare prima dell’istante rf
• Misura: attesa complessiva presso la macchina
fotocopiatrice
• Rappresentazione di una soluzione: diagramma di Gantt
S
0
303
F
300
CPU scheduling
• Il sistema operativo disciplina l’accesso alla CPU dei
diversi programmi di calcolo.
• tecnica time-sharing (Linux): il tempo di CPU è suddiviso
in intervalli (definiti dal timer interrupt) e, in ogni intervallo, è
possibile eseguire al più un processo.
• diversi obiettivi: rispondere prontamente a ciascun
processo, evitare interruzioni prolungate, evitare ritardi nei
processi più urgenti.
• Linux attribuisce dinamicamente una priorità ai processi.
Ad es., la priorità è proporzionale all’attesa del processo
CPU scheduling
• Attività: programmi
• Risorse: CPU
• Vincoli: Capacità: al più un programma in ciascun
intervallo per ciascuna CPU
• Misure:
• tempo massimo di attesa di un programma
• tempo di completamento di tutti i programmi
• ritardi nei processi “urgenti”
Scheduling dei velivoli in atterraggio
• La torre di controllo (ATC) ha il compito di assegnare
una pista ed un istante di atterraggio a ciascun velivolo
nel proprio campo radar (area terminale)
• Ogni velivolo ha una finestra temporale [r,s] definita da
due istanti di atterraggio estremi, a seconda che il
velivolo viaggi:
- alla sua massima velocità (istante r)
- in modalità di minimo consumo (istante s)
• Un velivolo in atterraggio impegna la pista per un
tempo noto ma genera turbolenza: quello successivo
deve attendere un tempo di “separazione” (funzione
delle dimensioni dei velivoli)
Scheduling dei velivoli in atterraggio
• Ad ogni velivolo è associato un orario di atterraggio
predeterminato (e pubblicato nelle tabelle)
• “L’importanza” di un velivolo dipende da fattori quali la
dimensione, la compagnia, la distanza percorsa…
• Attività: atterraggi
• Risorse: k piste
• Vincoli:
•Capacità: su ogni pista, al più un atterraggio in un
certo istante
• finestre temporali di atterraggio
• separazione fra atterraggi consecutivi
• Misura:
• somma (pesata in base all’importanza) dei ritardi
rispetto all’orario pubblicato
Ancora nella vita quotidiana…
Aldo (A), Bruno (B), Carlo (C), Duilio (D) condividono un
appartamento e, ogni mattino, ricevono 4 giornali:
Financial Times (FT), Guardian (G), Daily Express (DE),
Sun (S).
Ognuno ha i propri gusti…inizia la lettura ad una certa
ora, legge i giornali nella sua sequenza preferita e
(ciascuno) per un tempo prefissato:
lettore inizio
Aldo
Sequenza giornali (min.)
8.30 FT(60)
G (30)
DE (2)
S(5)
Bruno 8.45
G(75)
DE(3)
FT(25)
S(10)
Carlo
8.45
DE(5)
G(15)
FT(10)
S(30)
Duilio
9.30
S(90)
FT(1)
G(1)
DE(1)
Ancora nella vita quotidiana…
inoltre, ciascun lettore:
rilascia un giornale solo dopo averlo letto
completamente.
termina la lettura di tutti i giornali prima di uscire.
infine, i quattro lettori attendono che tutti abbiano
terminato di leggere prima di uscire di casa
Problema:
A che ora A, B, C, D riescono (finalmente!) ad
uscire?
Interpretazione
lettore inizio
Aldo
Sequenza giornali (min.)
8.30 FT(60)
G (30)
DE (2)
S(5)
Bruno 8.45
G(75)
DE(3)
FT(25)
S(10)
Carlo
8.45
DE(5)
G(15)
FT(10)
S(30)
Duilio
9.30
S(90)
FT(1)
G(1)
DE(1)
A
FT
G
B
D
S
DE
C
determinare in quale
sequenza
ciascun
giornale
“accetta”
i
lettori in modo da
minimizzare il tempo di
lettura totale.
Soluzioni
lettore inizio
Aldo
Sequenza giornali (min.)
8.30 FT(60)
G (30)
DE (2)
S(5)
Bruno 8.45
G(75)
DE(3)
FT(25)
S(10)
Carlo
8.45
DE(5)
G(15)
FT(10)
S(30)
Duilio
9.30
S(90)
FT(1)
G(1)
DE(1)
una possibile soluzione:
giornale Sequenza lettori
FT
A
D
C
B
G
B
C
A
D
DE
C
B
A
D
S
D
A
C
B
ESERCIZIO:
valutare l’ora in cui A,B,C
e D escono di casa
giornale Sequenza lettori
ESERCIZIO:
data la soluzione in tabella
valutare l’ora in cui A,B,C
e D escono di casa
FT
A
D
C
B
G
B
C
A
D
DE
C
B
A
D
S
D
A
C
B
D
FT
A
C B
D
B
G
C A
B
DE
A D
C
A
D
S
8.30
9.0
9.00
10.00
C B
11.00
11.51
Enumerazione totale
• Il numero di soluzioni è (4!)4 = 331.776
• per un problema con n lettori e m giornali diventa (n!)m.
• esaminando 10.000 soluzioni al secondo (4 giornali e n
lettori):
n
tempo
5
354 min
10
2 · 1017
giorni
In generale
Con il termine scheduling si indica l’allocazione
temporale di risorse scarse ad attività
Elementi di un problema di scheduling:
job: attività da svolgere – insieme J = {1,…,n}
Fotocopia, esecuzione di un programma di calcolo
Un job può rappresentare una singola attività o un
insieme di attività (task) tecnologicamente legate
macchine: risorse che eseguono le attività – insieme
M={1,…,m}
Fotocopiatrice, CPU, giornali
Attributi dei job
• tempo di processamento pij durata
processamento del job j sulla macchina i
del
• release date rj tempo in cui j arriva nel sistema,
rendendosi disponibile al processamento
• due date dj tempo entro il quale si desidera che il
job j sia completato (data di consegna)
• peso wj indica l’importanza del job j
Classificazione
Il processamento di un job su una macchina è detto
operazione.
I problemi di scheduling si classificano in base alle
caratteristiche dei task e all’architettura delle
macchine
Notazione a tre campi: α/β
β/γγ:
α descrive il sistema di macchine
β rappresenta vincoli e modalità di processamento (0,
1 o più componenti)
γ indica l’obiettivo
Campo α
Macchina singola (1) : ciascun job richiede una singola
operazione da eseguirsi sull’unica macchina disponibile
Macchine identiche parallele (Pm) : ciascun job richiede
una singola operazione da eseguirsi su una qualunque delle
m macchine identiche.
1
2
m
Campo α
Flow shop (Fm) : Ciascun job è composto di m task,
ciscuno da eseguirsi su una macchina secondo una
sequenza fissata, uguale per tutti i job.
1
2
m
Job shop (Jm) : Ciascun job j è composto di m(j) task,
ciscuno da eseguirsi su una macchina secondo una
sequenza fissata, dipendente da j
Campo β
• Release dates (rj): il job j non può iniziare il
processamento prima dell’istante rj
• Preemption
(prmp):
è
ammesso
interrompere
un’operazione per iniziarne una nuova. Il processamento
eseguito prima dell’interruzione non va perso: quando
l’operazione viene ripresa, essa richiede solo il tempo
rimanente di processamento
job
1
2
pj
3
4
2
1
1
1
5
7
schedule ammissibile
Campo β
prec: è dato un grafo G = (N, A) diretto e aciclico che
rappresenta una relazione di precedenza fra job. Un job j
può iniziare solo se tutti i suoi predecessori sono stati
completati
2
4
1
1
3
5
2
4
3
5
schedule non ammissibile
chain: caso speciale in cui ogni componente connessa
del grafo è un cammino orientato (catena)
Campo β
•Tempi di set-up (sjk): tempo richiesto per il
riattrezzaggio delle macchine fra i job j e k. Se dipende
dalla macchina i, si esprime con sijk
• breakdown (brkdwn): le macchine non sono sempre
disponibili, ma hanno periodi fissati di interruzione del
servizio
Definizioni
tempo di completamento del job j
Cj
Lj = Cj–dj
lateness del job j
Tj = max(Lj,0)
tardiness del job j
Uj = 1 se Cj>dj e 0 altrimenti
1
job
1
2
pj
7
8
dj
9
11
0
2
7
15
C1= 7
L1= −2
T1 = 0
C2= 15
L2= 4
T2 = 4
U1= 0
U2= 1
Campo γ: funzioni obiettivo
• Makespan (Cmax) : max (C1, …, Cn) tempo di
completamento dell’ultimo job
• Massima Lateness (Lmax) : Lmax =max (L1, …, Ln)
• Tempo totale pesato di completamento (ΣwjCj)
o (weighted flow-time)
• Tardiness totale pesata (ΣwjTj)
• Numero di tardy job (ΣUj)
tutte funzioni obiettivo regolari cioè non-decrescenti
in C1, …, Cn
Esempio
job
1
2
wj
2
3
pj
7
8
dj
9
11
1
0
2
7
15
Lmax= 4
ΣwjTj = 12
ΣwjCj = 59
ΣUj = 1
Sequenze e schedule
• Si definisce sequenza una permutazione dei job
che definisce l’ordine con cui i job sono processati su
una certa macchina
• Si definisce schedule un assegnamento di un
istante di inizio a ciascuno dei task di ogni job (se
prmp, istanti di inizio di ciascuna delle parti in cui
viene suddiviso un task)
Schedule nondelay
uno schedule ammissibile è detto nondelay se
nessuna macchina è ferma quando esiste
un’operazione disponibile al processamento
In molti casi (sempre se prmp) le soluzioni ottime
sono nondelay. Ciò non è vero in generale
ESERCIZIO: schedule nondelay
dato il seguente problema P2/prec/Cmax
2
10
1
job
1
2
3
4
5
6
7
8
9 10
pj
7
6
6
1
2
1
1
7
7 14
3
5
8
4
costruire uno schedule nondelay
e verificarne l’ottimalità
6
7
9
ESERCIZIO: schedule nondelay
Soluzione nondelay:
M2
M1
1
46 5 7
2
8
9
3
10
32
0
10
20
30
Soluzione ottima:
1
M2
M1
46 5 7
2
8
3
9
10
27
0
10
fermo macchina “forzato”
20
30
1.1 Scheduling a macchina singola
Formulazioni di Programmazione Lineare
Booleana e Mista (PL(0-1)-PLM)
Formulazione disgiuntiva
Variabili decisionali “naturali”:
t j ∈ Rn
istante di inizio del job j, j = 1, …, n
Macchina a capacità unitaria:
i precede j ⇒
t j ≥ ti + pi
j precede i ⇒
ti ≥ t j + p j
valgono in
alternativa !!
Variabili aggiuntive (binarie):
1

yij = 
0

se i precede j
se j precede i
Formulazione disgiuntiva (PLM)
i precede j ⇒ yij = 1 ⇒
t j ≥ ti + pi
j precede i ⇒ yij = 0 ⇒ ti ≥ t j + p j
Formulazione disgiuntiva
(1 − yij )M + t j − ti ≥ pi
yijM + ti − t j ≥ pj
tj ≥0
∀i, j ∈ J
∀i, j ∈ J
∀j ∈ J
yij ∈ { 0,1}
∀i , j ∈ J
M costante grande (quanto?)
Problemi minsum: 1//∑j wjCj
min
∑ w (t
j
i
+ pi ) =
j ∈J
∑w t +∑w p
j j
j ∈J
j ∈J
(1 − yij )M + t j − ti ≥ pi
yijM + ti − t j ≥ pj
tj ≥0
n2+n variabili
2n2 vincoli
∀i, j ∈ J
∀i, j ∈ J
∀j ∈ J
yij ∈ { 0,1}
j
∀i , j ∈ J
j
Esercizio
Formulare come problema di PLM la seguente istanza del
problema 1/rj/∑j wjCj
job
1
2
3
pj
3
1
2
rj
0
2
0
wj
3
2
4
Problemi minsum: 1//∑j wjTj
min
∑w
j
max{ t j + p j − d j ,0 }
j ∈J
(1 − yij )M + t j − ti ≥ pi
yijM + ti − t j ≥ pj
tj ≥0
∀i, j ∈ J
∀j ∈ J
yij ∈ { 0,1}
∀i , j ∈ J
∀i , j ∈ J
RICHIAMO: Funzioni convesse lineari a tratti
c 3x + d3
max (c iT x + di )
c1x + d1
i =1,...,m
c 2 x + d2
x
min
max (c iT x + di )
i =1,...,m
Ax ≥ b
è il più piccolo valore z per cui
z ≥ c iT x + di i = 1,..., m
min
z
Ax ≥ b
c iT x + di ≤ z
i = 1,..., m
Formulazione PLM
max{ t j + p j − d j ,0 }
tj
0
dj − pj
min
min ∑w j max{t j + p j − d j ,0}
j ∈J
∑w f
j
j
f j ≥ t j + pj − dj , j ∈ J
fj ≥ 0
Formulazione PLM
min
∑w f
j
j
f j − t j ≥ pj − dj ,
j ∈J
(1 − yij )M + t j − ti ≥ pi
yijM + ti − t j ≥ pj
tj ≥0
fj ≥ 0
∀i, j ∈ J
∀j ∈ J
yij ∈ { 0,1}
∀i , j ∈ J
∀i , j ∈ J
Problemi min-max: Lmax
min f
f − t j ≥ pj − dj ,
j ∈J
(1 − yij )M + t j − ti ≥ pi
yijM + ti − t j ≥ pj
tj ≥0
f ≥0
∀i, j ∈ J
∀j ∈ J
yij ∈ { 0,1}
∀i , j ∈ J
∀i , j ∈ J
Formulazioni Time-indexed
Orizzonte temporale [0,T] discretizzato in periodi di durata
unitaria. Il periodo t concide con l’intervallo di [t − 1, t]
Variabili binarie: xjt =1 se j inizia nel periodo t; 0 altrimenti
vincolo 1 (Completezza): ogni job inizia in un qualche t
T − p j +1
∑ x jt = 1,
j = 1,..., n
t =1
j
j
j
j
1
2
3
4
5
T≥Σpj
Formulazioni Time-indexed
vincolo 2 (Capacità): al più un job processato nel periodo t
un job occupa il periodo t se inizia nell’intervallo [t − pj+1, t]
j
j
j
t
quindi:
n
min( t ,T − p j + 1 )
j =1
js
s = max( 1 , t − p j + 1 )
∑
∑x
≤ 1,
t = 1,..., T
Formulazione PL(0-1)
n T − p j +1
min
∑
∑ c jt x jt
j =1
t =1
T − p j +1
∑ x jt = 1,
t =1
n
min( t ,T − p j + 1 )
j =1
js
s = max( 1 , t − p j + 1 )
∑
∑x
x jt ∈ { 0,1}, j = 1,...,n;
nT variabili; n + T vincoli
cjt costo di assegnazione
del job j all’istante t
j = 1,..., n
≤ 1,
t = 1,..., T
t = 1,...,T − p j + 1
Funzioni obiettivo (min-sum)
se j inizia nel periodo t si ha Cj = t+pj−1
j
t+pj−1
t
tempo totale di completamento:
n T − p j +1
cjt = wj(t+pj−1)⇒
∑ ∑w (t + p
j
j =1
n
j
− 1)x jt = ∑w jC j
t =1
j =1
tardiness totale:
c jt = w j max{ 0, t + p j − d j − 1} ⇒
n
T − p j +1
∑ ∑w
j =1
t =1
n
j
max( 0, t + p j − d j − 1)x jt =
∑w T
j
j =1
j
Esercizio
Formulare come problema di PL(0-1) la seguente istanza
del problema 1/rj/∑j wjCj
job
1
2
3
pj
3
1
2
rj
0
2
0
wj
3
2
4
Vincoli di precedenza
vincolo 3 (Precedenza i→j): se il job i non è iniziato nei
periodi 1,2,…,t allora il job j non può iniziare nei periodi 1,
2,…, t + pi
j
i
t
quindi:
t + pi
∑x
s =1
t
js
≤
∑x
r =1
ir
,
t = 1,..., T − pi − p j + 1
1.2 Tempo totale pesato di completamento
Σ w jC j
nondelay schedule
Proprietà 0.1 Dato un problema del tipo 1//γ con γ
funzione obiettivo regolare, esiste uno schedule
ottimo in cui la macchina processa ininterrottamente
dall’istante 0 all’istante Cmax= Σpj
Tempo totale pesato di completamento
1// ΣwjCj
Definiamo Weighted Shortest Processing Time
(WSPT) una regola che ordina i job per valori non
crescenti del rapporto wj/pj
Sussiste il seguente
Teorema 1.1 La regola WSPT calcola una soluzione
ottima del problema 1//ΣwjCj
Dimostrazione. (Per contraddizione)
Assumiamo che S sia uno schedule ottimo e che non
rispetti WSPT
Dimostrazione
Allora devono esserci in S due job adiacenti, diciamo j
seguito da k tali che
wj/pj < wk/pk
Assumiamo che il job j inizi all’istante t.
Eseguiamo uno scambio dei job j e k ottenendo un
nuovo schedule S'
S
j
k
t+pj
k
S′
t
j
t+pk
t+pj+pk
Dimostrazione
S
j
k
k
S′
t
j
t+pj+pk
Il tempo totale (pesato) di completamento dei job che
precedono e seguono la coppia (j,k) non è modificato
dallo scambio. Il contributo dei job j e k in S è:
(t+pj)wj + (t+pj+pk)wk
mentre in S' è:
(t+pk)wk + (t+pk+pj)wj
Dimostrazione
in S]
(t+pj)wj + (t+pj+pk)wk
in S']
(t+pk)wk + (t+pk+pj)wj
Eliminando i termini uguali:
in S]
pjwk
in S']
pkwj
Quindi, se wj/pj < wk/pk, risulta pk wj < pj wk, cioè il
tempo totale pesato in S' è strettamente inferiore a quello
in S, contraddizione
Vincoli di precedenza
1/prec/ ΣwjCj
Nel caso generale il problema è NP-Hard.
Consideriamo invece il caso in cui le precedenze sono
rappresentate da un insieme di catene in parallelo:
1/chain/ΣwjCj
Per questo caso esiste un algoritmo di soluzione polinomiale.
Catene non interrompibili
Date due catene:
1→2→…→k
k+1 → k+2 → … → n
Minimizziamo ΣwjCj con il vincolo che i job di ciascuna
catena debbano essere processati consecutivamente.
Lemma 1.2 Se
k
n
∑wj
j =1
k
∑ pj
j =1
∑ wj
>
j =k +1
n
∑ pj
j =k +1
allora la catena 1, …,k precede la catena k+1, …, n
Dimostrazione
• Per la sequenza 1,2,…,k,k+1,k+2,…,n (S1) il tempo totale
di completamento è
k
k
n
j =1
j =1
j =1
w1 p1 + K + wk ∑ p j + wk +1( ∑ p j + pk +1 ) + K + wn ∑ p j
• Per la sequenza k+1,k+2,…,n,1,2,…,k (S2) il tempo totale
di completamento è
n
n
n
j =k +1
j =k +1
j =1
wk +1pk +1 + K+ wn ∑ pj + w1( ∑ pj + p1) + K+ wk ∑ pj
Semplificando
• S1
k
k
n
k
j =1
j =1
j = k +1
n
n
k
n
j =k +1
j =k +1
j =1
j =k +1
w k +1 ∑ p j + K + w n ∑ p j = ( ∑
w j )( ∑ p j )
j =1
• S2
w1 ∑ p j + K + wk ∑ p j = ( ∑ w j )( ∑ p j )
• Quindi, ricordando l’ipotesi:
k
∑w
n
j =1
k
∑p
j =1
∑w
j
>
j
j
⇒ (
j = k +1
n
∑p
j = k +1
n
k
∑ w )( ∑ p
j
j = k +1
j =1
k
j
) < ( ∑ w j )(
j =1
j
cioè, S1migliore di S2
n
∑p
j = k +1
j
)
Coefficiente ρ di una catena
L’idea
chiave
dell’algoritmo
è
ricondurre
1/chain/ΣwjCj al problema di sequenziare catene
non-interrompibili, in modo da utilizzare il Lemma 1.2.
Definizione 1.3 Data una catena 1→ 2 → … →k
definiamo coefficiente ρ della catena il seguente
rapporto:
l

∑wj
∑wj

max j =1
j =1

ρ(1,K,k ) = l *
=
l
1
≤
l
≤
k

∑ pj
 ∑ pj
j =1
 j =1
l*






Esempio
job
1
2
3
4
pj
3
4
2
6
wj
10
4
17
8
1
2
 ∑l w
max  j =1 j
 l
ρ(1,K,4) =
1 ≤ l ≤ 4 ∑ p
j

 j =1
3
4


10
14
31
39

 =  , , , 
  3 7 9 15 


l* = 3
Proprietà del coefficiente ρ
Proprietà 1.4 Se un job l* determina il coefficiente
ρ(1,...,k) allora per qualunque 1<u<l* risulta:
l*
u
∑ wj
j =u +1
l*
∑ pj
j =u +1
∑wj
>
j =1
u
∑ pj
j =1
Dimostrazione
Per definizione:
l*
∑wj
∑wj
j =1
l*
j =1
u
∑ pj
j =1
da cui:
l*
p1 ∑ w j + K + pu
j =1
p1
u
>
∑ pj
j =1
l*
u
u
j =1
j =1
j =1
∑ w j > p1 ∑ w j + K + pl * ∑ w j
l*
l*
u
u
j =u +1
j =u +1
j =1
j =1
∑ w j + K + pu ∑ w j > pu +1 ∑ w j + K + pl * ∑ w j
u
l*
l*
j =1
j = u +1
j = u +1
( ∑ p j )( ∑ w j ) > ( ∑
u
p j )( ∑ w j )
j =1
Proprietà dello schedule ottimo
Lemma 1.5 Si consideri una generica catena (1, ..., k) e
sia l* il job che determina il suo coefficiente ρ(1,...,k).
Allora esiste uno schedule ottimo che processa i job 1, …,
l* consecutivamente.
Dimostrazione. (per contraddizione) Assumiamo che in una
sequenza ottima la sequenza 1,…,l* sia interrotta da un job
v ∉(1,...,k), cioè, contenga la sottosequenza
(S)
1,…,u,v,u+1,…l*
Proprietà dello schedule ottimo
(S) 1,…,u,v,u+1,…l*.
Consideriamo le sottosequenze:
(S')
v,1,…,u,u+1,…,l*
(S'')
1,…,u,u+1,…l*,v
Mostriamo che per almeno una fra S' e S'' il tempo di
completamento è non superiore a quello di S.
Dimostrazione
• Applicando il Lemma 1.2 alle catene (v) e (1,…,u) si ha che
se il valore (∑wjCj) di S è inferiore a quello di S', allora:
wv w1 + w2 + K + wu
<
pv
p1 + p2 + K + pu
• Applicando il Lemma 1.2 alle catene (v) e (u+1,…,l*) si ha
che se il valore (∑wjCj) di S è inferiore a quello di S'', allora:
wv wu +1 + wu + 2 + K + wl *
>
pv
pu +1 + pu + 2 + K + pl *
Dimostrazione
• Per la Proprietà 1.4 risulta inoltre:
wu +1 + wu + 2 + K + wl * w1 + w2 + K + wu
>
pu +1 + pu + 2 + K + pl *
p1 + p2 + K + pu
• Quindi, se S è meglio di S'', allora:
wv wu +1 + wu +2 + K + wl * w1 + w2 + K + wu
>
>
pv
pu +1 + pu +2 + K + pl *
p1 + p2 + K + pu
Contraddizione (avendo assunto S meglio di S'). Lo stesso
argomento si applica quando la catena è interrotta da
molteplici job.
Algoritmo
I due lemmi precedenti sono il fondamento di un algoritmo
polinomiale:
Algoritmo 1.6
In ogni istante in cui la macchina è libera, seleziona fra le
rimanenti catene quella con il massimo coefficiente ρ e la
processa senza interruzione fino al job che definisce ρ
(incluso)
L’algoritmo ha complessità O(n2)
Esempio
job
1
2
3
4
5
6
7
wj
6
18
12
8
8
17
18
pj
3
6
6
5
4
8
10
1
5
2
3
6
4
7
step1.
ρ(1,2,3,4) = (6+18)/(3+6) = 24/9, l*=2
ρ(5,6,7) = (8+17)/(4+8) = 25/12, l*=6
1
2
Esempio
job
1
2
3
4
5
6
7
wj
6
18
12
8
8
17
18
pj
3
6
6
5
4
8
10
step2.
ρ(3,4) = 12/6, l*=3
ρ(5,6,7) = (8+17)/(4+8) = 25/12, l*=6
1
2
5
6
3
4
5
6
7
Esempio
job
1
2
3
4
5
6
7
wj
6
18
12
8
8
17
18
pj
3
6
6
5
4
8
10
3
7
step3.
ρ(3,4) = 12/6, l*=3
ρ(7) = 18/10, l*=7
1
2
5
6
3
4
Esempio
job
1
2
3
4
5
6
7
wj
6
18
12
8
8
17
18
pj
3
6
6
5
4
8
10
4
7
step4.
ρ(4) = 8/5, l*=4
ρ(7) = 18/10, l*=7
1
2
5
6
3
7
4
Release date e preemption
L’introduzione delle release date complica il problema. Nel
caso in esame, il problema 1/rj/ΣwjCj è NP-hard. [Ex1]
Richiamo. Dato un problema di ottimizzazione P =(z,S) (di
minimo), si definisce rilassamento di P un nuovo problema
RP=(w,Φ) tale che:
(i) S ⊆ Φ
(ii) ∀ x ∈ S risulta w(x) ≤ z(x)
Rilassamento preemptivo
Il problema1/rj, prmp/ΣwjCj si dice rilassamento (perché
lo è?) preemptivo.
Per esso è interessante valutare il comportamento della
naturale estensione della regola WSPT:
Preemptive WSPT: in ogni istante (intero) di tempo, si
processa il job disponibile con il massimo rapporto
peso / tempo residuo di processamento
Esempio
job
1
2
3
4
5
wj
1
4
3
5
3
pj
2
3
3
2
1
rj
0
2
3
1
4
28
15
1
4
4
2
5
2
2
33
1
15
3
8
ZPWSPT=99
3
3
PWSPT non è ottima per
1/rj ,prmp /∑ wj Cj
108
2
1 1 2 2 2 2 2 2 2 2 2 2 3 3
job
1
2
3
wj
1
9
8
pj
2
10
2
rj
0
1
11
112
ZPWSPT=222
99
104
1 2 2 2 2 2 2 2 2 2 2 3 3 1
14
ZOPT=217
Complessità
PWSPT si esegue in tempo O(n log n)
Si mantiene la lista ordinata per valori decrescenti del
rapporto wj/pj(t) e la lista ordinata dei job per release date
crescenti.
Gli eventi significativi sono di due tipi: (i) completamento di un
job e (ii) rilascio di un nuovo job. Quindi, ci sono O(n) eventi.
In corrispondenza di ciascun evento si deve:
• aggiornare la lista, richiede tempo O(log n)
• calcolare l’evento successivo, calcolando min(t + pj(t), rj1),
che richiede tempo costante
Pesi unitari
Nel caso di pesi tutti unitari PWSPT schedula, in ogni
istante (intero) di tempo, il job disponibile con il minimo
tempo residuo di processamento (Shortest Remaining
Processing Time, SRPT)
Si ha il seguente:
Lemma 1.6
La regola SRPT è ottima per 1/rj, prmp/ΣCj
Dimostrazione. Mostriamo che, comunque preso uno
schedule S che non rispetta SRPT, ne esiste uno S' che la
rispetta con un tempo di completamento non peggiore.
Dimostrazione
Se S non rispetta SRPT, deve esserci un istante t in cui è
processata una unità del job j pur esistendo k tale che
pj(t) > pk(t)
Costruiamo un nuovo schedule S' in cui le rimanenti pk(t) unità
del job k sono scambiate con le prime pk(t) del job j.
S
j
S′
k
t
k
t'
Dimostrazione
S
j
S′
k
t
k
t'
• i job diversi da j e k non subiscono alcuna variazione;
• primo caso: Ck(S ) > Cj(S )
− Essendo pj(t) > pk(t) si ha che Ck(S ′) ≤ Cj(S);
− inoltre, per costruzione, Cj(S ′) = Ck(S );
Quindi: Ck(S ′) + Cj(S ′) ≤ Ck(S ) + Cj(S )
Dimostrazione
S
j
S′
k
t
k
t'
• secondo caso: Ck(S) < Cj(S)
− Ck(S ′) ≤ Ck(S);
− Cj(S ′) = Cj(S);
Quindi: Ck(S′) + Cj(S ′) ≤ Ck(S) + Cj(S )
Esercizi
Esercizio 1
Dimostrare che la regola SPT non è ottima per il problema
1/rj/∑ Cj
z(SPT) = 12
1
job 1
rj 3
pj 1
2
0
4
3
2
4
z(OPT) = 9
1
2
1
8
4
5
5
Esercizio 2
Dimostrare che la regola WSPT non è ottima per il
problema 1/brkdwn/∑ wj Cj
z(WSPT) = 85
1
job
1
2
wj
10 15
pj
1
2
2
1
2
3
4
10
75
z(OPT) = 70
1
2
1
5
2
30
3
4
40
5
Esercizio 3
Dimostrare o confutare che la regola SPT è ottima per il
problema 1/brkdwn/∑ Cj
job
1
2
3
pj
3
2
4
z(SPT) = 22
2
3
1
2
4
5
12
8
z(OPT) = 21
3
2
4
5
1
7
10
1.3 Problemi min-max
(Massima Lateness Lmax)
1/prec/hmax
Forma della funzione obiettivo:
hmax = max (h1(C1), …, hn(Cn))
hj(Cj) è una arbitraria funzione non decrescente di Cj
Esempi:
hj(Cj)= Cj – dj = Lj
⇒
hj(Cj) = max (0,Lj) = Tj
hmax = Lmax
⇒
hmax = Tmax
Precedenza: GP generico grafo aciclico.
• Dato che le soluzioni ottime sono nondelay, l’ultimo job
termina all’istante C max = ∑nj=1 p j
Algoritmo di Lawler
Costruisce lo schedule a partire dal fondo
•J
job già schedulati nell’intervallo [C max − ∑ j ∈J p j ,C max ]
• Jc = {1, …, n} \ J
• J′
job schedulabili immediatamente prima di J (= tutti i
successori sono in J)
Inizializzazione:
J = ∅, Jc = {1, …, n}, J′ insieme dei job privi di successori
Loop: while (Jc ≠ ∅ )
Schedula in ultima posizione il job j* tale che
h j * ( ∑ p j ) = min (h j ( ∑ p j ))
j ∈J c
j ∈J ′
J := J ∪{j*}, Jc := Jc \{j*}, aggiorna J′
Endloop.
j ∈J c
Corretezza
Teorema 1.7 L’algoritmo di Lawler restituisce uno
schedule ottimo per 1/prec/hmax
Dimostrazione. (Per contr.) Sia S una sequenza ottima
per cui, ad una generica iterazione, è selezionato il job
j**∈
∈J′ ma esiste ∃ j* (schedulabile) tale che
h j * ( ∑ p j ) < h j ** ( ∑ p j )
j ∈J c
S
j*
j ∈J c
j**
Quindi, j* è schedulato prima di j**
J
Dimostrazione (continua)
j*
j**
S
hj **
hj **
hj *
hj *
j**
j*
S′
Consideriamo un nuovo schedule S′ ottenuto da S spostando
il job j** subito dopo j*. [L’unico job che peggiora è j*]
Dimostrazione (continua)
j*
hj **
hj **
hj *
hj *
j**
j**
j*
S′
S
h j * ( ∑ p j ) < h j ** ( ∑ p j ) ⇒ costo di j* in S′ inferiore al costo di
c
c
j∈J
j∈J
j** in S. Quindi S′ meglio di S, contraddizione.
Esempio
job
1
2
3
4
pj
3
4
2
6
1+C2
10
hj
Iter 1.
1.5 C3 2
Gp
4
(C4/5)
2
∑ p j = 15
j ∈J c
J
∅
Jc
{1,2,3,4}
J′
{1,2,3}
job
1
3
costo 10 16 22.5
1
0
2
12
15
Esempio
job
1
2
3
4
pj
3
4
2
6
hj
10
1+C2
Iter 2.
1.5 C3 2
Gp
4
(C4/5)
2
∑ p j = 12
j ∈J c
J
{1}
job
2
3
Jc
{2, 3,4}
costo
13
18
J′
{2,3}
2
0
8
1
12
15
Esempio
job
1
2
3
4
pj
3
4
2
6
hj
10
1+C2
1.5 C3 2
(C4/5)
∑ pj = 8
Iter 3.
j ∈J c
J
{1,2}
Jc
{3,4}
J′
{3,4}
3
S*
0
job
costo
4
2
2
8
3
12 3.03
1
12
z(S*) = max(10, 13, 3.03, 3)
4
15
Algoritmo di Lawler: caso speciale
L’algoritmo di Lawler si esegue in tempo O(n2)
Infatti, assumendo che il calcolo del valore delle funzioni hj
richieda tempo costante, l’algoritmo richiede n passi,
ciascuno basato su n confronti
• Nel caso 1//Lmax l’algoritmo di Lawler si specializza:
h j (C j ) = C j − d j
min (h j ( ∑ c p j )) = max (d j )
j ∈J ′
j ∈J
j ∈J ′
Equivale alla regola EDD (Earliest Due Date)
Esercizio
Dimostrare che la regola EDD non è ottima per il problema
1//∑ Lj
Controesempio:
job
1
2
3
pj
3
4
2
dj
6
4
5
3
1
2
0
3
0
6
4
1
2
4
9
2
5
1
9
1/rj/Lmax: complessità
Teorema 1.8 1/rj /Lmax è NP-hard in senso forte
Dimostrazione. Riduzione polinomiale da 3-PARTITION
3t
Istanza: interi a1, …,a3t ,b tali che b/4<aj<b/2, ∑ a j = tb
j =1
Problema: ∃ partizione in t terne tutte di peso b?
Costruiamo la seguente istanza di 1/rj/Lmax con n = 4t−1
rj =jb + (j−1), pj=1, dj=jb +j,
rj = 0, pj = aj−t+1,
dj =tb + (t − 1),
j =1,…,t−1
j =t,…,4t−1
Problema (target): ∃ uno schedule di valore z ≤ 0?
1/rj/Lmax : complessità
rj=jb+(j−1),
pj=1,
dj=jb+j,
j=1,…,t−1
∃ schedule con Lmax ≤ z =0 se e solo se ogni job j, j
=1,…,t –1, è processato fra rj e dj = rj+pj
r1
d1
r2
d2
r3
d3
rt − 2 dt-2
rt−1 dt − 1
b
0
b
b+1 2b+1
3b+2
2b+2
3b+3
Fissando i primi t−1 job “bloccanti”, rimangono t
intervalli di lunghezza b
tb+t −1
1/rj/Lmax : complessità
r1
d1
r2
d2
r3
d3
rt-2 dt-2
rt-3
dt-3
b
0
b
3b+2
b+1 2b+1
2b+2
tb+t−1
3b+3
∃ schedule con Lmax ≤ 0 se e solo se i restanti 3t job:
dj=tb +(t − 1), j =t,…,4t−1
rj = 0, pj =aj-t+1,
per cui vale:
4 t −1
4 t −1
∑ p = ∑a
j
j =t
j −t +1
= tb
j =t
possono essere schedulati negli t intervalli di lunghezza b.
1/rj/Lmax : complessità
dj=tb +(t − 1), j=t,…,4t−1
rj = 0, pj =aj-t+1,
r1
d1
r2
d2
r3
d3
rt− 2 dt−2
rt−3 dt−3
b
0
b
b+1 2b+1
3b+2
2b+2
tb+t−1
3b+3
• Essendo b/4<aj , in ciascun intervallo di lunghezza b non
entrano più di tre job
• essendo aj<b/2 e
4t −1
4t −1
j =1
j =1
∑ p j = ∑ a j −t +1 = tb
mettendo meno di tre job in un intervallo, almeno un job è
schedulato in ritardo
1/rj/Lmax : complessità
dj=tb +(t − 1), j=t,…,4t−1
rj = 0, pj =aj-t+1,
r1
d1
r2
d2
r3
d3
rt-2 dt-2
rt-3
dt-3
b
0
b
b+1 2b+1
3b+2
2b+2
3b+3
tb+t-1
Quindi, i job t,…, 4t−1 possono essere schedulati negli t
intervalli di lunghezza b sse possono essere suddivisi in t
terne di lunghezza b, cioè, sse 3-PARTITION ha soluzione
Esercizio
Risolvere la seguente istanza di 3-partition:
A={27,27,29,33,33,33,35,35,35,37,37,39}
b=100
1/rj,prmp/Lmax
Preemptive EDD: ad ogni istante t, si processa il job
disponibile con la minima due date
R(t) = {j: rj ≤ t} insieme dei job disponibili al tempo t
Teorema 1.9 La regola PEDD calcola una soluzione
ottima del problema 1/rj, prmp/Lmax.
Dimostrazione. Consideriamo uno schedule S che viola
PEDD:
Al tempo t è schedulato un job k∈
∈R(t) per cui esiste un
job j∈
∈R(t) disponibile e non ancora terminato
tale che dk > dj
PEDD - correttezza
Poiché j non è terminato, ∃ istante t ′ > t in cui j è in
esecuzione
S
k
t t+1
j
t′
t′ + 1
dk > dj
Consideriamo il nuovo schedule S ′ ottenuto da S
scambiando j e k nei due intervalli di figura:
j
S′
t
k
t+1
t′
t′ +1
Il contributo dei job diversi da j e k non cambia
PEDD - correttezza
S
k
t t+1
S′
j
t′
j
t
t′ + 1
dk > dj
k
t+1
t′
t′ + 1
Definiamo Cj e Ck i tempi di completamento di j e k nello
schedule S.
Dimostriamo che Lmax(S ′) ≤ Lmax(S). Tre casi:
1.
C j > t′ + 1, Ck > t′ + 1
2.
C j = t′ + 1, Ck > t′ + 1
3.
C j ≥ t ′ + 1, Ck < t ′ + 1
PEDD - correttezza
caso 1.
S
C j > t ′ + 1,
k
t t+1
S′
Ck > t ′ + 1
j
t′
j
t
t′ + 1
k
t+1
t′
t′ + 1
Poiché entrambi i job terminano dopo t′+1 lo scambio
non ha alcun effetto: Lmax(S ′) = Lmax(S)
PEDD - correttezza
caso 2.
C j = t ′ + 1,
S
Ck > t ′ + 1
k
j
C j = t′ + 1
S′
j
t
k
t+1
t′
t′ + 1
Essendo Ck > t′+1 il tempo di completamento di k in S′
rimane inalterato; al contrario, quello di j diminuisce.
Quindi, Lmax(S ′)≤Lmax(S)
PEDD - correttezza
caso 3.
C j ≥ t ′ + 1,
Ck < t ′ + 1
S
k
j
S′
j
k
t
t+1
t′
t′ + 1
Il tempo di completamento di k aumenta fino a t′+1.
La lateness di k in S′ è, quindi, pari a:
dk>dj
t ′ + 1 − dk < t ′ + 1 − d j ≤ C j − d j = L j
ed è quindi inferiore alla lateness di j in S
1/rj/Lmax
Algoritmo branch-and-bound
Branch-and-bound: nozioni di base
Dato
un
problema
combinatoria: P0=(z, S)
di
ottimizzazione
z* = min {z(x) : x ∈ S}
S ={x1, …, xm}
Enumerazione totale
Algoritmo banale:
1. Enumera tutte le soluzioni ammissibili (sono in
numero finito) e calcolane il costo
2. Scegli la soluzione di costo minimo
Sfortunatamente questo algoritmo può essere usato solo
quando il numero di soluzioni ammissibili non è elevato.
Ad esempio, il numero di schedule ammissibili per un
problema a macchina singola (senza precedenze) è n!
Quindi, per un problema con 20 job, eseguendo una
valutazione in 10−9 sec, impiegheremmo più di 77 giorni
Decomposizione
Proposizione1. Sia {S1,…,Sp}, una decomposizione dell’insieme
S in sottoinsiemi
Si ⊂ S per i = 1, …, p.
∪i=1, ..., p Si = S
sia zi* il valore ottimo del sottoproblema (Si, c), i = 1,…, p.
Allora,
z* = mini =
1,…,p
Osservazione:
i
sottoinsiemi
necessariamente una partizione di S
zi*
non
costituiscono
Albero di enumerazione
applichiamo ricorsivamente il procedimento:
Nodo radice
Esempio:
S = {0,1}3
S
x1=0
x1=1
S1
S0
x3=0
S000
x2=0
x2=1
x2=0
x2=1
S00
S01
S10
S11
x3=1
S001
x3=0
S010
x3=1
S011
x3=0
S100
x3=1
S101
x3=0
S110
Caso peggiore: 2n foglie + 2n −1 nodi intermedi
x3=1
S111
Potatura
• Il metodo branch-and-bound si basa sull’idea di ridurre il più
possibile il numero di sottoproblemi “valutati” (= per cui si risolve
il rilassamento lineare)
• Diversi criteri, basati sulla soluzione di un rilassamento, ci
permettono di “potare un sottoproblema” (Si, c), cioè di NON
procedere all’esplorazione del sottoalbero di radice (Si, c)
Si
Limitazioni inferiori di zi*
Proposizione 1. Sia S = S1 ∪ S2 ∪…∪ Sp una
decomposizione della regione ammissibile S in p insiemi.
Sia z*i = min {cTx : x ∈ Si} .
Se ziLB è un lower bound per il valore ottimo z*i
Allora,
zLB = mini ziLB è un lower bound per z*
S
z LB= 5
S1
z 1LB= 10
S2
z 2LB= 5
S3
z 3LB= 7
Soluzioni ammissibili: limitazioni superiori di
zi*
Proposizione 2. Sia S = S1 ∪ S2 ∪… ∪ Sp una decomposizione
della regione ammissibile S in p insiemi.
Sia z*i = min {cTx : x ∈ Si} e
x i ∈ Si
(soluzione ammissibile)
naturalmente, ziUB = cT xi è un upper bound per il valore ottimo z*i
Allora,
zUB = mini ziUB è un upper bound per z*
S
z UB= 9
S1
z 1UB= 15
S2
z 2UB= 9
S3
z 3UB= 13
Potatura per bound
• Sia z UB = c T x un upper bound del valore ottimo z*
• Sia ziLB un lower bound per il valore ottimo z*i di (Si, c)
Se
LB
zi
≥z
LB
zi
UB
UB
z
z*
allora Si non contiene soluzioni ammissibili migliori di
e il sottoproblema (Si, c) è potato
x
Calcolo di ziLB
Dato un problema di ottimizzazione P=(z,S) (di minimo),
si definisce rilassamento di P un nuovo problema
RP=(w,Φ) tale che:
(i) S ⊆ Φ
(ii) ∀ x ∈ S risulta w(x) ≤ z(x)
• Il calcolo di ziLB si effettua risolvendo in modo esatto
un opportuno rilassamento di (z,Si).
• La scelta del rilassamento si basa su due esigenze,
spesso contrastanti:
o Ottenere buone approssimazioni di zi*
o Richiedere tempi di calcolo non elevati
Potatura per ottimalità
Può accadere che risolvendo il rilassamento si ottenga
una soluzione ottima del sottoproblema.
In questo caso, ovviamente, il sottoproblema
non va ulteriormente suddiviso.
Se z = w, ogni soluzione ammissibile di RP che sia
anche ammissibile per P, è anche ottima per P.
Branch-and-bound per 1/rj/Lmax
branching: al livello h dell’albero di enumerazione si fissa
in tutti i modi possibili il job in posizione h
----1-…-
1, 2 - … -
2-…-
1, n - … -
radice: nessun job è fissato
n-…-
n, 1 - … -
Livello n : n! sottoproblemi
n, n-1 - … -
Vincoli di branching: schedule parziali
Un sottoproblema S(k−1) al livello k−1 contiene
l’insieme delle schedule in cui le prime k−1 posizioni
sono assegnate
schedule parziale
j1 , … , jk−1
0
t
Un
vincolo
(di
branching) fissa un
certo job jk nella k-ma
posizione
j1 , … , jk−1
0
jk
t
…
jk
j1 , … , jk−1
0
t
Calcolo di ziLB
• Rilassamento preemptivo: 1/rj,prmp/Lmax
• la regola PEDD è ottima (ed efficiente)
j1 , … , jk−1
j1 , … , jk−1
jk
…
lower bound (livello k):
- eredita dal nodo padre
LB
- ricalcola, essendo z k −1
j1 , … , jk−1
≤
LB
zk
jk
Dominanza fra sottoproblemi
Consideriamo uno schedule parziale al livello k-1: il
sottoproblema j1, …, jk-1 , jk deve essere generato solo se:
r jk < min (max(t ,rl ) + pl ) = max(t ,rl * ) + pl *
l ∈J
j1 , … , jk−1
j1 , …, jk-1
0
jk
rjk
t
altrimenti si otterrebbe un sottoproblema dominato da:
0
l*
j1 , …, jk-1
t
jk
rjk
branch-and-bound
Caso 1: potatura per Bound
Sia ziLB il valore ottimo di RP.
Se ziLB ≥ zUB elimina Si , vai a Test
Inizializzazione
L={S}, zUB = + ∞
Test: L = ∅?
Scegli un problema Si
dalla lista
Risolvi il Rilassamento
su Si
STOP
→ zUB
Caso 2: potatura per Ottimalità
Se la soluzione ottima xiUB di RPi
è ottima anche per Pi, allora elimina Si.
Aggiorna ottimo corrente:
Se ziUB < zUB allora zUB =ziUB, vai a Test
Genera ed aggiunge ad L
i figli di Si corrispondenti a
schedule parziali ammissibili e
non dominati di Si
Esercizio
job
1
2
3
4
pj
4
2
6
5
rj
0
1
3
5
dj
8
12
11
10
1
2
3
4
nodo radice:
-4
1
0
3
4 5
4
4
3
10
zLB(----) = 5
5
2
15
17
Branching
job
1
2
3
4
pj
4
2
6
5
rj
0
1
3
5
dj
8
12
11
10
ottimo corrente: (1,2,3,4)
z =7
----
1---
2 ---
5
3 ---
r3 > r2 + p2
4 ---
r4 > r2 + p2
Eliminati per dominanza
Valutazione di (1 - - -)
job
1
2
3
4
pj
4
2
6
5
rj
0
1
3
5
dj
8
12
11
10
-4
1
0
3
4 5
4
4
3
10
zLB(1,---) = 5
5
2
15
17
Valutazione di (1 - - -)
-4
1
0
3
4
4
4 5
3
10
5
2
15
zLB(1,---) = 5
la condizione di potatura per bound fallisce
----
5
12--
13--
1---
5
7
2 ---
14--
17
Valutazione di (1 2 - -)
-4
1
job
1
2
3
4
pj
4
2
6
5
rj
0
1
3
5
dj
8
12
11
10
-6
2
4
-1
4
6
6
3
11
zLB(1,2--) = 6 Soluzione ammissibile
17
z =6
Valutazione di (1 2 - -)
-4
1
-6
2
-1
4
3
6
4
6
11
17
zLB(1,2--) = 6
sottoproblema potato per ottimalità
----
5
6
1---
13--
7
6
2 ---
6
1243
5
14--
Valutazione di (1 3 - -)
job
1
2
3
4
pj
4
2
6
5
rj
0
1
3
5
dj
8
12
11
10
-4
1
-1
3
4
zLB(1,3--) = 5
5
4
10
Soluzione ammissibile
5
2
15
z =5
17
Arresto
6
----
5
1---
5
2 ---
1243
1342
6
5
6
5
14--
5
Soluzione ammissibile di valore pari al lower bound globale: ottima
Scelte implementative
• Riassumendo, l’implementazione di un branch-andbound consiste delle seguenti scelte:
• regola di branching
• rilassamento
• regole di dominanza
• strategia di visita dell’albero di enumerazione
(selezione del nuovo sottoproblema da valutare)
• euristiche (in particolare al nodo radice)
Esercizio
Calcolare la soluzione ottima del seguente problema
1/prec/∑wjCj
Regola di selezione del sottoproblema FIFO (visita in
ampiezza)
job
1
2
3
4
5
wj
1
4
1
6
3
pj
3
7
1
5
4
1
2
4
5
Grafo delle precedenze
3
Valutazione di (-, -, -, -, -)
2
1
3
ρ(1,2,3*)=max(1/3,5/10,6/11)=6/11
4
ρ(4*,5) = max(6/5, 9/9)=6/5
5
ρ(5)=3/4
4
5
5
1
9
2
zLB= 165
3
19
12
20
Soluzione del rilassamento chain: non ammissibile (5 precede 2)
1
2
3
3
4
5
10 11
16
Soluzione iniziale
z = 210
20
Branching al nodo radice
zUB= 210
-----
1----
zLB= 165
4----
Lista dei problemi candidati: {(1, - - - -), (4, - - - -)}
Valutazione di (1, -, -, -, -)
2
4
3
job
1
2
3
4
5
wj
1
4
1
6
3
pj
3
7
1
5
4
ρ(2,3*) = max(4/7, 5/8)=5/8
5
ρ(4*,5) = max(6/5, 9/9)=6/5
ρ(5) = 3/4
1
4
3
L= 183
5
8
2
12
3
19 20
5 precede 2: soluzione non ammissibile
Branching
zUB= 210
-----
zLB = 183
12---
zLB = 165
4----
1----
14---
Lista dei problemi candidati: {(1, 2, - - -), (1, 4, - - -), (4, - - -)}
Valutazione di (4, -, -, -, -)
2
1
3
ρ(1, 2,3*) = max(1/3, 5/10,
6/11)=6/11
ρ(5) = 3/4
5
4
5
5
L= 165
1
9
2
12
3
19 20
5 precede 2: soluzione non ammissibile
Branching
zUB= 210
-----
zLB = 183
12---
zLB = 165
4----
1----
zLB = 165
14--41---
Lista dei problemi candidati: {(1, 2, - - -), (1, 4, - - -), (4, 1 - -)}
Valutazione di (1, 2, -, -, -)
3
ρ(3) = max(1/1)= 1
ρ(4*,5) = max(6/5,9/9)=6/5
4
5
Soluzione del rilassamento chain: ammissibile
1
2
3
4
10
aggiornamento dell’ottimo corrente
3
5
15 16
20
zLB = 209 = zUB
zUB= 210
-----
L= 183
12---
zLB = 165
4----
1----
(1, 2, 4, 3, 5)
zUB= 209
zUB= 209
14---
41---
potato per ottimalità
Lista dei problemi candidati: {(1, 4, -, - -), (4, 1, -, - -)}
L= 165
Valutazione di (1, 4, -, -, -)
2
3
Solo il job 2 è schedulabile:
l’unico figlio è (1 4 2 - -)
5
Valutazione di (1, 4, 2, -, -)
3
5
ρ(5) =3/4
ρ(3) = max(1/1)= 1
1
4
3
2
8
3
5
20
15 16
Soluzione del rilassamento chain: ammissibile
L= 187
zUB= 209
-----
L= 183
12---
zLB = 165
4----
1----
(1, 2, 4, 3, 5)
zUB= 209
potato per ottimalità
zUB= 187
14---
41---
(1, 4, 2, 3, 5)
zUB= 187
potato per ottimalità
14---
Lista dei problemi candidati: {(4, 1, - - -)}
L= 165
Valutazione di (4, 1, -, -, -): fixing
2
1
3
Solo il job 1 è schedulabile:
l’unico figlio è (4 1 - - -)
5
Valutazione di (4, 1, 2, -, -)
3
5
ρ(5) =3/4
ρ(3) = max(1/1)= 1
4
1
3
2
8
3
15 16
Soluzione del rilassamento chain: ammissibile L= 174
5
20
-----
zUB= 187
zUB= 174
4----
L= 165
1---41--12---
14---
zUB= 174
potato per ottimalità
142--
412--
potato per ottimalità
L=∅: STOP
potato per ottimalità
scelta del sottoproblema: FIFO (visita in ampiezza)
# problemi valutati = 8
L= 183
4----
1----
12---
123--
-----
14---
L= 165
41---
124-142--
412--
ottima
12435
12345
41235
12453
14253
14253
z*= 174
41253
scelta del sottoproblema: least lower bound
# problemi valutati = 5 (!)
L= 183
4----
1----
12---
123--
-----
14---
L= 165
41---
124-142--
412--
ottima
12435
12345
41235
12453
14253
14253
z*= 174
41253
Gerarchia di rilassamenti
z
Schedule ammissibili
(risp. alle precedenze)
z*
LB2
schedule non ammissibili
rimozione archi
LB1
LB1 = eliminati i vincoli di precedenza O(n log n)
LB2 = eliminato solo l’arco (2,5) O(n2)
Relazioni fra funzioni obiettivo
Definizione. Due funzioni obiettivo si dicono equivalenti se
uno schedule ottimo per la prima lo è anche per la seconda
e viceversa.
Esempio. 1//ΣCj. e 1//ΣLj. sono equivalenti
Infatti, Lj = Cj − dj
quindi ΣLj = ΣCj − Σdj
ma l’ultimo termine è costante e non dipende dallo schedule
Lmax vs. Tmax
Uno schedule che minimizza Lmax minimizza anche Tmax
infatti,
Tmax = max {max(0,L1), …,max(0,Ln)} = max{0,
L1,…,Ln} = max {0,Lmax}.
non vale il veceversa:
-1
1
1
2
pj
1
5
dj
7
6
Tmax=Lmax=0
6
-1
-1
0
2
1
job
2
1
5 6
Lmax=-1
Osservazione
Sia P un generico problema e RP un suo rilassamento.
• se P ed RP hanno la stessa funzione obiettivo, allora
qualunque soluzione ottima di RP che sia anche
ammissibile per P è ottima per P;
• al contrario, se P ed RP hanno funzioni obiettivo diverse
questo non è vero: consideriamo la seguente istanza di
1//ΣwjCj ed il suo rilassamento 1//ΣCj.
1
job
1
2
pj
1
2
wj
1
10
30
2
1
1
20
2
3
3
1
2
3
C1+C2=4*
C1+C2=5
w1C1+w2C2=31
w1C1+w2C2=23*
Numero di tardy job
1//ΣUj
Struttura delle soluzioni ottime
• ogni schedule ottimo è composto da un insieme di job
che arrivano in tempo e da un secondo insieme di job in
ritardo (rispetto alle proprie due date)
• il primo insieme rispetta EDD, in modo che Lmax sia
minimizzata (e minore o uguale a zero).
• l’ordine dei job del secondo insieme non ha impatto
sulla funzione obiettivo
job in tempo (EDD)
job in ritardo (qualsiasi ordine)
Algoritmo di Moore
• Costruisce lo schedule in avanti
• J job già schedulati (schedule parziale, secondo EDD)
• Jd job già esaminati e fissati come tardy job
• Jc job ancora non esaminati
Inizializzazione:
J = ∅, Jd = ∅, Jc = {1, …, n}.
Repeat:
1. Sia j* il job in Jc con la minima due date:
J:=J ∪ {j*}; Jc:=Jc \{j*}
2. Se j* è in ritardo, cioè ∑ p j > d j *
j ∈J
sia k* il job in J più lungo:
J:=J \{k*} Jd:=Jd ∪{k*}
Until (Jc ≠ ∅)
Correttezza
Teorema. L’algoritmo di Moore restituisce una soluzione
ottima di 1//ΣUj
Dimostrazione. Senza perdita di generalità si può assumere
d1≤ d2≤… ≤dn
Sia Jk un sottoinsieme di {1,…,k} che soddisfa le seguenti
proprietà:
1.ha il massimo numero Nk di job in tempo
2.fra tutti i sottoinsiemi di {1,…, k} con Nk job in tempo, Jk ha il
minimo tempo totale di processamento
Per definizione, Jn corrisponde ad uno schedule ottimo.
Dimostriamo per induzione che l’algoritmo di Moore
restituisce Jn
Induzione
•
•
l’algoritmo costruisce J1 in modo da rispettare (1) e (2).
Assumiamo che (1) e (2) valgano per k, cioè che Moore
costruisca Jk e mostriamo che esse valgono per k+1
Due casi:
Caso a. Il job k+1 è aggiunto all’insieme Jk ed è completato in
tempo. Ovviamente, è impossibile avere un maggior numero
di job in tempo fra quelli in {1,…,k+1}, quindi vale (1).
Inoltre, il job k+1 deve appartenere all’insieme. Quindi, il
tempo di processamento totale è minimo fra tutti gli insiemi
che soddisfano (1). Quindi vale (2).
Induzione
Caso b. Il job k+1 è aggiunto all’insieme Jk ed è
completato in ritardo. Dato che Jk soddisfa (1) e (2)
deve essere Nk = Nk+1.
Quindi, aggiungere il job k+1 a Jk non aumenta il
numero di job in tempo. Ma aggiungere k+1 e
cancellare il job più lungo fra quelli di Jk ∪{k+1}
mantiene uguale il numero di job in tempo e riduce il
tempo di processamento complessivo. Questo completa
la prova.
Esempio
job
1
2
3
4
5
pj
7
8
4
6
6
dj
9
17
18
19
21
iter 1.
1
0
iter 2.
7
1
0
iter 3.
2
7
15
1
0
2
7
1
0
15
3
7
3
11
19
Esempio
job
1
2
3
4
5
pj
7
8
4
6
6
dj
9
17
18
19
21
iter 5.
1
7
3
Soluzione
7
11
4
11
17
5
4
17
23
5
10
4
3
0
4
4
3
1
3
0
0
iter 4.
5
16
1
2
1.4 Problemi min-sum con due date
(Tardiness totale ΣTj)
Problema dello zaino binario
Zaino di capacità C ∈ Ζ+
Insieme N = {1,…,n} di oggetti. Per ogni oggetto:
ingombro aj ∈ Ζ+
profitto pj ∈ Ζ+
Problema: scegliere un insieme di oggetti di profitto
massimo tale che l’ingombro totale non ecceda la capacità.
Sia S una soluzione ottima e S′ una soluzione ottenuta da S
eliminando l’elemento i.
S′ è sol. ottima per il problema N′ = N \{i} e C′=C−ai
Altrimenti, detta S′′ una sol ottima, S*= S′′ ∪ {i} sarebbe
ammissibile e migliore di S, contraddizione.
Formula ricorsiva
P(i, λ) = massimo profitto ottenibile con i primi i oggetti
ed uno zaino di capacità λ
consideriamo l’elemento i e valutiamo le due possibilità:
i è tenuto nello zaino: P(i, λ) = P(i −1, λ − ai) + pi
i è scartato: P(i, λ) = P(i −1, λ),
Quindi:
P(i, λ) = max(P(i −1, λ − ai)+ pi , P(i −1, λ))
il problema consiste nel determinare P(n, C)
Divide et impera vs.PD
il metodo divide et impera procede per decomposizioni
successive (top-down) e combina successivamente le
soluzioni dei sottoproblemi per ottenere la soluzione del
problema originario.
È possibile (anzi, frequente) che molti sottoproblemi siano
uguali, quindi si esegue molto lavoro inutile!
La programmazione dinamica risolve i sottoproblemi in
modo bottom-up, memorizzando le soluzioni in una tabella
e utilizzandole ogni volta che servono alla soluzione di un
problema più grande
Complessità spaziale
i−1
i
P(i−1,λ−ai)
+ pi
λ
P(i−1, λ)
P(i, λ)
• ogni valore P(i, λ) è calcolato solo con elementi della
colonna precedente
• Quindi, per calcolare il valore ottimo, è sufficiente
memorizzare la colonna precedente ⇒ spazio O(C)
Ricostruire la soluzione
i−1
i
P(i−1,λ−ai)
+ pi
λ
P(i−1, λ)
P(i, λ)
• Per ciascun valore calcolato serve un puntatore
all’elemento della riga precedente da cui è derivato
• Quindi, è necessario mantenere l’intera tabella ⇒
spazio O(nC)
Programmazione dinamica nello
scheduling
Motivazione: Il branch-and-bound valuta diversi
sottoproblemi in cui lo schedule parziale contiene gli
stessi job (!)
- - - j1- - j1 j2 - -
j2 - - j2 j1 - -
Ereditarietà della struttura ottima
Consideriamo un problema del tipo:
1//Σj=1,…,n hj(Cj)
In cui hj(Cj) è una arbitraria funzione non decrescente di Cj
Ereditarietà: in uno schedule ottimo i primi K job (per un
qualunque K∈{1,…,n}) formano uno schedule ottimo per
il sottoproblema composto esclusivamente da tali job.
j1
j2
jK
jn
Ereditarietà della struttura ottima
S
j1
j2
jK
jn
per un qualunque K ∈{1, …, n} il valore della funzione
obiettivo ha la seguente forma:
n
∑h
k =1
K
jk
(C jk ) =
∑h
k =1
n
jk
(C jk ) +
∑h
jk
(C jk ) = A + B
k = K +1
Consideriamo il problema composto dai job {j1,…,jK}: la
sequenza (j1,…,jK) è ottima. Altrimenti, potremmo ridurre A
senza modificare B, contraddicendo l’ottimalità di S.
Metodo di Held e Karp
z(J) valore ottimo del problema in cui l’insieme dei job è J.
Se J = { j } allora z(J) = hj(pj)
Se |J | > 1, l’ultimo job è completato al tempo Σpj ed i primi
|J| −1 job devono essere schedulati in modo ottimo nel
sottoproblema associato.
Quindi:



z (J ) = min z (J \ { j }),h j  ∑ pk  
j ∈J
 k ∈J  

Metodo di Held e Karp
Per risolvere la formula ricorsiva



z (J ) = min z (J \ { j }),h j  ∑ pk  
j ∈J
 k ∈J  

L’algoritmo procede in modo bottom-up iniziando a
calcolare le soluzioni ottime dei problemi con un solo
job, quindi utilizzando queste per risolvere i problemi
con due job, e via di seguito.
Esempio: 1//ΣTj
job
1
2
3
4
pj
8
6
10
7
dj
14
9
16
16
Soluzioni per i quattro insiemi di un singolo
elemento:
z({ j }) = Tj = max (0, pj − dj)
J
{1} {2}
{3}
{4}
pj−dj
−6
−3
−6
−9
z(J)
0
0
0
0
Esempio: insiemi di due elementi
Soluzioni per i sei insiemi di due elementi:
z({j1,j2}) =
= min(z({j1})+(pj1+pj2)− dj2, z({j2})+(pj1+pj2)− dj1)
J
{1,2}
{1,3}
{1,4}
{2,3}
{2,4}
{3,4}
C(J)
14
18
15
16
13
17
last
1
2
1
3
1
4
2
3
2
4
3
4
Tj(C(J))
0
5
4
2
1
0
7
0
4
0
1
1
z({J\{j}})
+Tj(C(J))
0
5
4
2
1
0
7
0
4
0
1
1
min
*
*
*
z(J)
*
0
2
*
0
*
0
0
1
Esempio: insiemi di tre elementi
Soluzioni per i quattro insiemi di tre elementi. Esempio:
J={1, 2, 3}, C(J) = p1+p2+p3
z({j1,j2,j3})=min(z({j1,j2})+C(J)−dj3,
z({j1,j3})+C(J)−dj2,z({j2,j3})+C(J)−dj1)
J
{1,2,3}
{1,2,4}
{1,3,4}
{2,3,4}
C(J)
24
21
25
23
Last
1
2
3
1
2
4
1
3
4
2
3
4
Tj(C(J))
10
15
8
7
12
5
11
9
9
14
7
7
z({J\{j}}+Tj(C(J)))
10
17
8
7
12
5
12
9
11
15
7
7
min
z(J)
*
8
*
5
*
9
*
7
Esempio: insieme di quattro elementi
J
{1,2,3,4}
31
C(J)
Last
Tj(C(J))
z({J\{j}}+Tj(C(j)))
Min
z(J)
1
17
24
2
22
31
3
15
20
*
20
Ricostruzione della soluzione ottima:
{1,2,3,4} ⇒ job 3 schedulato per ultimo;
{1,2,4} ⇒ job 4 schedulato per ultimo;
{1,2} ⇒ job 1 schedulato per ultimo;
(2,1,4,3) soluzione ottima
4
15
23
Complessità
Tempo: numero di sottoproblemi valutati
n  n  n 
n 
  +   +   +K+  
 1  2   3
n 
⇒ O(2n)
Spazio: 2n * da memorizzare.
DP vs. branch&bound
----
1- - 3 --12--
14--
31--
13-1423
1324
34-32--
1432
4 ---
2---
41--
43--
42-1342
21--
24-23--
2134
2413
2431
2143
ottima
2341
2314
4312
4321
Applicabilità I
Il principio di ereditarietà della struttura ottima si basa sul fatto
che un risequenziamento dei job (j1,…,jK) non cambia il
termine B.
S
j1
j2
n
∑h
k =1
jK
K
jk
(C jk ) =
∑h
k =1
jn
n
jk
(C jk ) +
∑h
jk
(C jk ) = A + B
k = K +1
Mantenendo la stessa struttura della funzione obiettivo, questo
non è vero se le release date sono non tutte nulle.
Controesempio
job
1
2
3
4
pj
5
5
5
5
rj
0
1
9
15
dj
11
9
15
20
0
1
1
5
4
10
0
6
15
0
11
20
1
3
1
2
0
3
2
0
1
0
1
4
16
Σ Tj = 1
T1+T2=1
21
Σ Tj = 2
T1+T2=0
Applicabilità II
Il metodo di Held e Karp si applica anche a problemi
min-max.
Ad esempio se consideriamo 1//Lmax la ricorsione
diventa:



z (J ) = min max  z (J \ { j }), ∑ p j − d j  

j ∈J 
j
∈
J




1//ΣTj
Tardiness totale
algoritmo pseudo-polinomiale
Struttura della sequenza ottima
Lemma 1.10 Se pj≤pk e dj≤dk, esiste una sequenza
ottima in cui j precede k.
Ipotesi: d1 ≤ …≤ dn , pk = max (p1 , …, pn )
Quindi, esiste una sequenza ottima in cui i job {1, …, k −1}
precedono, in un qualche ordine, il job k.
{1,2,…,k−
−1,…}
{k}
i rimanenti job {k+1, …, n} possono precedere o seguire k
Analisi di sensibilità
Prendiamo un job k qualunque e poniamo:
dk = max(dk ,Ck' )
Dove Ck' è il massimo tempo di completamento del job k in
una (qualsiasi) soluzione ottima.
Otteniamo 2 istanze, entrambe con n job e tempi di
processamento p1, …, pn
I1]
d1, …,dn
I2]
d1,… ,dk−1, max(dk,Ck'), dk+1 ,…,dn
Analisi di sensibilità
I1] d1,…,dn
I2] d1,…,dk-1, max(dk,Ck'),dk+1 ,…,dn
Lemma 1.11
Ogni sequenza ottima per I2 è ottima per I1
Dimostrazione. Siano:
• S' uno schedule ottimo di I1 in cui k è completato al
tempo Ck'
• S'' uno schedule ottimo di I2 e Ck′′ il relativo tempo di
completamento di k.
Dimostrazione I
Siano:
•
V'(S) la tardiness totale della sequenza S rispetto ad I1
•
V ′′(S) la tardiness totale della sequenza S rispetto ad I2
Valutiamo le due sequenze S' e S'' rispetto a I1 e I2.
Per costruzione:
1. V' (S') = V ′′ (S') + Ak
2. V' (S ′′) = V ′′ (S ′′) + Bk
Dimostriamo il teorema facendo vedere che:
• V ′′ (S') > V ′′ (S ′′) e
• Ak > Bk
Dimostrazione II: consideriamo S'
Se Ck' ≤ dk , allora I1 e I2 coincidono ed il lemma è provato;
altrimenti: la due date di k in I2 è proprio Ck', cioè coincide col
suo tempo di completamento in S'.
Quindi:
1. V' (S' ) = V′′ (S' ) + Ak
I1
I2
dk
Ck '
Ak = Ck'−
− dk
Dimostrazione III: consideriamo S''
2. V'(S ′′) = V ′′ (S ′′) + Bk
consideriamo la sequenza S”, in cui il job k è completato in Ck”
Bk = Tk'−Tk”=max(0,Ck”−dk)−max(0,Ck”−Ck')
2 casi:
Bk = max(0, Ck” − dk ) se Ck” ≤ Ck'
Bk = Ck”−dk−Ck ” +Ck'=Ck'−dk se Ck” > Ck'
quindi:
Bk = max(0, min(Ck”, Ck’) − dk )
Dimostrazione IV
1. V'(S') = V” (S') + Ak
2. V'(S”) = V” (S”) + Bk
S′ ] Ak = Ck' − dk
S''] Bk = max(0, min(Ck”, Ck′ ) − dk )
quindi: Ak ≥ Bk
Essendo S” ottima per I2, deve essere V”(S' )≥V”(S”)
da cui:
V ' (S' ) ≥ V ' (S”)
Struttura della sequenza ottima
Lemma 1.10 Se pj≤pk e dj≤dk, esiste una sequenza
ottima in cui j precede k.
Ipotesi: d1 ≤ …≤ dn , pk = max (p1 , …, pn )
Quindi, esiste una sequenza ottima in cui i job {1, …, k −1}
precedono, in un qualche ordine, il job k.
{1,2,…,k−
−1,…}
{k}
i rimanenti job {k+1, …, n} possono precedere o seguire k
Posizione dei job {k+1, …, n}
Lemma 1.12
Esiste un intero δ, 0 ≤ δ ≤ n − k, tale che esiste una
sequenza ottima S in cui il job k è preceduto da tutti i job j
con j ≤ k + δ e seguito da tutti i job j per cui j > k + δ
Ck' : massimo tempo di completamento del job k in una
soluzione ottima dell’istanza I1
S” : schedule ottimo di I2 tale da soddisfare Lemma 1.10
Ck” : tempo di completamento del job k in S”
Dal Lemma 1.11: S” è ottima anche per I1, quindi
Ck” ≤ max(Ck',dk)
Dimostrazione I
Affermazione 1. Si può assumere che k non sia preceduto in
S'' da alcun job j con
dj ≥ max(Ck',dk) ≥ Ck"
Infatti, lo swap:
j
k
k
Ck′′
dj
Ck ′′
dj
j
produrrebbe una sequenza ammissibile non peggiore di
quella di partenza
Dimostrazione II
Affermazione 2.
il job k in I2 ha una due date pari a max(Ck',dk). Quindi,
per il Lemma 1.10, deve essere preceduto in S” da tutti i
job j con
dj ≤ max(Ck',dk).
Quindi: scegliendo δ come il più grande intero tale che
dk + δ ≤ max(Ck',dk)
Ed essendo S'' ottima per I1, la prova è completa
Programmazione Dinamica
Insieme di job {1, …, l} che inizia all’istante t.
Dal Lemma 2, esiste un δ, 0 ≤ δ ≤ l − k, per cui uno schedule
ottimo è dato dalla concatenazione di tre insiemi di job:
1. in qualche ordine
2
3. in qualche ordine
{1,2,…,k−
−1,k+1,…,k+ δ} {k} {k+ δ +1,k+ δ +2,…,l}
t
Ck(δ) = t + Σj≤ k+δ pj
tempo di completamento di k
Affinché l’intera sequenza sia ottima devono essere ottime le
sottosequenze relative agli insiemi 1 e 3 ⇒ ricorsione
Programmazione Dinamica
Il Lemma 2, purtroppo non fornisce un metodo di calcolo di δ
(perché?), ma solo un certificato di esistenza.
Tuttavia, 0 ≤ δ ≤ l − k, quindi, possiamo enumerare tutti i
possibili valori di δ e scegliere quello che produce la sol.
migliore
1. in qualche ordine
2
3. in qualche ordine
{1,2,…,k−
−1,k+1,…,k+ δ} {k} {k+ δ +1,k+ δ +2,…,l}
t
Ck(δ) = t + Σj≤ k+δ pj
tempo di completamento di k
Struttura del sottoproblema
Definiamo
J(j, l, k) ⊆ { j, j + 1, … , l – 1, l}
l’insieme di job di durata minore o uguale a pk. L’insieme non
contiene il job k anche se j ≤ k ≤ l.
V(J (j, l, k), t) tardiness totale dell’insieme J(j, l, k) in una
soluzione ottima quando l’insieme è iniziato al tempo t
condizioni al contorno:
V(∅, t) = 0,
V({j}, t) = max (0, t + pj − dj)
Ricorsione
V (J (j, l, s), t) = min0≤ δ ≤ l −k {V (J (j, k+δ, k), t) +
+ max (0, Ck(δ) − dk) + V(J (k+δ+1, l, k) , Ck(δ) ) }
in cui:
pk = max (pr| r ∈ J(j, l, s))
valore ottimo:
V({1, …, n}, 0)
Esempio
job
1'
2'
3
4
job
1
2
3
4
pj
8
6
10
7
pj
6
8
10
7
dj
14
9
16
16
dj
9
14
16
16
V({1, 2, 3, 4}, 0) = min (
δ= 0 V(J(1, 3, 3), 0) + max (0, 24 – 16) + V(J(4, 4, 3), 24),
δ = 1 V(J(1, 4, 3), 0) + max (0, 31 – 16) )
δ=0
1,2
3
14
δ=1
1,2,4
4
24
31
21
3
Esempio
job
1
2
3
4
pj
6
8
10
7
dj
9
14
16
16
V({1, 2, 3, 4}, 0) = min (
δ= 0 V(J(1, 3, 3), 0) + max (0, 24 – 16) + V(J(4, 4, 3), 24),
δ = 1 V(J(1, 4, 3), 0) + max (0, 31 – 16) )
V(J(1, 3, 3), 0) = max (0, 6 – 9) + max (0, 14 – 14) = 0
V(J(4, 4, 3), 24)) = 24 + 7 – 16 = 15
⇒ V({1, 2, 3, 4}, 0) = min ((0 + 8 + 15), V(J(1, 4, 3), 0) + 15)
Esempio
job
1
2
3
4
pj
6
8
10
7
dj
9
14
16
16
V(J(1, 4, 3), 0) = min(
δ= 0 V(J(1, 2, 2), 0) + max (0, 14 − 14) + V(J(3, 4, 2), 14),
δ=1 V(J(1, 3, 2), 0) + max (0, 14 − 14) + V(J(4, 4, 2), 14),
δ=2 V(J(1, 4, 2), 0) + max (0, 21 − 14))
δ = 0,1
1
2
6
δ=2
1,4
4
14
2
21
Esempio
job
1
2
3
4
pj
6
8
10
7
dj
9
14
16
16
V(J(1, 4, 3), 0) = min(
δ= 0 V(J(1, 2, 2), 0) + max (0, 14 − 14) + V(J(3, 4, 2), 14),
δ=1 V(J(1, 3, 2), 0) + max (0, 14 − 14) + V(J(4, 4, 2), 14),
δ=2 V(J(1, 4, 2), 0) + max (0, 21 − 14))
J(1, 2, 2) = {1} → V(J(1, 2, 2), 0) = max (0, 6 − 9) = 0
J(3, 4, 2) = {4} → V(J(3, 4, 2), 14) = max (0, 21 − 16) = 5
J(1, 3, 2) = {1} → V(J(1, 3, 2), 0) = max (0, 6 - 9) = 0
J(4, 4, 2) = {4} → V(J(4, 4, 2), 14) = max (0, 21 − 16) = 5
J(1, 4, 2) = {1,4} → V(J(1, 4, 2), 0) = max (0, 6 − 9)
+ max (0, 13 - 16)= 0
Esempio
job
1'
2'
3
4
job
1
2
3
4
pj
8
6
10
7
pj
6
8
10
7
dj
14
9
16
16
dj
9
14
16
16
V(J(1, 4, 3), 0) = min(
* δ = 0, δ = 1 0 + 0 + 5,
δ= 2
0 + 7) = 5
Esempio
job
1
2
3
4
pj
6
8
10
7
dj
9
14
16
16
V({1, 2, 3, 4}, 0) = min ((0 + 8 + 15), V(J(1, 4, 3), 0) + 15)
δ = 0 23,
*δ = 1 20) = 20
{1, 2, 4}
V(J(1, 4, 3), 0) = min(
* δ = 0, δ = 1 0 + 0 + 5,
δ= 2
0 + 7) = 5
{1, 2}
1
2
3
4
3
4
3
Complessità
Tempo:
O(n3) sottoinsiemi J(j, l, k) e Σpj possibili istanti t.
Quindi, il numero di equazioni ricorsive da risolvere è
pari a O(n3 Σpj). Ciascuna di esse richiede un tempo
O(n).
Quindi, l’algoritmo richiede tempo O(n4 Σpj)
Tardiness totale pesata
1//ΣwjTj
1//Σ wjTj
Teorema. Il problema 1//Σ wjTj
forte.
è NP-hard in senso
Lemma. Se pj ≤ pk e dj ≤ dk, e wj ≥ wk allora esiste una
sequenza ottima in cui j precede k.
Rilassamento preemptivo: ciascun job j di durata pj è
suddiviso in pj job di durata unitaria.
Variabili decisionali:
xjk=1 se una unità del job j è eseguita nell’intervallo
[k −1,k] e 0 altrimenti
1/prmp/Σ wjTj
[0,1]
j
job
xjk
intervalli
[k−1, k]
[Cmax−1, Cmax]
C max
∑ x jk = p j , j = 1,K,n
k =1
n
∑ x jk = 1,k = 1,K,C max
j =1
1/prmp/Σ wjTj: formulazione PL0-1
n C max
max ∑ ∑ c jk x jk
j =1 k =1
occorre determinare cjk tali da
rappresentare la tardiness
totale (o un suo rilassamento)
C max
∑x
jk
= pj,
j = 1,K,n
k =1
n
∑x
jk
= 1,
k = 1,K,C max
j =1
x jk ∈ {0,1},
j = 1,..., n; k = 1,..., Cmax
problema dei trasporti
Richiamo: Problema dei trasporti
s località sorgente e t destinazioni. Ciascuna sorgente
i∈{1,...,s} dispone di di unità di prodotto ed ogni destinazione
j ∈{1,...,t} ne richiede almeno rj unità.
Il costo unitario di trasporto da i a j è cij.
Determinare una politica di trasporto di costo minimo.
s
t
min ∑∑ c ij x ij
i =1 j =1
xij quantità
trasportata
da i a j
t
∑x
ij
= di
i ∈ {1,K, s }
∑x
= rj
j ∈ {1,K, t }
j =1
s
ij
i =1
x ij ≥ 0,
int ere
Coefficienti cjk
Determinare cjk tali che, per ogni schedule non
preemptivo, risulti:
n C max
∑ w jT j ≥ ∑ ∑ c jk x jk
j =1 k =1
Definiamo i coefficienti di costo in modo che:
l
∑
k =l − p j +1
c jk ≤ w j max(l − d j , 0)
per j = 1,…,n; l = 1,…,Cmax
Funzione obiettivo
Allora, per una qualunque soluzione non preemptiva
risulta, per ogni j:
Cmax
Cj
k =1
k =C j − p j +1
∑ c jk x jk =
∑
Cj−pj+1
Possibile scelta:
c jk ≤ w j max(C j − d j , 0)
dj
c jk
Cj
0, per k ≤ d j
=
w j , altrimenti
Fly UP