<marco />
← Tutti gli articoli
13 min di lettura

Simplesso con le matrici: basi, forma canonica e costi ridotti

ottimizzazione

Nel metodo del simplesso il passo C consisteva nel riscrivere il sistema a ogni iterazione, esprimendo alcune variabili in funzione delle altre. In sostanza, si ripeteva sempre la stessa operazione. La formulazione matriciale permette di esprimere questo procedimento in modo compatto e generale.

Continuiamo con il problema di inverter e batterie in forma standard:

2x1+x2+s1=14x2+s2=64x1+3x2+φ=0\begin{aligned} 2x_1 + x_2 + s_1 &= 14 \\ x_2 + s_2 &= 6 \\ 4x_1 + 3x_2 + \varphi &= 0 \end{aligned}

Vincoli, riscritti, in forma matriciale

I vincoli sono r=2r = 2 equazioni in c=4c = 4 incognite. In forma matriciale, F w=bF\,w = b:

F=[21100101]b=[146]F = \begin{bmatrix} 2 & 1 & 1 & 0 \\ 0 & 1 & 0 & 1 \end{bmatrix} \qquad b = \begin{bmatrix} 14 \\ 6 \end{bmatrix}

con w=(x1,x2,s1,s2)w = (x_1, x_2, s_1, s_2). È un sistema sottodeterminato: ha infinite soluzioni, perché si possono scegliere liberamente c−r=2c - r = 2 variabili, e le altre 2 sono allora determinate dal sistema.

Base e soluzione di base

Riscriviamo il modello, scelgiamo rr colonne di FF linearmente indipendenti: formano la matrice di base BB. Le colonne rimaste formano NN. Le variabili si dividono di conseguenza:

  • le variabili di base wBw_B, associate alle colonne di BB;
  • le variabili non di base wNw_N, associate alle colonne di NN.
Definizione: matrice di base

Sia F∈Rr×cF \in \mathbb{R}^{r \times c} una matrice di rango rr, cioè con rr righe linearmente indipendenti. Una matrice di base è una sottomatrice quadrata B∈Rr×rB \in \mathbb{R}^{r \times r} formata da rr colonne di FF linearmente indipendenti.

Avendo colonne indipendenti, BB è invertibile:

det⁡(B)≠0\det(B) \ne 0

Il sistema non cambia, cambia solo il modo di scriverlo. Il prodotto F wF\,w si spezza in due pezzi, uno con le colonne di base e uno con le altre:

F w=B wB+N wN=bF\,w = B\,w_B + N\,w_N = b

Ora si moltiplicano entrambi i lati per B−1B^{-1}. Siccome B−1B=IB^{-1} B = I, davanti a wBw_B resta l'identità:

wB+B−1N wN=B−1bw_B + B^{-1} N\, w_N = B^{-1} b

Questa è la forma canonica rispetto alla base BB. Portando a destra il termine con wNw_N, ogni variabile di base è espressa solo con le non di base:

wB=B−1b−B−1N wNw_B = B^{-1} b - B^{-1} N\, w_N
Definizione: forma canonica

Un sistema è in forma canonica rispetto a un insieme di variabili di base se ogni variabile di base compare in una sola equazione, con coefficiente 1. Detto con le matrici: le colonne delle variabili di base formano l'identità.

Il vantaggio è che il sistema è già "risolto": ogni equazione dà il valore della sua variabile di base, una volta fissate le non di base.

Nel nostro esempio. Il sistema di partenza è già in forma canonica rispetto a {s1,s2}\{s_1, s_2\}: s1s_1 compare solo nella prima equazione, s2s_2 solo nella seconda, entrambe con coefficiente 1.

Rispetto a {x1,x2}\{x_1, x_2\} invece no, perché x2x_2 compare in tutte e due. Con

B=[2101]B−1=[12−1201]B = \begin{bmatrix} 2 & 1 \\ 0 & 1 \end{bmatrix} \qquad B^{-1} = \begin{bmatrix} \tfrac{1}{2} & -\tfrac{1}{2} \\ 0 & 1 \end{bmatrix}

e N=IN = I (le colonne di s1s_1 e s2s_2), la moltiplicazione per B−1B^{-1} dà:

x1+12s1−12s2=4x2+s2=6\begin{aligned} x_1 + \tfrac{1}{2}s_1 - \tfrac{1}{2}s_2 &= 4 \\ x_2 + s_2 &= 6 \end{aligned}

