Programmazione lineare
Programmazione lineare contiene alcuni algoritmi utili per risolvere certi problemi di ottimizzazione.
Introduzione
Andiamo in questa sezione a definire un problema di programmazione lineare
Definizione
- Variabili reali che saranno le variabili del nostro problema, sono in numero finito (eg. tutti in Rn)
- Funzione obiettivo che ci definisce il costo
- Vincoli lineari che limitano il dominio delle variabili reali e li mettono in relazione fra di loro
Se le variabili appartengono agli interi andiamo a parlare di programmazione lineare intera.
-
Slide

Rappresentazione della soluzione si può formalizzare sempre in questo modo:
Programmazione lineare intera
In modo curioso la programmazione lineare è più facile rispetto alla PLI.
-
Esempio di modelizzazione
Ha fatto un esempio di modelizzazione di un problema introduttivo in classe, in effetti si deve fare attenzione a moltissime cose… (soprattutto costraints impliciti).
Quantitative rappresentano alcune quantità
Logiche rappresentano valori binari (di solito utilizzati per modellare l’assegnamento ad un task)
Relazioni logiche
Possiamo codificare con relazioni fra variabili logiche il concetto di negazione, implicazione congiuzione e disgiunzione.
Le variabili in questo caso. La cosa interessante è che possiamo codificare relazioni logiche con relazioni lineari!
-
Slide rappresentazione di relazioni logiche con relazioni lineari

Vincoli di (semi-)assegnamento
Abbiamo un insieme di oggetti da assegnare in luoghi.
Questo si può codificare con una matrice e usare una variabile logica per specificare se è stato assegnato a quel luogo o meno.
(Secondo me si potrebbe anche utilizzare un numero per questo, ma magari l’algoritmo utilizzato è leggermente diverso, no forse specifica una possibilità di assegnamento, per questo una matrice è una cosa giusta).
Vincoli di semiassegnamento
Ossia ogni oggetto è assegnato a un singolo luogo
-
Slide semiassegnamento

Vincoli di assegnamento
Ogni oggetto ha un singolo luogo e ogni luogo un oggetto
-
Slide assegnamento

Selezione sottoinsiemi
Vogliamo selezionare il minimo fra certi sottoinsiemi (non per forza partizioni!)
Formulazione classica: sia , voglia determinare tale che abbia il costo minimo fra tutti. Nella selezione di questi sottoinsiemi possiamo considerare insiemi di copertura, di riempimento o di partizione.
Esempio del costo classico cioè aggiungo il costo con la variabile booleana che decide se lo scelgo o meno, e poi chiamo una matrice che dice se l'elemento i è in
-
Formalizzazione classica

-
Copertura, riempimento partizione

Variabili a Valori Discreti
Questa parte tratta di valori vincolati a valori reali. (un esempio solito è una macchina che è stata costruita a lavorare entro voltaggi precisi).
Si indica per un insieme di valori che una variabile può assumere. Una rappresentazione classica è in silde sotto
-
Slide

Minima Quantità Positiva Prefissata
Di solito queste tipologie di variabili rappresentano valori di produzione di una macchina perché o è spenta, rappresentata da uno 0, oppure è accesa e presente in un intervallo
-
Slide

Funzione a carico fisso
Indica costi 0 quando la macchina non è in produzione, mentre però è attiva, anche se fa poco, c'è un carico fisso ossia un costo che c'è sempre, e poi cresce in modo lineare
-
Slide introduttive

-
Formalizzazione classica

Rappresentazione del valore assoluto
SI tratta di come rappresentare mediante vincoli la relazione di valore assoluto.
Un problema con questo metodo è che non sempre si riescono a gestire
Anche gestendolo in questo modo ci sono alcune ambiguità
-
Slide, formalizzazione classica e funzione costo

Funzioni lineari a tratti
L'idea è utilizzare una variabile logica che ci dice in quale tratto è presente, poi utilizzare la funzione per calcolare il valore corretto.
In pratica questa è una forma di generalizzazione dei problemi con funzioni a carico fisso, in cui vengono introdotte delle variabili per dire dove sei, e poi utilizzare la funzione di costo del carico fisso.
Questo metodo è buono perché posso utilizzarlo per quanti tratti mi pare
-
Formalizzazione



Modellizzazione per Problemi noti
Problema della fonderia

-
Soluzione fonderia

Problema pianificazione della produzione

-
Soluzione pianificazione produzione

Problema dello zaino (!)

-
Soluzione del modello

Albero di copertura di costo minimo

-
Soluzione

Problema del commesso viaggiatore


-
Note sulla path hamiltoniana

-
Soluzione modellizzazione

Problema dell’agenzia matrimoniale (!)


-
Soluzione modellizzazione

Problema allocazione dei lavori alle macchine (!)
Descrizione del problema
-
Dal libro


Abbiamo dei lavori che devono essere svolti in questi intervalli : , che sono certi valori che svolgono qualcosa, vogliamo cercare di massimizzare il numero di cose svolte, avendo un certo numero di macchine. Una macchina può avere solo un lavoro (o dipendente).
Questo è un problema di semiassegnamento.
Modellizzazione
poniamo se il lavoro è svolto dalla macchina , altrimenti 0
vincoli necessari semi-assegnamento , ora dobbiamo andare a modellizzare il concetto dell’intervallo.
Quindi mi definisco un insieme che contiene tutti i lavori incompatibili a .
Allora il vincolo diventa con , Cioè vogliamo che una macchina esegua solamente un lavoro, o nessun lavoro. E questo vincolo ci dà il concetto di vincolo.
Ora passo alla discussione della funzione obiettivo, quindi introduco una nuova variabile che mi conta le macchine utilizzate
, per tutte le macchine, e poi questa è maggiore di tutti gli per una macchina j fissata.. Così provo ad utilizzare meno macchine possibili
-
Soluzione dal libro
Problema docente di informatica (!)
Questo problema è rappresentato nel libro come di minimizzazione del tempo per lavori di macchina a pagina 37 del pdf delle dispense
Descrizione del problema
Ho progetti da compilare su pc, voglio che ci mettano meno tempo possibile.
Modellizzazione
Sia la variabile la variabile logica se il progetto è data alla macchina
Semi-assegnamento al massimo assegno il progetto a una singola macchina
. Ora entra la parte difficile, introdurre delle variabili che siano utili per avere questo concetto di tempo.
Sia , questo rappresenta il tempo di utilizzo del singolo PC. Quello che noi dobbiamo minimizzare è
Ma questo vincolo non è lineare, quindi è un problema
Quindi introduco un valore che e provo a minimizzare solamente z, quindi sarà il suo valore più basso. (minimo upper bound)
Problema assegnamento delle frequenze

-
Soluzione problema assegnamento

Problema della commesse
Ho n dipendenti, devo evadere m pacchi, un sottoinsieme che indica da chi può essere eseguito questo pacco j, può essere da luogo a un ricavo di . Un dipendente può lavorare su un solo pacco per un intervallo di tempo. Può essere che non tutti i pacchi siano da evadere.
Inizio modello
se la commessa j è selezionata, altrimenti 0
boh
Funzione obiettivo