La programmazione lineare e l’algoritmo del simplesso
Albanesi Valentina, Radice David e Travaglino Ermanno
Sommario
Questo breve testo ha come obiettivo la descrizione concisa dei principali risultati connessi con la programmazione lineare. Si tratterà in particolare l’algoritmo del simplesso.
1. La programmazione lineare
Qui descriviamo la programmazione lineare come problema base.
1.1 Ipotesi base modelli PL
Ipotesi di modelli di PL:
Linearità: proporzionalità e additività della funzione obiettivo e dei vincoli.
×
Proporzionalità: contributo di ogni variabile = costante variabile. Non si tiene conto di economie di scala!
⇒
Additività: contributo di tutte le variabili = somma dei singoli contributi. Prodotti in competizione, guadagni non indipendenti!
Divisibilità: le variabili possono assumere valori frazionari (reali).
Parametri: supponiamo che tutti i parametri numerici del modello possano essere considerati costanti, ovvero stimati con un grado di precisione sufficiente.
1.2 Forme equivalenti
Abbiamo una forma generale:
min z = cTx funzione obiettivo
(max)
≥ ←
A1x ≥ b1 vincoli di diseguaglianza
≤ ←
A2x ≤ b2 vincoli di diseguaglianza
A3x = b3 vincolo di uguaglianza
È una forma standard:
min z = cTx funzione obiettivo
A x = b solo vincoli di uguaglianza
x ≥ 0 tutte variabili non negative
Le due formulazioni sono equivalenti.
1.3 Regole di trasformazione
Delle regole di trasformazione regolano il passaggio da un’altra forma.
NB: passando da un’altra forma possono variare numero di variabili e di vincoli.
1
Prima e dopo
Prima
max cTx
Dopo
min cTx
A x + s = b
A x ≤ b
s ≥ 0 variabile di scarto
A x − s = b
A x ≥ b
s ≥ 0 variabile di surplus
xj = xj+ − xj−
xj+ ≥ 0
xj− ≥ 0
xj libera
2. Il metodo del simplesso
Ci occupiamo di problemi in forma standard:
min z = cTx
s.t.:
A x = b
x ≥ 0
e in particolare della loro risoluzione per mezzo dell’algoritmo del simplesso.
2.1 La geometria del simplesso
Qui di seguito descriviamo la geometria del simplesso. L’approccio è assolutamente non convenzionale e fa uso di una notazione sintetica inventata ad hoc con lo scopo di rendere più chiaro l’algoritmo e in particolare di descrivere in maniera compatta matriciale i vari passaggi. In particolare consente di dare pieno significato a espressioni del tipo “x = x + x” e di “vedere” in azione l’algoritmo del simplesso in un caso generale, senza dover andare a scrivere tutti i vincoli come sommatorie.
Il nostro problema di partenza richiede l’ottimizzazione vincolata di z su:
Ω := {x ∈ Rn : A x = b, x ≥ 0}
A ∈ Rm×n, x ∈ Rn e b ∈ Rm.
È chiaro che essendo: ∇z = c
Non ci sono minimi in punti interni di Ω.
L’obiettivo è quindi quello di trovare un modo più “furbo” per rappresentare A x e ∂Ω. Per farlo ci dimenticheremo inizialmente del problema di partenza per sviluppare una breve teoria.
Cominciamo prendendo tre numeri naturali non nulli n, k, m tali che n = m + k. Prendiamo in esame i multi-indici
{α ∈ {0, 1}n : |α| = m}.
Definiamo norma di un multi-indice il numero:
|α| = ∑i=1n αi.
Inoltre definiamo il multi-indice complementare αc come:
αic = 1 se αi = 0
αic = 0 se αi = 1.
Definiamo inoltre traccia di un multi-indice l’insieme:
γ(α) := {k ∈ [0, n] : αi = 1}.
Sia inoltre {ei}i=1n la base canonica di Rn e x ∈ Rn. Chiameremo, inoltre, con ki(α) la posizione dell’i-simo 1 nel multi-indice.
In particolare ci vogliamo concentrare sul sottoinsieme di {0, 1}n che chiameremo Q:
Q = {α ∈ {0, 1}n : |α| = m}
o anche ki dove sarà evidente a quale multi-indice ci si riferisca.
Chiaramente |Q| = n su m. Quindi se α ∈ Q possiamo introdurre una nuova struttura algebrica in Rn che indicheremo con:
Rn = Rm ⊕ Rk
α ⊕ αc.
Per poter definire questa nuova struttura usiamo delle funzioni lineari indicizzate nell’intero insieme dei multi-indici definite come:
sα(x) = s ⇒ ik(x) = xiei
Usando questa regola è possibile scrivere per ogni x ∈ Rn:
x = xα ⊕ xαc := iα(x) + iαc(x), x ∈ Rm ⊕ Rk. (1)
2
In questo modo dunque interpretiamo ogni elemento di Rn come la somma delle sue proiezioni inverse su sottospazi di dimensione m e k. I due sottospazi M e K sono determinati dalle basi:
M = span {eki(α)}
K = span {eki(αc)}
Sono ovviamente ortogonali e M ∪ K = Rn.