Ricerca Operativa: Branch-and-Bound Per Problemi Di Programmazione Lineare Intera
Ricerca Operativa: Branch-and-Bound Per Problemi Di Programmazione Lineare Intera
Ricerca Operativa: Branch-and-Bound Per Problemi Di Programmazione Lineare Intera
1
Branch-and-Bound per problemi di Programmazione Lineare Intera
Contents
1 Programmazione lineare intera e ottimizzazione combinatoria 3
3 Il metodo di Branch-and-Bound 9
3.1 Regole di Branching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Calcolo del Bound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 Regole di potatura o fathoming . . . . . . . . . . . . . . . . . . . . . . . . 12
3.4 Regole di esplorazione dell’albero . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 Valutazione di soluzioni ammissibili . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Criteri di arresto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
min / max cT x
s.t. Ax = b
x ∈ Zn+
e chiamiamo
n
P = {x ∈ R+ : Ax = b}
il poliedro delle soluzioni ammissibili ignorando il vincolo di interezza delle variabili e
X = P ∩ Zn
l’insieme delle soluzioni ammissibili, cioè intere (vedi Figura 1).
Osserviamo, come è evidente dalla stessa Figura 1, che il problema non può essere risolto
con metodi per programmazione lineare a variabili reali (ad esempio, il metodo del sim-
plesso): in generale, il vertice ottimale non è a coordinate intere (dipende dal poliedro
ammissibile e dalla funzione obiettivo) e non sempre l’approssimazione intera ottenuta
per arrotondamento è ottima e/o ammissibile!
Uno dei metodi risolutivi per problemi di PLI è il metodo del Branch-and-Bound, che
descriveremo nel prossimo paragrafo. Tale metodo è un metodo generale, applicabile ai
• colorazione di un grafo:
X = {tutte le combinazioni ammissibili di colori assegnati ai vertici}, f (x): numero
di colori utilizzati dalla combinazione x ∈ X.
• programmazione lineare:
X = {tutte le soluzioni ammissibili di base}, f (x) = cT x.
3. valuto f (x)
associate al nodo i. L’operazione di suddivisione di un nodo Ei dà luogo a dei nodi figli.
Tale suddivisione deve garantire che
[
Ei = Ej
j figlio di i
cioè, le soluzioni presenti nel nodo padre devono essere presenti in (almeno) uno dei suoi
figli. In altre parole, nello sviluppo dell’albero devo garantire di non perdere soluzioni
(altrimenti l’osservazione sopra riportata non sarebbe valida). Una caratteristica auspica-
bile, ma non necessaria, della suddivisione di un nodo Ei è la disgiunzione dei sottoinsiemi
figli (la suddivisione sarebbe in questo caso una partizione in senso insiemistico):
Ej ∩ Ek = ∅, ∀ j, k figlio di i
L’operazione di suddivisione si fermerebbe nel momento in cui ogni nodo contiene una
sola soluzione. Pertanto, se Ef è un nodo foglia, si ha |Ef | = 1.
Chiamiamo z (1) il valore ottimo della funzione obiettivo nel sottoinsieme E1 e z (2) il valore
ottimo della funzione obiettivo nel sottoinsieme E2 . Ricordiamo che, come precedente-
mente osservato, il valore ottimo della funzione obiettivo del problema in esame è
fissato a 0 il valore di x1 non possa essere minore di 9. In altre parole, il valore della
funzione obiettivo in corrispondenza di ciascuna delle soluzioni rappresentare dal nodo
E1 è sicuramente non inferiore a 9. 9 rappresenta quindi una valutazione ottimistica
della funzione obiettivo per il sottoinsieme E1 , un limite inferiore (lower bound ) sotto il
quale il valore della funzione obiettivo non può scendere, se consideriamo solo soluzioni
in E1 : cioè z (1) ≥ 9. Analogamente, supponiamo di disporre di un lower bound per E2
e sia tale bound pari a 11: nessuna della soluzioni con x1 = 1 (soluzioni in E1 ) ha un
valore della funzione obiettivo più basso di 11: cioè z (1) ≥ 11. Ora, secondo la nostra
prima osservazione, z = min{z (1) , z (2) }. Inoltre, utilizzando l’informazione sulla soluzione
ammissibile a disposizione, z ≤ 10 e, pertanto z (2) ≥ 11 ≥ 10, cioè, non è possibile trovare
una soluzione con valore migliore di 10 tra le soluzioni nel nodo E2 . Pertanto,
Lo stesso ragionamento non vale per il nodo E1 : una delle soluzioni in questo nodo potrebbe
avere valore inferiore a 10 e, pertanto, tale nodo potrebbe contenere la soluzione ottima.
Osserviamo che, anche se non abbiamo esplicitato tutti i nodi foglia del sotto-albero di
E2 , siamo comunque in grado di stabilire che il valore di ciascuno di essi non è migliore di
11 e, grazie alla soluzione ammissibile, tale informazione è sufficiente per escluderli come
soluzioni ottime: è come se avessimo esplorato tutto il sotto-albero in maniera implicita.
Attraverso l’operazione di bound è quindi possibile effettuare una enumerazione implicita
di tutte le soluzioni di un problema di ottimizzazione combinatoria.
3 Il metodo di Branch-and-Bound
Il metodo del Branch-and-Bound può essere schematizzato come segue. Dato un problema
di ottimizzazione combinatoria z = min / max{f (x) : x ∈ X}, sia:
• P0 : problema di ottimizzazione iniziale;
• L: lista dei nodi aperti. Ogni nodo è una coppia (Pi , Bi ), dove Pi è il sotto-problema
e Bi è il relativo bound;
• z̄: valore della migliore soluzione ammissibile.
• x̄: migliore soluzione ammissibile corrente;
Metodo di Branch-and-Bound
0. Inizializzazione: Esegui una stima ottimistica B0 della funzione obiettivo
e poni L = {(P0 , B0 )}, x̄ = ∅, z̄ = +∞(min)[−∞(max)]
Quello sopra esposto è uno schema di principio per la soluzione di problemi di ottimiz-
zazione combinatoria. Per implementare un algoritmo B&B per uno specifico problema,
bisogna determinare i seguenti elementi essenziali:
(1) Regole di Branching: come costruire l’albero delle soluzioni.
(2) Calcolo del Bound: come valutare i nodi.
(3) Regole di Fathoming: come chiudere e dichiarare sondati (fathomed ) i nodi.
(4) Regole di esplorazione dell’albero: definire le priorità di visita dei nodi aperti.
(5) Come valutare una o più soluzioni ammissibili (soluzioni da confrontare con i bound
per chiudere nodi).
• gli Ei sono sempre più piccoli: ciascun nodo Ei eredita ricorsivamente le condizioni
restrittive dei genitori (i corrispondenti problemi Pi sono sempre più vincolati).
• i Pi sono sempre più semplici: al limite, in un nodo foglia f , Ef contiene una sola
soluzione e la soluzione di Pf è immediata.
Ovviamente, esistono vari modi per effettuare il branch di un nodo e bisogna, di volta
in volta, stabilire la strategia di branching più adatta al problema. Bisogna, ad esempio,
stabilire:
- quanti nodi figli generare: ad esempio, si può effettuare un branching binario (2 figli
per nodo) o t-ario (t figli per nodo);
limite superiore che siamo sicuri di non poter superare, un upper bound (U B) per ciascun
nodo Ei (U Bi ≥ soluzione ottima in Ei ).
Ribadiamo che, per ottenere il bound di un nodo, non ha senso considerare tutte le
soluzioni rappresentate dal nodo stesso (a meno che, trovandosi a livelli molto profondi
dell’albero di ricerca, le soluzioni non siano veramente poche). In generale, quindi,
è necessario determinare un metodo per calcolare il bound che utilizzi solo una de-
scrizione implicita delle caratteristiche delle soluzioni rappresentate da un nodo. Nello
stabilire il metodo bisogna valutare il compromesso tra la facilità di calcolo (efficienza
computazionale) e la qualità (efficacia) del bound che si ottiene.
Per quanto riguarda l’efficienza computazionale, osserviamo che il bound viene calcolato
ad ogni nodo e, come è facile immaginare, il numero di nodi da valutare potrebbe essere
molto elevato (esponenziale nei casi peggiori). Pertanto il metodo di valutazione del bound
deve garantire dei tempi di calcolo molto rapidi, altrimenti il metodo del B&B nel suo
complesso diventa inefficiente.
Per quanto riguarda invece la qualità del bound, il limite ottenuto deve essere il più
stringente possibile, sempre garantendo che il bound sia una valutazione ottimistica del
nodo. In questo modo, una volta disponibile una soluzione ammissibile per il problema, si
permettere di potare un maggior numero di nodi. Si fa notare che, per problemi di min,
il bound deve essere il più alto possibile (ma sempre minore o uguale al valore ottimo per
quel nodo), mentre, per problemi di max, il più basso possibile (ma sempre al di sopra
del valore ottimo per quel nodo).
Si noti come, al costo di una maggiore complessità nella valutazione, abbiamo ottenuto
dei bound migliori, cioè degli upper-bound che, restando limitazioni superiori ai possibili
valori della funzione obiettivo, sono però più bassi. Ad esempio, siamo stati in grado di
stabilire che il valore delle soluzioni in E2 è sicuramente non superiore a 10 (mentre i primi
semplici ragionamenti ci avevano indicato un limite superiore a 15). Quindi, sia 15 che
10 sono degli upper bound validi per il nodo E2 , ma è da preferire il più basso tra i due
(il più stringente). Infatti, con questa seconda valutazione, possiamo subito stabilire che
il nodo E2 non contiene la soluzione ottima, visto che esiste una soluzione ammissibile,
quella suggerita dal management, che è migliore. Possiamo quindi evitare l’esplorazione
esplicita di E2 .
Nel caso S.A., il valore del bound Bi coincide con una soluzione ammissibile ed è pertanto
il valore di una soluzione ammissibile. Si procede quindi a confrontare il bound ottenuto,
con il valore della migliore soluzione ammissibile a disposizione e, se Bi è migliore, si
aggiorna la soluzione ammissibile corrente e si procede a verificare la condizione N.M.
sugli altri nodi ancora da esplorare. È possibile infatti che il valore migliorato della
soluzione ammissibile sia non peggiore dei bound calcolati in precedenza, permettendo
cosı̀ la chiusura di alcuni nodi.
• Best Bound First o Best node: si sceglie il nodo più promettente, ossia il nodo con
il bound migliore (lower bound più basso, per problemi di minimo, o upper bound
più alto, per problemi di massimo). Tipicamente, tale strategia permette di limitare
il numero di nodi visitati esplicitamente e tende pertanto a essere più efficiente. Per
contro, l’esplorazione tende a rimanere a livelli poco profondi, dove i problemi sono
meno vincolati e, di conseguenza, i bound sono più promettenti. Di conseguenza,
difficilmente si ottengono presto soluzioni ammissibili che migliorino quella corrente
per applicare efficacemente le regole di fathoming, e, pertanto è maggiore la richiesta
di memoria per i nodi aperti contemporaneamente.
• Regole miste: i nodi vengono scelti alternando i diversi criteri, per evitarne gli
svantaggi. Ad esempio, all’inizio si applica una strategia Depth First e, quando si
ha una “buona” soluzione ammissibile, si passa alla strategia Best Bound First.
- implementare un algoritmo euristico che valuti una buona soluzione all’inizio, prima
dell’esplorazione;
In ogni caso, bisogna sempre valutare il compromesso tra la qualità della soluzione am-
missibile corrente e lo sforzo computazionale per ottenerla.
Esercizio 1 Si consideri il seguente albero di sviluppo del Branch and Bound per un
problema di ottimizzazione combinatoria con funzione obiettivo di minimo:
4. Quale nodo sarà sviluppato per primo da una strategia best first?
5. Si supponga che lo sviluppo di cui al punto precedente porti a due nodi figli, di cui
uno è relativo ad un insieme di soluzioni vuoto. Si dia un esempio di valori di
lower e upper bound relativi al secondo nodo che consentano di riconoscere subito la
soluzione ottima del problema.
2. La migliore soluzione ammissibile vale 14.0 (vedi nodo P2 . Quindi è possibile chi-
udere i nodi P4 e P6 perché non miglioranti.
3. L’ottimo della funzione obiettivo è compreso tra 13.6 (il miglior lower bound - nodo
P5 ) e 14.0 (migliore soluzione disponibile).
4. Il nodo che sarà sviluppato per primo in una strategia best bound first è quello che
ha la valutazione più promettente (LB più basso) tra quelli che rimangono aperti,
cioè il nodo P5 .
5. Nel caso ipotizzato, rimangono aperti il nodo P3 con (LB, U B) = (13.7, 14.4) e un
nodo P7 con (LB, U B) = (lb, ub). Basta quindi che sia lb = ub (lb corrisponde a
una soluzione ammissibile) per poter chiudere il nodo in esame P7 e che lb ≤ 13.7,
per poter chiudere P3 . Deve inoltre essere lb ≥ 13.6, per compatibilità con il lower
bound del nodo padre P5 . Ad esempio (LB, U B) = (13.65, 13.65), o (LB, U B) =
(13.7, 13.7), o (LB, U B) = (13.6, 13.6) etc.
• Quale nodo sarà selezionato per il branching se si adotta una strategia di esplorazione
Best Bound First? {E5 }
• Entro quale intervallo di valori è sicuramente compreso il valore ottimo della fun-
zione obiettivo? {[7.0 8.2]}
• Si supponga di fare branching sul nodo E5 , ottenendo due nodi figli E7 ed E8 . Sia
inoltre il problema P8 inammissibile (E8 = ∅). Dare un esempio di possibili valori
SA e UB per il nodo E7 che permettano di riconoscere subito una soluzione ottima,
senza ulteriori operazioni di branching. {SA7 = LB7 ∈ [7.4 8.2]}
zI = max cT x
Ax ≤ b
(1)
x≥0
xi ∈ Z, i ∈ I.
dove A ∈ Rm×n , b ∈ Rm , c ∈ Rn e I ⊆ {1, . . . , n} è l’insieme degli indici delle variabili
intere. Le variabili xi , i ∈
/ I sono invece dette variabili continue. Se il problema ha sia
variabili intere che variabili continue, allora è detto un problema di programmazione lineare
intera mista, mentre se tutte le variabili sono intere, il problema è detto di programmazione
lineare intera pura.
L’insieme
X = {x ∈ Rn : Ax ≤ b, x ≥ 0, xi ∈ Z per ogni i ∈ I}
è la regione ammissibile del problema.
zL = max cT x
Ax ≤ b (2)
x≥0
1
Il bound deve peggiorare (un upper bound deve essere non crescente, un lower bound non decrescente)
man mano che si scende nei livelli dell’albero delle soluzioni, visto che i nodi corrispondono a problemi
via via più vincolati. Non è possibile quindi che la valutazione ottimistica di un nodo sia peggiore della
valutazione ottimistica di un nodo figlio, visto che il nodo padre include tutte le soluzioni del nodo figlio.
Quindi, se si mettesse U B1 = 9.5 > 9.4, darei al figlio una valutazione migliore del nodo padre, anche
se il nodo padre contiene tutte le soluzioni del nodo figlio, incluso 9.4; se si mettesse U B1 = 7.1 < 7.4,
allora il nodo E1 avrebbe una valutazione peggiore del figlio E3 .
corrisponde al problema (1) senza i vincoli di interezza delle variabili ed è detto il rilas-
samento lineare di (1).
zI ≤ zL . (3)
Infatti, se xI é la soluzione ottima di (1) e xL é la soluzione ottima di (2), allora xI soddisfa
i vincoli di (2), e dunque zI = cT xI ≤ cT xL = zL . zL rappresenta quindi un upper bound
per zI .
Diremo che abbiamo fatto branching sulla variabile x1 . Si noti che in questo modo
la soluzione (3.75, 1.25) non appartiene al rilassamento lineare di (P1 ) o (P2 ). Possiamo
rappresentare graficamente i sotto-problemi e i rispettivi bounds mediante un albero,
detto albero di Branch-and-Bound.
La soluzione ottima del rilassamento lineare di (P1 ) è x1 = 3, x2 = 2, con valore zL1 = 23.5.
Si noti che tale soluzione è intera, e dunque, poiché zI1 ≤ zL1 , in tal caso (3, 2) è anche
la soluzione ottima intera. Dunque non occorre fare ulteriore branching per il nodo (P1 ),
che può dunque essere potato. Diciamo che (P1 ) è potato per ottimalità (S.A.). Si noti
inoltre che la soluzione ottima di (P0 ) avrà valore zI0 ≥ zI1 = 23.5. (3, 2) è la soluzione
intera corrente, ovvero la miglior soluzione intera trovata fino a questo punto, il cui valore
è z̄ = 23.5.
L’albero di Branch-and-Bound è ora il seguente. L’unica foglia non potata è (P 2) che
ottenendo soluzione ottima x1 = 4.5, x2 = 0, con valore zL3 = 22.5. Dunque la soluzione
ottima intera di (P3 ) avrà valore zI3 ≤ 22.5, ma poiché abbiamo già determinato una
soluzione ottima intera con valore 23.5, è inutile esplorare ulteriormente la regione am-
missibile di (P3 ) poiché sappiamo che non vi sarà nessuna soluzione intera di valore mag-
giore di 22.5 < 23.5. Possiamo dunque potare il nodo (P3 ) perché non migliorante (N.M).
L’albero di Branch-and-Bound corrente, rappresentato nella figura successiva, contiene
un unico problema attivo, ovvero (P4 ).
Possiamo dunque potare il nodo (P4 ) per inammissibilità (N.A.). L’albero di Branch-and-
Bound corrente, rappresentato nella figura successiva, non ha alcun problema attivo, e
dunque la soluzione intera corrente è la migliore possibile. Dunque (3, 2) è la soluzione
ottima di (P0 )
zI = max cT x
Ax ≤ b
x≥0
xi ∈ Z, i ∈ I.
Il branch è stato effettuato in accordo con la seguente regola: sia x̄R la soluzione del
rilassamento continuo in un nodo Ph e xi = x̄R i , i ∈ I una variabile con componente
frazionaria ϕ(x̄R
i ) =
6 0; allora si effettua un branching dicotomico secondo la seguente
figura:
In caso di più variabili frazionarie, si può dare priorità alla xi frazionaria con ϕ(x̄R
i ) più
prossimo a 0.5.
xi ∈ {0, 1} ∀ i = 1..n
Affinché il problema sia ben definito, assumiamo:
1. pi , wi , W ≥ 0
2. wi ≤ W ∀ i = 1..n
n
X
3. wi > W
i=1
Per risolvere il problema con il metodo del B&B, bisogna definire le seguenti compo-
nenti principali.
1 i<s
W̄
3. determinare la soluzione del rilassamento: xi = i=s
wi
0 i>s
s−1
X
dove W̄ = W − wi è la capienza residua dello zaino.
i=1
.W̄ = W ; forall i: xi := 0
.for ( i = 1 ; i ≤ n ; i++ ) {
. if wi ≤ W̄ and wi not fixed to 0 {
. xi := 1
. W̄ := W̄ − wi
. }
.}
La tecnica per ottenere una soluzione ammissibile è molto semplice ed efficiente, e quindi
si può applicare ad ogni nodo dell’albero di Branch-and-Bound.
max 36 x1 + 15 x2 + 3 x3 + 5 x4 + 11 x5 + 30 x6
s.t. 12 x1 + 6 x2 + 2 x3 + 3 x4 + 5 x5 + 9 x6 ≤ 17
x1 , x2 , x3 , x4 , x5 , x6 ∈ {0, 1}
x6 → x 1 → x2 → x5 → x4 → x3
Per praticità, riscriviamo il problema con le variabili ordinate:
max 30 x6 + 36 x1 + 15 x2 + 11 x5 + 5 x4 + 3 x3
s.t. 9 x6 + 12 x1 + 6 x2 + 5 x5 + 3 x4 + 2 x3 ≤ 17
x6 , x1 , x2 , x5 , x4 , x3 ∈ {0, 1}
Nodo P0 :
x6 = 1 W̄ = 8
8
x1 = 12 W̄ = 0 x1 critica
8
U B0 = 30 + 12
36 = 54
Nodo P1 :
x1 = 0 W̄ = 17
x6 = 1 W̄ =8
x2 = 1 W̄ =2
x5 = 25 W̄ = 0 x5 critica
U B1 = 0 + 30 + 15 + 25 11 = 49.4
Osserviamo che, essendo i coefficienti della funzione obiettivo tutti interi, non è possibile
ottenere valori frazionari della funzione obiettivo stessa, in corrispondenza di soluzioni
ammissibili. U B1 = 49.4 (49.4 è il valore del rilassamento continuo) ci dice che il valore
della funzione obiettivo, una volta fissato x1 = 0, non può essere superiore a 49.4. Per
l’interezza dei coefficienti pi , possiamo migliorare tale upper bound con il valore b49.4c =
49. Tale valore è un valore più stringente ed è da preferire. In generale
Nodo P2 :
x1 = 1 W̄ = 5
x6 = 59 W̄ = 0 x6 critica
U B2 = 36 + d 59 30e = 52
SA2 = 36 + 11(x5 ) = 47
Adottando una strategia Best Bound First, effettuiamo il branch del nodo P2 .
Nodo P3 :
x1 = 1 W̄ = 5
x6 = 0 W̄ = 5
x2 = 56 W̄ = 0 x2 critica
U B3 = 36 + d 56 15e = 48
SA3 = 36 + 11(x5 ) = 47
Nodo P4 :
x1 = 1 W̄ = 5
x6 = 1 W̄ = −4 non ammissibile
Nodo P5 :
x1 = 0 W̄ = 17
x5 = 0 W̄ = 17
x6 = 1 W̄ =8
x2 = 1 W̄ =2
x4 = 23 W̄ = 0 x5 critica
U B5 = 0 + 0 + 30 + 15d 23 5e = 48
Nodo P6 :
x1 = 0 W̄ = 17
x5 = 1 W̄ = 12
x6 = 1 W̄ =3
x2 = 36 W̄ = 0 x5 critica
U B6 = 0 + 11 + 30 + d 36 15e = 48
A questo punto tutti i nodi sono chiusi e il valore ottimo della funzione obiettivo è 48.
Una soluzione ottima è quella trovata come soluzione ammissibile al nodo P0 , e cioè:
x6 = x2 = x3 = 1, x1 = x4 = x5 = 0.
max 24 x1 + 21 x2 + 12 x3 + 21 x4 + 33 x5 + 18 x6 + 9 x7
s.t. 10 x1 + 10 x2 + 6 x3 + 12 x4 + 24 x5 + 18 x6 + 10 x7 ≤ 17
x1 , x2 , x3 , x4 , x5 , x6 , x7 ∈ {0, 1}
Innanzitutto calcoliamo i rapporti pi /wi e ci accorgiamo che le variabili sono già ordi-
nate. Quindi applichiamo il metodo del Branch-and-Bound con gli accorgimenti definiti
nell’esempio precedente e otteniamo il seguente albero (i nodi sono numerati nell’ordine
di esplorazione secondo il criterio Best Bound First).
Facciamo ora vedere come, attraverso due semplici osservazioni, sia possibile migliorare i
bound ai nodi, ottenendo una notevole riduzione del numero di nodi aperti (e, quindi, dei
tempi di calcolo). Osserviamo infatti che:
• i coefficienti della funzione obiettivo non sono solo interi, ma sono anche tutti multi-
pli di 3. Pertanto, il valore corrispondente a soluzioni ammissibili è sempre multiplo
di 3 e il valore dell’upper bound si può rendere più stringente approssimando il
risultato del rilassamento continuo al multiplo di 3 inferiore;
• i coefficienti del vincolo sono tutti pari. Pertanto, tutte le soluzioni ammissibili
non possono saturare lo zaino, che ha capienza dispari. Il problema è quindi del
tutto equivalente allo stesso problema con W = 50, invece di W = 51. In questo
modo, possiamo ulteriormente migliorare gli upper bound, avendo la possibilità di
diminuire il valore della variabile critica (e il conseguente contributo alla funzione
obiettivo del rilassamento continuo).
Nodo P0 :
x1 = 1 W̄ = 50 − 10 = 40
x2 = 1 W̄ = 30
x3 = 1 W̄ = 24
x4 = 1 W̄ = 12
x5 = 12
24
W̄ =0 x5 critica
12
U B0 = 24 + 21 + 12 + 21 + 24
33 = 94.5 ⇒ 93
SA0 = 24 + 21 + 12 + 21 + 9(x7 ) = 87
Nodo P1 :
x5 = 0 W̄ = 50 − 0
x1 = 1 W̄ = 40
x2 = 1 W̄ = 30
x3 = 1 W̄ = 24
x4 = 1 W̄ = 12
x6 = 12
18
W̄ =0 x6 critica
12
U B0 = 0 + 24 + 21 + 12 + 21 + 18 18 = 90 ⇒ 90 (NOTA: anche se il valore del rilassamento
continuo è intero e multiplo di 3, questa non è una soluzione ammissibile, visto che c’è
una variabile frazionaria!)
SA0 = 24 + 21 + 12 + 21 + 9(x7 ) = 87
Nodo P2 :
x5 = 1 W̄ = 50 − 24 = 26
x1 = 1 W̄ = 16
x2 = 1 W̄ =6
x3 = 1 W̄ =0
12
U B2 = 0 + 24 + 21 + 12 + 21 + 18
18 = 90 ⇒ 90
SA2 = U B2 = 90: la soluzione del rilassamento prima ottenuta è intera (le variabili
assumono valori interi) e quindi anche ammissibile.