1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2024-11-26 09:54:19 +00:00
triennale-appunti-steffo/src/routes/OttimizzazioneLineare.js

581 lines
33 KiB
JavaScript
Raw Normal View History

2020-03-09 23:18:13 +00:00
import {Component} from 'preact'
import Split from "../components/old/split";
2020-05-23 22:53:01 +00:00
import Latex from "../components/Latex";
2020-05-27 16:31:11 +00:00
import Panel from "../components/Elements/Panel";
2020-05-23 22:53:01 +00:00
import Example from "../components/example";
import Todo from "../components/old/todo";
2020-05-23 22:53:01 +00:00
import Timer from "../components/old/timer";
2020-05-26 16:27:29 +00:00
import Empty from "../components/OttimizzazioneLineare/Empty";
2020-05-25 17:00:17 +00:00
import Unbounded from "../components/OttimizzazioneLineare/Unbounded";
import Min from "../components/OttimizzazioneLineare/Min";
import Max from "../components/OttimizzazioneLineare/Max";
import PLatex from "../components/PLatex";
2020-05-26 16:27:29 +00:00
import LatexDefaultInline from "../contexts/LatexDefaultInline";
import TablePanel from "../components/TablePanel";
import Finite from "../components/OttimizzazioneLineare/Finite";
2020-03-09 23:19:30 +00:00
const r = String.raw;
2020-03-09 23:18:13 +00:00
export default class OttimizzazioneLineare extends Component {
render() {
return (
<div>
<h1>Ottimizzazione lineare intera</h1>
2020-05-23 22:53:01 +00:00
<Split title={"Unimore"}>
2020-03-09 23:19:30 +00:00
<Panel title={"Videolezioni su YouTube"}>
<p>
2020-03-23 14:47:42 +00:00
Ho rimosso il rumore in sottofondo da tutti i video di Ricerca Operativa!
2020-03-11 16:15:17 +00:00
</p>
<p>
2020-03-23 14:47:42 +00:00
<b><a href={"https://www.youtube.com/playlist?list=PLh93e8qjTszffkHNn-19CqUOhHFbhBlBh"}>Guardate i video qui!</a></b>
2020-03-09 23:19:30 +00:00
</p>
</Panel>
2020-05-23 22:53:01 +00:00
<Panel title={"Prossimi appelli"}>
<ol>
<li><Timer to={"2020-06-08"}/></li>
<li><Timer to={"2020-06-25"}/></li>
<li><Timer to={"2020-07-14"}/></li>
</ol>
</Panel>
2020-03-09 23:19:30 +00:00
</Split>
2020-05-26 16:27:29 +00:00
<LatexDefaultInline.Provider value={false}>
<Split title={"Glossario"}>
<TablePanel>
<thead>
<tr>
<th><abbr title={"Vettore / matrice"}>v</abbr></th>
<th><abbr title={"Elemento singolo"}>s</abbr></th>
<th>Significato</th>
</tr>
</thead>
<tbody>
<tr>
<td><Latex>{r`\mathbf{x}`}</Latex></td>
<td><Latex>{r`x_i`}</Latex></td>
<td>Incognite</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{s}`}</Latex></td>
<td><Latex>{r`s_i`}</Latex></td>
<td>Variabili slack</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{c}`}</Latex></td>
<td><Latex>{r`c_i`}</Latex></td>
<td>Coefficienti della funzione obiettivo</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{A}`}</Latex></td>
<td><Latex>{r`a_{ij}`}</Latex></td>
<td>Coefficienti dei vincoli</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{b}`}</Latex></td>
<td><Latex>{r`b_i`}</Latex></td>
<td>Termini noti dei vincoli</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{y}`}</Latex></td>
<td><Latex>{r`y_i`}</Latex></td>
<td>Incognite artificiali</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{u}`}</Latex></td>
<td><Latex>{r`u_i`}</Latex></td>
<td>Coefficienti di rilassamento</td>
</tr>
<tr>
<td/>
<td><Latex>{r`c_0`}</Latex></td>
<td>Valore ottimo di un problema</td>
</tr>
2020-05-27 16:31:11 +00:00
<tr>
<td><Latex>{r`\mathbf{x}_B`}</Latex></td>
<td/>
<td>Incognite in base</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{c}_B`}</Latex></td>
<td/>
<td>Coefficienti della funzione obiettivo delle variabili in base</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{B}`}</Latex></td>
<td/>
<td>Coefficienti dei vincoli delle variabili in base</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{x}_F`}</Latex></td>
<td/>
<td>Incognite fuori base</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{c}_F`}</Latex></td>
<td/>
<td>Coefficienti della funzione obiettivo delle variabili fuori base</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{F}`}</Latex></td>
<td/>
<td>Coefficienti dei vincoli delle variabili fuori base</td>
</tr>
2020-05-26 16:27:29 +00:00
</tbody>
</TablePanel>
<TablePanel>
<thead>
<tr>
<th>Simboli</th>
<th>Significato</th>
</tr>
</thead>
<tbody>
<tr>
<td><Latex>{r`\mathbf{c}^T \mathbf{x}`}</Latex></td>
<td>Soluzione del problema</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{A} \mathbf{x} = \mathbf{b}`}</Latex></td>
<td>Vincoli in forma standard</td>
</tr>
<tr>
<td><Latex>{r`z(\dots)`}</Latex></td>
<td>Funzione obiettivo</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{u}^T \mathbf{b}`}</Latex></td>
<td>Soluzione del problema duale</td>
</tr>
<tr>
<td><Latex>{r`\mathbf{u}^T \mathbf{A} = \mathbf{c}^T`}</Latex></td>
<td>Vincoli del problema duale in forma standard</td>
</tr>
</tbody>
</TablePanel>
</Split>
</LatexDefaultInline.Provider>
2020-03-09 23:19:30 +00:00
<Split title={"Le basi"}>
<Panel title={"Funzione obiettivo"}>
<p>
La funzione obiettivo è la funzione con valore noto sconosciuto:
</p>
<p>
<Latex>{r`z = C_1 \cdot x_1 + C_2 \cdot x_2 + C_n \cdot x_n`}</Latex>
</p>
</Panel>
</Split>
<Split title={"Problemi di ottimizzazione lineare"}>
<Panel title={"Cosa sono?"}>
<p>
I problemi di ottimizzazione lineare sono problemi che cercano di <Min>minimizzare</Min>/<Max>massimizzare</Max> il valore di una <i>funzione obiettivo</i> le cui incognite sono sottoposte a un <b>sistema di <i>vincoli</i></b>.
</p>
</Panel>
<Panel title={"Funzione obiettivo"}>
2020-03-09 23:19:30 +00:00
<p>
La funzione da <Min>minimizzare</Min>/<Max>massimizzare</Max>.
2020-03-09 23:19:30 +00:00
</p>
<p>
Il vettore dei suoi coefficienti è detto <Latex>{r`\mathbf{c}`}</Latex>, mentre quello delle sue incognite <Latex>{r`\mathbf{x}`}</Latex>.
2020-03-09 23:19:30 +00:00
</p>
2020-05-26 16:27:29 +00:00
</Panel>
<Panel title={"Vincoli"}>
2020-03-09 23:19:30 +00:00
<p>
2020-05-26 16:27:29 +00:00
Equazioni e disequazioni a cui devono sottostare le incognite perchè esse formino una soluzione valida.
</p>
<p>
I loro coefficienti sono contenuti nella matrice <Latex>{r`\mathbf{A}`}</Latex>, mentre i loro termini noti nel vettore <Latex>{r`\mathbf{b}`}</Latex>.
</p>
</Panel>
<Panel title={"Valore ottimo"}>
<p>
La <b>soluzione</b> di un problema, ricavabile dal prodotto <Latex>{r`\mathbf{c}^T \mathbf{x}`}</Latex>.
</p>
<p>
Spesso, la funzione obiettivo è indicata con il nome <Latex>{r`z(\dots)`}</Latex>.
</p>
</Panel>
2020-05-26 16:27:29 +00:00
<Panel title={"Poliedro"}>
<p>
2020-05-26 16:27:29 +00:00
L'<b>insieme</b> che racchiunde tutte le <b>soluzioni ammissibili</b> di un problema.
</p>
<p>
2020-05-26 16:27:29 +00:00
In particolare, il valore ottimo è un <b>vertice</b> del poliedro, detto <i>vertice ottimo</i>.
</p>
<p>
Può essere <i><Finite/></i>, <i><Empty/></i> oppure <i><Unbounded/></i>.
</p>
</Panel>
<Panel title={"Gradiente"}>
<p>
<b>Funzione</b> della funzione obiettivo che restituisce la direzione del suo aumento più veloce.
</p>
<p>
<Latex>{r`\nabla f = \frac{\delta f}{\delta x_1} \mathbf{I}_1 + \frac{\delta f}{\delta x_2} \mathbf{I}_2 + \frac{\delta f}{\delta x_n} \mathbf{I}_n`}</Latex>
2020-03-09 23:19:30 +00:00
</p>
<Example>
La matrice <Latex>{r`\mathbf{I}`}</Latex> è la matrice identità.
2020-03-09 23:19:30 +00:00
</Example>
<Example>
Se la funzione obiettivo è <Latex>z = 2w + 3x + 4y</Latex>, il suo gradiente è <Latex>{r`\nabla z = (2, 3, 4)`}</Latex>.
</Example>
</Panel>
</Split>
<Split title={"Forme di un problema di ottimizzazione"}>
<Panel title={"Forma generale"}>
<p>
Un problema con:
</p>
2020-03-10 20:59:40 +00:00
<ul>
<li><b>Equazioni e disequazioni</b></li>
<li><b>Variabili non vincolate</b></li>
2020-03-10 20:59:40 +00:00
</ul>
<PLatex>{r`min \left\{ \mathbf{c}^T \mathbf{x} : \mathbf{A} \mathbf{x} = b,\quad \mathbf{A'} \mathbf{x} \geq \mathbf{b'} \quad x_j \geq 0,\quad j = 1 \dots n \right\}`}</PLatex>
2020-03-10 20:59:40 +00:00
</Panel>
2020-05-23 05:38:07 +00:00
<Panel title={"Forma canonica"}>
<p>
Un problema con:
</p>
2020-05-23 05:38:07 +00:00
<ul>
<li><b>Solo disequazioni</b></li>
<li><b>Vincoli di non-negatività sulle incognite</b></li>
2020-05-23 05:38:07 +00:00
</ul>
<PLatex>{r`min \left\{ \mathbf{c}^T \mathbf{x} : \mathbf{A} \mathbf{x} \geq b,\quad x_j \geq 0,\quad j = 1 \dots n \right\}`}</PLatex>
2020-05-23 05:38:07 +00:00
</Panel>
<Panel title={"Forma standard"}>
<p>
Un problema con:
</p>
2020-05-23 05:38:07 +00:00
<ul>
<li><b>Solo equazioni</b></li>
<li><b>Vincoli di non-negatività sulle incognite</b></li>
2020-05-23 05:38:07 +00:00
</ul>
<PLatex>{r`min \left\{ \mathbf{c}^T \mathbf{x} : \mathbf{A} \mathbf{x} = b,\quad x_j \geq 0,\quad j = 1 \dots n \right\}`}</PLatex>
2020-05-23 05:38:07 +00:00
</Panel>
</Split>
<Split title={"Conversioni tra le forme"}>
<Panel title={"Standard e generale"}>
2020-03-10 20:59:40 +00:00
<p>
Applica questa conversione a ogni equazione nel sistema:
2020-03-10 20:59:40 +00:00
</p>
<p>
<Latex inline={false}>{r`a = b \Leftrightarrow
\begin{cases}
a \leq b\\
a \geq b
\end{cases}
`}</Latex>
2020-03-10 20:59:40 +00:00
</p>
<Example>Serve solo nella teoria per dimostrare che le forme sono equivalenti.</Example>
2020-03-10 20:59:40 +00:00
</Panel>
<Panel title={"Canonica e standard"}>
2020-03-10 20:59:40 +00:00
<p>
Aggiungi una <i>variabile slack</i> <Latex>{r`s`}</Latex> <b>non-vincolata</b> a ogni disequazione nel sistema:
2020-03-11 11:37:34 +00:00
</p>
<p>
<Latex inline={false}>{r`
a \leq b \Leftrightarrow a + s = b
`}</Latex>
</p>
<p>
<Latex inline={false}>{r`
a \geq b \Leftrightarrow a - s = b
`}</Latex>
2020-03-11 11:37:34 +00:00
</p>
2020-05-23 05:38:07 +00:00
</Panel>
<Panel title={"Generale e canonica"}>
<p>
Sdoppia ogni variabile non-vincolata in due variabili con vincolo di non-negatività:
</p>
2020-05-25 17:00:17 +00:00
<p>
<Latex inline={false}>{r`\begin{cases}
a = a^+ - a^-\\
a^+ \geq 0\\
a^- \geq 0
\end{cases}`}</Latex>
2020-05-25 17:00:17 +00:00
</p>
</Panel>
</Split>
<Split title={"La forma standard"}>
<Panel title={"Tableau"}>
2020-03-11 11:37:34 +00:00
<p>
2020-05-23 05:38:07 +00:00
Un modo per rappresentare sistemi in forma standard, anche noto come <b>matrice equivalente completa</b> del sistema.
</p>
<Example>
2020-05-23 22:53:01 +00:00
Il sistema:<br/><br/>
<Latex inline={false}>{r`
2020-05-23 22:53:01 +00:00
\begin{cases}
2000x_1 + 1000x_2 = z\\
1x_1 \leq 3\\
1x_2 \leq 3\\
2x_1 + 2x_2 \leq 7
2020-05-23 22:53:01 +00:00
\end{cases}
`}</Latex><br/><br/>
Diventa il tableau:<br/><br/>
2020-05-23 22:53:01 +00:00
<table class={"right"}>
<thead>
<tr>
<th><abbr title={"Termine noto"}>TN</abbr></th>
<th><Latex>x_1</Latex></th>
<th><Latex>x_2</Latex></th>
<th><Latex>s_1</Latex></th>
<th><Latex>s_2</Latex></th>
</tr>
</thead>
<tbody>
<tr>
<td><Latex>z</Latex></td>
<td><Latex>2000</Latex></td>
<td><Latex>1000</Latex></td>
<td><Latex>0</Latex></td>
<td><Latex>0</Latex></td>
</tr>
<tr>
<td><Latex>3</Latex></td>
<td><Latex>1</Latex></td>
<td><Latex>0</Latex></td>
<td><Latex>1</Latex></td>
<td><Latex>0</Latex></td>
</tr>
<tr>
<td><Latex>3</Latex></td>
<td><Latex>0</Latex></td>
<td><Latex>1</Latex></td>
<td><Latex>0</Latex></td>
<td><Latex>1</Latex></td>
</tr>
<tr>
<td><Latex>7</Latex></td>
<td><Latex>2</Latex></td>
<td><Latex>2</Latex></td>
<td><Latex>0</Latex></td>
<td><Latex>0</Latex></td>
</tr>
</tbody>
</table>
</Example>
2020-03-10 20:59:40 +00:00
</Panel>
<Panel title={"Variabili nella base"}>
2020-05-23 22:53:01 +00:00
<p>
Variabili che hanno <b>tutti 0 e un solo 1</b> nella loro colonna del tableau.
2020-05-23 22:53:01 +00:00
</p>
<p>
La loro controparte sono le <i>variabili fuori base</i>, che hanno qualsiasi altro valore.
2020-03-30 17:09:31 +00:00
</p>
</Panel>
2020-05-23 05:38:07 +00:00
</Split>
2020-05-26 16:27:29 +00:00
<Split title={"Simplex primale"}>
2020-05-23 22:53:01 +00:00
<Panel title={"Cos'è?"}>
2020-03-30 17:09:31 +00:00
<p>
2020-05-27 16:31:11 +00:00
Un algoritmo per <Min>minimizzare</Min>/<Max>massimizzare</Max> trovare efficientemente <b>valore ottimo</b> di problemi di ottimizzazione lineare, derivato da Gauss-Jordan.
</p>
<p>
Da esso si può anche ricavare un <b>vertice ottimo ammissibile</b>.<br/>
C'è la possibilità che ne esistano anche altri: quello ottenuto dipende da come è stata effettuata la scelta delle variabili entranti.
2020-03-30 17:09:31 +00:00
</p>
2020-05-23 05:38:07 +00:00
<Example>
2020-05-25 17:00:17 +00:00
E' spiegato in modo semplice <a href={"https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf"}>qui</a>, e ci sono dei codici sorgenti di esempio <a href={"https://www.cs.cmu.edu/~15451-f17/handouts/simplexcodes/"}>qui</a>.
2020-05-23 05:38:07 +00:00
</Example>
<Example title={"Esempio"}>
<p>
<a href={"https://i.imgur.com/1r405Mb.jpg"}>Questa</a> è la soluzione passo per passo del problema 3 del file <a href={"https://dolly.fim.unimore.it/2019/mod/resource/view.php?id=2716"}><code>Ex_LP_testo</code></a>.
</p>
</Example>
2020-05-23 05:38:07 +00:00
</Panel>
<Panel title={"I passi"}>
2020-03-30 17:09:31 +00:00
<ol>
2020-05-23 05:38:07 +00:00
<li>Trasforma il sistema in <b>forma standard</b>.</li>
2020-05-25 17:00:17 +00:00
<li>Trova tante variabili <b>linearmente indipendenti</b> quante siano le righe: esse saranno la <i>base iniziale</i>.</li>
<li>Finchè ci sono variabili con coefficienti <Min>positivi</Min>/<Max>negativi</Max> nella funzione obiettivo:
2020-05-23 05:38:07 +00:00
<ol>
2020-05-25 17:00:17 +00:00
<li>
2020-05-26 16:27:29 +00:00
<b>Scegli</b> la prima variabile fuori base con coefficiente <Min>positivo</Min>/<Max>negativo</Max> nella funzione obiettivo: essa è la <i>variabile entrante</i>.<br/>
<aside><i>Regola di Bland</i>: Si potrebbe scegliere qualsiasi variabile come entrante, ma scegliendo sempre la prima ammissibile ci si assicura che l'algoritmo termini.</aside>
</li>
<li>
<b>Scegli</b> la variabile in base con il minor rapporto positivo <Latex>{r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}</Latex>.
<aside>Se non sei riuscito a trovare nessuna variabile con un rapporto positivo, significa che il poliedro è <Unbounded/>.</aside>
2020-05-25 17:00:17 +00:00
</li>
2020-05-26 16:27:29 +00:00
<li><u>Pivot</u>: <b>riscrivi</b> tutte le funzioni del sistema in termini della variabile entrante.</li>
2020-05-23 05:38:07 +00:00
</ol>
</li>
2020-05-27 16:31:11 +00:00
<li>Il poliedro è <Finite/>: i <b>termini noti dei vincoli</b> sono le coordinate del suo vertice ottimo, mentre il <b>termine noto della funzione obiettivo</b> è il valore ottimo.</li>
2020-03-30 17:09:31 +00:00
</ol>
<Example>
2020-05-26 16:27:29 +00:00
È praticamente l'algoritmo di Gauss-Jordan applicato al tableau, con delle regole aggiuntive per la decisione delle variabili di pivot.
</Example>
2020-03-30 17:09:31 +00:00
</Panel>
2020-05-25 17:00:17 +00:00
<Panel title={"Soluzioni di base degenerata"}>
<p>
Una soluzione con almeno una variabile di valore <Latex>0</Latex>, dovuta a uno o più <b>vincoli ridondanti</b>.
</p>
<p>
Senza <b>Regola di Bland</b> e in presenza di vincoli ridondanti si rischia di trovarsi a fare pivot infiniti.
</p>
2020-03-30 22:37:46 +00:00
</Panel>
</Split>
2020-05-23 05:38:07 +00:00
<Split title={"Metodo delle due fasi"}>
<Panel title={"Metodo delle due fasi"}>
2020-03-30 22:37:46 +00:00
<p>
2020-05-25 17:00:17 +00:00
Un estensione del Simplex per permettere la risoluzione di problemi la cui origine non è una soluzione ammissibile.
</p>
<p>
Prevede l'introduzione di un <i>problema ausiliario</i>, le cui incognite sono dette <i>artificiali</i>.
</p>
<p>
2020-05-26 16:27:29 +00:00
Il vettore delle incognite artificiali è solitamente chiamato <Latex>{r`\mathbf{y}`}</Latex>.
2020-05-25 17:00:17 +00:00
</p>
<Example>
E' spiegato in modo semplice <a href={"https://web.archive.org/web/20200523052252/https://www.cs.cmu.edu/~15451-f17/handouts/simplex.pdf"}>qui</a>.
</Example>
</Panel>
<Panel title={"Procedimento"}>
<ol>
<li>Crea un nuovo tableau, <b>aggiungendo variabili artificiali</b> in modo da avere una base ammissibile.</li>
<li>Sostituisci la vecchia funzione obiettivo con una nuova che <b>minimizzi la somma</b> di tutte le variabili artificiali.</li>
2020-05-26 16:27:29 +00:00
<li><u>Fase 1</u>: <b>Risolvi</b> il nuovo problema con il simplex primale.</li>
<li>Se il Simplex termina quando ci sono ancora <b>variabili artificiali nella base</b>, allora il poliedro è <b><Empty/></b>.</li>
2020-05-25 17:00:17 +00:00
<li>Una volta che le variabili artificiali sono fuori base, <b>elimina</b> le loro colonne e la nuova funzione obiettivo.<br/></li>
<li>Riporta il tableau in forma base compiendo operazioni per <b>azzerare i coefficienti</b> delle variabili di base nella funzione obiettivo.</li>
2020-05-26 16:27:29 +00:00
<li><u>Fase 2</u>: <b>Risolvi</b> il tableau con il simplex primale.</li>
2020-05-25 17:00:17 +00:00
</ol>
</Panel>
</Split>
<Split title={"Rilassamento"}>
<Panel title={"Cos'è?"}>
2020-05-25 17:00:17 +00:00
<p>
Una versione semplificata di un problema nella quale si <b>ignora la violazione</b> di uno o più vincoli.
2020-05-25 17:00:17 +00:00
</p>
</Panel>
<Panel title={"Rilassamento di Lagrange"}>
<p>
Un rilassamento che permette di misurare <b>di quanto i vincoli vengono violati</b>.
</p>
<p>
I vincoli, moltiplicati per <b>coefficienti di rilassamento</b>, vengono inseriti nella funzione obiettivo.
</p>
<p>
Il vettore dei coefficienti di rilassamento solitamente è indicato con <Latex>{r`\mathbf{u}`}</Latex>.
2020-05-25 17:00:17 +00:00
</p>
<Example>
<p>
Il sistema:
</p>
<Latex inline={false}>{r`
\begin{cases}
z = 3 x_1 + 5 x_2\\
2 x_1 + 3 x_2 \geq 12\\
- x_1 + 3 x_2 \geq 3\\
x_1 \geq 0\\
x_2 \geq 0
\end{cases}
`}</Latex>
<p>
diventa:
</p>
<Latex inline={false}>{r`
\begin{cases}
2020-05-26 16:27:29 +00:00
z = 3 x_1 + 5 x_2 + u_1 ( 12 - 2 x_1 - 3 x_2 ) + u_2 ( 3 + x_1 - 3 x_2 )\\
2020-05-25 17:00:17 +00:00
x_1 \geq 0\\
x_2 \geq 0
\end{cases}
`}</Latex>
</Example>
</Panel>
</Split>
<Split title={"Dualità"}>
2020-05-25 17:00:17 +00:00
<Panel title={"Duale"}>
<p>
2020-05-26 16:27:29 +00:00
Il sistema che <b><Min>massimizza</Min>/<Max>minimizza</Max> i moltiplicatori di rilassamento</b> di un problema detto <i>primale</i>.
2020-05-25 17:00:17 +00:00
</p>
</Panel>
<Panel title={"In termini matriciali"}>
<p>
Possiamo <b>trasporre</b> il tableau e sostituire le variabili <Latex>{r`x_n`}</Latex> con variabili <Latex>{r`u_n`}</Latex> per ottenere il sistema duale!
</p>
<p>
I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa.
</p>
</Panel>
<Panel title={"Feasibility del duale"}>
<ul>
<li>Se un problema ha una <b>soluzione finita</b>, allora anche il suo duale la avrà.</li>
2020-05-26 16:27:29 +00:00
<li>Se un problema è <b><Empty/></b>, allora il suo duale potrà essere <Empty/> oppure <Unbounded/>.</li>
<li>Se un problema è <b><Unbounded/></b>, allora il suo duale sarà certamente <Empty/>.</li>
2020-05-25 17:00:17 +00:00
</ul>
</Panel>
</Split>
2020-05-26 16:27:29 +00:00
<Split title={"Un po' di teoria"}>
2020-05-25 17:00:17 +00:00
<Panel title={"Lemma di Farkas"}>
<p>
2020-05-26 16:27:29 +00:00
Una disuguaglianza lineare <Latex>{r`c_0 \leq \mathbf{c}^T \mathbf{x}`}</Latex> è verificata da tutti i punti di un poliedro non-<Empty/> se e solo se esiste un vettore <Latex>{r`u \in \mathfrak{R}^m`}</Latex> tale che:
</p>
<PLatex>{r`\mathbf{c}^T \geq \mathbf{u}^T \mathbf{A}`}</PLatex>
<PLatex>{r`c_0 \leq \mathbf{u}^T \mathbf{b}`}</PLatex>
<p>
<Todo>TODO: Cioè?</Todo>
2020-05-25 17:00:17 +00:00
</p>
</Panel>
<Panel title={"Dualità forte"}>
<p>
Il teorema che dimostra l'equivalenza tra primale e duale.
</p>
<p>
Se uno dei due problemi è finito, la soluzione di uno coincide con la soluzione dell'altro.
</p>
<p>
<Latex>{r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`}</Latex>
</p>
2020-05-25 17:00:17 +00:00
<p>
<Todo>TODO: Anche qui c'è una lunga dimostrazione...</Todo>
</p>
</Panel>
<Panel title={"Dualità debole"}>
<p>
Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi tableau) è sempre <Min>minore o uguale</Min>/<Max>maggiore o uguale</Max> alla soluzione del corrispettivo primale.
2020-03-30 22:37:46 +00:00
</p>
<p>
2020-05-25 17:00:17 +00:00
<Todo>TODO: Dimostrazione cortina, ma sembra complicata.</Todo>
2020-03-30 22:37:46 +00:00
</p>
</Panel>
2020-05-26 16:27:29 +00:00
<Panel title={"Condizioni di ottimalità"}>
<p>
Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del primale. <Todo>TODO: credo?</Todo>
</p>
<p>
Si deriva combinando le seguenti condizioni:
</p>
<ul>
<li>Ammissibilità del primale: <Latex>{r`\mathbf{A} \mathbf{X} \geq \mathbf{b}, \quad \mathbf{x} \geq 0`}</Latex></li>
<li>Ammissibilità del duale: <Latex>{r`\mathbf{u}^T \mathbf{A} \leq \mathbf{c}^T, \quad \mathbf{u} \geq 0`}</Latex></li>
<li>Teorema della dualità forte: <Latex>{r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`}</Latex> (alla soluzione ottima)</li>
</ul>
<p>
Ne risulta che una soluzione è ottima se e solo se:
</p>
<PLatex>{r`\left( \mathbf{c}^T - \mathbf{u}^T \mathbf{A} \right) \mathbf{x} = 0`}</PLatex>
<PLatex>{r`\mathbf{u}^T \left( \mathbf{A} \mathbf{x} - \mathbf{b} \right) = 0`}</PLatex>
</Panel>
2020-03-30 22:37:46 +00:00
</Split>
2020-05-27 16:31:11 +00:00
<Split title={"Simplex duale"}>
<Panel title={"Cos'è?"}>
<p>
Un'estensione al Simplex primale che opera sul problema duale.
</p>
</Panel>
<Panel title={"Come funziona?"}>
<p>
Funziona esattamente come il Simplex primale, ma opera sulle righe invece che sulle colonne, cercando di rendere <Min>positivi</Min>/<Max>negativi</Max> tutti i termini noti.
</p>
</Panel>
</Split>
<Split title={"Analisi di sensibilità"}>
<Panel title={"Cos'è?"}>
<p>
Un procedimento che misura di <b>quanto può variare</b> il termine noto di un vincolo <Latex>{r`b_i`}</Latex> o il coefficiente della funzione obiettivo <Latex>{r`c_i`}</Latex> prima che la base degeneri. <Todo>TODO: verificare</Todo>
</p>
</Panel>
</Split>
2020-03-09 23:18:13 +00:00
</div>
)
}
}