Algoritmo del simplesso: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Riga 2:
L<nowiki>'</nowiki>'''algoritmo del simplesso''', ideato dall'americano [[George Dantzig]] nel [[1947]], è un metodo numerico per risolvere problemi di [[programmazione lineare]]. È citato dalla rivista statunitense ''Computing in Science and Engineering'' come uno dei dieci migliori [[algoritmo|algoritmi]] del secolo.<ref>Computing in Science and Engineering, volume 2, no. 1, 2000</ref>
 
Questo [[algoritmo]] fa uso del concetto di [[simplesso]], cioè un [[politopo]] di ''<math>N+1''</math> vertici in ''<math>N''</math> dimensioni:, ossia un [[segmento]] di retta in una dimensione, un [[triangolo]] in due dimensioni, un [[tetraedro]] in tre dimensioni.
 
== La programmazione lineare ==
Riga 8:
Un problema di [[programmazione lineare]] consiste nel massimizzare o minimizzare una [[funzione lineare]] definita sull'insieme delle soluzioni di un [[sistema di disequazioni]] [[disequazione lineare|lineari]], dette ''vincoli''.
 
Per esempio il problema:<br />
 
:<math>\begin{cases} \max \quad x + 2y \\
x - y \le 4 \\
x, \ge 0 \\
y \ge 0 \end{cases} </math>
 
è un problema di programmazione lineare.
 
Riga 42 ⟶ 45:
# Verifica di illimitatezza. Condizione sufficiente perché il problema sia illimitato è che nella colonna <math> h </math> individuata si abbiano solo valori negativi nella matrice, cioè <math> \mathbf{a}_{ih} < 0 \quad \forall i =1,...,n</math>. Dunque il problema è illimitato lungo questa direzione.
# Se non siamo in presenza di un problema illimitato, scelgo il pivot che genera il minimo rapporto tra il termine noto e il coefficiente della relativa variabile nella colonna <math>h</math> della matrice <math> \mathbf {A}</math>, cioè <math> i'=\min \left\{ \frac{\mathbf{b}_{i} }{ \mathbf{a}_{ih} } \; \mathbf{:} \; \mathbf{a}_{ih}>{0}, \; \forall i =1,...,n\right\}</math> e applico l'operazione di cardine.
L'operazione cardine è quella operazione che permette di spostarsi lungo una direzione ammissibile per un certo passo in modo che la nuova soluzione sia anch'essa ammissibile ma migliore di quella precedente di partenza.
 
=== Verifica di ottimalità / Criterio d'arresto ===
Dato il problema di programmazione lineare <math>\min \left\{ \gamma\left(\mathbf{x}\right):=\mathbf{c}^{T}\mathbf{x}:A\mathbf{x}=\mathbf{b},\mathbf{x}\geq\mathbf{0}\right\}</math>
si considera la [[Base (algebra lineare)|base]] ammissibile <math>B</math> contenente colonne linearmente indipendenti di <math>A</math>. Si può riscrivere la relazione <math>A\mathbf{x}=\mathbf{b}</math> come:
 
:<math>B\cdot\mathbf{x}_{B}+F\cdot\mathbf{x}_{F}=\mathbf{b}</math>
 
con <math>F</math> matrice contenente le colonne di <math>A</math> escluse dalla base ammissibile <math>B</math>.
Riga 53 ⟶ 57:
Ancora si può riscrivere la relazione precedente come:
 
:<math>B\cdot\mathbf{x}_{B}=\mathbf{b}-F\cdot\mathbf{x}_{F}\Rightarrow\mathbf{x}_{B}=B^{-1}\cdot\mathbf{b}-B^{-1}\cdot F\cdot\mathbf{x}_{F}</math>
 
e, andando a sostituire la relazione nella funzione obiettivo relativa al problema iniziale, si ha:
 
:<math>\mathbf{c}^{T}\mathbf{x}=\left[\begin{bmatrix}
\mathbf{c}_{B}^{T} & \mathbf{c}_{F}^{T}\end{bmatrix}\right]\cdot\left[\begin{bmatrix}
\mathbf{x}_{B}\\
\mathbf{x}_{F}\end{bmatrix}\right]\Rightarrow</math>
 
:<math>\mathbf{c}^{T}\mathbf{x}=\left[\begin{bmatrix}
\mathbf{c}_{B}^{T} & \mathbf{c}_{F}^{T}\end{bmatrix}\right]\cdot\left[\begin{bmatrix}
B^{-1}\cdot\mathbf{b}-B^{-1}\cdot F\cdot\mathbf{x}_{F}\\
\mathbf{x}_{F}\end{bmatrix}\right]\Rightarrow</math>
 
:<math>\mathbf{c}^{T}\mathbf{x}=\mathbf{c}_{B}^{T}B^{-1}\mathbf{b}+\mathbf{x}_{F}\cdot\left(\mathbf{c}_{F}^{T}-\mathbf{c}_{B}^{T}B^{-1}F\right)=\mathbf{c}^{T}\mathbf{x}+k</math>
 
con <math>k</math> valore costante e <math>{c}^{T}:=\mathbf{c}_{F}^{T}-\mathbf{c}_{B}^{T}B^{-1}A</math> vettore dei costi ridotti.
Riga 74 ⟶ 78:
 
== Prestazioni ==
{{senza fonte|In pratica l'algoritmo funziona molto bene}}, ma in teoria non è polinomiale e si possono costruire speciali istanzeesempi in cui l'algoritmo richiede di visitare un numero di vertici esponenziale nellerispetto alle dimensioni del problema. Reali competitori del metodo del simplesso per problemi di grandi dimensioni sono i [[Metodimetodi a punti interni]].
 
== Tipi di simplesso ==