import {Component} from 'preact' import Split from "../components/old/split"; import Latex from "../components/latex"; import Panel from "../components/old/panel"; import Example from "../components/old/example"; import Todo from "../components/old/todo"; import Minus from "../components/old/minus"; import Plus from "../components/old/plus"; import Code from "../components/old/code"; const r = String.raw; export default class OttimizzazioneLineare extends Component { render() { return (

Ottimizzazione lineare intera

Ho rimosso il rumore in sottofondo da tutti i video di Ricerca Operativa!

Guardate i video qui!

La funzione obiettivo è la funzione con valore noto sconosciuto:

{r`z = C_1 \cdot x_1 + C_2 \cdot x_2 + C_n \cdot x_n`}

Funzione della funzione obiettivo che indica la direzione del suo aumento più veloce.

{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`}

{r`e_i`} è la direzione della coordinata i-esima.

Se {r`n = 3`}, allora:
  • {r`e_1 = (1, 0, 0)`}
  • {r`e_2 = (0, 1, 0)`}
  • {r`e_3 = (0, 0, 1)`}
Se la funzione obiettivo è z = 2w + 3x + 4y, il suo gradiente è {r`\nabla z = (2, 3, 4)`}.
  • Solo equazioni
  • Tutte le variabili maggiori di zero
  • Equazioni e disequazioni
  • Tutte le variabili maggiori di zero
  • Equazioni e disequazioni
  • Variabili con qualsiasi valore

Convertiamo ogni equazione {r`=`} in due disequazioni {r`\leq`} e {r`\geq`},

Why would you ever do that?!

Convertiamo le disequazioni in equazioni aggiungendo una variabile slack.

{r`a \leq 3`} diventa {r`a + s_1 = 3`}.

Sostituiamo le variabili potenzialmente negative (unconstrained) {r`x_j`} con due variabili {r`x_j^+`} e {r`x_j^-`}.

{r`a \in \mathbb{Z}`} diventa {r`a^+ \in \mathbb{N}`} e {r`-a^- \in \mathbb{N}`}.

La funzione da minimizzare/massimizzare, tipicamente indicata con una {r`z`} al termine noto.

Un modo per rappresentare sistemi in forma standard, anche noto come matrice equivalente completa del sistema.

Il sistema:

{r` \begin{cases} 2000A + 1000B = z\\ 1A \leq 3\\ 1B \leq 3\\ 2A + 2B \leq 7 \end{cases} `}

Diventa in forma di tableau:

TN A B s_1 s_2
z 2000 1000 0 0
3 1 0 1 0
3 0 1 0 1
7 2 2 0 0

TODO: come spiegarla?

Un algoritmo per massimizzare efficientemente variabili di sistemi lineari, derivato da Gauss-Jordan.

E' spiegato semplicemente qui.
  1. Trasforma il sistema in forma standard.
  2. Finchè ci sono variabili con coefficienti positivi nella funzione obiettivo:
    1. Scegli una variabile della funzione obiettivo, chiamandola variabile entrante. Come? Vedi nel prossimo pannello.
    2. Trova la variabile di base (detta variabile uscente) con il valore minore per questo rapporto: termine noto / coeff. variabile entrante
    3. Riscrivi tutte le funzioni del sistema in termini della variabile entrante.
  3. Il termine noto della funzione obiettivo è il tuo risultato.

Se il problema è rappresentato in forma di tableau, allora esso è risolvibile applicando l'algoritmo di Gauss-Jordan, in aggiunta tenendo conto delle regole per la selezione delle variabili entranti e uscenti.

  • Coefficiente maggiore nella funzione obiettivo.
  • Incremento maggiore della funzione obiettivo.
  • A caso.
  • Regola di Bland: scegli variabili entranti e uscenti con indice minore. Impedisce cicli infiniti!

Un estensione del Simplex per permettere la risoluzione di problemi con termini noti negativi.

Prevede l'introduzione di un problema ausiliario.

) } }