uni
Questo è l’algoritmo pre trovare la soluzione ottima di un Problema di Programmazione Lineare (PL), facendo uso della Teoria della Dualità.
Dato un problema PL in primale standard:
Ne trovo il duale complementare
Parto da una soluzione di base ammissibile del primale, ovvero un vertice.
Data la sua base , ne calcolo la soluzione nel duale, secondo le modalità descritte nella Teoria della Dualità, se la soluzione duale è ammissibile (tutte ) questo vertice è soluzione, altrimenti devo fare un Passo del Simplesso.
Se parto da una base con soluzione non ammissibile nel primale, che è invece soluzione ammissibile nel duale, devo fare un Passo del Simplesso Duale.
Passo del Simplesso
- Determino l’indice uscente : il minore indice (di base) la cui .
si prende sempre il minore per la Regola Anticiclo di Blend.
e - Determino e è una colonna di determinata dalla -esima riga di , in particolare considero , ovvero la colonna di determinata dalla -esima (con indice uscente) riga di .
- Calcolo per ogni indice non di base il prodotto scalare e scarto gli indici per cui tale rapporto è negativo
- Rimpiazzo con l’indice non di base che produce il minimo del seguente prodotto:
- se due indici hanno lo stesso scelgo l’indice minore.
- se tutti gli indici portano ad allora la soluzione è illimitata.
Passo del Simplesso Duale
In questo caso partiamo da un Formato Duale Standard, prendiamo un vertice, scopriamo che non è ammissibile nel primale e quindi dobbiamo applicare il Simplesso Duale.
- data una base , trovo la soluzione di base e scopriamo che è ammissibile (tutte componenti di )
- Trovo quindi la complementare , se trovo che questa non è ammissibile nel primale (non rispetta tutti i vincoli, quindi ) allora sappiamo che la nostra non è Ottimo (fallisce il Test di Ottimalità del degli Scarti Complementari).
- Allora (esiste almeno una riga violata), sia la prima riga violata (indice minore - Regole Anticiclo di Blend), l’indice entrante.
- Calcoliamo
- Calcoliamo con e elimino gli indici per i quali viene positivo (se tutti gli indici portano a prodotto positivo il minimo è )
- Costruisco i rapporti con e prendo l’indice che porta al rapporto minore, e lo chiamo , indice uscente e questo viene rimpiazzato da (se due sono uguali prendo l’indice minore).
Algoritmo verifica Poliedro Vuoto
Questo algoritmo serve per sapere se il poliedro è vuoto o meno:
- Costruisco il suo Duale Ausiliario (DA)
partendo da un problema in duale std
costruisco il suo Duale Associato + tante epsilon quante sono le righe del duale moltiplicandole per l'identità $( i )$
che equivale a prendere il poliedro nella sua forma ed aggiungere ad ogni riga di una , quindi le sono tante quante lo sono le righe di (ovvero numero di colonne di ).
- Cerco il Valore Ottimo del (VO) tramite il Passo del Simplesso Duale (mi aspetto che le due epsilon escano)
- Controllo il segno di VO:
- se allora poliedro del duale (D) è vuoto
- se allora non è vuoto, e una base ammissibile per si costruisce a partire da una base ottima per .