Sei sulla pagina 1di 41

Problemi di PLI

 
 

Problema di Programmazione Lineare Intera


 

 
 

 
Problemi di PLI
Esempio

max  x1  2 x2 x2 Soluzione Ottima del


problema rilassato
 4 x1  6 x2  9
x1  x2  4 Soluzione Ottima

x1 , x2  0  
x1 , x2  Z

x1

 
Problemi di PLI
Possibili approcci risolutivi:
 Arrotondamento: si possono rilassare i vincoli di interezza, risolvere il
problema continuo e approssimare ciascuna componente della soluzione
ottenuta con l’intero più vicino
Nessuna garanzia, né di ottimalità né di ammissibilità

 «Rafforzamento» della formulazione (Algoritmo dei piani di taglio): si


aggiungono vincoli validi alla formulazione fino ad ottenere una soluzione del
rilassamento ammissibile per il problema originario

 Enumerazione: in generale l’insieme delle soluzioni è finito per cui si può


pensare di valutare la funzione obiettivo in ogni punto ammissibile
Per i problemi reali questi punti sono un numero enorme: l’enumerazione totale
richiederebbe tempi di calcolo improponibili

 Branch and Bound: enumerazione implicita dell’insieme delle soluzioni


Problemi di PLI
Per capire cosa si intende per enumerazione implicita possiamo inizialmente
considerare il più semplice problema di PLI

Il problema dello zaino (knapsack problem):


Siano dati:
 uno zaino caratterizzato da una capacità massima b
 un insieme di oggetti i є {1,…,n} ciascuno caratterizzato
da un peso pi e da un valore vi
si vuole individuare un sottoinsieme degli oggetti che entra
nello zaino e che ha il valore complessivo massimo
rispetto a tutti gli altri possibili sottoinsiemi .

Formulazione in PL01
Problemi di PLI
Enumerazione implicita per un problema di zaino

Consideriamo un’stanza del  


problema di zaino di 3 variabili
 Il dominio di ammissibilità S
ha al massimo 23 possibili
soluzioni

 Se S1 ed S2 sono una partizione di S, allora la soluzione ottima in S è data


dalla migliore tra la soluzione ottima in S1 ed la soluzione ottima in S2

Per risolvere il problema definito su S, si possono risolvere due problemi


definiti su insiemi di cardinalità inferiore

Come costruire S1 ed S2?


 
 
Problemi di PLI
Enumerazione implicita per un problema di zaino

Consideriamo un’stanza del  


problema di zaino di 3 variabili
 Il dominio di ammissibilità S
ha al massimo 23 possibili
soluzioni

 
 

 
   

Ipotizziamo di poter inserire tutti gli


oggetti tranne A nello zaino
   
 

   

   
Problemi di PLI
Enumerazione implicita per un problema di zaino

Consideriamo un’stanza del  


problema di zaino di 3 variabili
 Il dominio di ammissibilità S
ha al massimo 23 possibili
soluzioni

LB=40 UB=35
 
   

Problema Infeasible
   
 
 
   

   
Problemi di PLI
Enumerazione implicita per un problema di zaino

Consideriamo un’stanza del  


problema di zaino di 3 variabili
 Il dominio di ammissibilità S
ha al massimo 23 possibili
soluzioni

LB=40 UB=35

    Con l’enumerazione implicita


sono state ispezionate 2
soluzioni invece di 8

Problema Infeasible
   

Soluzione Ottima
Soluzione Infeasible    
 
 
Metodo Branch and Bound
Enumerazione implicita: idee di base
 Partizionare l’insieme delle soluzioni in sottoinsiemi (sotto-problemi) più facili
da risolvere

 Cercare una soluzione ammissibile (ottimo corrente o lower bound) ad


esempio risolvendo il problema su alcuni sotto-problemi o tramite un’euristica

 Risolvere il problema sui restanti sotto-problemi

 Eliminando i problemi inammissibili o quelli per i quali l’upper bound è


inferiore all’ottimo corrente (lower bound nel caso di problemi a
massimizzare)
 Aggiornando l’ottimo corrente se si trovano soluzioni ammissibili migliori di
quella corrente, oppure partizionando ulteriormente i sotto-problemi che
non siamo in grado di risolvere
Metodo Branch and Bound
Componenti fondamentali:

 Bounding: determinazione di un valore limite (bound) di funzione obiettivo


