From 810f6a05971cce6a0ed3a316116a1022eaf59ac4 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Wed, 2 Sep 2020 17:43:05 +0200 Subject: [PATCH] Improve OLI, day by day --- src/routes/CalcoloNumerico/index.js | 4 +- src/routes/OttimizzazioneLineare.js | 1109 ----------------- src/routes/OttimizzazioneLineare/00_Intro.js | 155 +++ .../01_OttimizzazioneLineare.js | 600 +++++++++ .../02_OttimizzazioneLineareIntera.js | 213 ++++ .../03_TeoriaDeiGrafi.js | 175 +++ src/routes/OttimizzazioneLineare/index.js | 17 + 7 files changed, 1161 insertions(+), 1112 deletions(-) delete mode 100644 src/routes/OttimizzazioneLineare.js create mode 100644 src/routes/OttimizzazioneLineare/00_Intro.js create mode 100644 src/routes/OttimizzazioneLineare/01_OttimizzazioneLineare.js create mode 100644 src/routes/OttimizzazioneLineare/02_OttimizzazioneLineareIntera.js create mode 100644 src/routes/OttimizzazioneLineare/03_TeoriaDeiGrafi.js create mode 100644 src/routes/OttimizzazioneLineare/index.js diff --git a/src/routes/CalcoloNumerico/index.js b/src/routes/CalcoloNumerico/index.js index 1a7101a..1d53b07 100644 --- a/src/routes/CalcoloNumerico/index.js +++ b/src/routes/CalcoloNumerico/index.js @@ -5,10 +5,8 @@ import Interpolazione from "./03_Interpolazione"; import InterpolazioneATratti from "./04_InterpolazioneATratti"; import ApprossimazioneDatiSperimentali from "./05_ApprossimazioneDatiSperimentali"; -const r = String.raw; - -export default function (props) { +export default function () { return (

Calcolo Numerico

diff --git a/src/routes/OttimizzazioneLineare.js b/src/routes/OttimizzazioneLineare.js deleted file mode 100644 index 90f2fca..0000000 --- a/src/routes/OttimizzazioneLineare.js +++ /dev/null @@ -1,1109 +0,0 @@ -import { - BaseLink, - BLatex, - ILatex, - Image, - Latex, - LatexDefaultInline, - Panel, - PLatex, - Section, - TablePanel, - Timer, - Todo -} from "bluelib"; -import Example from "../components/Example"; -import Empty from "../components/OttimizzazioneLineare/Empty"; -import Unbounded from "../components/OttimizzazioneLineare/Unbounded"; -import Finite from "../components/OttimizzazioneLineare/Finite"; -import Min from "../components/OttimizzazioneLineare/Min"; -import Max from "../components/OttimizzazioneLineare/Max"; -import Plus from "../components/Fisica/Plus"; -import Minus from "../components/Fisica/Minus"; -import ExampleBoxColor from "../components/ExampleBoxColor"; -import {Link} from "preact-router"; - -const r = String.raw; - - -export default function (props) { - return ( -
-

Ottimizzazione lineare intera

-
- -
    -
  • Prof. Stefano Novellani
  • -
-
- -

- Uno scritto con tre domande: -

-
    -
  • Progettazione concettuale e logica
  • -
  • Formulazione interrogazione
  • -
  • Una domanda tra: -
      -
    • Studio dato derivato
    • -
    • Progettazione fisica
    • -
    • Tecnologia database
    • -
    -
  • -
-
-
- -
- - - - 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) - - - -
-
-
- -

- 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 questa forma: -

-

- {r`z(\mathbf{x}) = c_1 \cdot x_1 + c_2 \cdot x_2 + \dots + c_n \cdot x_n`} -

-
- -

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

-

- {r`\nabla (f) = \frac{d f}{d x_1} I_1 + \frac{d f}{d x_2} I_2 + \frac{d f}{d x_n} I_n`} -

- - 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 problema con: -

-
    -
  • Equazioni e disequazioni
  • -
  • Variabili non vincolate
  • -
- {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\}`} -
- -

- Un problema con: -

-
    -
  • Solo disequazioni
  • -
  • Vincoli di non-negatività sulle incognite
  • -
- {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\}`} -
- -

- Un problema con: -

-
    -
  • Solo equazioni
  • -
  • Vincoli di non-negatività sulle incognite
  • -
- {r`min \left\{ \mathbf{c}^T \mathbf{x} : \mathbf{A} \mathbf{x} = b,\quad x_j \geq 0,\quad j = 1 \dots n \right\}`} -
-
-
- -

- Applica questa conversione a ogni equazione nel sistema: -

-

- {r`a = b \Leftrightarrow - \begin{cases} - a \leq b\\ - a \geq b - \end{cases} - `} -

- Serve solo nella teoria per dimostrare che le forme sono equivalenti. -
- -

- Aggiungi una variabile slack {r`s`} non-vincolata a ogni - disequazione nel sistema: -

-

- {r` - a \leq b \Leftrightarrow a + s = b - `} -

-

- {r` - a \geq b \Leftrightarrow a - s = b - `} -

-
- -

- Sdoppia ogni variabile non-vincolata in due variabili con vincolo di non-negatività: -

-

- {r`\begin{cases} - a = a^+ - a^-\\ - a^+ \geq 0\\ - a^- \geq 0 - \end{cases}`} -

-
-
-
- Valore attuale -
-
- -

- 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. -

-
-
-
- -

- Il sistema: -

- {r` - \begin{cases} - 2000x_1 + 1000x_2 = z\\ - 1x_1 \leq 3\\ - 1x_2 \leq 3\\ - 2x_1 + 2x_2 \leq 7 - \end{cases} - `} -

- Diventa il tableau: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
x_1x_2s_1s_2s_3TN
101003
010103
220017
200010000000
-
    -
  • - Verde: funzione obiettivo -
  • -
  • - Giallo: valore attuale della funzione -
  • -
  • - Rosso: termini noti -
  • -
  • - Blu: Variabili slack -
  • -
-
-
-
- -

- 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 . -

-
- -
    -
  1. Trasforma il sistema in forma standard.
  2. -
  3. Trova tante variabili linearmente indipendenti quante siano le righe: esse saranno - la base iniziale. -
  4. -
  5. Finchè ci sono variabili con coefficienti positivi/negativi nella - funzione obiettivo: -
      -
    1. - Scegli la prima variabile fuori base con - coefficiente positivo/negativo nella funzione obiettivo: essa - è la variabile entrante.
      - -
    2. -
    3. - Scegli la variabile in base con il minor rapporto - positivo {r`\frac{termine\ noto}{coeff.\ variabile\ entrante}`}. - -
    4. -
    5. 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. -
    6. -
    -
  6. -
  7. Il poliedro è : i termini noti dei vincoli sono le coordinate del suo - vertice ottimo, mentre il termine noto della funzione obiettivo è il valore ottimo. -
  8. -
-
- -

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

-
- -
    -
  1. Crea un nuovo tableau, aggiungendo variabili artificiali in modo da avere una base - ammissibile. -
  2. -
  3. Sostituisci la vecchia funzione obiettivo con una nuova che minimizzi la somma di - tutte le variabili artificiali. -
  4. -
  5. Fase 1: Risolvi il nuovo problema con il Simplex primale.
  6. -
  7. Se il Simplex termina quando ci sono ancora variabili artificiali nella base, allora - il poliedro è . -
  8. -
  9. Una volta che le variabili artificiali sono fuori base, elimina le loro colonne e la - nuova funzione obiettivo.
  10. -
  11. Riporta il tableau in forma base compiendo operazioni per azzerare i - coefficienti delle variabili di base nella funzione obiettivo. -
  12. -
  13. Fase 2: Risolvi il tableau con il Simplex primale.
  14. -
-
-
-
- -

- 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: -

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

- diventa: -

- {r` - \begin{cases} - z = 3 x_1 + 5 x_2 + u_1 ( 12 - 2 x_1 - 3 x_2 ) + u_2 ( 3 + x_1 - 3 x_2 )\\ - x_1 \geq 0\\ - x_2 \geq 0 - \end{cases} - `} -
-
-
-
- -

- 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: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MinMax
Vincolo \leqVariabile \leq
Vincolo \geqVariabile \geq
Vincolo =Variabile libera
Variabile \leqVincolo \geq
Variabile \geqVincolo \leq
Variabile liberaVincolo =
-
-
-
- -

- 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: -

- {r`\mathbf{c}^T \geq \mathbf{u}^T \mathbf{A}`} - {r`c_0 \leq \mathbf{u}^T \mathbf{b}`} -
- -

- Il teorema che dimostra l'equivalenza tra primale e duale. -

-

- Se uno dei due problemi è finito, la soluzione di uno coincide con la soluzione dell'altro. -

-

- {r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`} -

-

- 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? -

-

- Si deriva combinando le seguenti condizioni: -

-
    -
  • Ammissibilità del - primale: {r`\mathbf{A} \mathbf{X} \geq \mathbf{b}, \quad \mathbf{x} \geq 0`} -
  • -
  • Ammissibilità del - duale: {r`\mathbf{u}^T \mathbf{A} \leq \mathbf{c}^T, \quad \mathbf{u} \geq 0`} -
  • -
  • Teorema della dualità - forte: {r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`} (alla soluzione - ottima) -
  • -
-

- Ne risulta che una soluzione è ottima se e solo se: -

- {r`\left( \mathbf{c}^T - \mathbf{u}^T \mathbf{A} \right) \mathbf{x} = 0`} - {r`\mathbf{u}^T \left( \mathbf{A} \mathbf{x} - \mathbf{b} \right) = 0`} -
-
-
- -

- 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: -

- {r` - \sum_{j \in F} \left( \left( a_{tj} - \lfloor a_{tj} \rfloor \right) \cdot x_j \right) \geq (b_t - \lfloor b_t \rfloor) - `} -

- 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. -

-
    -
  1. Aggiungi l'arco di costo minimo all'albero.
  2. -
  3. Finchè mancano ancora archi: -
      -
    1. Trova tutti gli archi che aggiungerebbero un nuovo nodo all'albero.
    2. -
    3. Seleziona l'arco di costo minore.
    4. -
    -
  4. -
-
- -

- Trova l'ordine topologico di un albero. -

-
    -
  1. Ripeti finchè ci sono nodi nel grafo: -
      -
    1. Assegna un numero sequenziale a un nodo senza archi entranti.
    2. -
    3. Elimina il nodo a cui hai assegnato il numero.
    4. -
    5. Elimina tutti gli archi incidenti sul nodo che hai eliminato.
    6. -
    -
  2. -
-
- -

- Trova i percorsi di costo minimo in un albero. -

-
    -
  1. Trova l'ordine topologico dell'albero.
  2. -
  3. Invece che provare ogni singola combinazione di nodi, prova solo i nodi che hanno un numero - topologico maggiore di quello del nodo attuale. -
  4. -
-

- 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: +

+

+ {r`z(\mathbf{x}) = c_1 \cdot x_1 + c_2 \cdot x_2 + \dots + c_n \cdot x_n`} +

+
+ +

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

+

+ {r`\nabla (f) = \frac{d f}{d x_1} I_1 + \frac{d f}{d x_2} I_2 + \frac{d f}{d x_n} I_n`} +

+ + 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 problema con: +

+
    +
  • Equazioni e disequazioni
  • +
  • Variabili non vincolate
  • +
+ {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\}`} +
+ +

+ Un problema con: +

+
    +
  • Solo disequazioni
  • +
  • Vincoli di non-negatività sulle incognite
  • +
+ {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\}`} +
+ +

+ Un problema con: +

+
    +
  • Solo equazioni
  • +
  • Vincoli di non-negatività sulle incognite
  • +
+ {r`min \left\{ \mathbf{c}^T \mathbf{x} : \mathbf{A} \mathbf{x} = b,\quad x_j \geq 0,\quad j = 1 \dots n \right\}`} +
+
+
+ +

+ Applica questa conversione a ogni equazione nel sistema: +

+

+ {r` + a = b \Leftrightarrow + \begin{cases} + a \leq b\\ + a \geq b + \end{cases} + `} +

+ Serve solo nella teoria per dimostrare che le forme sono equivalenti. +
+ +

+ Aggiungi una variabile slack {r`s`} non-vincolata a ogni + disequazione nel sistema: +

+

+ {r` + a \leq b \Leftrightarrow a + s = b + `} +

+

+ {r` + a \geq b \Leftrightarrow a - s = b + `} +

+
+ +

+ Sdoppia ogni variabile non-vincolata in due variabili con vincolo di non-negatività: +

+

+ {r` + \begin{cases} + a = a^+ - a^-\\ + a^+ \geq 0\\ + a^- \geq 0 + \end{cases} + `} +

+
+
+
+ +

+ 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. +

+
+
+
+ +

+ Il sistema: +

+ {r` + \begin{cases} + 1x_1\ {\color{Cyan} \leq}\ {\color{Red} 3}\\ + 1x_2\ {\color{Cyan} \leq}\ {\color{Red} 3}\\ + 2x_1 + 2x_2\ {\color{Cyan} \leq}\ {\color{Red} 7}\\ + {\color{Yellow} \min}\ {\color{Green} 2000x_1 + 1000x_2} + \end{cases} + `} +

+ Diventa il tableau: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
x_1x_2s_1s_2s_3TN
101003
010103
220017
200010000000
+

+ Con i seguenti elementi: +

+
    +
  • + Funzione obiettivo +
  • +
  • + Valore attuale +
  • +
  • + Termini noti +
  • +
  • + Variabili slack +
  • +
+
+
+
+ +

+ 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 . +

+
+ +
    +
  1. Trasforma il sistema in forma standard.
  2. +
  3. Trova tante variabili linearmente indipendenti quante siano le righe: esse saranno + la base iniziale. +
  4. +
  5. Finchè ci sono variabili con coefficienti positivi/negativi nella + funzione obiettivo: +
      +
    1. +

      + Scegli la prima variabile fuori base con + coefficiente positivo/negativo nella funzione obiettivo: essa + è la variabile entrante. +

      + +
    2. +
    3. +

      + Scegli la variabile in base con il minor rapporto + positivo: +

      + {r`\frac{b_i}{A_ik}`} + +
    4. +
    5. +

      + 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. +

      +
    6. +
    +
  6. +
  7. Il poliedro è : i termini noti dei vincoli sono le coordinate del suo + vertice ottimo, mentre il termine noto della funzione obiettivo è il valore ottimo. +
  8. +
+
+ +

+ 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}`}. +

+
+ +
    +
  1. Crea un nuovo tableau, aggiungendo variabili artificiali in modo da avere una base + ammissibile. +
  2. +
  3. Sostituisci la vecchia funzione obiettivo con una nuova che minimizzi la somma di + tutte le variabili artificiali. +
  4. +
  5. Fase 1: Risolvi il nuovo problema con il Simplex primale.
  6. +
  7. Se il Simplex termina quando ci sono ancora variabili artificiali nella base, allora + il poliedro è . +
  8. +
  9. Una volta che le variabili artificiali sono fuori base, elimina le loro colonne e la + nuova funzione obiettivo.
  10. +
  11. Riporta il tableau in forma base compiendo operazioni per azzerare i + coefficienti delle variabili di base nella funzione obiettivo. +
  12. +
  13. Fase 2: Risolvi il tableau con il Simplex primale.
  14. +
+
+
+
+ +

+ 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: +

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

+ diventa: +

+ {r` + \begin{cases} + z = 3 x_1 + 5 x_2 + u_1 ( 12 - 2 x_1 - 3 x_2 ) + u_2 ( 3 + x_1 - 3 x_2 )\\ + x_1 \geq 0\\ + x_2 \geq 0 + \end{cases} + `} +
+
+
+
+ +

+ 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: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MinMax
Vincolo \leqVariabile \leq
Vincolo \geqVariabile \geq
Vincolo =Variabile libera
Variabile \leqVincolo \geq
Variabile \geqVincolo \leq
Variabile liberaVincolo =
+
+
+
+ +

+ 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: +

+ {r`\mathbf{c}^T \geq \mathbf{u}^T \mathbf{A}`} + {r`c_0 \leq \mathbf{u}^T \mathbf{b}`} +
+ +

+ Il teorema che dimostra l'equivalenza tra primale e duale. +

+

+ Se uno dei due problemi è finito, la soluzione di uno coincide con la soluzione dell'altro. +

+

+ {r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`} +

