diff --git a/src/App.js b/src/App.js index cc46e47..c17ec4f 100644 --- a/src/App.js +++ b/src/App.js @@ -11,6 +11,7 @@ import Apprendimento from "./routes/Apprendimento" import Statistica from "./routes/Statistica" import Arzigogoli from "./routes/Sistemioperativi/Arzigogoli" import Cheatsheet from "./routes/Algebra/Cheatsheet" +import Oli from "./routes/Oli" export default function App() { @@ -44,6 +45,9 @@ export default function App() { + + + diff --git a/src/routes/Apprendimento/index.js b/src/routes/Apprendimento/index.js index e755c3f..609d7b0 100644 --- a/src/routes/Apprendimento/index.js +++ b/src/routes/Apprendimento/index.js @@ -10,8 +10,8 @@ import { } from "bluelib/lib/components" import LatexMath from "bluelib/lib/components/LatexMath" -import Box, { default as Panel } from "../../components/Box" -import Split, { default as Section } from "../../components/Split" +import Box from "../../components/Box" +import Split from "../../components/Split" import Todo from "../../components/Todo" @@ -19,7 +19,7 @@ const r = String.raw const BLatex = ({ children, ...props }) => {children} const ILatex = ({ children, ...props }) => {children} const PLatex = ({ children, ...props }) => {children} -const Example = ({ children, ...props }) => {children} +const Example = ({ children, ...props }) => {children} const Tick = ({children}) => {children ?? "tick"} @@ -50,8 +50,8 @@ export default function Apprendimento() { -
- + +

NetLogo è un software di modellazione sistemi multiagente, da noi usato per le lezioni di laboratorio. @@ -68,10 +68,10 @@ export default function Apprendimento() { href={"https://ccl.northwestern.edu/netlogo/docs/dictionary.html"} >documentazione.

-
-
-
- + + + +

Sistemi naturali o artificiali che si basano su leggi reversibili e deterministiche.

@@ -84,24 +84,24 @@ export default function Apprendimento() { due urne con N palline; estraggo una pallina da una urna casuale ad ogni passo e la sposto nell'altra; con tante palline il sistema appare irreversibile. -
- + +

Stati in cui si può trovare un sistema dinamico.

Tutte insieme formano lo (iper)spazio delle fasi.

-
- + +

Lo stato finale di un sistema dinamico.

Tutte le fasi tendono a uno specifico attrattore.

-
- + +

I sistemi dinamici elaborano informazione attraversando fasi e raggiungendo un attrattore. @@ -118,15 +118,15 @@ export default function Apprendimento() { >Qual è il suo attrattore? - -

-
- + + + +

Sistemi dinamici i cui cambiamenti sono descritti da funzioni lineari.

-
- + +

Situazioni iniziali di un sistema lineare.

@@ -157,8 +157,8 @@ export default function Apprendimento() { Mai sentito parlare di Mersenne Twister? -
- + +

Funzione che rappresenta lo stato attuale del sistema.

@@ -168,10 +168,10 @@ export default function Apprendimento() {

Il suo complementare è la funzione energia.

-
-
-
- + + + +

Sono sistemi con le seguenti caratteristiche:

@@ -183,8 +183,8 @@ export default function Apprendimento() {
  • Proattività: agiscono in maniera tale da portare a termine i loro obiettivi
  • Socialità: comunicano con gli altri agenti, scambiando informazioni
  • -
    - + +

    Hanno anche caratteristiche di livello più alto derivate dalle quattro precedenti:

    @@ -199,8 +199,8 @@ export default function Apprendimento() { Gli umani possono benissimo essere considerati agenti del sistema universo. -
    - + +

    Gli agenti si distinguono anche in:

    @@ -229,20 +229,20 @@ export default function Apprendimento() { -
    -
    -
    - + + + +

    Lo sviluppo negli agenti di nuove capacità per cui non erano stati programmati.

    Ad esempio, la Swarm Intelligence, descritta dopo! -
    -
    -
    - + + + +

    Classificazione in base a come prende le decisioni un agente:

    @@ -257,8 +257,8 @@ export default function Apprendimento() { decisione -
    - + +

    Classificazione in base a come sono definiti gli obiettivi di un agente:

    @@ -268,8 +268,8 @@ export default function Apprendimento() { percezioni interne -
    - + +

    Classificazione in base a quanto conosce dell'ambiente un agente:

    @@ -277,10 +277,10 @@ export default function Apprendimento() {
  • Cognitivo: l'agente è immediatamente a conoscenza di tutto l'ambiente
  • Reattivo: l'agente deve scoprire l'ambiente con le sue capacità sensoriali
  • -
    -
    -
    - + + + +
    • Distribuzione: più agenti possono coprire aree di ambiente più vaste, o elaborare più in fretta zone più dense di informazione @@ -288,8 +288,8 @@ export default function Apprendimento() {
    • Rappresentazione: i sistemi multi-agente modellano più accuratamente il mondo reale
    -
    - + +

    Influenza esercitata dal sistema sugli agenti per guidarli verso il loro obiettivo.

    @@ -300,8 +300,8 @@ export default function Apprendimento() {
  • Positivo: incentiva gli agenti ad avere un dato comportamento
  • Negativo: disincentiva gli agenti ad avere un dato comportamento
  • -
    - + +

    Comportamento emergente che si manifesta nei sistemi multiagente con tantissimi agenti.

    @@ -309,40 +309,40 @@ export default function Apprendimento() { Indica la capacità di risoluzione di problemi complessi attraverso la collaborazione di più agenti semplici.

    -
    -
    -
    - + + + +

    Meccanismi simili a quelli evolutivi umani che permettono ai tratti degli agenti di convergere verso un valore.

    -
    - + +

    Inizialmente definita come numero di discendenti fertili, solitamente indica quanto è probabile che i tratti di un individuo siano passati alla generazione successiva.

    -
    - + +

    Sequenza di valori che definisce uno o più tratti di un individuo.

    -
    - + +

    Un insieme di individui aventi tutti gli stessi cromosomi.

    -
    - + +

    Fenomeno che causa una piccola variazione casuale nei cromosomi dei figli.

    Previene la convergenza prematura in un sistema.

    -
    - + +

    Meccanismo di costruzione dei cromosomi in un figlio: i cromosomi dei genitori vengono tagliati nello stesso punto scelto a caso, e per costruire quelli del figlio viene presa una @@ -352,8 +352,8 @@ export default function Apprendimento() { Può portare al miglioramento di un individuo e allo sviluppo di nuovi tratti, ma solo nelle parti di cromosoma che sono diverse tra i due genitori.

    -
    - + +

    Sequenza di valori all'interno di un cromosoma, che può includere anche sezioni in cui il valore è irrilevante. @@ -363,8 +363,8 @@ export default function Apprendimento() { assoluto in un tempo relativamente breve: il sistema generalmente favorisce gli schemi corti con fitness alta.

    -
    - + +

    Situazione in cui si è raggiunta una soluzione non-ottimale a causa dell'assenza di novità nel sistema. @@ -373,10 +373,10 @@ export default function Apprendimento() { Si può impedire con vari metodi: con la mutazione, introducendo requisiti di località per l'accoppiamento, scegliendo diversamente i genitori, etc...

    -
    -
    -
    - + + + +

    Programmi che dati tanti esempi sono in grado di classificare un elemento in una o più categorie. @@ -385,10 +385,10 @@ export default function Apprendimento() { Sono formati da classificatori, liste di messaggi, detettori e effettori.

    -
    -
    -
    - + + + +

    Strutture logiche che elaborano i messaggi.

    @@ -399,28 +399,28 @@ export default function Apprendimento() { Condizione e azione possono essere considerati come due cromosomi di un algoritmo genetico! -
    - + +

    Unità di informazione di un sistema a classificatori: sono generati da detettori e classificatori, e consumati da classificatori ed effettori.

    -
    - + +

    Sensori che percepiscono lo stato dell'ambiente esterno e lo riportano sotto forma di messaggi.

    -
    - + +

    Motori che rispondono ai messaggi effettuando una qualche azione nell'ambiente.

    -
    -
    -
    - + + + +

    Un punteggio associato ad ogni classificatore.

    @@ -430,16 +430,16 @@ export default function Apprendimento() { I classificatori più deboli vengono lentamente eliminati! -
    - + +

    Il numero di condizioni che devono essere soddisfatte perchè il classificatore si attivi.

    -
    - + +

    Prodotto di specificità e forza di un classificatore.

    @@ -450,24 +450,24 @@ export default function Apprendimento() { È la fitness degli algoritmi genetici applicata ai classificatori. -
    -
    -
    - + + + +

    Se l'input non soddisfa nessun classificatore esistente, se ne crea uno nuovo soddisfatto dall'input attuale con una azione casuale.

    -
    - + +

    Se i classificatori emettono in output un messaggio non valido, si crea un nuovo classificatore che trasforma quel messaggio in un output valido.

    -
    -
    -
    - + + + +

    Agenti che possono collegarsi tra loro tramite sinapsi (dirette) e ricevere ed emettere impulsi lungo di esse. @@ -480,10 +480,10 @@ export default function Apprendimento() { Se la somma dei valori di tutti gli impulsi ricevuti è maggiore di una certa soglia, allora il neurone emetterà un impulso.

    -
    -
    -
    - + + + +

    Un modello semplificato di rete neurale in cui vengono considerati solo tempi discreti (ticks), e non è presente la memorizzazione degli impulsi nel tempo. @@ -499,40 +499,40 @@ export default function Apprendimento() { È importante perchè dimostra che le reti neurali possono elaborare qualsiasi cosa, ma incompleto perchè non descrive nessun metodo per la loro creazione automatica. - - + +

    I neuroni si attivano in un dato se la somma dei loro impulsi nel precedente è maggiore o uguale a 1.

    -
    - + +

    Le sinapsi hanno una intensità: è un moltiplicatore che viene applicato a tutti gli impulsi transitanti la sinapsi.

    -
    -
    -
    - + + + +

    Un neurone con una sinapsi entrante con intensità {r`-1`}.

    -
    - + +

    Un neurone con due o più sinapsi entranti con intensità {r`1`}.

    -
    - + +

    Un neurone con due o più sinapsi entranti con intensità {r`\frac{1}{numero\ sinapsi}`}.

    -
    -
    -
    - + + + +

    Un'estensione del modello booleano per permettere l'apprendimento automatico delle configurazioni giuste di neuroni. @@ -544,8 +544,8 @@ export default function Apprendimento() { Non è molto avanzato, ma ha portato a ulteriori studi nel campo delle reti neurali. - - + + @@ -603,10 +603,10 @@ export default function Apprendimento() {
    -
    -

    -
    - + + + +

    In ogni , i neuroni:

    @@ -621,8 +621,8 @@ export default function Apprendimento() { attivazione -
    - + +

    Tutti i neuroni del modello sono intercollegati tra loro da sinapsi.

    @@ -632,8 +632,8 @@ export default function Apprendimento() {

    Questo porta il costo computazionale del modello ad essere {r`O(n^2)`}.

    -
    - + +

    Una funzione dell'intero sistema che rappresenta il totale degli stati di tutti i neuroni e tutte le connessioni. @@ -641,10 +641,10 @@ export default function Apprendimento() { {r` E = - \frac{1}{2} \sum_{n, m} ( w_{nm} \cdot x_n \cdot x_m ) + \sum_n ( \theta_n \cdot x_n ) `} - -

    -
    - + + + +

    Un metodo per realizzare l'apprendimento nel modello di Hopfield.

    @@ -663,8 +663,8 @@ export default function Apprendimento() { Così facendo, si insegna sia il pattern normale sia il suo complementare! -
    - + +

    Applicando l'apprendimento hebbiano al modello di Hopfield si ottengono sinapsi simmetriche.

    @@ -672,16 +672,16 @@ export default function Apprendimento() { Se è valida questa proprietà, si può dimostrare che l'energia del sistema è sempre decrescente, e che quindi che tenderà a un punto fisso!

    -
    - + +

    Il numero di neuroni attivati in entrambi i pattern.

    {r` Q(A, B) = \sum_{i = 1}^n A_i B_i `} -
    - + +

    Più pattern vengono imparati da un modello, più è facile che essi interferiscano tra loro.

    @@ -691,17 +691,17 @@ export default function Apprendimento() { {r`0.14 \cdot N`} -
    - + +

    Per minimizzare l'interferenza tra pattern, è possibile insegnare al modello un archetipo: si insegna più volte il pattern originale applicandoci una minima quantità di interferenza casuale.

    -
    -
    -
    - + + + +

    Un modello di rete neurale che supporta l'apprendimento e che presenta più strati di neuroni. @@ -709,8 +709,8 @@ export default function Apprendimento() {

    Ha costi computazionali molto più bassi del modello di Hopfield.

    -
    - + + @@ -750,10 +750,10 @@ export default function Apprendimento() {
    -
    -
    -
    - + + + +

    Una rete neurale che viene incapsulata all'interno di un singolo neurone.

    @@ -767,8 +767,8 @@ export default function Apprendimento() { {r`b`} è una costante configurabile, detta bias, che rappresenta il valore di partenza della somma degli input.

    -
    - + +

    Un percettrone la cui funzione di emissione è:

    @@ -779,8 +779,8 @@ export default function Apprendimento() { -1 \qquad se\ v < 0 \end{cases} `} -
    - + +

    Si parte da intensità casuali delle sinapsi.

    @@ -795,10 +795,10 @@ export default function Apprendimento() { >backpropagation, che stima l'errore di classificazione di ogni singolo neurone e li corregge di conseguenza.

    -
    -
    -
    - + + + +

    Un modello a percettroni in cui non si presentano cicli.

    @@ -806,8 +806,8 @@ export default function Apprendimento() { Alcuni dei neuroni che vi sono all'interno saranno dunque dei neuroni sorgente e dei neuroni pozzo.

    -
    -
    + + ) } diff --git a/src/routes/Home.js b/src/routes/Home.js index 098dc8b..53bfbfb 100644 --- a/src/routes/Home.js +++ b/src/routes/Home.js @@ -91,9 +91,9 @@ export default function Home({ skin, setSkin }) {
  • - - 🕸️ Ottimizzazione lineare intera - + + ✨ Ottimizzazione lineare intera +
  • diff --git a/src/routes/Oli/index.js b/src/routes/Oli/index.js new file mode 100644 index 0000000..9b36cb9 --- /dev/null +++ b/src/routes/Oli/index.js @@ -0,0 +1,1168 @@ +import { Anchor, BaseLink, Color, ListItem as LI, Paragraph as P, Size, Help } from "bluelib/lib/components" +import LatexMath from "bluelib/lib/components/LatexMath" +import Split from "../../components/Split" +import Box, { default as Panel } from "../../components/Box" +import Todo from "../../components/Todo" + + +const r = String.raw; +const MenuList = ({children, ...props}) => +const TablePanel = ({children, ...props}) => {children}
    +const BLatex = ({ children, ...props }) => {children} +const ILatex = ({ children, ...props }) => {children} +const Latex = ({ children, ...props }) => {children} +const PLatex = ({ children, ...props }) => {children} +const Plus = ({ children, ...props }) => {children} +const Minus = ({ children, ...props }) => {children} +const Example = ({ children, ...props }) => {children} +const Min = ({ children, ...props }) => ( + + {props.children ? props.children : "min"} + +) +const Max = ({ children, ...props }) => ( + + {props.children ? props.children : "max"} + +) +const Empty = ({ children, ...props }) => ( + + {props.children ? props.children : "vuoto"} + +) +const Finite = ({ children, ...props }) => ( + + {props.children ? props.children : "finito"} + +) +const Unbounded = ({ children, ...props }) => ( + + {props.children ? props.children : "illimitato"} + +) + + +export default function Oli() { + return ( +
    + + +

    + Questa parte non è ancora stata scritta. +

    +
    + +

    + 🎓 Il corso è stato tenuto dal Prof. Stefano Novellani. +

    +

    + 📘 Le dispense non sono più disponibili. +

    +

    + 🎥 Le videolezioni sono disponibili in parte qui, mentre le restanti non sono più disponibili. +

    +
    + +
      +
    • 📄 Dispense
    • +
    • 📰 Wikipedia
    • +
    +
    +
    + + +
      +
    • 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
    • +
    +
    +
    + + +

    + Ti serve una mano anche in GLPK? Che in realtà si chiama GMPL, ma vabbè... +

    +

    + Ho fatto una pagina apposta: +

    + +
  • GLPK/MathProg/GMPL
  • +
    +
    +
    + + + + + 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 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. +

    +
    +
    + + +

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

    +

    + {""} +

    +

    + {""} +

    +
    +
    +
    + ) +}