per un generico sotto-problema (upper bound per un problema di
massimizzazione, lower bound per un problema di minimizzazione)

 Branching: partizionamento di un sotto-problema e generazione di nuovi


sotto-problemi più semplici
Metodo Branch and Bound
Tecniche di bounding:

 Rilassamento continuo: si eliminano i vincoli di interezza ottenendo un


problema continuo

 Rilassamento di altri vincoli difficili: si eliminano alcuni vincoli difficili


ottenendo un sotto-problema più facile con insieme ammissibile più grande

 ……

Per un problema a massimizzare sia:


 

 
Metodo Branch and Bound
Tecniche di branching:

 Branching binario per problemi PL01: si sceglie una variabile e si fissa a 0 in


un sotto-problema e a 1 nell’altro sotto-problema (esempio problema di zaino)

 Branching binario agli interi più vicini:


  x2 x : soluzione Ottima del
problema rilassato

 Una possibile partizione è data da:  


 
 
  x1

 Branching n-ario: specifico per particolari problemi


Metodo Branch and Bound
Schema di branch and bound per la risoluzione di un generico problema di PLI

si L lista dei problemi da risolvere


  STOP
~
x migliore soluzione intera
calcolata
 
~
z valore della soluzione intera
(lower bound)
si
 
yi soluzione frazionaria
corrente
si
  valore della soluzione
i
U frazionaria corrente
  si (upper bound)
yi intera

 
Metodo Branch and Bound
Osservazioni:
 È un algoritmo esatto, cioè garantisce, dato tempo sufficiente di trovare l’ottimo
se esso esiste
 L’evoluzione dell’algoritmo (come visto nell’esempio dello zaino) è
rappresentabile come la visita di un albero detto albero di branching
 Occorre risolvere un gran numero di rilassamenti lineari
 Migliori formulazioni portano a bound migliori : il metodo Branch and Cut
aggiunge vincoli (tagli validi) ad ogni sotto-problema per rafforzare la
formulazione iniziale.
 L’utilizzo di euristiche consente di ottenere ottimi correnti (lower bound in un
problema a massimizzare) più vicini alla soluzione ottima
 In generale esiste un trade-off tra qualità dei bound calcolati e dimensione
dell’albero di enumerazione:
Bound migliori riducono le dimensioni dell’albero di enumerazione ma richiedono
tempi di calcolo maggiori, viceversa, bound scadenti possono essere calcolati
velocemente a spese di una crescita del numero di nodi da ispezionare.
Metodo Branch and Bound
Elementi di scelta:

Scelte che condizionano le prestazioni del metodo (non il risultato finale)

 Selezione del tipo di rilassamento da utilizzare per il calcolo del bound

 Utilizzo o meno di euristiche per provare a migliorare velocemente le


soluzioni correnti

 Scelta della variabile di branching. Priorità tra classi di variabili, oppure


scelta sulla base del valore frazionario

 Strategie di esplorazione dell’albero. Come selezionare il prossimo nodo


da valutare

Tali scelte influenzano l’evoluzione dell’algoritmo e quindi i tempi di calcolo.


Non esiste però una scelta che sia sempre la migliore per tutti i problemi
Metodo Branch and Bound
Strategia di esplorazione depth first P0

Procede in profondità cercando una foglia


dell’albero risolvibile
 In genere trova subito una soluzione ammissibile P1
P2
 Limita il numero di nodi contemporaneamente
attivi
 Consente di sfruttare la riottimizzazione P3 P4
 L’albero di enumerazione può essere
implementato come una pila
P5
P6
La ricerca non è guidata dalle
informazioni ottenute in P8
P7
precedenza
P9
P10

P12 P11
Metodo Branch and Bound
Strategia di esplorazione best bound first
P0
Ad ogni iterazione seleziona il
UB0=45
nodo attivo più promettente ovvero
con il bound migliore P1 UB1=43 P2 UB2=42.8

 Tende ad esplorare l’albero in


larghezza
 Ha più nodi P6
contemporaneamente attivi P4 P5 UB5=41
P3 UB3=42
rispetto alla DF UB4=39.6
UB6=37

 I nodi attivi possono


essere gestiti
utilizzando una coda P7 UB7=35 P8 UB8=37.8 UB9=40.1 P9 P10 UB10=40.8
a priorità

La ricerca è guidata dall’ informazione


