Professional Documents
Culture Documents
Duale
1
Simplesso primale
2
Simplesso duale
1. Scrivo la matrice A avente i coefficienti delle disequazioni del problema di
minimo dato;
2. Considero solo le due disequazioni aventi indici uguali a quelli della base
data (ES: B(1,3) considero la prima e la terza disequazione);
3. Costruisco un sistema con le disequazioni considerate ma prese con
l’uguale;
4. Ottengo la y richiesta risolvendo il sistema;
5. Costruisco il primale facendo la trasposta della matrice e affiancandole i
coefficienti della funzione obiettivo;
6. Sempre considerando gli indici della base data, prendo le disequazioni
corrispondenti, costruisco un altro sistema di equazioni e risolvo
ottenendo la x richiesta;
7. Sostituisco la x ottenuta nelle disequazioni, tranne in quelle di base, e
vedo se sono verificate. L’indice della prima disequazione non verificata
rappresenta l’indice entrante h;
8. Scrivo una matrice An con tutti i coefficienti delle disequazioni non di base
e una Ab con tutti i coefficienti delle disequazioni in base;
9. Calcolo l’inversa di Ab e la cambio di segno;
10. Moltiplico la riga di indice h-esimo di An per ogni colonna di Ab;
11. Calcolo i rapporti ignorando quelli i cui indici sono di base (ES: B(3,4)
con 4 disequazioni calcolo solo r1 ed r2) usando la formula:
ri = -yi/Ahwi
dove per yi si intende la componente i-esima di y;
12. L’indice del rapporto di valore minore sarà l’indice uscente k;
3
Allocazione ottima di risorse
1. Si scelgono le variabili decisionali (x1 ... xn). Per esempio in un problema di
produzione in cui si producono i beni A e B e si deve decidere quanto
produrre di uno e quanto dell’altro si prendono come variabili xA e xB;
2. Si sceglie la funzione obiettivo ovvero la funzione che vogliamo ottimizzare
che può essere di massimo o di minimo. Se si considera il profitto ottenuto
dalla vendita dei beni A e B rispettivamente 90 e 120 ed è richiesto di
trovare una funzione che ricavi il massimo guadagno allora si sceglie come
funzione obiettivo: max(90xA+120xB);
3. Si scelgono i vincoli ovvero una serie di equazioni e/o disequazioni che
restringono la regione ammissibile del problema. Se ad esempio venisse
richiesto di produrre almeno 3 beni di tipo A allora si dovrebbe scrivere
come vincolo xA>=3 tuttavia trattandosi di un problema di massimo si
scriverebbe -xA<=-3;
4
Comandi linprog e intlinprog
Il problema va considerato sempre come problema di minimo.
A: Matrice dei coefficienti delle variabili dei vincoli del problema escluse le
uguaglianze. Viene rappresentata come A=[v1 v2;v3 v4; ... ;vn-1 vn] ovvero mettendo
tutti gli elementi di una stessa riga separati da uno spazio e il “;” per distinguere una
riga dalla successiva;
b: Vettore dei termini noti dei vincoli del problema escluse le uguaglianze. Viene
rappresentato come b=[t1;t2; ... ;tm];
c: Vettore dei coefficienti delle variabili della funzione obiettivo. Viene rappresentato
come c=[o1;o2; ... ;ok];
Aeq: Matrice dei coefficienti delle variabili dei vincoli del problema escluse le
disuguaglianze. Si indica come A;
beq: Vettore dei termini nodi dei vincoli del problema escluse le disuguaglianze. Si
indica come b;
LB: Vettore indicante il minimo valore che può assumere ogni variabile. Viene indicato
come LB=[mX1;mX2; ... mXp];
UB: Vettore indicante il massimo valore che può assumere ogni variabile. Viene
indicato come LB=[MX1;MX2; ... MXp];
intcon: Solo per i problemi che necessitano di imporre alcune variabili intera si usa
questo vettore contenente gli indici delle variabili che devono per forza essere intere.
Viene indicato come intcon=[I1 I2, ... Is];
5
Reti – Flusso di costo minimo
Trovare la X
1. Riscrivo il grafo considerando i soli nodi di T e di U elencati in tabella;
2. Scrivo l’elenco di tutti gli archi compresi quelli del grafo iniziale;
3. Metto a 0 tutti gli archi che non si trovano nel nuovo grafo ottenuto;
4. Metto l’arco in U uguale al valore della capacità (secondo valore);
5. Su ogni nodo è indicato il bilancio, se questo valore è negativo vuol dire che produce
una certa quantità, se invece è positivo vuol dire che ne necessita. Partendo dalle
foglie si deve fare in modo che i nodi che producono mandino abbastanza valore da
soddisfare la richiesta dei nodi che non producono. Si compila quindi la tabella
indicando la quantità che viene mandato dal nodo i al nodo j con i!=j che sarà positiva
se il verso è concorde, negativa se il verso è discorde;
6. Si avrà l’ammissibilità se non ci sono componenti del vettore x ottenuto negative;
7. Sarà degenere se c’è almeno una componente di base uguale a 0;
Trovare il π
1. Riscrivo il grafo considerando i soli nodi di T e di U elencati in tabella;
2. Scrivo l’elenco di tutti i nodi in ordine crescente;
3. Metto 0 come valore del nodo 1 nell’elenco e partendo da questo nodo sommo il
potenziale del nodo di partenza con il costo (primo valore) del nodo d’arrivo;
4. Calcolo i costi ridotti per ogni arco usando la formula:
cr = CostoArco + (PotNodoPartenza-PotNodoArrivo)
5. Se negli archi di L ed U c’è almeno uno 0 allora è degenere;
6. E’ ammissibile se verifica le condizioni che gli archi di L>=0, U<=0 e T=0;
6
Simplesso su reti
1. Calcolo x e π come descritto sopra;
2. Calcolo i costi ridotti degli archi in ordine lessico-grafico usando la formula:
cr = CostoArco + (PotNodoPartenza-PotNodoArrivo)
6. Trovo l’arco uscente scegliendo il minimo tra i due ottenuti nel punto 5;
7
Albero dei cammini minimi - Dijkstra
1. Si procede vedendo la distanza partendo dal nodo di partenza X a tutti i nodi a cui è
collegato con un cammino orientato;
2. Ogni volta che si compila una riga della tabella si sceglie un nuovo nodo che sarà
quello avente distanza minore tra quelli che non sono stati ancora analizzati;
3. Ad ogni passo si sommano i valori degli archi partendo dal nodo di partenza X e
passando per il nodo considerato. Se questo valore è minore del valore corrente
viene sostituito;
4. Ad ogni passo aggiorno anche Q che sarà uguale alla Q precedente, togliendo il nodo
considerato e aggiungendo quelli raggiungi da quel nodo in quella iterazione;
8
Ford-Fulkerson
Algoritmo della croce
1. Traccio una linea verticale, sulla colonna di sinistra metto il nodo 1 e sulla destra
metto tutti i nodi a cui esso è collegato;
2. Traccio una linea orizzontale subito sotto e scrivo sulla colonna di sinistra il nodo
minore a cui era collegato il nodo precedente e metto a destra i nodi a cui esso è
collegato ignorando eventuali nodi già presenti nella colonna di destra;
3. Se il nodo non è collegato a niente oppure se i nodi a cui è collegato sono stati già
tutti considerati si mette “-“;
4. Mi fermo appena compare nella colonna di destra l’ultimo nodo;
5. Partendo dall’ultimo elemento della colonna di destra mi sposto sulla colonna di
sinistra e poi sull’elemento della colonna di destra corrispondente all’elemento di
sinistra che stiamo considerando e continuo fino in cima ottenendo così (letta al
contrario) una sequenza;
Ford-Furkerson
1. Partendo dal nodo 1 faccio l’algoritmo della croce e considerando la sequenza di nodi
ottenuta seleziono l’arco avente valore minimo ottenendo il δ;
2. Pongo v uguale alla sommatoria di tutti i δ (che nel primo passo corrisponde a dire
v=δ) e sottraggo ad ogni arco della sequenza considerata il δ;
3. Continuo ottenendo sequenze sempre diverse poiché ad ogni iterazione si annulla
almeno un arco che quindi non può essere considerato nell’algoritmo della croce;
4. Mi fermo nel momento in cui il nodo 6 non è più raggiungibile perché gli archi che
portano a lui sono azzerati;
9
Taglio di Gomory
Trovare la VI e la Vs
1. Per i problemi di massimo la Vs si ottiene dal rilassamento e la VI arrotondando il
rilassato;
2. Per i problemi di minimo la VI si ottiene dal rilassamento e la VS arrotondando il
rilassato;
Rilassamento
1. Risolvo il sistema dato considerando le disequazioni con l’uguale e il punto P1, pongo
x1=0 e calcolo P2 e P3 e poi pongo x2=0 e calcolo P4 e P5;
2. Sostituisco i punti nella funzione obiettivo e vedo quale ha valore minimo o valore
massimo (in base al problema dato) ottenendo così il rilassamento che va
arrotondato sempre per eccesso;
3. Il punto scelto viene arrotondato per eccesso e nuovamente sostituito nella funzione
obiettivo ottenendo il rilassato arrotondato;
Taglio di Gomory
1. Porto il problema in formato duale standard utilizzando le variabili di scarto per
soddisfare le uguaglianze;
2. Si scrive il nuovo punto che avrà le prime due componenti uguali a quelle del punto
precedentemente scelto per calcolare il rilassamento e le altre due (ovvero le
variabili di scarto) vanno calcolate sostituendo nelle equazioni le componenti
conosciute. Almeno due componenti del vettore devono risultare 0;
3. Si scrive la matrice AB composta dai coefficienti delle variabili del sistema che sono in
base e AN composta da quelli non in base;
4. Si calcola A˜ moltiplicando AB-1 e AN e scelgo una delle due righe;
5. Scrivo un’equazione avente per coefficienti la parte frazionaria delle componenti
della riga scelta. Per calcolare la parte frazionaria di un numero si applica la formula
{x} = x – [x]
dove x è il coefficiente preso in considerazione e [x] è la sua parte intera ovvero il
numero intero più piccolo che non supera il numero x. Ad esempio {-17/96}=79/96
oppure {11/96}=11/96 oppure {95/32}=31/32. Risolvendo la disequazione trovo il
taglio di Gomory richiesto.
10
Branch and Bound
Trovare la VI e la Vs
1. Per trovare la VI si disegna il k-albero richiesto e si sommano i valori degli archi;
2. Per trovare la VS usa l’algoritmo del nodo più vicino partendo dal nodo richiesto e si
sommano i valori degli archi;
11
Zaino
Trovare la VI e la Vs
Albero
1. Costruisco l’albero avente per radice il nodo di indice uguale a quello della
componente frazionaria del rilassato continuo;
2. Considero il ramo di destra quello in cui sono costretto a prendere il nodo e quello a
sinistra quello in cui sono costretto a non prenderlo e per ognuno di questi calcolo la
VS che se è minore o uguale della VS corrente e tutte le componenti del vettore
ottenuto sono 1 o 0 allora si sostituisce la VI corrente con la VS. Se la VS ottenuta è
minore o uguale della VI corrente il ramo viene tagliato e non considero più tutto
quello che viene dopo quel nodo;
12
LKKT
1. Faccio il disegno dei vincoli dati e vedo se l’insieme è limitato. Se lo è allora avrà
sicuramente mA e MA e possiamo ottenerli sostituendo gli eventuali punti dati nella
funzione obiettivo e vedendo quale ha valore massimo e quale valore minimo;
2. Vedo se la funzione è coerciva ovvero che il suo limite per x che tende a infinito è
uguale a infinito. Se lo è allora ammette minimo assoluto, se è anticoerciva (ovvero il
limite risulta meno infinito) allora ammette massimo assoluto;
3. Calcolo i gradienti e scrivo il sistema:
Analisi locale
1. Si vede dove si trova il punto da analizzare nel grafico e in base a quello si sceglie se
avvicinarcisi in verticale o in orizzontale;
2. Se si sceglie di avvicinarsi verticalmente allora si pone la x2 uguale alla componente x2
del punto altrimenti orizzontalmente si fa la stessa cosa con x1.L’altra componente la
si pone uguale a t;
3. Si sostituiscono i valori nella funzione data e si disegna individuando;
4. Se presi in considerazione il punto +ɛ e il punto -ɛ il punto è di minimo/massimo in
entrambi i casi allora è un punto di minimo/massimo. Se in un caso è minimo e
nell’altro è massimo allora è un punto di sella;
13
Frank-Wolfe
14
Metodo del gradiente proiettato
1. Faccio il disegno rappresentando i vertici dati e unendoli;
2. Segno la posizione del punto dato sul poliedro e calcolo la retta passante per i due vertici
che compongono il segmento su cui giace il punto. Ad esempio per il punto (-2;14/3) e i
vertici sotto elencati:
e la poniamo <=0;
4. Scrivo la matrice M avente per componenti i coefficienti di x e y della retta ottenuta;
5. Calcolo il gradiente della funzione e ci sostituisco il punto dato;
6. Calcolo la matrice H tramite la formula:
H = I – MT(M*MT)-1*M
7. Trovo la direzione usando la formula (se è un problema di minimo si mette – altrimenti +):
d = ± H* ∇f
8. Si segna la direzione ottenuta sul grafico e si vede su quale segmento del poliedro si va a
fermare:
9. Si calcola l’equazione della retta passante per i due vertici che è stata trovata nel punto
precedente;
10. Studio A(xk+tdk)<=b dove A è la matrice formata dai coefficienti di x e y della retta ottenuta
nel punto 9 e b è il suo termine noto;
11. Calcolo f’(xk+tdk)=0 se è impossibile allora il massimo spostamento è il passo altrimenti il
massimo spostamento è la t trovata dall’equazione;
12. Calcolo xk+1=xk+tk dk;
15
16