Ora x1x_1 e x2x_2 compaiono ciascuna in una sola equazione. Portando a destra gli scarti:

x1=4−12s1+12s2x2=6−s2\begin{aligned} x_1 &= 4 - \tfrac{1}{2}s_1 + \tfrac{1}{2}s_2 \\ x_2 &= 6 - s_2 \end{aligned}

Con s1=s2=0s_1 = s_2 = 0 si legge subito il vertice B (4, 6).

Mettendo le variabili non di base a zero si ottiene la soluzione di base, wB=B−1bw_B = B^{-1} b. Se è anche non negativa si chiama soluzione di base ammissibile, ed è un vertice della regione ammissibile.

Nel nostro esempio le possibili coppie di colonne sono sei:

Variabili di base Soluzione di base Ammissibile? Punto
s1,s2s_1, s_2 s1=14s_1 = 14, s2=6s_2 = 6 sì O (0, 0)
x1,s2x_1, s_2 x1=7x_1 = 7, s2=6s_2 = 6 sì A (7, 0)
x1,x2x_1, x_2 x1=4x_1 = 4, x2=6x_2 = 6 sì B (4, 6)
x2,s1x_2, s_1 x2=6x_2 = 6, s1=8s_1 = 8 sì C (0, 6)
x2,s2x_2, s_2 x2=14x_2 = 14, s2=−8s_2 = -8 no (0, 14)
x1,s1x_1, s_1 nessuna: colonne dipendenti — —

Le quattro soluzioni di base ammissibili sono esattamente i quattro vertici del disegno. Il punto (0, 14) è l'incrocio di due rette dei vincoli, ma sta fuori dalla regione. L'ultima coppia non è una base: le rette x2=0x_2 = 0 e x2=6x_2 = 6 sono parallele e non si incontrano.

I costi ridotti

Ora aggiungiamo anche l'obbiettivo: nel nostro caso 4x1+3x2+φ=04x_1 + 3x_2 + \varphi = 0. In generale si scrive

−c⊤w+φ=γ-c^\top w + \varphi = \gamma

dove:

  • cc contiene i coefficienti dell'obiettivo da minimizzare (Qui c=(−4,−3,0,0)c = (-4, -3, 0, 0)).
  • γ\gamma è una costante (poichè gli scarti non portano né profitto né costo, e γ=0\gamma = 0).

L'idea è la stessa della forma canonica: esprimere φ\varphi solo con le variabili non di base. Così si vede subito cosa succede all'obiettivo se una di loro aumenta.

1. Si ricava φ, separando i coefficienti delle variabili di base (cBc_B) da quelli delle non di base (cNc_N):

φ=γ+cB⊤wB+cN⊤wN\varphi = \gamma + c_B^\top w_B + c_N^\top w_N

2. Si sostituisce wB=B−1b−B−1N wNw_B = B^{-1} b - B^{-1} N\, w_N, la forma canonica:

φ=γ+cB⊤B−1b−cB⊤B−1N wN+cN⊤wN\begin{aligned} \varphi = \gamma &+ c_B^\top B^{-1} b - c_B^\top B^{-1} N\, w_N + c_N^\top w_N \end{aligned}

3. Si raccolgono i due termini che contengono wNw_N:

φ=γ+cB⊤B−1b−rN⊤wNrN⊤=cB⊤B−1N−cN⊤\begin{aligned} \varphi &= \gamma + c_B^\top B^{-1} b - r_N^\top w_N \\[4pt] r_N^\top &= c_B^\top B^{-1} N - c_N^\top \end{aligned}

Nel vertice, dove wN=0w_N = 0, resta solo γ+cB⊤B−1b\gamma + c_B^\top B^{-1} b: è il valore dell'obiettivo nella soluzione di base.

Il vettore rNr_N contiene i costi ridotti (o coefficienti di costo relativo), uno per ogni variabile non di base. Impostando tutto i valori delle variabili non di base a 0 cosa succede se incremento la variabile non di base, per esempio da 0 a 1, di quanto cambia l'obiettivo?

La risposta si legge nella formula del passo 3. Il prodotto rN⊤wNr_N^\top w_N è una somma, con un termine per ogni variabile non di base:

φ=γ+cB⊤B−1b−(r1w1+r2w2+… )\begin{aligned} \varphi = \gamma &+ c_B^\top B^{-1} b \\ &- (r_1 w_1 + r_2 w_2 + \dots) \end{aligned}