+

+ 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? +

+

+ Si deriva combinando le seguenti condizioni: +

+
    +
  • Ammissibilità del + primale: {r`\mathbf{A} \mathbf{X} \geq \mathbf{b}, \quad \mathbf{x} \geq 0`} +
  • +
  • Ammissibilità del + duale: {r`\mathbf{u}^T \mathbf{A} \leq \mathbf{c}^T, \quad \mathbf{u} \geq 0`} +
  • +
  • Teorema della dualità + forte: {r`\mathbf{c}^T \mathbf{x} = \mathbf{u}^T \mathbf{b}`} (alla soluzione + ottima) +
  • +
+

+ Ne risulta che una soluzione è ottima se e solo se: +

+ {r`\left( \mathbf{c}^T - \mathbf{u}^T \mathbf{A} \right) \mathbf{x} = 0`} + {r`\mathbf{u}^T \left( \mathbf{A} \mathbf{x} - \mathbf{b} \right) = 0`} +
+
+
+ +

+ 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: +

+ {r` + \sum_{j \in F} \left( \left( a_{tj} - \lfloor a_{tj} \rfloor \right) \cdot x_j \right) \geq (b_t - \lfloor b_t \rfloor) + `} +

+ 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. +

+
    +
  1. Aggiungi l'arco di costo minimo all'albero.
  2. +
  3. Finchè mancano ancora archi: +
      +
    1. Trova tutti gli archi che aggiungerebbero un nuovo nodo all'albero.
    2. +
    3. Seleziona l'arco di costo minore.
    4. +
    +
  4. +
+
+ +

+ Trova l'ordine topologico di un albero. +

+
    +
  1. Ripeti finchè ci sono nodi nel grafo: +
      +
    1. Assegna un numero sequenziale a un nodo senza archi entranti.
    2. +
    3. Elimina il nodo a cui hai assegnato il numero.
    4. +
    5. Elimina tutti gli archi incidenti sul nodo che hai eliminato.
    6. +
    +
  2. +
+
+ +

+ Trova i percorsi di costo minimo in un albero. +

+
    +
  1. Trova l'ordine topologico dell'albero.
  2. +
  3. Invece che provare ogni singola combinazione di nodi, prova solo i nodi che hanno un numero + topologico maggiore di quello del nodo attuale. +
  4. +
+

+ 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 ( +
+

Ottimizzazione Lineare Intera

+ + + + +
+ ) +}