2020-03-09 23:18:13 +00:00
|
|
|
import {Component} from 'preact'
|
2020-03-09 23:19:30 +00:00
|
|
|
import Split from "../components/split";
|
|
|
|
import Latex from "../components/latex";
|
|
|
|
import Panel from "../components/panel";
|
|
|
|
import Example from "../components/example";
|
|
|
|
import Todo from "../components/todo";
|
2020-03-30 22:37:46 +00:00
|
|
|
import Minus from "../components/minus";
|
|
|
|
import Plus from "../components/plus";
|
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>
|
2020-03-11 18:12:30 +00:00
|
|
|
<h1>Ottimizzazione lineare intera</h1>
|
2020-03-09 23:19:30 +00:00
|
|
|
<Split title={"Materiale"}>
|
|
|
|
<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>
|
|
|
|
</Split>
|
|
|
|
<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>
|
|
|
|
<Panel title={"Gradiente"}>
|
|
|
|
<p>
|
|
|
|
Funzione della funzione obiettivo che indica la direzione del suo aumento più veloce.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
<Latex>{r`\nabla f = \frac{\delta f}{\delta x_1} e_1 + \frac{\delta f}{\delta x_2} e_2 + \frac{\delta f}{\delta x_n} e_n`}</Latex>
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
<Latex>{r`e_i`}</Latex> è la direzione della coordinata i-esima.
|
|
|
|
</p>
|
|
|
|
<Example>
|
|
|
|
Se <Latex>{r`n = 3`}</Latex>, allora:
|
|
|
|
<ul>
|
|
|
|
<li><Latex>{r`e_1 = (1, 0, 0)`}</Latex></li>
|
|
|
|
<li><Latex>{r`e_2 = (0, 1, 0)`}</Latex></li>
|
|
|
|
<li><Latex>{r`e_3 = (0, 0, 1)`}</Latex></li>
|
|
|
|
</ul>
|
|
|
|
</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>
|
2020-03-10 20:59:40 +00:00
|
|
|
<Split title={"La forma standard"}>
|
|
|
|
<Panel title={"Condizioni"}>
|
|
|
|
<p>
|
|
|
|
Un sistema è in <i>forma standard</i> quando ha:
|
|
|
|
</p>
|
|
|
|
<ul>
|
|
|
|
<li>Solo equazioni</li>
|
|
|
|
<li>Tutte le variabili maggiori di zero</li>
|
|
|
|
</ul>
|
|
|
|
</Panel>
|
|
|
|
<Panel title={"Slack"}>
|
|
|
|
<p>
|
|
|
|
Possiamo trasformare una disequazione in equazione introducendo variabili <i>slack</i>:
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
<Latex>{r`3x + 2y \leq 15 \implies 3x + 2y + s_1 = 15`}</Latex>
|
|
|
|
</p>
|
|
|
|
<p>
|
2020-03-11 11:37:34 +00:00
|
|
|
In seguito, possiamo riscrivere tutte le funzioni in termini delle variabili slack.
|
2020-03-10 20:59:40 +00:00
|
|
|
</p>
|
|
|
|
<Example>
|
|
|
|
Si ottiene qualcosa come <Latex>{r`z = -2 s_1 - 3 s_2 + 40`}</Latex>.
|
|
|
|
</Example>
|
|
|
|
</Panel>
|
2020-03-11 11:37:34 +00:00
|
|
|
<Panel title={"Tableu"}>
|
2020-03-10 20:59:40 +00:00
|
|
|
<p>
|
2020-03-11 11:37:34 +00:00
|
|
|
Un modo per rappresentare sistemi in forma standard.
|
2020-03-10 20:59:40 +00:00
|
|
|
</p>
|
|
|
|
<p>
|
2020-03-11 11:37:34 +00:00
|
|
|
<table class={"right"}>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th/>
|
|
|
|
<th><Latex>x</Latex></th>
|
|
|
|
<th><Latex>y</Latex></th>
|
|
|
|
<th><Latex>s_1</Latex></th>
|
|
|
|
<th><Latex>s_2</Latex></th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
2020-03-11 18:12:30 +00:00
|
|
|
<td>obj:</td>
|
2020-03-11 11:37:34 +00:00
|
|
|
<td><Latex>80</Latex></td>
|
|
|
|
<td><Latex>70</Latex></td>
|
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td/>
|
|
|
|
<td><Latex>3</Latex></td>
|
|
|
|
<td><Latex>2</Latex></td>
|
|
|
|
<td><Latex>1</Latex></td>
|
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td/>
|
|
|
|
<td><Latex>2</Latex></td>
|
|
|
|
<td><Latex>3</Latex></td>
|
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
<td><Latex>1</Latex></td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</p>
|
2020-03-11 18:12:30 +00:00
|
|
|
<Example>
|
|
|
|
E' la matrice equivalente completa del sistema!
|
|
|
|
</Example>
|
2020-03-11 11:37:34 +00:00
|
|
|
<p>
|
|
|
|
Riscrivendo in termini delle variabili slack, otteniamo:
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
<table class={"right"}>
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th/>
|
|
|
|
<th><Latex>x</Latex></th>
|
|
|
|
<th><Latex>y</Latex></th>
|
|
|
|
<th><Latex>s_1</Latex></th>
|
|
|
|
<th><Latex>s_2</Latex></th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
2020-03-11 18:12:30 +00:00
|
|
|
<td>obj:</td>
|
2020-03-11 11:37:34 +00:00
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
<td><Latex>-20</Latex></td>
|
|
|
|
<td><Latex>-10</Latex></td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td/>
|
|
|
|
<td><Latex>1</Latex></td>
|
|
|
|
<td><Latex>0</Latex></td>
|
2020-03-13 16:42:09 +00:00
|
|
|
<td><Latex>{r`-\frac{3}{5}`}</Latex></td>
|
|
|
|
<td><Latex>{r`\frac{2}{5}`}</Latex></td>
|
2020-03-11 11:37:34 +00:00
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td/>
|
|
|
|
<td><Latex>0</Latex></td>
|
|
|
|
<td><Latex>1</Latex></td>
|
2020-03-13 16:42:09 +00:00
|
|
|
<td><Latex>{r`\frac{2}{5}`}</Latex></td>
|
|
|
|
<td><Latex>{r`-\frac{3}{5}`}</Latex></td>
|
2020-03-11 11:37:34 +00:00
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
2020-03-10 20:59:40 +00:00
|
|
|
</p>
|
2020-03-11 18:12:30 +00:00
|
|
|
<Example>
|
|
|
|
Abbiamo appena applicato Gauss-Jordan, trovando la matrice inversa.
|
|
|
|
</Example>
|
2020-03-10 20:59:40 +00:00
|
|
|
</Panel>
|
|
|
|
</Split>
|
2020-03-30 17:09:31 +00:00
|
|
|
<Split title={"Un po' di Algebra Lineare"}>
|
|
|
|
<Panel title={"Base"}>
|
|
|
|
<p>
|
|
|
|
Insieme di <Latex>n</Latex> colonne lunghe <Latex>n</Latex> linearmente indipendenti.
|
|
|
|
</p>
|
|
|
|
</Panel>
|
|
|
|
<Panel title={"Soluzione di base"}>
|
|
|
|
<p>
|
|
|
|
Soluzione ottenuta dalla seguente formula:
|
|
|
|
</p>
|
|
|
|
<ol>
|
|
|
|
<li><Latex>{r`A \cdot x = B`}</Latex></li>
|
|
|
|
<li><Latex>{r`B \cdot x_B + F \cdot x_F = b`}</Latex></li>
|
|
|
|
<li><Latex>{r`x_B = B^{-1} \cdot b - B^{-1} \cdot x_F`}</Latex></li>
|
|
|
|
</ol>
|
|
|
|
<p>
|
|
|
|
Dove:
|
|
|
|
</p>
|
|
|
|
<ul>
|
|
|
|
<li><Latex>{r`A`}</Latex> è la matrice equivalente</li>
|
|
|
|
<li><Latex>{r`b`}</Latex> è la colonna dei valori noti</li>
|
|
|
|
<li><Latex>{r`B`}</Latex> è la matrice delle colonne della base</li>
|
|
|
|
<li><Latex>{r`F`}</Latex> è la matrice delle colonne fuoribase</li>
|
|
|
|
<li><Latex>{r`x_B`}</Latex> sono le incognite relative alla base</li>
|
|
|
|
<li><Latex>{r`x_F`}</Latex> sono le incognite relative ai valori fuoribase</li>
|
|
|
|
</ul>
|
|
|
|
</Panel>
|
|
|
|
</Split>
|
2020-03-30 22:37:46 +00:00
|
|
|
<Split title={"Forme"}>
|
|
|
|
<Panel title={"Forma standard"}>
|
|
|
|
<ul>
|
|
|
|
<li><Minus>Solo equazioni</Minus></li>
|
|
|
|
<li><Minus>Tutte le variabili maggiori di zero</Minus></li>
|
|
|
|
</ul>
|
|
|
|
</Panel>
|
|
|
|
<Panel title={"Forma canonica"}>
|
|
|
|
<ul>
|
|
|
|
<li><Plus>Equazioni e disequazioni</Plus></li>
|
|
|
|
<li><Minus>Tutte le variabili maggiori di zero</Minus></li>
|
|
|
|
</ul>
|
|
|
|
</Panel>
|
|
|
|
<Panel title={"Forma generale"}>
|
|
|
|
<ul>
|
|
|
|
<li><Plus>Equazioni e disequazioni</Plus></li>
|
|
|
|
<li><Plus>Tutte le variabili maggiori di zero</Plus></li>
|
|
|
|
</ul>
|
|
|
|
</Panel>
|
|
|
|
</Split>
|
|
|
|
<Split title={"Equivalenza di forma"}>
|
|
|
|
<Panel title={"Da generale a canonica"}>
|
|
|
|
<p>
|
|
|
|
Sostituiamo le variabili potenzialmente negative (unconstrained) <Latex>{r`x_j`}</Latex> con due variabili <Latex>{r`x_j^+`}</Latex> e <Latex>{r`x_j^-`}</Latex>.
|
|
|
|
</p>
|
|
|
|
</Panel>
|
|
|
|
<Panel title={"Da canonica a standard"}>
|
|
|
|
<p>
|
|
|
|
Convertiamo le disequazioni in equazioni aggiungendo una variabile slack.
|
|
|
|
</p>
|
|
|
|
</Panel>
|
|
|
|
<Panel title={"Da standard a generale"}>
|
|
|
|
<p>
|
|
|
|
Convertiamo ogni equazione <Latex>{r`=`}</Latex> in due disequazioni <Latex>{r`\leq`}</Latex> e <Latex>{r`\geq`}</Latex>,
|
|
|
|
</p>
|
|
|
|
</Panel>
|
|
|
|
</Split>
|
2020-03-09 23:18:13 +00:00
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|