Programmazione Lineare Intera
Programmazione Lineare Intera – p. 1/4
Programmazione Lineare Intera
Problema di PLI in forma standard:
max
cx
Ax = b
x ≥ 0, x ∈ I n
I → insieme degli interi.
Regione ammissibile:
Za = {x ∈ I n : Ax = b, x ≥ 0},
Insieme delle sue soluzioni ottime:
Zott = {x∗ ∈ Za : cx∗ ≥ cx ∀ x ∈ Za }.
Programmazione Lineare Intera – p. 2/4
Rilassamento lineare
Il rilassamento lineare di un problema di PLI è il problema di
PL ottenuto dal problema di PLI omettendo la richiesta che
le variabili siano intere, e quindi
max
cx
Ax = b
x≥0
Sa e Sott denotano rispettivamente la regione ammissibile e
l’insieme delle soluzioni ottime del rilassamento lineare del
problema di PLI.
Programmazione Lineare Intera – p. 3/4
Esempio
Problema di PLI:
max
x1 + x2
x1 + 2x2 ≤ 4
2x1 + x2 ≤ 4
x1 , x2 ≥ 0, x1 , x2 ∈ I.
Rilassamento lineare:
max
x1 + x2
x1 + 2x2 ≤ 4
2x1 + x2 ≤ 4
x1 , x2 ≥ 0.
Programmazione Lineare Intera – p. 4/4
Relazioni tra i due problemi
Si ha che:
Za ⊆ Sa
e i due problemi hanno la stessa funzione obiettivo cx
quindi:
Se Sa = ∅, allora Za = ∅.
Se ∃ {xk } tale che xk ∈ Za per ogni k e
cxk → +∞
k → +∞,
(obiettivo del problema di PLI illimitato), allora é
illimitato anche l’obiettivo del suo rilassamento lineare.
Programmazione Lineare Intera – p. 5/4
Continua
Se Sott 6= ∅ e Zott 6= ∅, allora dato x∗ ∈ Sott e z∗ ∈ Zott , si
ha
z∗ ∈ Zott ⇒ z∗ ∈ Za ⇒ z∗ ∈ Sa ⇒ cz∗ ≤ cx∗
cioè il valore ottimo del problema di PLI non puó essere
superiore al valore ottimo del suo rilassamento lineare.
Se Sott 6= ∅ contiene un punto x∗ a coordinate tutte
intere, allora x∗ ∈ Zott e i valori ottimi dei due problemi
coincidono. Infatti:
x∗ ∈ Sott ⇒ cx ≤ cx∗ ∀ x ∈ Sa ⇒
x∗ a coordinate intere
⇒
cx ≤ cx∗ ∀ x ∈ Za
x∗ ∈ Za
Programmazione Lineare Intera – p. 6/4
Esempio
max
x2
x1 + 2x2 ≤ 4
2x1 + x2 ≤ 4
x1 , x2 ≥ 0, x1 , x2 ∈ I.
Programmazione Lineare Intera – p. 7/4
Altri casi possibili
Za = ∅ ma Sott 6= ∅
Za = ∅ ma l’obiettivo del rilassamento lineare é illimitato
Se A, b e c contengono solo valori razionali, allora
Zott 6= ∅ implica Sott 6= ∅. Se vi sono coefficienti
irrazionali allora puó accadere che Zott 6= ∅ ma il
rilassamento lineare ha obiettivo illimitato.
Programmazione Lineare Intera – p. 8/4
Esempi
max
x2
x1 ≥
1
4
3
4
x1 ≤
x2 ≤ 2
x1 , x2 ≥ 0, x1 , x2 ∈ I.
Programmazione Lineare Intera – p. 9/4
Esempi
max
x2
x1 ≥
1
4
3
4
x1 ≤
x1 , x2 ≥ 0, x1 , x2 ∈ I.
max
x2
√
x2 = 2x1
x1 , x2 ≥ 0, x1 , x2 ∈ I.
Programmazione Lineare Intera – p. 10/4
Un’importante osservazione
I problemi di PL sono in generale molto piú semplici e rapidi
da risolvere dei problemi di PLI In particolare il rilassamento
lineare di un problema di PLI é tipicamente molto piú facile
da risolvere del problema di PLI stesso.
Programmazione Lineare Intera – p. 11/4
Metodi di risoluzione
Perché non risolvere il rilassamento lineare e poi
arrotondare a valori interi gli eventuali valori non interi nella
soluzione ottima del rilassamento lineare?
Tale procedura é accettabile solo se i valori delle variabili
sono elevati. In tal caso infatti l’arrotondamento introduce
un errore relativo del tutto trascurabile.
É del tutto inaccettabile quando le variabili assumono valori
piccoli (in particolare con le variabili binarie che assumono
solo i valori 0 e 1)
Programmazione Lineare Intera – p. 12/4
Problema di PLI in forma standard
Si adottano le stesse regole già viste per i problemi di PL
ma occorre prestare attenzione ad un ulteriore aspetto.
Un esempio:
max
x2
x1 ≤
1
2
1
2
x2 ≤
x1 , x2 ≥ 0, x1 , x2 ∈ I.
Programmazione Lineare Intera – p. 13/4
Continua
Con un problema di PL potremmo trasformarlo in forma
standard con l’aggiunta di due variabili y1 e y2 :
max
x2
x1 + y 1 =
1
2
1
2
x2 + y 2 =
x1 , x2 , y1 , y2 ≥ 0, x1 , x2 ∈ I.
Ma: ci ritroviamo con un problema in cui alcune variabili (x1
e x2 ) possono assumere solo valori interi e altre possono
assumere anche valori non interi. Infatti, ad esempio, se
scelgo x1 = x2 = 0, valori ammissibili per il nostro problema
di PLI, il corrispondente valore di y1 e y2 è pari a 1/2.
Programmazione Lineare Intera – p. 14/4
Il rimedio
Per fare in modo che anche le nuove variabili possano
assumere solo valori interi quando quelle originarie hanno
valori interi, è sufficiente:
trasformare i vincoli in modo tale che in essi compaiano
solo coefficienti e termini noti interi.
Programmazione Lineare Intera – p. 15/4
Nell’esempio
Nel nostro esempio basta moltiplicare entrambi i vincoli per
2:
max
x2
2x1 ≤ 1
2x2 ≤ 1
x1 , x2 ≥ 0, x1 , x2 ∈ I.
e solo a questo punto aggiungere le due variabili y1 e y2 :
max
x2
2x1 + y1 = 1
2x2 + y2 = 1
x1 , x2 , y1 , y2 ≥ 0, x1 , x2 , y1 , y2 ∈ I.
Programmazione Lineare Intera – p. 16/4
Taglio valido
Sia x∗ una soluzione ottima del rilassamento lineare, che si
suppone abbia almeno una coordinata non intera (se tutte
le sue coordinate fossero intere allora x∗ ∈ Zott ).
Definizione 1 Una disequazione wx ≤ v si definisce taglio
valido per il problema di PLI se non é soddisfatta da x∗ ma
é soddisfatta da tutti i punti nella regione ammissibile del
problema di PLI, ovvero
wx∗ > v,
wx ≤ v ∀ x ∈ Za
Programmazione Lineare Intera – p. 17/4
Algoritmi di taglio
Inizializzazione
Si risolva il rilassamento lineare
max
cx
ai x = bi i = 1, . . . , m
xj ≥ 0 j = 1, . . . , n
Se:
Sa = ∅, allora STOP con Za = ∅;
esiste una soluzione ottima, indicata con x∗1 . Se x∗1
ha coordinate tutte intere, allora STOP: x∗1 ∈ Zott .
Altrimenti si ponga k = 1 e si vada al Passo 1.
Programmazione Lineare Intera – p. 18/4
Continua
Si generi un taglio valido, ovvero una disequazione
wk x ≤ vk tale che
Passo 1
wk x∗k > vk
wk x ≤ vk ∀ x ∈ Za
Programmazione Lineare Intera – p. 19/4
Continua
Si aggiunga il nuovo taglio valido ai vincoli originari
del problema e ai tagli validi generati in precedenza e si
risolva il problema di PL
Passo 2
max
cx
ai x = bi i = 1, . . . , m
wr x ≤ vr r = 1, . . . , k
xj ≥ 0 j = 1, . . . , n
Se:
il problema ha regione ammissibile vuota, allora
STOP: Za = ∅.
Altrimenti sia x∗(k+1) la sua soluzione ottima. Se
x∗(k+1) ha coordinate tutte intere, allora STOP:
x∗(k+1) ∈ Zott . Altrimenti si ponga k = k + 1 e si ritorni
al Passo 1.
Programmazione Lineare Intera – p. 20/4
Nota bene
Il problema di PL con l’aggiunta dei tagli non é in forma
standard. Basta la semplice aggiunta di una variabile yr ≥ 0
in ciascuno dei tagli per portarlo alla forma standard:
max
cx
ai x = bi
wr x + y r = v r
xj ≥ 0
yr ≥ 0
i = 1, . . . , m
r = 1, . . . , k
j = 1, . . . , n
r = 1, . . . , k
Programmazione Lineare Intera – p. 21/4
Tagli di Gomory
Sia data la base ottima B ∗ = {xi1 , . . . , xim } per il
rilassamento lineare del problema di PLI con la seguente
riformulazione rispetto a tale base é la seguente:
Pn−m
max
γ0 + j=1 γj xim+j
Pn−m
xi1 = β1 + j=1 α1j xim+j
···
Pn−m
xik = βk + j=1 αkj xim+j
···
Pn−m
xim = βm + j=1 αmj xim+j
x1 , . . . , xn ≥ 0
Programmazione Lineare Intera – p. 22/4
Ipotesi
Si suppone che almeno uno dei valori βr , r = 1, . . . , m, sia
non intero (se fossero tutti interi la soluzione di base
associata a B ∗ sarebbe non solo ottima per il rilassamento
lineare ma anche per il problema di PLI).
Programmazione Lineare Intera – p. 23/4
Esempio
max
5
6 x1
− 13
3 x4
5x1 + 6x3 − 8x4 = 12
−5x1 + 30x2 + 22x4 = 150
x1 , x2 , x3 , x4 ≥ 0, x1 , x2 , x3 , x4 ∈ I.
Programmazione Lineare Intera – p. 24/4
Rilassamento lineare
Base ottima B ∗ = {x1 , x2 }
max
2 − x3 − 3x4
6
8
x1 = 12
−
x
+
5
5 3
5 x4
1
2
x2 = 27
+
x
+
3
5
5
5 x4
x1 , x2 , x3 , x4 ≥ 0
Programmazione Lineare Intera – p. 25/4
Il taglio di Gomory
Sia βk un valore non intero. Equazione relativa a xik
(equazione generatrice del taglio):
xik = βk + αk1 xim+1 + αk2 xim+2 + · · · + αk,n−m xin .
Taglio di Gomory:
−fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin ≥ 0
dove
fkj , j = 1, . . . , n − m, é la mantissa di −αkj , cioé
fkj = −αkj − ⌊−αkj ⌋ ≥ 0,
fk é la mantissa di βk , cioé
fk = βk − ⌊βk ⌋ > 0.
Programmazione Lineare Intera – p. 26/4
Esempio
Equazione generatrice del taglio:
12 6
8
x1 =
− x3 + x4
5
5
5
Mantissa di
12
5:
12
12
12
2
−⌊ ⌋=
−2=
5
5
5
5
Mantissa di 65 :
6
6
6
1
−⌊ ⌋= −1=
5
5
5
5
Programmazione Lineare Intera – p. 27/4
Continua
Mantissa di − 85 :
8
8
2
8
− − ⌊− ⌋ = − − (−2) =
5
5
5
5
Taglio di Gomory:
2 1
2
− + x3 + x4 ≥ 0
5 5
5
Programmazione Lineare Intera – p. 28/4
Continua
Per mantenere il formato standard, possiamo aggiungere
una nuova variabile y1 e riscrivere il taglio attraverso la
seguente coppia di vincoli:
y1 = −fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin
y1 ≥ 0.
Programmazione Lineare Intera – p. 29/4
Nell’esempio
2 1
2
− + x3 + x4 ≥ 0
5 5
5
m
2 1
2
y 1 = − + x3 + x4
5 5
5
y1 ≥ 0
Programmazione Lineare Intera – p. 30/4
Il taglio di Gomory è valido
La soluzione ottima del rilassamento lineare non soddisfa il taglio.
Nella soluzione ottima del rilassamento lineare si ha:
xim+1 = · · · = xin = 0
quindi, in corrispondenza della soluzione ottima del
rilassamento lineare si ha:
y1 = −fk < 0.
Programmazione Lineare Intera – p. 31/4
Il taglio di Gomory è valido
Generico punto in Za :
xi 1 , . . . , x i n
Sostituiamo le coordinate di tale punto nell’ equazione
generatrice del taglio:
xik = βk +
n−m
X
αkj xim+j
j=1
e nel taglio di Gomory:
y 1 = −fk +
n−m
X
fkj xim+j
j=1
Programmazione Lineare Intera – p. 32/4
Continua
Si vuole dimostrare che il valore di y 1 é ≥ 0 e cioé che la
generica soluzione ammissibile in Za soddisfa il taglio. Ma
prima dimostriamo che:
in corrispondenza di ogni punto in Za , il valore di y 1 é intero
Sommo membro a membro le due equazioni:
xik = βk +
n−m
X
αkj xim+j
j=1
e:
y 1 = −fk +
n−m
X
fkj xim+j
j=1
Programmazione Lineare Intera – p. 33/4
Continua
Dalla somma ho:
y 1 + xik = (βk − fk ) +
−fk + βk = ⌊βk ⌋
n−m
X
(αkj + fkj )xim+j
j=1
fkj + αkj = −⌊−αkj ⌋
Quindi:
y 1 = ⌊βk ⌋ − xik −
n−m
X
j=1
⌊−αkj ⌋xim+j
Programmazione Lineare Intera – p. 34/4
Continua
y 1 ≥ 0 in corrispondenza di punti in Za
y 1 + fk =
n−m
X
j=1
fkj xim+j
|{z} | {z }
≥0
≥0
Quindi:
y 1 + fk ≥ 0
e, per la interezza di y 1 e fk < 1, abbiamo che deve essere
y 1 ≥ 0.
Programmazione Lineare Intera – p. 35/4
Osservazione 1
Abbiamo dimostrato che la nuova variabile che viene
introdotta (la y1 ) assume sempre valori interi in
corrispondenza di ogni punto di Za . Quindi con l’aggiunta
del taglio posso riscrivere il mio problema di PLI in questo
modo:
max
cx
ai x = bi
i = 1, . . . , m
Pn−m
y1 = −fk + j=1 fkj xim+j
xj ≥ 0, xj ∈ I
y1 ≥ 0, y1 ∈ I
j = 1, . . . , n
Programmazione Lineare Intera – p. 36/4
Nell’esempio
max
5
6 x1
− 13
3 x4
5x1 + 6x3 − 8x4 = 12
−5x1 + 30x2 + 22x4 = 150
y1 = − 25 + 15 x3 + 25 x4
x1 , x2 , x3 , x4 , y1 ≥ 0, x1 , x2 , x3 , x4 , y1 ∈ I.
Programmazione Lineare Intera – p. 37/4
Continua
Quindi: dal momento che il nuovo problema con l’aggiunta
del taglio é ancora un problema di PLI (tutte la variabili,
compresa la nuova, y1 , sono vincolate ad essere intere)
possiamo iterare la procedura, cioé se dopo l’aggiunta del
primo taglio la risoluzione del nuovo rilassamento lineare
non ha coordinate tutte intere, possiamo generare un nuovo
taglio utilizzando la stessa regola di generazione.
Programmazione Lineare Intera – p. 38/4
Osservazione 2
Il rilassamento lineare del problema di PLI dopo l’aggiunta
del taglio non deve essere risolto da zero. Infatti, possiamo
prendere la coppia di vincoli
y1 = −fk +
n−m
X
j=1
fkj xim+j
y1 ≥ 0,
che esprime il taglio ed aggiungerla alla riformulazione
rispetto alla base ottima B ∗ del rilassamento lineare prima
dell’introduzione del taglio.
Programmazione Lineare Intera – p. 39/4
Continua
max
γ0 +
Pn−m
xi1 = β1 +
j=1 γj xim+j
Pn−m
j=1 α1j xim+j
xik = βk +
···
Pn−m
xim = βm +
···
Pn−m
y1 =
j=1
αkj xim+j
j=1 αmj xim+j
Pn−m
−fk + j=1 fkj xim+j
x1 , . . . , xn , y 1 ≥ 0
Programmazione Lineare Intera – p. 40/4
Continua
Questa è giá la riformulazione del nuovo rilassamento
lineare rispetto alla base B ∗ ∪ {y1 }. Tale base è
non ammissibile per il primale (y1 = −fk < 0)
ammissibile per il duale
Programmazione Lineare Intera – p. 41/4
Nell’esempio
Base B ∗ ∪ {y1 } = {x1 , x2 , y1 } ammissibile per il duale
max
2 − x3 − 3x4
6
8
x1 = 12
−
x
+
5
5 3
5 x4
x2 =
27
1
2
+
x
+
3
5
5
5 x4
− 52 + 15 x3 + 25 x4
y1 =
x1 , x2 , x3 , x4 , y1 ≥ 0.
Programmazione Lineare Intera – p. 42/4
Continua
Applicando il simplesso duale si arriva in una iterazione alla
base ottima {x1 , x2 , x3 }:
max
0 − 5y1 − x4
x1 = 0 − 6y1 + 4x4
x2 = 5 − y1 + 3x4
x3 = 2 + 5y1 − 2x4
x1 , x2 , x3 , x4 , y 1 ≥ 0
Soluzione ottima del rilassamento lineare e del problema di
PLI:
x∗1 = 0 x∗2 = 5 x∗3 = 2 x∗4 = 0
Valore ottimo del rilassamento lineare e del problema di PLI
=0
Programmazione Lineare Intera – p. 43/4
Osservazione 3
Se ad ogni iterazione il taglio di Gomory viene realizzato a
partire dalla prima equazione con un termine noto βk non
intero, allora l’algoritmo termina in un numero finito di
iterazioni.
Programmazione Lineare Intera – p. 44/4