-
- La matrice {r`\mathbf{I}`} è la matrice identità.
-
-
- Se la funzione obiettivo è z = 2w + 3x + 4y, il suo gradiente
- è {r`\nabla z = (2, 3, 4)`}.
-
-
-
-
- Equazioni e disequazioni a cui devono sottostare le incognite perchè esse formino una soluzione
- valida.
-
-
- I loro coefficienti sono contenuti nella matrice {r`\mathbf{A}`}, mentre i loro
- termini noti nel vettore {r`\mathbf{b}`}.
-
-
-
-
- L'insieme che racchiunde tutte le soluzioni ammissibili di un problema.
-
-
- Può essere , oppure .
-
-
- Si chiama così perchè se si disegna su un piano cartesiano, esso forma una figura geometrica a
- più lati, ovvero un poliedro.
-
-
-
-
- La soluzione di un problema, ricavabile dal
- prodotto {r`\mathbf{c}^T \mathbf{x}`}.
-
-
- In particolare, il valore ottimo è un vertice del poliedro, detto vertice ottimo.
-
- Un modo per rappresentare sistemi in forma standard, anche noto come matrice equivalente
- completa del sistema.
-
-
-
-
- Un tableau è un sistema di equazioni in forma matriciale completa.
-
-
- È possibile effettuare senza che cambi il risultato finale le seguenti trasformazioni:
-
-
-
Moltiplicare un'intera riga per una costante.
-
Sommare una riga a un'altra
-
-
- Suona familiare? Sì, lo abbiamo fatto anche in Algebra Lineare.
-
-
-
-
- Variabili che hanno tutti 0 e un solo 1 nella loro colonna del tableau.
-
-
- La loro controparte sono le variabili fuori base, che hanno qualsiasi altro valore.
-
-
-
-
- Il valore della funzione obiettivo che si otterrebbe se tutte le variabili fuori base
- valessero 0.
-
-
- Procedendo nella risoluzione (descritta in seguito) del tableau, questo valore aumenterà, fino a
- raggiungere il valore ottimo quando la risoluzione sarà completata.
-
- Un algoritmo per trovare efficientemente il valore ottimo e le coordinate di un vertice
- ottimo in problemi di ottimizzazione lineare.
-
-
- Ricordi Gauss-Jordan? Il Simplex è la stessa cosa,
- aggiungendo criteri per la selezione del pivot.
-
-
- Questa è la soluzione passo per passo del
- problema 3 del file Ex_LP_testo.
-
-
- Perchè sia possibile effettuare il Simplex è necessario che l'origine sia nel poliedro:
- pertanto, non è possibile che un problema risolto con il Simplex sia .
-
-
-
-
-
Trasforma il sistema in forma standard.
-
Trova tante variabili linearmente indipendenti quante siano le righe: esse saranno
- la base iniziale.
-
-
Finchè ci sono variabili con coefficienti positivi/negativi nella
- funzione obiettivo:
-
-
- Scegli la prima variabile fuori base con
- coefficiente positivo/negativo nella funzione obiettivo: essa
- è la variabile entrante.
-
-
-
- Scegli la variabile in base con il minor rapporto
- positivo {r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}.
-
-
-
Pivot: trasforma tutte le funzioni del sistema in modo che abbiano 0
- nella colonna della variabile entrante, tranne nella riga della variabile uscente,
- in cui avrà 1.
-
-
-
-
Il poliedro è : i termini noti dei vincoli sono le coordinate del suo
- vertice ottimo, mentre il termine noto della funzione obiettivo è il valore ottimo.
-
-
-
-
-
- Una soluzione con almeno una variabile di valore 0, dovuta a uno o più vincoli
- ridondanti.
-
-
- Senza Regola di Bland e in presenza di vincoli ridondanti si rischia di trovarsi a fare
- pivot infiniti.
-
-
-
-
-
-
- Un estensione del Simplex per permettere la risoluzione di problemi la cui origine non
- è una soluzione ammissibile.
-
-
- Prevede l'introduzione di un problema ausiliario, le cui incognite sono
- dette artificiali.
-
-
- Il vettore delle incognite artificiali è solitamente chiamato {r`\mathbf{y}`}.
-
-
-
-
-
Crea un nuovo tableau, aggiungendo variabili artificiali in modo da avere una base
- ammissibile.
-
-
Sostituisci la vecchia funzione obiettivo con una nuova che minimizzi la somma di
- tutte le variabili artificiali.
-
-
Fase 1: Risolvi il nuovo problema con il Simplex primale.
-
Se il Simplex termina quando ci sono ancora variabili artificiali nella base, allora
- il poliedro è .
-
-
Una volta che le variabili artificiali sono fuori base, elimina le loro colonne e la
- nuova funzione obiettivo.
-
Riporta il tableau in forma base compiendo operazioni per azzerare i
- coefficienti delle variabili di base nella funzione obiettivo.
-
-
Fase 2: Risolvi il tableau con il Simplex primale.
-
-
-
-
-
-
- Una versione semplificata di un problema nella quale si ignora la violazione di uno o più
- vincoli.
-
-
-
-
- Un rilassamento che permette di misurare di quanto i vincoli vengono violati.
-
-
- I vincoli, moltiplicati per coefficienti di rilassamento, vengono inseriti nella funzione
- obiettivo.
-
-
- Il vettore dei coefficienti di rilassamento solitamente è indicato
- con {r`\mathbf{u}`}.
-
- Il sistema che massimizza/minimizza i moltiplicatori di
- rilassamento di un problema detto primale.
-
-
-
-
- Possiamo trasporre il tableau e sostituire le variabili {r`x_n`} con
- variabili {r`u_n`} per ottenere il sistema duale!
-
-
- I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa.
-
-
-
-
-
Se un problema ha una soluzione finita, allora anche il suo duale la avrà.
-
Se un problema è , allora il suo duale potrà
- essere oppure .
-
-
Se un problema è , allora il suo duale sarà certamente .
-
-
-
-
- Variabili e vincoli del duale corrispondono rispettivamente a vincoli e variabili del primale.
-
-
- In particolare:
-
-
-
-
-
Min
-
Max
-
-
-
-
-
Vincolo \leq
-
Variabile \leq
-
-
-
Vincolo \geq
-
Variabile \geq
-
-
-
Vincolo =
-
Variabile libera
-
-
-
Variabile \leq
-
Vincolo \geq
-
-
-
Variabile \geq
-
Vincolo \leq
-
-
-
Variabile libera
-
Vincolo =
-
-
-
-
-
-
-
-
- Una disuguaglianza lineare {r`c_0 \leq \mathbf{c}^T \mathbf{x}`} è verificata da
- tutti i punti di un poliedro non- se e solo se esiste un
- vettore {r`u \in \mathfrak{R}^m`} tale che:
-
- TODO: Anche qui c'è una lunga dimostrazione...
-
-
-
-
- Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi
- tableau) è sempre minore o uguale/maggiore o uguale alla soluzione del
- corrispettivo primale.
-
-
- TODO: Dimostrazione cortina, ma sembra complicata.
-
-
-
-
- Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del
- primale. TODO: credo?
-
- Un'estensione al Simplex primale che opera sul problema duale.
-
-
-
-
- Funziona esattamente come il Simplex primale, ma opera sul duale.
-
-
-
-
-
-
- Un procedimento che misura di quanto può variare il termine noto di un
- vincolo {r`b_i`} o il coefficiente della funzione
- obiettivo {r`c_i`} prima che la base degeneri.
-
-
-
-
-
-
- Particolari problemi di ottimizzazione lineare in cui le variabili sono vincolate ad essere
- numeri interi.
-
- {r`
- \mathbf{x} \in \mathbb{Z}^n
- `}
-
- Spesso detti anche problemi di ILP.
-
-
-
-
- Un rilassamento che rimuove il vincolo di integrità a un problema, trovando la sua soluzione
- continua.
-
-
-
-
-
-
- Un modo per passare dalla soluzione del rilassamento alla soluzione intera di un problema
- di ILP.
-
-
- Consiste nel calcolare la soluzione di ogni singolo punto incluso nel poliedro, e selezionare
- la minore/maggiore.
-
-
- Trova sicuramente la soluzione giusta, ma il costo computazionale è
- esponenziale O(n^k)!
-
-
-
-
- Un altro modo per passare dalla soluzione del rilassamento alla soluzione intera di un
- problema di ILP.
-
-
- Consiste nell'arrotondare tutte le variabili al loro valore intero più vicino, e
- calcolarne il valore ottimo.
-
-
- Funziona bene per valori grandi, ma più essi si avvicinano allo 0 più l'errore diventa
- grande.
-
-
-
-
- Un altro modo ancora per passare dalla soluzione del rilassamento alla soluzione intera
- di un problema di ILP.
-
-
- Consiste nel tagliare il poliedro con nuovi vincoli (piani secanti) che riducono le
- possibili soluzioni continue ma non quelle intere.
-
-
- Per selezionare i vincoli, si usano i tagli di Gomory:
-
- Per ogni valore noto frazionario si viene quindi a creare una nuova variabile in base e
- un nuovo vincolo formato dall'opposto di tutti i valori frazionari dei coefficienti fuori base.
-
-
-
- Il tableau:
-
-
-
-
{r`x_1`}
-
{r`x_2`}
-
{r`s_1`}
-
{r`s_2`}
-
TN
-
-
-
-
-
{r`1`}
-
{r`1`}
-
{r`0`}
-
{r`0`}
-
{r`0`}
-
-
-
{r`1`}
-
{r`0`}
-
{r`1`}
-
{r`0`}
-
{r`3`}
-
-
-
{r`\frac{3}{2}`}
-
{r`\frac{1}{2}`}
-
{r`0`}
-
{r`1`}
-
{r`\frac{6}{5}`}
-
-
-
-
-
- Diventa:
-
-
-
-
{r`x_1`}
-
{r`x_2`}
-
{r`s_1`}
-
{r`s_2`}
-
{r`s_3`}
-
-
TN
-
-
-
-
-
{r`1`}
-
{r`1`}
-
{r`0`}
-
{r`0`}
-
{r`0`}
-
{r`0`}
-
-
-
{r`1`}
-
{r`0`}
-
{r`1`}
-
{r`0`}
-
{r`0`}
-
{r`3`}
-
-
-
{r`\frac{3}{2}`}
-
{r`\frac{1}{2}`}
-
{r`0`}
-
{r`1`}
-
{r`0`}
-
{r`\frac{6}{5}`}
-
-
-
{r`-\frac{1}{2}`}
-
{r`-\frac{1}{2}`}
-
{r`0`}
-
{r`0`}
-
{r`1`}
-
{r`-\frac{1}{5}`}
-
-
-
-
-
-
-
-
- È possibile usare la tecnica divide et impera per rendere più efficiente l'enumerazione
- totale.
-
-
- Si divide il problema principale (trovare il valore ottimo di un problema di ILP) in più
- sottoproblemi (trovare il valore ottimo di un problema di ILP con una variabile impostata a un
- valore fisso).
-
-
- Si crea così un albero.
-
-
- È possibile chiudere in anticipo alcuni nodi dell'albero se il loro miglior possibile
- valore ottimo è inferiore a uno precedentemente trovato o se il loro poliedro è .
-
-
- È possibile utilizzare diverse strategie di esplorazione dell'albero:
-
-
depth-first: permette di raggiungere immediatamente a una soluzione accettabile
- (ma non ottimale)
-
-
best-first: permette di raggiungere più velocemente alla soluzione corretta
-
-
-
-
-
- È possibile combinare il metodo dei tagli secanti con la tecnica divide et
- impera per raggiungere ancora più velocemente a una soluzione.
-
-
- Si effettuano poche iterazioni del metodo dei tagli secanti, e sul risultato di quelle
- iterazioni si applica il divide et impera.
-
-
-
- Terminologia dei grafi TODO: migliorare}>
-
-
- Insieme di nodi{r`N`} e archi{r`E`} che li
- connettono.
-
-
- Può essere diretto se gli archi hanno una direzione.
-
-
-
-
- Nodi connessi da un arco.
-
-
-
-
- Arco connesso a un dato nodo.
-
-
-
-
- Un arco diretto che termina o inizia da un dato nodo.
-
-
-
-
- Conteggio degli archi incidenti di un nodo.
-
-
- Si può calcolare anche relativamente agli archi entranti o agli archi uscenti.
-
-
-
-
- Sequenza di archi consecutivi.
-
-
-
-
- Due nodi sono connessi se tra loro esiste almeno un percorso.
-
-
- Un grafo è connesso se tutti i suoi nodi sono connessi.
-
-
-
-
- Percorsi rispettivamente indiretti e diretti in cui l'inizio coincide con la fine.
-
-
-
-
- Grafo in cui ogni nodo è connesso con ogni altro.
-
-
- Se diretto, contiene {r`n \cdot (n - 1)`} archi; altrimenti, ne contiene la
- metà.
-
-
-
-
- Vedi Algoritmi.
-
-
-
-
- Vedi Algoritmi.
-
-
-
-
- Sottoinsieme di archi che connettono due sottoinsiemi di nodi.
-
-
- Può essere anche uscente o entrante; in tal caso include solo gli archi entranti o uscenti dal
- sottoinsieme.
-
-
-
-
- Sottoinsieme di nodi e archi di un grafo.
-
-
- Tutti gli archi di un sottografo possono connettere solo nodi all'interno di esso.
-
-
-
-
- Sottografo connesso e aciclico.
-
-
-
-
- Albero che include tutti i nodi di un grafo.
-
-
-
-
-
-
- Crea uno spanning tree.
-
-
-
Aggiungi l'arco di costo minimo all'albero.
-
Finchè mancano ancora archi:
-
-
Trova tutti gli archi che aggiungerebbero un nuovo nodo all'albero.
-
Seleziona l'arco di costo minore.
-
-
-
-
-
-
- Trova l'ordine topologico di un albero.
-
-
-
Ripeti finchè ci sono nodi nel grafo:
-
-
Assegna un numero sequenziale a un nodo senza archi entranti.
-
Elimina il nodo a cui hai assegnato il numero.
-
Elimina tutti gli archi incidenti sul nodo che hai eliminato.
-
-
-
-
-
-
- Trova i percorsi di costo minimo in un albero.
-
-
-
Trova l'ordine topologico dell'albero.
-
Invece che provare ogni singola combinazione di nodi, prova solo i nodi che hanno un numero
- topologico maggiore di quello del nodo attuale.
-
-
-
- TODO: forse spiegarlo meglio non farebbe male
-
-
-
-
- Vedi Algoritmi.
-
-
-
-
- Trova il volume massimo di acqua che è possibile fare scorrere attraverso tubature con una data
- capacità.
-
-
- Costruisci il grafo residuo e vedi se c'è un percorso che va dalla sorgente alla destinazione.
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/routes/OttimizzazioneLineare/00_Intro.js b/src/routes/OttimizzazioneLineare/00_Intro.js
new file mode 100644
index 0000000..0fb9f3f
--- /dev/null
+++ b/src/routes/OttimizzazioneLineare/00_Intro.js
@@ -0,0 +1,155 @@
+import {Fragment} from "preact";
+import {Section, Panel, BLatex, TablePanel} from "bluelib";
+import Link from "../../components/Link";
+
+const r = String.raw;
+
+
+export default function () {
+ return (
+
+
+
+
+
Prof. Stefano Novellani
+
+
+
+
+ Esame digitale in 3 fasi:
+
+
+
25 domande di teoria stile vero/falso
+
2 domande a risposta aperta
+
2 modelli matematici da rappresentare tramite GLPK/MathProg
+
+
+
+
+
+
+
+
v
+
s
+
Significato
+
+
+
+
+
{r`\mathbf{x}`}
+
{r`x_i`}
+
Incognite
+
+
+
{r`\mathbf{s}`}
+
{r`s_i`}
+
Variabili slack
+
+
+
{r`\mathbf{c}`}
+
{r`c_i`}
+
Coefficienti della funzione obiettivo
+
+
+
{r`\mathbf{A}`}
+
{r`a_{ij}`}
+
Coefficienti dei vincoli
+
+
+
{r`\mathbf{b}`}
+
{r`b_i`}
+
Termini noti dei vincoli
+
+
+
{r`\mathbf{y}`}
+
{r`y_i`}
+
Incognite artificiali
+
+
+
{r`\mathbf{u}`}
+
{r`u_i`}
+
Coefficienti di rilassamento
+
+
+
+
{r`c_0`}
+
Valore ottimo di un problema
+
+
+
{r`\mathbf{x}_B`}
+
+
Incognite in base
+
+
+
{r`\mathbf{c}_B`}
+
+
Coefficienti della funzione obiettivo delle variabili in base
+
+
+
{r`\mathbf{B}`}
+
+
Coefficienti dei vincoli delle variabili in base
+
+
+
{r`\mathbf{x}_F`}
+
+
Incognite fuori base
+
+
+
{r`\mathbf{c}_F`}
+
+
Coefficienti della funzione obiettivo delle variabili fuori base
+
+
+
{r`\mathbf{F}`}
+
+
Coefficienti dei vincoli delle variabili fuori base
+
+
+
+
+
+
+
Simboli
+
Significato
+
+
+
+
+
{r`\mathbf{c}^T \mathbf{x}`}
+
Soluzione del problema
+
+
+
{r`\mathbf{A} \mathbf{x} = \mathbf{b}`}
+
Vincoli in forma standard
+
+
+
{r`z(\dots)`}
+
Funzione obiettivo
+
+
+
{r`\mathbf{u}^T \mathbf{b}`}
+
Soluzione del problema duale
+
+
+
{r`\mathbf{u}^T \mathbf{A} = \mathbf{c}^T`}
+
Vincoli del problema duale in forma standard
+
+
+
{r`\lfloor x \rfloor`}
+
Arrotondamento per difetto di x
+
+
+
{r`\lceil x \rceil`}
+
Arrotondamento per eccesso di x
+
+
+
{r`x - \lfloor x \rfloor`}
+
Parte frazionaria di x (se non è negativo)
+
+
+
+
+
+ )
+}
diff --git a/src/routes/OttimizzazioneLineare/01_OttimizzazioneLineare.js b/src/routes/OttimizzazioneLineare/01_OttimizzazioneLineare.js
new file mode 100644
index 0000000..e62f916
--- /dev/null
+++ b/src/routes/OttimizzazioneLineare/01_OttimizzazioneLineare.js
@@ -0,0 +1,600 @@
+import {Fragment} from "preact";
+import {Section, Panel, ILatex, BLatex, PLatex, Latex, BaseLink, Todo} from "bluelib";
+import Min from "../../components/OttimizzazioneLineare/Min";
+import Max from "../../components/OttimizzazioneLineare/Max";
+import Example from "../../components/Example";
+import Finite from "../../components/OttimizzazioneLineare/Finite";
+import Empty from "../../components/OttimizzazioneLineare/Empty";
+import Unbounded from "../../components/OttimizzazioneLineare/Unbounded";
+import Plus from "../../components/Fisica/Plus";
+import Minus from "../../components/Fisica/Minus";
+import ExampleBoxColor from "../../components/ExampleBoxColor";
+
+const r = String.raw;
+
+
+export default function () {
+ return (
+
+
+
+
+ Problemi che cercano di minimizzare/massimizzare il valore di una funzione
+ obiettivo le cui incognite sono sottoposte a un sistema di vincoli.
+
+
+ Spesso sono detti anche problemi di LP.
+
+
+
+
+ La funzione da minimizzare/massimizzare.
+
+
+ Il vettore dei suoi coefficienti è detto {r`\mathbf{c}`}, mentre quello delle sue
+ incognite {r`\mathbf{x}`}.
+
+
+ In genere, la funzione obiettivo è scritta in forma di combinazione lineare tra le incognite e i coefficienti:
+
+
+ La matrice {r`\mathbf{I}`} è la matrice identità.
+
+
+ Se la funzione obiettivo è z = 2w + 3x + 4y, il suo gradiente
+ è {r`\nabla z = (2, 3, 4)`}.
+
+
+
+
+ Equazioni e disequazioni a cui devono sottostare le incognite perchè esse formino una soluzione
+ valida.
+
+
+ I loro coefficienti sono contenuti nella matrice {r`\mathbf{A}`}, mentre i loro
+ termini noti nel vettore {r`\mathbf{b}`}.
+
+
+
+
+ L'insieme che racchiunde tutte le soluzioni ammissibili di un problema.
+
+
+ Può essere , oppure .
+
+
+ Si chiama così perchè se si disegna su un piano cartesiano, esso forma una figura geometrica a
+ più lati, ovvero un poliedro.
+
+
+
+
+ La soluzione di un problema, ricavabile dal
+ prodotto {r`\mathbf{c}^T \mathbf{x}`}.
+
+
+ In particolare, il valore ottimo è un vertice del poliedro, detto vertice ottimo.
+
+ Un modo per rappresentare sistemi in forma standard, anche noto come matrice equivalente
+ completa del sistema.
+
+
+
+
+ Un tableau è un sistema di equazioni in forma matriciale completa.
+
+
+ È possibile effettuare senza che cambi il risultato finale le seguenti trasformazioni:
+
+
+
Moltiplicare un'intera riga per una costante.
+
Sommare una riga a un'altra
+
+
+ Suona familiare? Sì, lo abbiamo fatto anche in Algebra Lineare.
+
+
+
+
+ Variabili che hanno tutti 0 e un solo 1 nella loro colonna del tableau.
+
+
+ La loro controparte sono le variabili fuori base, che hanno qualsiasi altro valore.
+
+
+
+
+ Il valore della funzione obiettivo che si otterrebbe se tutte le variabili fuori base
+ valessero 0.
+
+
+ Procedendo nella risoluzione (descritta in seguito) del tableau, questo valore aumenterà, fino a
+ raggiungere il valore ottimo quando la risoluzione sarà completata.
+
+ Un algoritmo per trovare efficientemente il valore ottimo e le coordinate di un vertice
+ ottimo in problemi di ottimizzazione lineare.
+
+
+ Ricordi Gauss? Il Simplex è la stessa cosa,
+ in cui però si cerca di minimizzare/massimizzare il termine noto della funzione obiettivo.
+
+
+ Questa è la soluzione passo per passo del
+ problema 3 del file Ex_LP_testo.
+
+
+ Perchè sia possibile effettuare il Simplex è necessario che l'origine sia nel poliedro:
+ pertanto, non è possibile che un problema risolto con il Simplex sia .
+
+
+
+
+
Trasforma il sistema in forma standard.
+
Trova tante variabili linearmente indipendenti quante siano le righe: esse saranno
+ la base iniziale.
+
+
Finchè ci sono variabili con coefficienti positivi/negativi nella
+ funzione obiettivo:
+
+
+
+ Scegli la prima variabile fuori base con
+ coefficiente positivo/negativo nella funzione obiettivo: essa
+ è la variabile entrante.
+
+
+
+
+
+ Scegli la variabile in base con il minor rapporto
+ positivo:
+
+ {r`\frac{b_i}{A_ik}`}
+
+
+
+
+ Pivot: trasforma tutte le funzioni del sistema in modo che abbiano 0
+ nella colonna della variabile entrante, tranne nella riga della variabile uscente,
+ in cui avrà 1.
+
+
+
+
+
Il poliedro è : i termini noti dei vincoli sono le coordinate del suo
+ vertice ottimo, mentre il termine noto della funzione obiettivo è il valore ottimo.
+
+
+
+
+
+ Una soluzione con almeno una variabile di valore 0, dovuta a uno o più vincoli
+ ridondanti.
+
+
+ Senza Regola di Bland e in presenza di vincoli ridondanti si rischia di trovarsi a fare
+ pivot infiniti.
+
+
+
+
+
+
+ Un estensione del Simplex per permettere la risoluzione di problemi la cui origine non
+ è una soluzione ammissibile.
+
+
+ Prevede l'introduzione di un problema ausiliario, le cui incognite sono
+ dette artificiali.
+
+
+ Il vettore delle incognite artificiali è solitamente chiamato {r`\mathbf{y}`}.
+
+
+
+
+
Crea un nuovo tableau, aggiungendo variabili artificiali in modo da avere una base
+ ammissibile.
+
+
Sostituisci la vecchia funzione obiettivo con una nuova che minimizzi la somma di
+ tutte le variabili artificiali.
+
+
Fase 1: Risolvi il nuovo problema con il Simplex primale.
+
Se il Simplex termina quando ci sono ancora variabili artificiali nella base, allora
+ il poliedro è .
+
+
Una volta che le variabili artificiali sono fuori base, elimina le loro colonne e la
+ nuova funzione obiettivo.
+
Riporta il tableau in forma base compiendo operazioni per azzerare i
+ coefficienti delle variabili di base nella funzione obiettivo.
+
+
Fase 2: Risolvi il tableau con il Simplex primale.
+
+
+
+
+
+
+ Una versione semplificata di un problema nella quale si ignora la violazione di uno o più
+ vincoli.
+
+
+
+
+ Un rilassamento che permette di misurare di quanto i vincoli vengono violati.
+
+
+ I vincoli, moltiplicati per coefficienti di rilassamento, vengono inseriti nella funzione
+ obiettivo.
+
+
+ Il vettore dei coefficienti di rilassamento solitamente è indicato
+ con {r`\mathbf{u}`}.
+
+ Il sistema che massimizza/minimizza i moltiplicatori di
+ rilassamento di un problema detto primale.
+
+
+
+
+ Possiamo trasporre il tableau e sostituire le variabili {r`x_n`} con
+ variabili {r`u_n`} per ottenere il sistema duale!
+
+
+ I maggiori e minori dei vincoli diventeranno maggiori e minori delle variabili e viceversa.
+
+
+
+
+
Se un problema ha una soluzione finita, allora anche il suo duale la avrà.
+
Se un problema è , allora il suo duale potrà
+ essere oppure .
+
+
Se un problema è , allora il suo duale sarà certamente .
+
+
+
+
+ Variabili e vincoli del duale corrispondono rispettivamente a vincoli e variabili del primale.
+
+
+ In particolare:
+
+
+
+
+
Min
+
Max
+
+
+
+
+
Vincolo \leq
+
Variabile \leq
+
+
+
Vincolo \geq
+
Variabile \geq
+
+
+
Vincolo =
+
Variabile libera
+
+
+
Variabile \leq
+
Vincolo \geq
+
+
+
Variabile \geq
+
Vincolo \leq
+
+
+
Variabile libera
+
Vincolo =
+
+
+
+
+
+
+
+
+ Una disuguaglianza lineare {r`c_0 \leq \mathbf{c}^T \mathbf{x}`} è verificata da
+ tutti i punti di un poliedro non- se e solo se esiste un
+ vettore {r`u \in \mathfrak{R}^m`} tale che:
+
+ TODO: Anche qui c'è una lunga dimostrazione...
+
+
+
+
+ Il teorema che dimostra che il valore della funzione obiettivo del duale (di un qualsiasi
+ tableau) è sempre minore o uguale/maggiore o uguale alla soluzione del
+ corrispettivo primale.
+
+
+ TODO: Dimostrazione cortina, ma sembra complicata.
+
+
+
+
+ Il teorema che ci permette di passare dalla soluzione del duale alla soluzione del
+ primale. TODO: credo?
+
+ Un'estensione al Simplex primale che opera sul problema duale.
+
+
+
+
+ Funziona esattamente come il Simplex primale, ma opera sul duale.
+
+
+
+
+
+
+ Un procedimento che misura di quanto può variare il termine noto di un
+ vincolo {r`b_i`} o il coefficiente della funzione
+ obiettivo {r`c_i`} prima che la base degeneri.
+
+
+
+
+ )
+}
diff --git a/src/routes/OttimizzazioneLineare/02_OttimizzazioneLineareIntera.js b/src/routes/OttimizzazioneLineare/02_OttimizzazioneLineareIntera.js
new file mode 100644
index 0000000..81be2eb
--- /dev/null
+++ b/src/routes/OttimizzazioneLineare/02_OttimizzazioneLineareIntera.js
@@ -0,0 +1,213 @@
+import {Fragment} from "preact";
+import {Section, Panel, ILatex, BLatex, PLatex} from "bluelib";
+import Min from "../../components/OttimizzazioneLineare/Min";
+import Max from "../../components/OttimizzazioneLineare/Max";
+import Example from "../../components/Example";
+import Empty from "../../components/OttimizzazioneLineare/Empty";
+
+const r = String.raw;
+
+
+export default function () {
+ return (
+
+
+
+
+
+ Particolari problemi di ottimizzazione lineare in cui le variabili sono vincolate ad essere
+ numeri interi.
+
+ {r`
+ \mathbf{x} \in \mathbb{Z}^n
+ `}
+
+ Spesso detti anche problemi di ILP.
+
+
+
+
+ Un rilassamento che rimuove il vincolo di integrità a un problema, trovando la sua soluzione
+ continua.
+
+
+
+
+
+
+ Un modo per passare dalla soluzione del rilassamento alla soluzione intera di un problema
+ di ILP.
+
+
+ Consiste nel calcolare la soluzione di ogni singolo punto incluso nel poliedro, e selezionare
+ la minore/maggiore.
+
+
+ Trova sicuramente la soluzione giusta, ma il costo computazionale è
+ esponenziale O(n^k)!
+
+
+
+
+ Un altro modo per passare dalla soluzione del rilassamento alla soluzione intera di un
+ problema di ILP.
+
+
+ Consiste nell'arrotondare tutte le variabili al loro valore intero più vicino, e
+ calcolarne il valore ottimo.
+
+
+ Funziona bene per valori grandi, ma più essi si avvicinano allo 0 più l'errore diventa
+ grande.
+
+
+
+
+ Un altro modo ancora per passare dalla soluzione del rilassamento alla soluzione intera
+ di un problema di ILP.
+
+
+ Consiste nel tagliare il poliedro con nuovi vincoli (piani secanti) che riducono le
+ possibili soluzioni continue ma non quelle intere.
+
+
+ Per selezionare i vincoli, si usano i tagli di Gomory:
+
+ Per ogni valore noto frazionario si viene quindi a creare una nuova variabile in base e
+ un nuovo vincolo formato dall'opposto di tutti i valori frazionari dei coefficienti fuori base.
+
+
+
+ Il tableau:
+
+
+
+
{r`x_1`}
+
{r`x_2`}
+
{r`s_1`}
+
{r`s_2`}
+
TN
+
+
+
+
+
{r`1`}
+
{r`1`}
+
{r`0`}
+
{r`0`}
+
{r`0`}
+
+
+
{r`1`}
+
{r`0`}
+
{r`1`}
+
{r`0`}
+
{r`3`}
+
+
+
{r`\frac{3}{2}`}
+
{r`\frac{1}{2}`}
+
{r`0`}
+
{r`1`}
+
{r`\frac{6}{5}`}
+
+
+
+
+
+ Diventa:
+
+
+
+
{r`x_1`}
+
{r`x_2`}
+
{r`s_1`}
+
{r`s_2`}
+
{r`s_3`}
+
+
TN
+
+
+
+
+
{r`1`}
+
{r`1`}
+
{r`0`}
+
{r`0`}
+
{r`0`}
+
{r`0`}
+
+
+
{r`1`}
+
{r`0`}
+
{r`1`}
+
{r`0`}
+
{r`0`}
+
{r`3`}
+
+
+
{r`\frac{3}{2}`}
+
{r`\frac{1}{2}`}
+
{r`0`}
+
{r`1`}
+
{r`0`}
+
{r`\frac{6}{5}`}
+
+
+
{r`-\frac{1}{2}`}
+
{r`-\frac{1}{2}`}
+
{r`0`}
+
{r`0`}
+
{r`1`}
+
{r`-\frac{1}{5}`}
+
+
+
+
+
+
+
+
+ È possibile usare la tecnica divide et impera per rendere più efficiente l'enumerazione
+ totale.
+
+
+ Si divide il problema principale (trovare il valore ottimo di un problema di ILP) in più
+ sottoproblemi (trovare il valore ottimo di un problema di ILP con una variabile impostata a un
+ valore fisso).
+
+
+ Si crea così un albero.
+
+
+ È possibile chiudere in anticipo alcuni nodi dell'albero se il loro miglior possibile
+ valore ottimo è inferiore a uno precedentemente trovato o se il loro poliedro è .
+
+
+ È possibile utilizzare diverse strategie di esplorazione dell'albero:
+
+
depth-first: permette di raggiungere immediatamente a una soluzione accettabile
+ (ma non ottimale)
+
+
best-first: permette di raggiungere più velocemente alla soluzione corretta
+
+
+
+
+
+ È possibile combinare il metodo dei tagli secanti con la tecnica divide et
+ impera per raggiungere ancora più velocemente a una soluzione.
+
+
+ Si effettuano poche iterazioni del metodo dei tagli secanti, e sul risultato di quelle
+ iterazioni si applica il divide et impera.
+
+
+
+
+ )
+}
diff --git a/src/routes/OttimizzazioneLineare/03_TeoriaDeiGrafi.js b/src/routes/OttimizzazioneLineare/03_TeoriaDeiGrafi.js
new file mode 100644
index 0000000..5483a7b
--- /dev/null
+++ b/src/routes/OttimizzazioneLineare/03_TeoriaDeiGrafi.js
@@ -0,0 +1,175 @@
+import {Fragment} from "preact";
+import {Section, Panel, ILatex, BLatex, PLatex, Todo, BaseLink, Image} from "bluelib";
+import Example from "../../components/Example";
+
+const r = String.raw;
+
+
+export default function () {
+ return (
+
+ Terminologia dei grafi TODO: migliorare}>
+
+
+ Insieme di nodi{r`N`} e archi{r`E`} che li
+ connettono.
+
+
+ Può essere diretto se gli archi hanno una direzione.
+
+
+
+
+ Nodi connessi da un arco.
+
+
+
+
+ Arco connesso a un dato nodo.
+
+
+
+
+ Un arco diretto che termina o inizia da un dato nodo.
+
+
+
+
+ Conteggio degli archi incidenti di un nodo.
+
+
+ Si può calcolare anche relativamente agli archi entranti o agli archi uscenti.
+
+
+
+
+ Sequenza di archi consecutivi.
+
+
+
+
+ Due nodi sono connessi se tra loro esiste almeno un percorso.
+
+
+ Un grafo è connesso se tutti i suoi nodi sono connessi.
+
+
+
+
+ Percorsi rispettivamente indiretti e diretti in cui l'inizio coincide con la fine.
+
+
+
+
+ Grafo in cui ogni nodo è connesso con ogni altro.
+
+
+ Se diretto, contiene {r`n \cdot (n - 1)`} archi; altrimenti, ne contiene la
+ metà.
+
+
+
+
+ Vedi Algoritmi.
+
+
+
+
+ Vedi Algoritmi.
+
+
+
+
+ Sottoinsieme di archi che connettono due sottoinsiemi di nodi.
+
+
+ Può essere anche uscente o entrante; in tal caso include solo gli archi entranti o uscenti dal
+ sottoinsieme.
+
+
+
+
+ Sottoinsieme di nodi e archi di un grafo.
+
+
+ Tutti gli archi di un sottografo possono connettere solo nodi all'interno di esso.
+
+
+
+
+ Sottografo connesso e aciclico.
+
+
+
+
+ Albero che include tutti i nodi di un grafo.
+
+
+
+
+
+
+ Crea uno spanning tree.
+
+
+
Aggiungi l'arco di costo minimo all'albero.
+
Finchè mancano ancora archi:
+
+
Trova tutti gli archi che aggiungerebbero un nuovo nodo all'albero.
+
Seleziona l'arco di costo minore.
+
+
+
+
+
+
+ Trova l'ordine topologico di un albero.
+
+
+
Ripeti finchè ci sono nodi nel grafo:
+
+
Assegna un numero sequenziale a un nodo senza archi entranti.
+
Elimina il nodo a cui hai assegnato il numero.
+
Elimina tutti gli archi incidenti sul nodo che hai eliminato.
+
+
+
+
+
+
+ Trova i percorsi di costo minimo in un albero.
+
+
+
Trova l'ordine topologico dell'albero.
+
Invece che provare ogni singola combinazione di nodi, prova solo i nodi che hanno un numero
+ topologico maggiore di quello del nodo attuale.
+
+
+
+ TODO: forse spiegarlo meglio non farebbe male
+
+
+
+
+ Vedi Algoritmi.
+
+
+
+
+ Trova il volume massimo di acqua che è possibile fare scorrere attraverso tubature con una data
+ capacità.
+
+
+ Costruisci il grafo residuo e vedi se c'è un percorso che va dalla sorgente alla destinazione.
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/routes/OttimizzazioneLineare/index.js b/src/routes/OttimizzazioneLineare/index.js
new file mode 100644
index 0000000..a90e6de
--- /dev/null
+++ b/src/routes/OttimizzazioneLineare/index.js
@@ -0,0 +1,17 @@
+import Intro from "./00_Intro";
+import OttimizzazioneLineare from "./01_OttimizzazioneLineare";
+import OttimizzazioneLineareIntera from "./02_OttimizzazioneLineareIntera";
+import TeoriaDeiGrafi from "./03_TeoriaDeiGrafi";
+
+
+export default function () {
+ return (
+