UB11=40.3 P11 P12
Strategia di esplorazione miste utilizzano la DF UB12=38.9
per trovare velocemente una soluzione
ammissibile per poi passare a una strategia BF
UB13=38.1 P13 P14 UB14=40
Metodo Branch and Bound
Esempio:
 
S 0  max  x1  2 x2
 4 x1  6 x2  9    
x1  x2  4
   
x1 , x2  0
x1 , x2  Z

x2
 


y  3 ,5
0
2 2
 T

U0  7
2

x1
Metodo Branch and Bound
Esempio:
 

   

x2      
S1  max  x1  2 x2
 4 x1  6 x2  9
x1  x2  4
x1  1 
y1  1,13
6
 T

x1 , x2  0
x1 , x2  Z U 1  10
3
x1

x2
S 2  max  x1  2 x2
 
 4 x1  6 x2  9
y 2   2,2 
T
x1  x2  4
x1  2 Opt 2  2
x1 , x2  0
x1 , x2  Z
x1
Metodo Branch and Bound
Esempio:
 

S 4  max  x1  2 x2    
 4 x1  6 x2  9
   
x1  x2  4
infeasible
x1  1
   
x2  3
x1 , x2  0    
x1 , x2  Z

S 3  max  x1  2 x2 x2
 4 x1  6 x2  9  
x1  x2  4
x1  1
y  3 ,2
4
3
 
T

x2  2
U 3  13
x1 , x2  0 4
x1 , x2  Z x1
Metodo Branch and Bound
Esempio:
 
x2
   
 
   

   

x1
   

   
 
   

y 5   0,3 / 2 
T

U5 3
Metodo Branch and Bound
Esempio:
 
x2
     
   

   

x1
   

   
 
   

y 6  1,2 
T

Opt 6  3
Metodo Branch and Bound
Esempio:
 
x2
   
Soluzione Ottima
   

   
   
x1
   
   

U 5  Opt 6  Ottimo Corrente


Metodo Branch and Bound

Il problema dello zaino (knapsack problem):


Siano dati:
 uno zaino caratterizzato da una capacità massima b
 un insieme di oggetti i є {1,…,n} ciascuno caratterizzato
da un peso pi e da un valore vi
si vuole individuare un sottoinsieme degli oggetti che entra
nello zaino e che ha il valore complessivo massimo
rispetto a tutti gli altri possibili sottoinsiemi .

 
Formulazione in PL01
Metodo Branch and Bound
Rilassamento continuo del problema dello zaino
 I singoli oggetti possono essere partizionionati cioè si possono
considerare frazioni di oggetti

 Gli oggetti più convenienti sono quelli caratterizzati da un valore specifico


(vi / pi) elevato.

Algoritmo risolutivo

1. Si ordinano gli oggetti per valore specifico decrescente

2. Si preleva il primo elemento dalla lista ordinata

3. Se l’oggetto prelevato entra nello zaino, viene inserito , si aggiorna il


valore di capacità residua dello zaino e si ritorna al passo 2

4. Se l’oggetto prelevato non entra per intero nello zaino, viene calcolata la
massima porzione dell’oggetto che può essere inserita nello zaino

5. Stop
Metodo Branch and Bound
Esempio di soluzione di un problema di zaino continuo

 Si ordinano gli oggetti per valore specifico decrescente

Oggetto V/P V P

B 4 36 9

C 3 15 5 I tre oggetti B, C e D hanno un peso totale di 22 e quindi


entrano interamente nello zaino
D 2,5 20 8

A 2 32 16 Per completare il riempimento dello zaino si possono


aggiungere i 10/16 dell’oggetto A
E 1 5 5

 Soluzione ottima: xB  xC  xD  1 x A  10 xE  0
16
 Valore della Soluzione ottima: 91
Metodo Branch and Bound
Lower ed upper bound per un problema di zaino

 La soluzione ottima del rilassamento continuo costituisce un limite superiore


(upper bound) della soluzione ottima del problema intero
 
 Una soluzione ammissibile del problema si può ottenere banalmente
eliminando dalla soluzione ottima del problema rilassato la componente
frazionaria
 

 Il valore di una soluzione ammissibile costituisce un limite inferiore (lower


bound) della soluzione ottima del problema intero
 
Metodo Branch and Bound
Problema dello zaino:

Nodo radice dell’albero di enumerazione:


Metodo Branch and Bound
Problema dello zaino:

Albero di enumerazione:

