Problemi di flusso
Flusso a costo minimo MinCostFlow(G(V,E),b,l,u,c,min)
Istanza: una rete G(V,E) per cui è dato un valore intero bi (flusso prodotto dal
nodo) per ogni nodo vi un costo cij per flusso unitario e delle capacità intere
minime lij e massime uij per ogni arco eij
Reti
Soluzione: un flusso xij per ogni arco eij t.c. in ogni nodo vi siano soddisfatte
le condizioni di bilanciamento, i.e., la somma dei flussi uscenti più il flusso bi
(eventualmente negativo) del nodo sia uguale alla somma dei flussi entranti:
Σj∈ w+(i) xij = Σk∈ w-(i) xki + bi
Problemi di percorso
25/06/2005 0.55
Obiettivo: il costo totale del flusso sia minimo, i.e., minΣ(i,j) ∈ E cij xij
Commenti
• Il problema si può applicare anche alle reti non orientate sdoppiando ogni
arco in una coppia di archi anti-paralleli
• I nodi con bi>0 vengono detti sorgenti, quelli con bi<0 pozzi
Raffaele Pesenti
Raffaele Pesenti
2
Problemi di flusso
Problemi di flusso
minΣ(i,j) ∈ E cij xij
Commenti:
Σj∈ w+(i) xij = Σk∈ w-(i) xki + bi ∀ i∈ N
MinCostFlow ∝ LP
il problema di flusso a costo minimo è in P poiché può essere formulato
(quindi ridotto) in forma di programmazione lineare (LP) utilizzando un
numero di variabili e vincoli polinomiale nella dimensione del problema.
In particolare siano:
– n i nodi di G (in seguito individuati dal solo indice i)
– m gli archi di G (in seguito individuati dalla coppia degli indici (i,j) dei
nodi estremi)
– xij le variabili del problema corrispondenti ai flussi sugli archi (i,j)
allora il problema può essere formulato come segue ...
Raffaele Pesenti
lij ≤ xij≤ uij
∀ (i,j)∈ E
• m variabili
• n vincoli di bilanciamento dei flussi ai nodi
• 2m vincoli di capacità
In forma matriciale
mincx
Ax = b
l ≤ x≤ u
dove A è la matrice di incidenza
3
Raffaele Pesenti
4
Problemi di flusso
Problemi di flusso
Commenti:
• Il problema MinCostFlow è in P, tutti i problemi π
π∝ MinCostFlow
(che possono ridursi ad esso) sono anch’essi in P
• Tutti i problemi π: π∝ MinCostFlow, possono essere risolti con il simplesso
o una specializzazione dello stesso alle reti (simplesso per reti) che tiene
conto della struttura della matrice di incidenza e del significato topologico
delle basi (ogni base è un albero) o con un’ulteriore specializzazione del
simplesso (magari nella formulazione primale-duale) allo specifico problema
• Malgrado gli algoritmi basati sul simplesso siano mediamente molto
efficienti si può pensare di realizzare algoritmi di soluzione polinomiali adhoc che sfruttino meglio del simplesso le caratteristiche strutturali dei
problemi e che non abbiano (nemmeno teoricamente) le controindicazioni del
simplesso. Il ragionamento è particolarmente vero per quei problemi (come
SPP) che devono essere risolti molte volte per la soluzione di problemi più
complessi (e.g., di distribuzione)
Esempi di problemi riducibili a MinCostFlow:
• problema del percorso minimo (Shortest Path Problem, SPP) tra una coppia
di nodi s e t, o tra un nodo s e tutti i rimanenti nodi
• problema del cammino critico (PERT-CPM) di pianificazione di operazioni
• problema del massimo flusso (MaxFlow) tra una coppia di nodi s e t
• problema di assegnazione (Assignment Problem, AP) di k operai a k lavori
• problema di trasporto (Transport) da r magazzini a s distributori
• problema di pianificazione della produzione e dei magazzini
• problema di schedulazione di equipaggi (CrewSched) e di mezzi (Vehicle
Scheduling Problem, VSP)
• problema della miniera a cielo aperto (OpenMine)
Commento:
tutti questi problemi si studiano su reti orientate, le reti non orientate si
riducono ad essere orientate sdoppiando gli archi
Raffaele Pesenti
Raffaele Pesenti
5
Percorsi minimi
6
Percorsi minimi
Percorso minimo (Shortest Path Problem) SPP(G(V,E) , c,s,t, min)
Commenti:
Istanza: una rete orientata G(V,E) in cui ad ogni arco eij è associato un costo
cij di attraversamento, un nodo origine s∈V e un nodo destinazione t∈V
Soluzione: un percorso P={s,...,vi,...,t} dal nodo origine s al nodo t che rispetti
gli eventuali orientamenti degli archi.
Obiettivo: il costo totale del precorso sia minimo, i.e., detto E(P) l’insieme
degli archi attraversati minΣ(i,j) ∈ E(P) cij
•
Se non esiste un cammino tra s e t il problema non è ammissibile
•
Se esiste un ciclo orientato C in G tale che c(C)<0 (peso negativo), il
problema è illimitato
•
P* è sempre un percorso (cammino semplice) ⇔ non esistono cicli con peso
negativo in G
•
Gli algoritmi di soluzione devono segnalare l’eventuale non connessione tra s
e t o la presenza di cicli negativi
Il problema di percorso a costo minimo si trova anche nella forma di calcolo
dei percorsi minimi da un nodo s a tutti gli altri nodi del grafo:
5
2
SPP(G(V,E) , c,s,min)
-5
3
1
ciclo con peso negativo
Raffaele Pesenti
7
Raffaele Pesenti
8
Percorsi minimi
Percorsi minimi
Complessità:
• se non esistono circuiti negativi il problema SPP è riducibile ad un problema
MinCostFlow, MinCostFlow è in P, quindi SPP è in P:
SPP ∝ MinCostFlow, MinCostFlow∈ P ⇒ SPP∈ P
infatti SPP(G(V,E) , c,s,t, min) si riduce a MinCostFlow(G’(V,E),b’,l’,u’,c’,min)
G’(V,E) ← G(V,E)
c’← c
l’← 0
u’← 1
b’← 0 tranne bs=1 e bt=-1
uno qualunque degli, eventualmente multipli, percorsi su cui si muove il flusso da s
a t è un percorso minimo che soddisfa SSP
Raffaele Pesenti
9
Complessità (cont.):
• analogamente il problema dei percorsi minimi da un nodo s a tutti gli altri nodi del
grafo SPP(G(V,E) , c,s, min) si riduce a MinCostFlow(G’(V,E),b’,l’,u’,c’,min)
G’(V,E) ← G(V,E)
c’← c
l’← 0
u’← 1
bs=n-1 e bi=-1 per ∀i≠s
•
il problema del percorso minimo può essere risolto con il simplesso su reti o con
algoritmi polinomiali ad-hoc
Raffaele Pesenti
Algoritmo di Dijkstra
Algoritmo di Dijkstra
Principi base:
• L’osservazione di partenza è che un percorso da s a t che include un nodo
intermedio i è ottimo solo se il sottopercorso da s a i è a sua volta percorso
ottimo tra s e i.
• L’algoritmo di Dijkstra per la soluzione del SPP quindi determina
ricorsivamente i percorsi minimi con origine in s imponendo che detti
percorsi appartengano (tranne per l’ultimo nodo) a sottografi indotti
progressivamente maggiori, a partire dal sottografo che contiene solo il nodo
s fino a giungere al grafo completo.
• Ad ogni passo viene considerato un sottografo che ha un nodo in più rispetto
al precedente. I percorsi ottimi in questo sottografo o coincidono con quelli
del passo precedente o passano necessariamente per il nuovo nodo.
• All’ nmo passo, poiché viene considerato tutto il grafo, è determinato il
percorso ottimo, se esiste, altrimenti il problema è senza soluzioni.
Raffaele Pesenti
10
11
Notazione:
• cij costo dell’arco (i,j)∈ E
• U insieme dei nodi del sotto grafo indotto al passo corrente
• h(i) etichetta del nodo i (valore corrente del percorso, considerando solo il
sottografo indotto dai nodi in U)
• h*(i) costo ottimo del percorso minimo da s a i
• p(i) predecessore del nodo i lungo il percorso minimo corrente
Ipotesi base:
c≥ 0, non ci sono archi con peso negativo e quindi nemmeno circuiti negativi
Raffaele Pesenti
12
Algoritmo di Dijkstra
Algoritmo di Dijkstra
Algoritmo DijkstraSPP(G(V,E) , c,s)
1. Inizializzazione
h*(s)=0, U={s},
h(i)=csi e p(i)=s ∀(s,i)∈E,
h(j)=∞ e p(j) = nil ∀( s,j)∉E.
2. Iterazione
while U≠ V {
i° = arg min{h(i) : i ∉ U}
U=U∪{i°}, e h*(i°)=h(i°).
if U=V return
//l’algoritmo termina,
//il percorso minimo s-t è determinato dalla sequenza dei p(i);
else if min{h(i) : i ∉ U} = ∞ return //il grafo non è connesso e l’algoritmo termina.
else forall j∉U connesso ad i° ((i°,j)∈E)
aggiornare l’etichetta h(j)=min{h*(i°)+ci°j, h(j)}. Se h(j)=h*(i°)+cij porre p(j)=i°
}
Raffaele Pesenti
13
Commenti:
• Al passo (1) si pone come sottografo indotto solo il nodo origine, U = {s} e si
determinano i percorsi correntemente ottimi per i nodi non in U. Ovviamente
hanno costo diverso da infinito i percorsi ai soli nodi i adiacenti ad s. Ognuno
di questi percorsi è composto banalmente dall’arco che congiunge s al nodo
adiacente. L’insieme U contiene correntemente tutti i nodi di cui è noto il
percorso minimo in assoluto.
• Al passo (2) si amplia U e il sottografo indotto da U scegliendo, tra i nodi
non in U, il nodo i° che è congiunto da un percorso Pi° minimo tra tutti quelli
correntemente ottimi Pi per i nodi i non in U. il percorso Pi° è ottimo in
assoluto per i°. Pi° è infatti il minimo tra i percorsi che connettono s a i° e che
hanno solo nodi in U. Inoltre nessun altro percorso P’ da s a i°, avente nodi
non in U, può essere più breve. Infatti P’ sarebbe composto in un primo tratto
da un percorso Pj, non migliore di Pi°, fino ad un nodo intermedio j non in U,
e da un secondo tratto da j a i° composto da archi di costo non negativo.
Raffaele Pesenti
14
Algoritmo di Dijkstra
Esempio
Commenti (cont.):
• Nell’ultima istruzione del passo (2) si determina se esistono i nuovi percorsi
correntemente ottimi che passano per i°, per i nodi non in U (per i nodi in U si
conoscono già i percorsi ottimi in assoluto)
• L’algoritmo è, in generale, O(n2) infatti
– esegue al più n passi (2)
– all’interno del passo (2)
• esegue una ricerca per un minimo che richiede al più n confronti, quindi
la complessità del passo è O(n)
• esegue al più una somma, un confronto e un assegnazione per ogni
nodo, quindi la complessità del passo è O(3n) = O(n)
• Osservando che ogni arco è visitato solo una volta si può realizzare una
versione dell’algoritmo di complessità O(m), quindi per reti sparse (e.g., planari
dove gli archi non possono essere più numerosi di tre volte il numero dei nodi)
diventa O(n).
Raffaele Pesenti
15
G(V,E)
A
5
3
3
Caso da s a tutti gli altri nodi
Legenda:
• coppia [h(i),p(i)], e.g., [0,nil]
• coppia ottima [h(i),p(i)]*, e.g.[0,nil]*
5
s
Raffaele Pesenti
s
[0,nil]*
[0,nil]*
[0,nil]*
[0,nil]*
[0,nil]*
[0,nil]*
A
[3, s]
[3, s]*
[3, s]*
[3, s]*
[3, s]*
[3, s]*
B
[8, s]
[5, A]
[5, A]*
[5, A]*
[5, A]*
[5, A]*
t
2
2
7
8
6
6
B
passo
0
1
2
3
4
5
D
C
[∞, nil]
[8,A]
[8,A]
[8,A]*
[8,A]*
[8,A]*
D
[∞, nil]
[∞, nil]
[12,B]
[10,C]
[10,C]*
[10,C]*
C
t
[∞, nil]
[∞, nil]
[∞, nil]
[14,C]
[13,D]
[13,D]*
16
passo 0
A
5
D
A
3
3
5
s
t
2
B
B
D
A
passo 1
A
5
3
5
t
2
passo 3
5
2
D
A
6
6
C
5
D
3
5
t
2
2
7
8
6
6
6
Raffaele Pesenti
B
C
17
6
C
Raffaele Pesenti
Algoritmo di Bellman-Ford
18
Algoritmo di Bellman-Ford
Principi base:
• L’osservazione di partenza è che un percorso da s a t ottimo deve contenere
al più n nodi e n-1 archi. Analogamente se un grafo presenta circuiti negativi,
ne esiste certamente uno contente al più n nodi e n archi.
• L’algoritmo di Bellman-Ford per la soluzione del SPP quindi determina
ricorsivamente i percorsi minimi con origine in s imponendo che detti
percorsi siano inizialmente composti al più di un solo nodo (0 archi) e quindi
permettendo ad ogni passo che si possa aggiungere un nodo (un arco).
• Per l’osservazione iniziale, non ha senso andare oltre nmo passo, se un
percorso diminuisse ulteriormente per l’esecuzione di un passo successivo
vuol dire che in realtà è un cammino che include un loop negativo.
Raffaele Pesenti
C
passo 5
s
2
8
B
6
3
t
7
8
6
B
3
2
7
t
2
8
C
5
s
3
7
6
3
D
5
2
6
C
5
3
7
6
passo 4
s
2
8
6
B
A
5
7
8
s
D
3
s
2
3
5
3
t
2
passo 2
19
Notazione:
• cij costo dell’arco (i,j)∈ E
• k passo corrente
• hk(i) etichetta del nodo i al passo k (valore corrente del percorso contenente
al più k nodi oltre che i, quindi un percorso contenente al più k archi)
• p(i) predecessore del nodo i lungo il percorso minimo corrente
• h*(i) costo ottimo del percorso minimo da s a i
Ipotesi:
nessuna sui valori dei costi, l’algoritmo si blocca se determina un ciclo
negativo
Raffaele Pesenti
20
Algoritmo di Bellman-Ford
Algoritmo di Bellman-Ford
Algoritmo BellmanFordSPP(G(V,E) , c,s)
1. Inizializzazione
h0(s)=0, h0(j)=∞ ∀ j∈V-{s}, p(j)=nil ∀ j∈V e k=1
2. Iterazione
while k ≤ n
forall j∈V {
hk(j)= min {hk-1(j), min{hk-1(i)+cij :∀ i:(i,j)∈E }} //aggiornate le distanze
if hk(j)=hk-1(i)+cij porre p(j)=i.
else if hk(j)=hk-1(j) ∀ j∈V allora h*(j)= hk(j) ∀ j∈V return
//l’algoritmo termina (eventualmente con valori infiniti se il grafo non è
// connesso) ed il percorso minimo s-t resta determinato dalla sequenza dei p(i);
else porre k=k+1;
}
if k=n+1, il grafo contiene un ciclo di peso negativo, return
// se l'algoritmo non termina prima di uscire dal while il problema è illimitato
Raffaele Pesenti
21
Commenti:
• Al passo (1) si determinano i percorsi correntemente ottimi che contengono al
più zero archi a partire dal nodo iniziale. Ovviamente ha costo diverso da
infinito solo il percorso da s a se stesso.
• Al passo (2) si determinano i percorsi correntemente ottimi che contengono al
più k archi. Ognuno di questi percorsi dal nodo s al nodo generico j può essere
identico a quello al passo precedente (che conteneva al più k-1 archi) oppure
essere composto da un percorso di al più k-1 archi fino ad un nodo intermedio i
più l’arco diretto da i a j. Se si sceglie il minimo tra questi percorsi, nell’ipotesi
induttiva che fossero ottimi per k-1 archi quelli al passo precedente, allora si
ottiene un percorso ottimo per k archi
Raffaele Pesenti
22
Esempio
Algoritmo di Bellman-Ford
G(V,E)
A
-5
3
3
Commenti (cont.):
• L’algoritmo è O(n3) infatti
– esegue al più n passi (2)
– all’interno del passo (2) esegue per ogni nodo una ricerca per un minimo
che richiede al più n confronti, quindi la complessità del passo è O(n2)
•
L’algoritmo di Bellman-Ford è meno efficiente di quello di Dijkstra e deve
essere applicato solo in presenza di archi negativi.
Raffaele Pesenti
23
Caso da s a tutti gli altri nodi
Legenda:
• coppia [hk(i),pk(i)], e.g., [0,nil]
• coppia ottima [hk(i),pk(i)]*, e.g.[0,nil]*
5
s
t
2
-2
7
8
6
6
B
passo
s
A
B
C
0
[0,nil]
[∞, nil] [∞, nil] [∞, nil]
1
[0,nil]
[3, s]
[8, s]
[∞, nil]
2
[0,nil]
[3, s]
[5, A]
[8,A]
3
[0,nil]
[3, s]
[5, A]
[8,A]
4
[0,nil]
[1, D]
[5, A]
[8,A]
5
[0,nil]
[1, D]
[3, A]
[6,A]
6
[0,nil]
[1, D]
[3, A]
[6,A]
riga 5 e 6 diverse quindi esiste circuito negativo
Raffaele Pesenti
D
D
[∞, nil]
[∞, nil]
[15,B]
[6,C]
[6,C]
[6,C]
[4,C]
C
t
[∞, nil]
[∞, nil]
[∞, nil]
[14,C]
[9,D]
[9,D]
[9,D]
24
Esempio
G(V,E)
A
-2
3
3
Caso da s a tutti gli altri nodi
Legenda:
• coppia [hk(i),pk(i)], e.g., [0,nil]
• coppia ottima [hk(i),pk(i)]*, e.g.[0,nil]*
5
s
s
[0,nil]
[0,nil]
[0,nil]
[0,nil]
[0,nil]
[0,nil]*
A
[∞, nil]
[3, s]
[3, s]
[3, s]
[3, s]
[3, s]*
B
[∞, nil]
[8, s]
[-1, A]
[-1, A]
[-1, A]
[-1, A]*
t
-4
2
7
8
-6
B
passo
0
1
2
3
4
5
Algoritmo di Floyd
D
C
[∞, nil]
[∞, nil]
[8,A]
[5,B]
[5,B]
[5,B]*
6
D
[∞, nil]
[∞, nil]
[15,B]
[6,B]
[6,B]
[6,B]*
C
Notazione:
• cij costo dell’arco (i,j)∈E
• k passo corrente
• hk(i,j) valore corrente del percorso da i a j non peggiore del percorso ottimo
contenente al più k nodi oltre che i
• h*(i,j) costo ottimo del percorso minimo da i a j
• p(i,j) predecessore del nodo j lungo il percorso minimo corrente da i a j
t
[∞, nil]
[∞, nil]
[∞, nil]
[2,C]
[-1,C]
[-1,C]*
Raffaele Pesenti
Principi base:
• Determina i percorsi minimi tra tutte le coppie di nodi su principi simili a
quelli di Bellman-Ford
25
Raffaele Pesenti
Algoritmo di Floyd
Algoritmo di Floyd
Algoritmo FloydSPP(G(V,E) , c, min)
1. Inizializzazione
k=0, h0(i,j) = cij, p(i,j) = i, h0(i,i) = 0, p(i,i) = i, h0(i,j) =∞ , p(i,j) = nil, se (i,j)∉E
2. Iterazione
while k ≤ n{
forall i,j:, hk-1(i,k)≠∞ e hk-1(k,j)≠∞
hk(i,j) =min{hk-1(i,j) ,(hk-1(i,k) + hk-1(k,j) ), se hk(i,j) modificato p(i,j) = p(k,j)
if qualche hk(i,i) risulta negativo return //esiste un ciclo negativo
//passante per il nodo imo, non esiste soluzione finita, l’algoritmo termina.
if tutti i hk(i,i) sono nulli e k=n return //è stata trovata la soluzione.
// La matrice [hk(i,j) ] fornisce le distanze minime da ogni nodo i ad ogni
// nodo j. L’algoritmo termina.
porre k=k+1;
}
Raffaele Pesenti
26
27
Commenti:
• Al passo (1) si determinano i percorsi correntemente ottimi che contengono al
più un arco a partire dal nodo iniziale. Ovviamente hanno costo diverso da
infinito i soli percorsi tra nodi adiacenti. Il costo di un percorso da un nodo a
se stesso è posta a zero.
• Al passo (2) si determinano i percorsi correntemente ottimi che non sono
peggiori di quelli ottimi che contengono al più k archi. Ognuno di questi
percorsi dal nodo i al nodo generico j può essere identico a quello al passo
precedente (che non era peggiore di uno che conteneva al più k-1 archi)
oppure essere composto da due percorsi determinati al passo k-1: da i ad un
nodo intermedio r e da r a j. La composizione di questi due percorsi forma un
percorso non peggiore di quelli ottimi che contengono al più k archi. Infatti il
primo tratto è non peggiore di un percorso con k-1 archi e il secondo tratto è
non peggiore del percorso composto dal solo arco diretto (r,j). L’ottimalità si
ottiene poiché ad ogni passo si sceglie la combinazione minima tra i percorsi
determinati al passo precedente k-1, nell’ipotesi induttiva che questi percorsi
non fossero peggiori di quelli ottimi composti da k-1 archi.
Raffaele Pesenti
28
Esempio
Algoritmo di Floyd
G(V,E)
Commenti (cont.):
• L’algoritmo è O(n3) infatti
– esegue al più n passi (2),
– all’interno del passo (2) esegue per ogni nodo una ricerca per un minimo
che richiede al più n confronti, quindi la complessità del passo è O(n2)
A
-2
3
3
5
s
2
7
-6
Nel caso di costi positivi l’algoritmo di Floyd è più efficiente che applicare n
volte quello di Dijkstra se la rete è densa (tanti archi), mentre è vero l’opposto
per reti sparse.
Raffaele Pesenti
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
0
5
0
-2
inf
B
-1
-4
0
inf
-6
inf
D
15
3
7
2
0
inf
t
inf
-1
0
-6
3
0
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
0
5
0
-2
inf
B
-1
-4
0
-4
-6
inf
s
A
B
C
D
t
A
3
0
5
0
-2
inf
B
-1
-4
0
-4
-6
inf
D
6
3
7
2
0
inf
t
-1
-4
0
-6
-6
0
B
8
-4
0
inf
inf
inf
C
inf
5
6
0
inf
inf
D
inf
inf
7
2
0
inf
t
inf
inf
inf
-6
3
0
C
30
Esempio
C
5
2
6
0
0
inf
D
6
3
7
2
0
inf
t
-1
-4
0
-6
-6
0
A
passo 3 = passo 4 ⇒ algoritmo termina
-5
Passo 1
D
3
3
5
s
t
2
-2
7
8
6
B
C
5
2
6
0
0
inf
A
3
0
inf
inf
-2
inf
G(V,E)
Passo 4
s
0
inf
inf
inf
inf
inf
s
0
inf
inf
inf
inf
inf
Raffaele Pesenti
Passo 3
C
8
2
6
0
3
inf
6
B
29
Passo 2
s
A
B
C
D
t
t
-4
8
•
Passo 1
D
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
0
2
-7
-5
inf
6
Passo 2
B
5
2
0
inf
-3
inf
C
8
5
6
0
0
inf
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
0
inf
inf
-5
inf
C
D
15
3
4
-2
0
inf
B
8
2
0
inf
inf
inf
C
inf
5
6
0
inf
inf
D
inf
inf
7
-2
0
inf
t
inf
inf
inf
6
3
0
C
8
3
4
-2
0
inf
D
6
3
4
-4
-2
inf
t
9
6
7
1
1
0
Passo 3
t
inf
11
10
1
3
0
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
-2
-1
-7
-5
inf
B
5
0
0
-5
-3
inf
valori negativi sulla diagonale ⇒ esiste circuito a costo negativo
Raffaele Pesenti
31
Raffaele Pesenti
32
Esempio
Esempio
Commento:
La matrice delle distanze al passo kmo Hk può essere vista come risultato di uno
speciale “prodotto” ⊗ della matrice delle distanze al passo k-1 con se stessa:
Hk= Hk-1 ⊗ Hk-1.
Analogamente al comune prodotto matriciale l’operando di sinistra di ⊗ è un
vettore riga, mentre l’operando di destra è un vettore colonna, ma, invece di
eseguire una somma di prodotti come avviene nell’usuale prodotto scalare,
l’operatore ⊗ esegue un minimo del risultato di somme, per cui
Nel secondo dei casi considerati si ottiene ad esempio:
Passo 2
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
0
2
-7
-5
inf
B
5
2
0
inf
-3
inf
C
8
5
6
0
0
inf
D
15
3
4
-2
0
inf
t
inf
11
10
1
3
0
⊗
s
A
B
C
D
t
A
3
0
2
-7
-5
inf
s
A
B
C
D
t
s
0
inf
inf
inf
inf
inf
A
3
-2
-1
-7
-5
inf
B
5
2
0
inf
-3
inf
C
8
5
6
0
0
inf
D
15
3
4
-2
0
inf
t
inf
11
10
1
3
0
D
6
3
4
-4
-2
inf
t
9
6
7
1
1
0
Passo 3
Hk= {hk(i,j)} ={Hk-1(i,.) ⊗ Hk-1(.,j) } ={ minr=1,..n (hk-1(i,r) + hk-1(r,j) ) },
mentre con il normale prodotto scalare si sarebbe ottenuto
Hk= {hk(i,j)} ={Hk-1(i,.) Hk-1(.,j) } ={ Σr=1,..n (hk-1(i,r) hk-1(r,j) ) }.
Notare la corrispondenza tra minr=1,..n e Σr=1,..n e tra somma e prodotto
Raffaele Pesenti
Passo 2
s
0
inf
inf
inf
inf
inf
=
33
B
5
0
0
-5
-3
inf
C
8
3
4
-2
0
inf
Raffaele Pesenti
34
Percorso di lunghezza massima
CPM - PERT
Problema del percorso massimo (Longest Path Problem) LPP(G(V,E),c,s,t,max):
Istanza: una rete G(V,E), caratterizzata da costi c sugli archi, e dati un nodo
origine s e un nodo destinazione t.
Soluzione: un percorso P da s a t che rispetti le eventuali orientazioni degli
archi
Obiettivo: massimo costo del percorso P.
Critical Path Method (CPM)
Project Evaluation and Review Technique (PERT)
CPM e PERT sono metodologie, molto utilizzate in pratica, per la gestione di
progetti composti da più attività in cui esistano relazioni di precedenza.
Commenti:
• LPP ∝Programmazione Lineare solo se G(V,E) è una rete orientata senza
circuiti, altrimenti il problema è NP-hard.
• Se si tenta di risolvere il generico LPP con la programmazione lineare si
ottiene un problema illimitato che individua un cammino chiuso.
• LPP su rete orientata senza circuiti ha una importante applicazione pratica
nel PERT-CPM
Raffaele Pesenti
Sviluppati indipendentemente sono ormai considerati equivalenti anche se
– il CPM originariamente era strettamente deterministico;
– il PERT nasce per gestire attività di durata stocastica.
35
Raffaele Pesenti
36
=
Gestione di un progetto
Rappresentazione di un progetto
Passi fondamentali nella gestione di un progetto:
• definizione del progetto
• definizione delle attività (elementari)
• determinazione delle relazioni tra le attività
• schedulazione delle attività
• controllo dell’evoluzione delle attività
Un progetto è rappresentabile come una rete G=(V,E) dove:
– ogni arco (i,j) = e∈ E corrisponde ad una delle attività, l’etichetta
dell’arco indica la durata dell’attività;
– ogni nodo i∈ V rappresenta un evento, i.e., inizio progetto, fine progetto,
completamento di un insieme delle attività, le etichette del nodo
delimitano l’intervallo temporale in cui esso può realizzarsi.
CPM e PERT aiutano a eseguire almeno i primi quattro passi
Raffaele Pesenti
37
Raffaele Pesenti
38
Esempio elementare
Esempio elementare
7/7
nome durata task
•
progetto
– attività A iniziale senza predecessori, 2 gg;
– attività B preceduta da A, 5 gg;
– attività C preceduta da A, 3 gg;
– attività D preceduta da B, 7 gg, nessun successore;
– attività E preceduta da C , 4 gg, nessun successore;
il progetto è terminato quando sono terminate tutte le sue attività.
inizio
progetto
D 7gg
B 5gg
A 2gg
14/14
2/2
C 3gg
E 4gg
0/0
fine
progetto
estremi intervallo
occorrenza evento
Raffaele Pesenti
39
Raffaele Pesenti
5/10
40
Regole di costruzione (archi)
Esempi
B
Non vi possono essere attività con entrambi i nodi in comune.
•
Due attività con entrambe gli estremi in comune sarebbero precedute e
seguite dalle stesse attività. Dal punto di vista gestionale corrisponderebbero
ad un’unica attività con durata uguale alla massima delle due attività.
•
Per evitare parallelismi ed esprimere precedenze ‘complesse’ può essere
necessario introdurre attività dummy di durata nulla.
Esempio:
– C è preceduta da A e B;
– D è preceduta solo da A.
Esempio:
– D è preceduta solo da A;
– E è preceduta da A e B;
– F è preceduta solo da B.
C
dummy
A
B
41
42
Regole di costruzione (nodi)
•
•
D
Raffaele Pesenti
Regole di costruzione (nodi)
•
F
E
A
Raffaele Pesenti
D
L’estremo inferiore dell’intervallo di occorrenza dell’evento iniziale è 0 per
definizione (e, se i calcoli sono eseguiti correttamente, anche l’estremo
superiore deve risultare 0);
l’estremo superiore dell’intervallo di occorrenza dell’evento finale coincide
al fine di minimizzare il tempo di completamento del progetto con l’estremo
inferiore ottenuto dai calcoli;
•
l’estremo inferiore dell’evento generico i corrisponde all’earliest starting
time*, ESi, delle attività seguenti e quindi al massimo degli earliest
completation time, ECk = ESk + pki, delle attività precedenti:
ESi = maxk {ESk + pki}
l’estremo superiore dell’evento generico i corrisponde al latest completion
time*, LCi, delle attività precedenti e quindi al minimo degli latest starting
time, LSj = LCj - pij, delle attività seguenti:
LCi = minj {LCj - pij}
* notare parallelismo tra ESi e rij e tra LCi e dij.
Raffaele Pesenti
43
Raffaele Pesenti
44
Regole di costruzione (nodi)
Esempio 3
5(8)
2(12)
La rete costruita è orientata e priva di circuiti,
si possono quindi ricavare i valori delle etichette di tutti i nodi col seguente
algoritmo:
– ESevento_iniziale = 0
– procedendo in avanti ricorsivamente, considerando di volta in volta solo
un nodo di cui si conoscano tutti i valori ES dei nodi precedenti, si
determinano gli ES di tutti i nodi fino a quello finale;
– LCevento_finale = ESevento_finale
– procedendo all’indietro ricorsivamente, considerando di volta in volta
solo un nodo di cui si conoscano tutti i valori LC dei nodi seguenti, si
determina no gli LC di tutti i nodi fino a quello iniziale (per tale nodo
deve risultare LCevento_iniziale = 0);
Raffaele Pesenti
45
7
1(13)
3(11)
6(9)
possibile sequenza visita nodi in avanti (all’indietro)
Raffaele Pesenti
Percorso critico
46
Percorso critico
Teorema:
esiste almeno un percorso (critico) tra il nodo iniziale e finale in cui tutti gli
eventi sono caratterizzati da estremi di occorrenza inferiore e superiore
identici e in cui la durata di tutte le attività sono uguali alla differenza tra gli
istanti di occorrenza degli eventi estremi che le definiscono.
Dimostrazione:
per assurdo, se ciò non fosse vero non sarebbe minimizzato il tempo di
completamento del progetto.
Raffaele Pesenti
4(10)
0(14)
47
Interpretazione economica:
le attività che appartengono a percorsi critici non possono essere ritardate
senza che ciò implichi il ritardo complessivo nel completamento di tutto il
progetto.
Slack:
slij = ( LCj - ESi ) - pij
massimo ritardo che può subire un task senza ritardare il completamento di
tutto il progetto (se i rimanenti task sui percorsi di appartenenza non
subiscono ulteriori ritardi).
Raffaele Pesenti
48
Esempio
7/7
nome durata task
inizio
progetto
•
•
D 7gg
B 5gg
A 2gg
Commenti
attività critiche
14/14
2/2
•
C 3gg
E 4gg
0/0
le attività dei percorsi critici vanno tenute maggiormente sotto controllo;
se si deve investire per ridurre i tempi di esecuzione del progetto, si deve
incidere sulle attività dei percorsi critici, eventualmente in modo dinamico,
poiché la riduzione dei tempi di esecuzione può modificare la criticità dei
percorsi;
il problema può essere formulato anche in termini di programmazione lineare
e quindi eventualmente aggiungere vincoli ulteriori o esprimere obiettivi non
includenti solo la minimizzazione del tempo di completamento.
fine
progetto
estremi intervallo
occorrenza evento
5/10
Raffaele Pesenti
49
Raffaele Pesenti
PERT
PERT
Ad ogni arco/attività sono associate:
– durata media attesa
– deviazione della durata
Media e varianza sono di solito calcolate empiricamente nell’ipotesi di
distribuzioni gamma:
µ = (a + 4m + b)/6
50
σ = (b - a)/6
•
Il tempo atteso di completamento del progetto è calcolato come somma dei
tempi medi delle attività sui percorsi critici;
•
la varianza del tempo di completamento del progetto è calcolato come
somma delle varianze delle attività sui percorsi critici (questo è sensato solo
nell’ipotesi di indipendenza delle realizzazioni delle variabili aleatorie).
dove m è il valore atteso, a è la durata ritenuta praticamente minima, b la
durata ritenuta praticamente massima.
Raffaele Pesenti
51
Raffaele Pesenti
52
Gestione risorse
Esempio elementare
•
•
La gestione di un progetto richiede non solo la schedulazione delle attività
che lo compongono, ma anche l’assegnazione delle risorse alle attività.
•
Mentre la schedulazione è un problema facile, l’assegnazione delle risorse in
generale risulta difficile.
Raffaele Pesenti
53
progetto
– attività A iniziale senza predecessori, 2 gg, 5 risorse;
– attività B preceduta da A, 5 gg, 7 risorse;
– attività C preceduta da A, 3 gg, 2 risorse;
– attività D preceduta da B, 7 gg, nessun successore, 2 risorse;
– attività E preceduta da C , 4 gg, nessun successore, 4 risorse;
Si vuole minimizzare il massimo numero di risorse utilizzate
contemporaneamente.
Raffaele Pesenti
54
Esempio
A
B
C
D
E
risorse
Raffaele Pesenti
Esempio
A
B
C
D
E
slack
slack
5
9
11
6
risorse
2
55
Raffaele Pesenti
slack
slack
5
7
4
6
56
Visita nodi di una rete
Gestione risorse
Poiché la gestione delle risorse è un problema difficile i SW forniscono di
solito soluzioni euristiche che quindi devono essere sempre analizzate
criticamente prima di essere applicate.
Criteri di priorità assegnate ai task per la distribuzione delle risorse in caso di
conflitti tra task o gruppi di task:
– FCFS,
– minimum task slack,
– mimimum latest finishing time,
– greatest resource demand,
– greatest resource utilization.
Raffaele Pesenti
57
Premessa:
Gli algoritmi di determinazione di percorsi minimi permettono di visitare tutti
i nodi raggiungibili da un nodo sorgente s.
Esistono altri algoritmi che permettono tali visite (e.g., alla ricerca di
proprietà specifiche di un nodo) che rinunciano alla proprietà di minimalità
dei percorsi e la cui struttura generale può essere enunciata come segue...
Raffaele Pesenti
Visita nodi di una rete
Visita nodi di una rete
Algoritmo di ricerca SEARCH(G(V,E),s)
1. Inizializzazione.
ListaNodiVisitati = {s}; ListaNodiAperti = {s}; ListaArchi = E;
2. Iterazione.
while ListaNodiAperti ≠ ∅ {
selezionare i ∈ ListaNodiAperti
if ∃ j t.c. (i,j) ∈ ListaArchi and j∉ ListaNodiVisitati {
predecessore(j) = i;
ListaNodiVisitati = ListaNodiVisitati ∪ {j};
ListaNodiAperti = ListaNodiAperti ∪ {j};
ListaArchi = ListaArchi - {(i,j)};
}
else ListaNodiAperti = ListaNodiAperti - {i};
}
}
Raffaele Pesenti
58
Commenti:
• Si effettuano al più 2n cicli while. Infatti ad ogni ciclo o viene aggiunto o viene
cancellato un nodo in ListaNodiAperti e ogni nodo entra in ListaNodiAperti al più
una sola volta.
• Se la ListaArchi è organizzata forward star per ogni nodo si scandiscono solo gli
archi uscenti da esso, si eseguono quindi complessivamente m operazioni.
• Se selezionare i∈ ListaNodiAperti è O(1) allora l’algoritmo è O(n+m) = O(m)
• selezionare i∈ ListaNodiAperti è O(1) se e.g., viene sempre selezionato il primo o
l’ultimo nodo della ListaNodiAperti. Nel primo caso si parla di depth first, nel
secondo di breadth-first.
59
Raffaele Pesenti
60
Visita nodi di una rete
Visita nodi di una rete
Esempio (cont):
Esempio:
Sia dato G(V,E) in figura e siano gli archi organizzati in ordine alfabetico
(e.g., nella lista del nodo A si incontrano nell’ordine (A,B), (A,C), (A,D))
A
G(V,E)
BreadthFirst
0
1
2
3
4
5
6
7
8
9
10
11
C
s
E
B
D
Raffaele Pesenti
61
Raffaele Pesenti
ListaNodiAperti
s
s,A
s,A,B
s,A,B,D
s,A,B,D,E
s,A,B,D
s,A,B
s,A
s,A,C
s,A
s
Arco selezionato
(s,A)
(A,B)
(B,D)
(D,E)
Arco selezionato
(s,A)
(s,B)
(A,C)
(A,D)
(C,E)
(A,B)
(B,D)
(C,D)
(D,E)
62
Esercizi
Esempio (cont):
ListaNodiVisitati
s
s,A
s,A,B
s,A,B,D
s,A,B,D,E
s,A,B,D,E
s,A,B,D,E
s,A,B,D,E
s,A,B,D,E,C
s,A,B,D,E,C
s,A,B,D,E,C
s,A,B,D,E,C
ListaNodiAperti
s
s,A
s,A,B
A,B
A,B,C
A,B,C,D
B,C,D
C,D
C,D,E
D,E
E
Raffaele Pesenti
Visita nodi di una rete
DepthFirst
0
1
2
3
4
5
6
7
8
9
10
11
ListaNodiVisitati
s
s,A
s,A,B
s,A,B
s,A,B,C
s,A,B,C,D
s,A,B,C,D
s,A,B,C,D
s,A,B,C,D,E
s,A,B,C,D,E
s,A,B,C,D,E
s,A,B,C,D,E
Archi
considerati
ma esclusi
Archi
considerati
ma esclusi
(A,C)
(C,D), (C,E)
(A,D)
(s,B)
63
Es. 1)
Scrivere i duali dei problemi di flusso a costo minimo e di cammino minimo
e darne un’interpretazione economica.
Es.2)
Formulare come problema di programmazione lineare il problema di
percorso minimo tra un nodo origine e tutti gli altri nodi. Dire che soluzioni
si ottengono dalla programmazione lineare se il grafo è sconnesso, e che
soluzioni si ottengono applicando invece l’algoritmo di Dijkstra o di
Bellman-Ford.
Es. 3)
Il problema di percorso minimo tra due nodi è facilmente formulabile come
problema di programmazione lineare e quindi è in P. Provare a formulare
come problema di programmazione lineare il problema di percorso minimo
tra tutte le coppie di nodi. Cosa si può concludere sulla complessità del
problema se non vi si riesce?
Raffaele Pesenti
64
Esercizi
Es. 4)
Per realizzare il prodotto F si possono eseguire delle lavorazioni diverse
caratterizzate da diversi tempi di produzione e diverse probabilità di
successo.
In particolare a partire dalle materie prime si può realizzare (in un tempo 5 e
con un tasso di scarti di lavorazione del 3%, in seguito saranno indicati i soli
valori)) il semilavorato A , oppure un semilavorato B ( 2; 7%), oppure il
semilavorato C (8; 6%). A partire da A si può produrre il semilavorato C (4;
1%), oppure il semilavorato E (5; 3%). A partire da B si può produrre il
semilavorato C (3; 1%), oppure il semilavorato D (1; 4%). A partire da C si
può produrre il semilavorato E (2; 1%), oppure il semilavorato D (2; 1%),
oppure direttamente il prodotto finale (6, 2%). A partire da D si può produrre
direttamente il prodotto finale (3, 3%). A partire da E si può produrre
direttamente il prodotto finale (2, 1%). Determinare la sequenza di
lavorazioni che massimizza il tasso di scarti e quella che minimizza il tempo
di lavorazione richiesto per giungere al prodotto finito a partire dalle materie
prime.
Raffaele Pesenti
65
Esercizi
Es. 6)
Data la rete G determinare il percorso minimo da s a t attraverso la
programmazione lineare. Verificare che ad ogni base visitata corrisponde un
albero sul grafo e determinare a cosa corrisponde un’operazione di pivoting.
G(V,E)
A
s
1
4
7
9
t
-2
8
6
B
3
C
Raffaele Pesenti
66
Esercizi
Es. 7)
Dopo avere rappresentato la rete G in forma forward star, determinare il
percorso minimo da s a t utilizzando Dijkstra e Bellman-Ford. Contare
l’esatto numero di operazioni elementari che un calcolatore avrebbe dovuto
compiere. Determinare le distanze minime tra tutti i nodi usando Dijkstra e
Floyd (per fare i calcoli per questo ultimo algoritmo probabilmente conviene
fare un programma sw o usare Excel). Cercare di ottimizzare le operazioni
legate all’uso di Dijkstra, utilizzando ad ogni iterazione i risultati ottenuti ai
passi precedenti.
G(V,E)
A
D
6
9
1
5
s
t
4
4
9
8
2
Raffaele Pesenti
D
2
3
Esercizi
10
B
-2
3
C
67
Es. 8)
Provare l’ottimalità delle soluzioni ottenute al passo precedente verificando
che soddisfano il teorema degli scarti complementari dei problemi di
programmazione lineare associati.
Es. 9)
G(V,E)
Ripetere gli esercizi 7) e 8) per le seguenti reti
D
10
2
3 F
G(V,E)
5
A
D
-6
A
E
4
9
11
1
3
5
10
5
s
t
4
s
t
2
4
6
9
8
9
1
2
2
10
10
-2
3
B
C
B
C
Raffaele Pesenti
68
Esercizi
Es. 10)
Ripetere l’esercizio 7) per la seguente rete
e dedurre delle regole generali sugli archi
negativi.
A
s
1
9
4
Esercizi
G(V,E)
-6
D
9
5
2
2
t
8
10
-2
B
C
Es. 11)
Data una rete orientata G formulare il problema di percorso minimo tra due
nodi s e t come problema di programmazione lineare, verificare che ad ogni
percorso tra s e t corrisponde una base, spiegare perché la base è degenere se il
percorso non è ricoprente, i.e., hamiltoniano. Provare ai vertici del poliedro
delle soluzioni ammissibili corrispondono percorsi ammissibili e viceversa.
(suggerimento: dimostrare che ad ogni base corrisponde un albero, dimostrare
che dati i vincoli questo albero può avere solo due foglie in s e in t)
Raffaele Pesenti
69
Es 12)
Calcolare le distanze minime tra tutte le coppie di nodi per le reti presentate
negli esercizi precedenti. Applicare sia l’algoritmo di Floyd che Dijkstra o
Bellman-Ford a seconda dei casi, calcolare il numero di operazioni
elementari eseguite con i diversi approcci.
Raffaele Pesenti
70
Esercizi
Esercizi
Es 13)
Disegnare la rete per il seguente problema di cpm.
Attività
Predecessori
Durata
A
7
B
5
C
B
6
D
A
8
E
AB
2
F
CD
3
G
D
6
H
DE
3
I
D
4
Inoltre determinare il tempo minimo di completamento del progetto,
evidenziare il percorso critico, disegnare diagramma di Gantt .
Es 14) Lot-sizing
La ACME spa ha necessita di una quantità dk di uno specifico semilavorato il
giorno k del prossimo mese, k= 1,...,30. All’inizio del giorno 1 si prevede che
sarà presente in magazzino una quantità d0, tale quantità dovrebbe essere
presente anche alla fine del mese. Sia c il costo di acquisto di ogni
semilavorato, K il valore dei costi fissi di ordine e di trasporto che si pagano
per ogni consegna dei fornitori, infine sia h il costo giornaliero di
mantenimento in magazzino di un semilavorato. Formalizzare il problema di
minimizzazione dei costi complessivi come un problema di cammino
minimo. [sugg: chiedersi prima che cosa è oggetto di decisione, considerare
poi una rete che ha come nodi le giornate e archi orientati che uniscono ogni
giorno a quelli successivi]
Raffaele Pesenti
Raffaele Pesenti
71
72
Esercizi
Esercizi
Es 15) Assortimento di magazzino (Frank 65)
L’ACME Lavorazione Acciai deve decidere l’assortimento di materiale da
tenere in magazzino. In particolare si deve decidere per ogni larghezza quanti
coil avere a disposizione. La pianificazione della produzione prevede che per
il mese successivo per ogni larghezza wi, sarà necessaria una quantità qi. Il
costi medi di acquisto e di mantenimento di ogni coil di tipo i sono hi, inoltre
la presenza in magazzino di coil di tipo i induce comunque dei costi fissi Ki
indipendenti dal numero (se maggiore di zero) degli stessi.
Si supponga che wi < wj se i < j, e che quindi un coil di tipo j possa essere
sostituito da un coil di tipo i, se i < j, ad un costo dji che tiene conto delle
spese di lavorazione e degli scarti.
Formalizzare il problema di minimizzazione dei costi complessivi come un
problema di cammino minimo. [sugg: chiedersi prima che cosa è oggetto di
decisione, considerare poi una rete che ha come nodi le tipologie di coil e
archi orientati che uniscono ogni tipologia a quelle successive]
Raffaele Pesenti
73
Es 16) Formattazione testi
L’ACME professional è un software di formattazione testi per giornali. Data
una sequenza di parole che forma un paragrafo il sw ACME genera un
paragrafo giustificato a destra e a sinistra. Per ottenere una giustificazione
gradevole alla vista ACME dilata o comprime leggermente gli spazi tra due
parole successive. Sia cnk una misura della disutilità (sgradevolezza) provata
da lettore medio che veda (k+1) parole, che complessivamente danno luogo a
n caratteri e k spazi, su un una riga di testo.
Formulare il problema di formattazione di un paragrafo come un problema di
cammino minimo, eventualmente aggiungendo degli altri fattori di disutilità o
correggendo i precedenti per trattare l’indentazione all’inizio del praragrafo e
la linea finale. [sugg: chiedersi prima che cosa è oggetto di decisione,
considerare poi una rete che ha come nodi le parole e archi orientati che
uniscono ogni parola a quelle successive]
Indicare come modificare il modello ottenuto in precedenza se il sw ACME
avesse anche la capacità di andare a capo spezzando (correttamente una
parola).
Raffaele Pesenti
Esercizi
Esercizi
Es 17) Cpm
La ACME spa vi ha stati incaricato di gestire il progetto la cui struttura è
riportata nella tabella successiva. Come indicato ogni operazione richiede la
disponibilità esclusiva di un certo numero di lavoratori.
Attività
Predecessori
Durata Risorse
A
2
4
B
8
5
C
A
9
2
D
AB
4
4
E
B
3
3
F
B
5
5
G
DF
6
7
H
F
7
2
I
EC
4
2
(continua)
Raffaele Pesenti
74
75
(continuazione)
Determinare il tempo minimo di completamento del progetto, evidenziare il
percorso critico, eseguire Diagramma di Gantt e cercare di minimizzare il
numero massimo di risorse usate contemporaneamente (a parità di soluzione
scegliere quella che usa il massimo numero di risorse il minor tempo
possibile).
Considerate invece la situazione in cui: i) avete a disposizione al massimo 10
lavoratori, ii) si paga una penalità 500EUR per ogni giorno di ritardo nella
consegna della commessa, iii) si può assumere temporaneamente dei
lavoratori per assegnarli a delle operazioni. Ogni lavoratore temporaneo costa
150EUR al giorno, può essere assunto solo all'inizio di un'operazione ed è
assegnato alla stessa fino a quando questa non è completata. Schedulare le
operazioni in modo da minimizzare i costi complessivi. Se si assumono dei
lavoratori temporanei indicarne la quantità e le operazioni a cui sono stati
assegnati.
(continua)
Raffaele Pesenti
76
Esercizi
Esercizi
(continuazione)
Si supponga infine di non potere assumere lavoratori temporanei, ma che
l’operazione D può essere completata anche con 3 risorse, anche se ciò
allunga i tempi di processamento a 7 giorni. Schedulare in modo da
minimizzare il tempo di completamento della commessa, tenendo presente il
vicolo sul numero massimo di lavoratori disponibili.
Es 18) Approssimazione di una funzione con una funzione linerare a tratti
Sia data una funzione f(x) definita sull’intervallo [a,b] che si vuole approssimare
con una funzione g(x) lineare a tratti. Si assuma inoltre che si voglia f(x’) = g(x’),
in ogni x’∈ I, dove I è l’insieme dei punti di discontinuità della derivata di g(x),
i.e., un punto di giunzione di due tratti rettilinei.
Siano xi, i=1,...,n, le ascisse dei punti candidati ad appartenere all’insieme I. Per
comodità si assuma x1= a e xn= b e che x1, xn ∈ I per default.
Sia
xj
cij = α + β ∫ ( g ( x) − f ( x)) 2
x
il costo associato agli errori in cui isi incorre approssimando la funzione f(x) con la
funzione g(x) tra i punti nell’intervallo [xi,xj]
Formulare il problema di approssimazione a costo minimo di f(x) con g(x) come un
problema di costo minimo. Spiegare cosa cambia al variare dei valori α e β.
Spiegare cosa cambia se si vuole approssimare f(x) con una spline di ordine
maggiore. [sugg: chiedersi prima che cosa è oggetto di decisione, considerare poi
una rete che ha come nodi i punti xi e archi orientati che uniscono ogni nodo a
quello successivo]
Raffaele Pesenti
77
Raffaele Pesenti
78