Nel vertice tutte le ww della somma valgono 0. Se una sola di loro, wkw_k, passa a 1, nella parentesi resta solo rk⋅1r_k \cdot 1: l'obiettivo diventa γ+cB⊤B−1b−rk\gamma + c_B^\top B^{-1} b - r_k. Rispetto al vertice è cambiato di −rk-r_k.

Due esempi dal nostro problema:

  • Nell'origine la base è {s1,s2}\{s_1, s_2\} e l'obiettivo è φ=0−4x1−3x2\varphi = 0 - 4x_1 - 3x_2, quindi i costi ridotti di x1x_1 e x2x_2 sono 44 e 33. Produrre un inverter in più (x1x_1 da 0 a 1) fa scendere φ\varphi di 4, cioè fa guadagnare 4 k€. Conviene.
  • Nel vertice B la base è {x1,x2}\{x_1, x_2\} e l'obiettivo è φ=−34+2s1+s2\varphi = -34 + 2s_1 + s_2, quindi i costi ridotti di s1s_1 e s2s_2 sono −2-2 e −1-1. Lasciare inutilizzata un'ora di collaudo (s1s_1 da 0 a 1) fa salire φ\varphi di 2, cioè fa perdere 2 k€. Non conviene.

Da qui viene la condizione di ottimalità del simplesso, cioè il passo A. Poiché φ=costante−rN⊤wN\varphi = \text{costante} - r_N^\top w_N:

  • se c'è un rk>0r_k > 0, aumentare wkw_k fa scendere φ\varphi: la base non è ottima;
  • se tutti gli rk≤0r_k \le 0, nessun aumento può far scendere φ\varphi: la base è ottima.

Nell'esempio, alla base ottima wB=(x1,x2)w_B = (x_1, x_2):

B=[2101]B−1=[12−1201]B = \begin{bmatrix} 2 & 1 \\ 0 & 1 \end{bmatrix} \qquad B^{-1} = \begin{bmatrix} \tfrac{1}{2} & -\tfrac{1}{2} \\ 0 & 1 \end{bmatrix}

B−1b=(4,6)B^{-1} b = (4, 6): è il vertice B. Con cB=(−4,−3)c_B = (-4, -3) e le non di base s1,s2s_1, s_2 (le cui colonne formano l'identità e i cui costi sono zero):

rN⊤=cB⊤B−1=(−2, −1)r_N^\top = c_B^\top B^{-1} = (-2,\ -1)

Entrambi ≤0\le 0: la base è ottima, e φ=cB⊤B−1b=−34\varphi = c_B^\top B^{-1} b = -34. Sono esattamente i coefficienti trovati a mano nell'ultima iterazione, φ=−34+2s1+s2\varphi = -34 + 2s_1 + s_2.

Il tableau

In pratica i conti si organizzano in una tabella, il tableau, che contiene la forma canonica rispetto alla base corrente. Quello finale del nostro problema:

x1x_1 x2x_2 s1s_1 s2s_2 φ\varphi termine noto
riga di x1x_1 1 0 1/2 −1/2 0 4
riga di x2x_2 0 1 0 1 0 6
riga dell'obiettivo 0 0 −2 −1 1 −34

Si legge:

  • le colonne delle variabili di base sono vettori unitari;
  • la colonna dei termini noti è B−1bB^{-1}b, con i valori delle variabili di base, e in fondo il valore dell'obiettivo;
  • la riga dell'obiettivo contiene i costi ridotti rNr_N;
  • le colonne delle variabili di scarto contengono B−1B^{-1} (sopra) e cB⊤B−1c_B^\top B^{-1} (sotto).
  • I vincoli in forma standard sono un sistema sottodeterminato F w=bF\,w = b, con infinite soluzioni.
  • Una base BB è un insieme di colonne indipendenti. La forma canonica esprime le variabili di base con quelle non di base: wB=B−1b−B−1N wNw_B = B^{-1}b - B^{-1}N\,w_N.
  • La soluzione di base si ottiene con wN=0w_N = 0. Se è non negativa è un vertice.
  • I costi ridotti rN⊤=cB⊤B−1N−cN⊤r_N^\top = c_B^\top B^{-1}N - c_N^\top dicono se conviene far entrare una variabile: se sono tutti ≤0\le 0, la base è ottima.