Sottoproblema S1 Sottoproblema S2
Metodo Branch and Bound
Problema dello zaino:

Albero di enumerazione:

Soluzione ottima del


sottoproblema S2
Metodo Branch and Bound
Problema dello zaino:

Albero di enumerazione: Sottoproblema S12

Sottoproblema S11
Metodo Branch and Bound
Problema dello zaino:

Albero di enumerazione:

Nuova soluzione ammissibile


Metodo Branch and Bound
Problema dello zaino:

Albero di enumerazione:

Unico nodo da ispezionare


Metodo Branch and Bound
Problema dello zaino:

Albero di enumerazione:

Soluzione ottima
X A = 1 XD = 0 XE
= 0 XB = 1
XC = 1
Un problema di P.L. intera
x2 z
Max z = 2x1 + 3x2
s.a P z*c = 23.89
 1.3x1 + 3x2  9 x*1 = 4.51
3x1 + 0.9x2  18 x*2 = 4.95
x1 , x2  0 interi
x1
(S1) (S2)
Max z = 2x1 + 3x2 Max z = 2x1 + 3x2
s.a s.a
 1.3x1 + 3x2  9  1.3x1 + 3x2  9
3x1 + 0.9x2  18 3x1 + 0.9x2  18
x1  4 x1  5
x1 , x2 interi x1 , x2 interi
Sottoinsiemi S1 e S2 esaminati dall’algoritmo
(S1) (S2)
Max z = 2x1 + 3x2 Max z = 2x1 + 3x2
s.a s.a
 1.3x1 + 3x2  9  1.3x1 + 3x2  9
3x1 + 0.9x2 18 3x1 + 0.9x2  18
x1 4 x1  5
x1 , x2 interi x1 , x2 interi

x2 x2
z
P P

S1
S2
x1 x1
Sottoinsiemi S1 e S2 esaminati dall’algoritmo
(S1) (S2)
Max z = 2x1 + 3x2 Max z = 2x1 + 3x2
s.a s.a
 1.3x1 + 3x2  9  1.3x1 + 3x2  9
3x1 + 0.9x2  18 3x1 + 0.9x2  18
x1 4 x1  5
x1 , x2 interi x1 , x2 interi

(S1) (S2)
x1* = 4 x2 x1* = 5
x2* = 4.73 4. x2* = 3.3
P
z* = 22.2 7 z* = 20.0
3. z
3 S1
S2
x1
Sottoinsiemi S11 e S12 esaminati dall’algoritmo
(S1) Max z = 2x1 + 3x2 x2
s.a
P z
 1.3x1 + 3x2  9
3x1 + 0.9x2  18
x1  4 S11

x1 , x 2 interi
4 x1
(S11) (S12)
Max z = 2x1 + 3x2 Max z = 2x1 + 3x2
s.a s.a
 1.3x1 + 3x2  9  1.3x1 + 3x2  9
3x1 + 0.9x2  18 3x1 + 0.9x2  18
x1 4 x1  4
x2  4 x2  5
x1 , x2 interi x1 , x2 interi
Sottoinsiemi S11 e S12 esaminati dall’algoritmo
(S11) (S12)
Max z = 2x1 + 3x2 Max z = 2x1 + 3x2
s.a s.a
 1.3x1 + 3x2  9  1.3x1 + 3x2  9
3x1 + 0.9x2  18 3x1 + 0.9x2  18
x1  4 x1  4
x2  4 x2  5
x 1 , x2 interi x 1 , x2 interi
(S11) (S12)
x2
x1 = 4
*
5 Non ammette soluzioni
P ammissibili perché il suo
x 2* = 4 4 dominio di definizione è vuoto
z
z* = 20
S11

4 x1
La soluzione di S11 è soluzione
del problema generale
(S11) Max z = 2x1 + 3x2 x2
s.a
P
 1.3x1 + 3x2  9
3x1 + 0.9x2  18 z
x1  4 S11

x2  4
x1
x1 , x 2 interi

(S11) Il valore di z diventa il


x1 = 4 limite inferiore della f.o.

x2 = 4 del problema intero


originario.
z = 20
z = 20 LI = 20
Albero delle soluzioni generato
dall’algoritmo Branch and Bound

S0 LS =
23.89

LS = S1 S2 LS =
22.2 20.0
=
LS = S11 S12
20.0
Soluzione =
ammissibile
LI = 20.0

Potrebbero piacerti anche