From 5adc23cf4c703f02f8a11f1cdcb446ee86271260 Mon Sep 17 00:00:00 2001
From: Stefano Pigozzi
Date: Thu, 25 Mar 2021 20:44:45 +0100
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Port=20OLI?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/App.js | 4 +
src/routes/Apprendimento/index.js | 326 ++++----
src/routes/Home.js | 6 +-
src/routes/Oli/index.js | 1168 +++++++++++++++++++++++++++++
4 files changed, 1338 insertions(+), 166 deletions(-)
create mode 100644 src/routes/Oli/index.js
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.
-
-
+
+
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 emettereimpulsi 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() {
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.
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.
-
-
+
+
@@ -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 }) {
+
+ 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.
+
+
+
+
+
+
+ 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.
+