Sei sulla pagina 1di 1344

Ricerca Operativa 2

Lezione 1 di 48
Introduzione al corso
Obiettivi generali del corso

Lo scopo del corso è di fornire le conoscenze avanzate


dell’ottimizzazione e della programmazione matematica
per la soluzione di alcune classi di problemi decisionali
di particolare interesse pratico.
Il fine ultimo è quello di illustrare i principali riferimenti
metodologici, sia modellistici e algoritmici, utili alla
risoluzione pratica di alcune classi di problemi che
vanno dalla pianificazione delle reti e all’analisi dei dati
Obiettivi specifici del corso
Alla fine del corso di Ricerca Operativa 2, lo studente/la
studentessa dovrebbe essere in grado di formulare e risolvere
diverse tipologie di problemi decisionali, avendo acquisito i
principali modelli e algoritmi di soluzione di problemi di
Programmazione Lineare Intera con particolare riferimento ai
problemi che verranno illustrati durante il corso
A chi è rivolto il corso
I modelli e gli algoritmi della Ricerca Operativa rappresentano
uno strumento metodologico fondamentale nella preparazione
di Ingegneri Gestionali, Informatici, Automatici, delle
Telecomunicazioni, e complementare per tutti i tecnici e gli
operatori in settori caratterizzati da elevata complessità dei
problemi decisionali
Syllabus

Il corso è organizzato in 5 nuclei tematici,


macroscopicamente corrispondenti ai principali
«capitoli» del corso:
1. Pianificazione di sistemi complessi e distribuiti
2. Clustering dei dati
3. Linguaggio AMPL
4. Pianificazione degli investimenti
5. Programmazione della produzione
Modalità di svolgimento

• Ciascun nucleo tematico prevede da un minimo di 7


a un massimo di 12 lezioni, ciascuna comprendenti 4
sessioni di attività
• Le sessioni di attività sono organizzate in maniera
tale da essere auto contenute ma possono richiedere
di tornare alle sessioni precedenti per richiamare
alcuni concetti
• Il materiale didattico prevede principalmente audio
lezioni, slide, testi a supporto ed esercizi proposti
Modalità di svolgimento

• Gli esercizi proposti rappresentano parte integrante


del materiale didattico e il loro svolgimento rientra
nella sessione di studio
• Gli esercizi proposti richiedono che lo studente/la
studentessa abbiano compreso a fondo i concetti
illustrati nella sessione di studio
• Gli esercizi proposti sono pertanto utili per
l’autovalutazione da parte dello studente
• Ove espressamente richiesto, un esercizio proposto
richiede un feedback da parte del docente
Modalità d’esame

• Le modalità d’esame sono quelle previste per tutti gli


insegnamenti del corso di laurea
• L’esame prevede una prova scritta con 19 risposte
multiple (1 punto massimo ciascuna) e 3 risposte
aperte (4 punti massimo ciascuna) per un totale di 31
punti
• Se concordato con il docente, l’esito della prova
scritta può essere integrato con una prova orale (solo
nelle sedi di Roma e Novedrate ed entro la sessione
successiva)
Ricerca Operativa 1

Lezione 1 di 48
Riferimenti docente e bibliografia
Argomento del corso (in breve)

I problemi affrontati nell’ambito della Ricerca Operativa


sono tipicamente quelli in cui bisogna prendere
decisioni sull’uso di risorse disponibili in quantità
limitata in modo da rispettare un insieme assegnato di
condizioni (vincoli) e massimizzando il “beneficio”
ottenibile dall’uso delle risorse stesse. Il corso si
concentra quindi su metodi e algoritmi utili a migliorare
l’efficacia delle decisioni per alcune classi di problemi
che vanno dalla programmazione della produzione alla
progettazione di reti
Prerequisiti

Il corso richiede una conoscenza di base di


Ricerca Operativa (Programmazione Lineare,
Dualità, elementi di Programmazione Lineare
Intera e di teoria dei grafi), teoria degli insiemi,
logica, analisi matematica, geometria analitica e
algebra lineare.
Testi di riferimento

TITOLO
Modelli e Algoritmi della Ricerca Operativa
2a edizione, nuova edizione 2004

AUTORI
Antonio Sassano

Collana
Scienze e tecnologie informatiche

Argomenti
Matematica, statistica, ricerca operativa, analisi dei sistemi

EDITORE
Franco Angeli
Testi di riferimento

TITOLO
Data Clustering

AUTORI
Silvia Canale

Collana
Dispense per il corso di Algoritmi di classificazione e reti
neurali, Dipartimento di Informatica e Sistemistica,
Università degli Studi di Roma «La Sapienza» A.A.
2005-2006

Argomenti
Matematica, statistica, ricerca operativa, analisi dei dati
Ricerca Operativa 1

Lezione 1 di 48
Programma del corso
Programma del corso

1. Pianificazione di sistemi complessi e


distribuiti
• Problema della localizzazione degli impianti
• Grafo di localizzazione
• Formulazione come problema di
Programmazione Lineare Intera
• Algoritmi euristici
Programma del corso

2. Clustering dei dati


• Analisi dei dati e apprendimento automatico
• Definizione dei problemi di clustering
partizionale
• Problema di Partizione in Clique dei nodi di un
grafo
• Formulazione matematica e approcci di
soluzione esatti ed euristici
Programma del corso

3. Linguaggio AMPL
• Modelli e problemi di ottimizzazione in AMPL
• Dichiarazioni e definizioni in AMPL
• Esempi di strutture dati e di algoritmi in AMPL
• Risoluzione di problemi di Programmazione
Lineare Intera in AMPL
Programma del corso

4. Pianificazione degli investimenti


• Pianificazione finanziaria e valutazione degli
investimenti
• Formulazione “Minimal Cover”
• Separazione dei vincoli “Minimal Cover” e
approcci risolutivi
Programma del corso

5. Programmazione della produzione


• Produzione e gestione delle scorte
• Definizione del problema e dei costi
• Approccio EOQ
• Modelli di Programmazione della produzione
Ricerca Operativa 2

Lezione 2 di 48
Pianificazione di sistemi complessi e distribuiti
Introduzione
Ricerca Operativa – Introduzione

• Definizione Branca della matematica applicata in cui problemi


decisionali complessi vengono analizzati e risolti
mediante modelli matematici e metodi quantitativi avanzati
(ottimizzazione, simulazione, etc.)
• Obiettivo Fornire un supporto nel prendere le decisioni
(decision making)
• Strumenti Modelli e metodi matematici di supporto alle
attività decisionali in cui occorre gestire e coordinare attività e
risorse limitate al fine di massimizzare o minimizzare una
funzione obiettivo

Fonte https://it.wikipedia.org/wiki/Ricerca_operativa
Problema decisionale

Un problema di scelta in cui si deve prendere una decisione tra


un elevato numero di soluzioni (ammissibili), alternative tra loro,
sulla base di uno o più criteri di scelta
SOLUZIONE 1

SOLUZIONE 2
PROBLEMA
P

SOLUZIONE N(P)

Ogni soluzione ammissibile rappresenta una decisione ed è


caratterizzata da un costo (da minimizzare) o da un vantaggio
(da massimizzare) oltre che da una serie di ricadute pratiche
sulle risorse interessate dal problema
Fonte https://it.wikipedia.org/wiki/Problema_decisionale
Processo decisionale – Approccio modellistico

La famiglia delle soluzioni ammissibili viene modellata


come un insieme di soluzioni di un problema
matematico detto modello PROBLEMA
P

Se la
ANALISI DEL PROBLEMA DECISIONALE – Si analizza la struttura del problema decisionale per individuare i legami
soluzione
logici tra gli elementi della decisione e gli obiettivi da perseguire nel processo decisionale
ottima
determinata
IDENTIFICAZIONE DEL MODELLO – Si identifica il modello matematico e se ne descrivono le caratteristiche non è
principali (variabili, vincoli e funzione obiettivo) in termini matematici accettabile
oppure non
ANALISI DEL MODELLO – In base al tipo di modello matematico, si derivano matematicamente (i) condizioni di ha rilievo
esistenza e (eventualmente) unicità della soluzione ottima; (ii) condizioni di ottimalità e (iii) stabilità delle soluzioni pratico,
occorre
SOLUZIONE NUMERICA – In base al tipo di modello matematico, si seleziona e si adotta un algoritmo di calcolo tenere
che determini la soluzione ottima del problema decisionale conto di
ulteriori
vincoli nel
VALIDAZIONE DEL MODELLO – La soluzione ottima determinata viene interpretata dal punto di vista decisionale e
problema
validata attraverso una verifica sperimentale oppure tramite metodi di simulazione
decisionale
Approccio modellistico - Motivazioni
ANALISI DEL
• Comprensione del problema PROBLEMA
Il modello identificato è un’astrazione logica del problema decisionale e DECISIONALE
permette di evidenziarne aspetti che possono a volte risultare di difficile
comprensione
IDENTIFICAZIONE DEL
• Studio delle proprietà del problema MODELLO
Il modello identificato appartiene solitamente a una classe di problemi di cui
sono note importanti proprietà che ne favoriscono lo studio e la risoluzione
• Risoluzione matematica del problema ANALISI DEL MODELLO
Possibilità di determinare la soluzione ottima di un problema decisionale in
maniera efficiente e senza il rischio di lasciarsi fuorviare da considerazioni
soggettive
• Simulazioni SOLUZIONE NUMERICA
Possibilità di effettuare esperimenti sul modello identificato rispetto a diversi
dati del problema, evitando di dover fare prove pratiche di difficile
realizzazione VALIDAZIONE DEL
MODELLO
Modelli della Ricerca Operativa
Modelli matematici – Attraverso la definizione di variabili
matematiche e di opportune grandezze vengono esplicitate le
principali relazioni funzionali che legano le variabili del problema
tra loro
I modelli possono essere stocastici o deterministici
– Stocastici le grandezze possono essere influenzate da
fenomeni aleatori
– Deterministici le grandezze sono esatte
I modelli possono essere statici o dinamici
– Statici le interazioni tra grandezze e variabili sono immediate
– Dinamici le interazioni tra grandezze e variabili variano nel
tempo
Modelli della Ricerca Operativa
• Sono modelli matematici in cui
– Una funzione obiettivo viene definita come funzione da massimizzare o da
minimizzare
– Variabili che descrivono le possibili soluzioni e che sono vincolate a rispettare
un insieme di condizioni che definiscono un insieme prefissato

• In fase di identificazione del modello si determina una


ANALISI DEL
corrispondenza tra le relazioni logiche insite nel problema PROBLEMA
decisionale (vincoli tecnologici, leggi fisiche, limiti di DECISIONALE
budget, etc.) e relazioni matematiche (equazioni e
disequazioni, relazioni funzionali e insiemistiche, etc.) IDENTIFICAZIONE DEL
MODELLO

• L’obiettivo è identificare un modello che sia indipendente dai dati specifici del
problema decisionale e sia, quindi, riutilizzabile
Modelli della Ricerca Operativa
• L’analisi del problema decisionale fornisce una descrizione qualitativa del
problema che ne mette in evidenza i vincoli logici
• L’identificazione del modello prevede i seguenti passi:
1. Definizione di opportune variabili di decisione, dette anche incognite del
problema: occorre definirne una per ogni grandezza reale del problema
2. Definizione della funzione obiettivo da massimizzare o da minimizzare che
sia funzione delle variabili di decisioni
3. Definizione dell’insieme dei vincoli del problema: ciascun vincolo (o famiglia
di vincoli) esprime matematicamente i legami esistenti tra le variabili di
decisioni e le limitazioni cui tali variabili sono soggette
• L’insieme dei valori delle variabili che soddisfano tutti i vincoli viene
definito insieme ammissibile
Strumenti per la pianificazione

In questo corso utilizzeremo metodi e modelli della Ricerca


Operativa (Operations Research), una disciplina scientifica
relativamente recente che fornisce strumenti matematici
sofisticati di supporto alla cosiddetta Scienza Delle Decisioni
(Management Science).
Nata nel 1939 come supporto alle operazioni belliche, la Ricerca
Operativa ha come principale obiettivo quello di definire modelli
matematici per la rappresentazione e la gestione dei processi
decisionali e di identificare procedure sistematiche (algoritmi)
efficienti per la soluzione di problemi decisionali di grandi
dimensioni.
Motivazioni

L’adozione di metodi e modelli delle Ricerca Operativa è


supportata dalle seguenti considerazioni.
- L’aumento della complessità dei sistemi e delle varabili da
considerare
- La crescita della disponibilità di dati riguardo i sistemi e le
grandezze che li descrivono
- La capacità di calcolo dei calcolatori in grado di elaborare
milioni di dati
hanno comportato l’aumento della difficoltà di prendere
decisioni ottime in breve tempo.
Applicazioni della Ricerca Operativa
Nel corso degli anni la Ricerca Operativa è stata impiegata con successo in un numero sempre
crescente di applicazioni in cui i processi decisionali richiedevano la valutazione e il confronto
simulateneo di un elevato numero di alternative molto diverse tra loro, quali ad esempio:
• Finanza e investimenti (gestione del portafoglio, selezione degli investimenti, ..);
• Pianificazione della produzione, sia a medio che a breve termine;
• Gestione ottima delle scorte di magazzino;
• Localizzazione e dimensionamento degli impianti
• Progetto di reti di comunicazione/telecomunicazione
• Determinazione di percorsi ottimi su reti di diversa natura (stradale, ferroviaria, etc.)
• Sequenziamento ottimo di processi in sistemi complessi
• Allocazione ottima di componenti elettronici su chip
• Determinazione dei turni del personale
• Istradamento del traffico e dei veicoli
• Apprendimento automatico e data mining (clustering dei dati, riconoscimento e classificazione
automatica di pattern, profilazione degli utenti, etc.)
• Molte altre
Ricerca Operativa 2

Lezione 2 di 48
Pianificazione di sistemi complessi e distribuiti
Approccio modellistico
Pianificazione di sistemi complessi e distribuiti
La pianificazione di sistemi complessi e distribuiti deve tenere conto di:
• Vincoli tecnologici imposti sugli elementi del sistema
- Un sistema può essere organizzato in diversi modi; ad esempio può
essere centralizzato oppure distribuito
- Può inoltre comprendere elementi caratterizzati da capacità limitata
oppure talmente elevata da poter considerare la capacità come
illimitata
- Elementi diversi possono adottare tecnologie diverse
- Altre tipologie di vincoli
• Obiettivi della pianificazione (minimizzare i costi di installazione di nuovi
siti, massimizzare il profitto derivante dal servizio offerto a nuovi utenti,
etc.)
Pianificazione di sistemi complessi e distribuiti – Analisi
Per considerare
• i vincoli tecnologici imposti dal sistema occorre
 modellare il problema, vale a dire definire un modello di rete
 definire le grandezze che descrivono tutte le componenti del modello
di rete
 definire tutte le variabili, le relazioni tra le variabilie e i vincoli cui sono
soggette le variabili del modello di rete
• gli obiettivi della pianificazione occorre
 definire gli obiettivi in termini di variabili del modello di rete
Approccio modellistico
In Ingegneria, un modello è una rappresentazione semplificata e sintetica di
fenomeni o sistemi reali costruita per evidenziarne alcune specifiche
caratteristiche.
Un modello matematico è un modello definito mediante il linguaggio formale
e gli strumenti della matematica al fine di evidenziarne al meglio alcune
specifiche caratteristiche.
I modelli possono avere diverse finalità. In base alla loro applicazione, i
modelli possono essere:
predittivi
dimostrativi
simulativi
...
Nella Ricerca Operativa i modelli matematici vengono impiegati per
determinare soluzioni ottime o di buona qualità per il problema in esame.
Approccio modellistico

L’impiego di modelli matematici nella Ricerca Operativa presenta


Vantaggi
1. La soluzione può essere trovata matematicamente (quindi in
maniera automatica)
2. C’è la possibilità di fare diverse simulazioni (e.g., what if )
3. Deduzione analitica di proprietà utili per risolvere classi di
problemi
Svantaggi
1. Inaffidabilità: il modello è troppo semplificato o addirittura
mal posto
2. Inapplicabilità: in alcuni casi il modello può essere corretto ma
di difficile soluzione
Approccio modellistico

Come abbiamo nella precedente sessione di studio, a partire


dall’Analisi del problema decisionale si procede con le fasi di Analisi del problema
decisionale
Identificazione del modello
Comprende l’attività di formulazione matematica del
problema Identificazione del modello

Analisi del modello


Comprende l’attività di verifica, sia formale che sostanziale, Analisi del modello
del modello rispetto al problema in analisi
Soluzione del modello
Soluzione del modello
Comprende la determinazione di una soluzione del problema
Validazione del modello
Può comprendere l’attività di raffinamento del modello a Validazione del modello
partire dall’esito della validazione
Approccio modellistico

L’impiego di modelli matematici è fondamentale nella Ricerca Operativa. Una


volta formulato attraverso un modello matematico, il problema può essere
risolto risolvendo un problema di ottimizzazione.
Risolvere un problema di ottimizzazione significa selezionare la migliore
soluzione in un insieme di possibili soluzioni (soluzioni ammissibili).

Esempio
Problema del percorso minimo su una rete di router: qual è il percorso più
breve per andare dal router A al router B.
Approccio modellistico – Percorso minimo su una rete

Rappresentiamo la rete come un grafo 𝐺𝐺(𝑉𝑉, 𝐸𝐸) caratterizzato dall’insieme


𝑉𝑉 = {1, … , 𝑁𝑁} di 𝑁𝑁 nodi e dall’insieme 𝐸𝐸 ⊆ 𝑉𝑉 × 𝑉𝑉 di 𝑀𝑀 archi orientati (tali
che l’arco 𝑖𝑖, 𝑗𝑗 sia diverso dall’arco 𝑗𝑗, 𝑖𝑖 per ogni coppia di nodi 𝑖𝑖, 𝑗𝑗 ∈ 𝑉𝑉)
Graficamente, possiamo
visualizzare il grafo 𝐺𝐺(𝑉𝑉, 𝐸𝐸) 2 1 B
tramite cerchi che indichino i
nodi di rete e archi orientati che
indichino le connessioni
3

Nodi di rete A 5

Connessioni

4
Approccio modellistico – Percorso minimo su una rete

Le lunghezze delle connessioni tra i diversi router della rete vengono


modellate tramite 𝑀𝑀 pesi positivi 𝑝𝑝 uno per ogni arco in 𝐸𝐸

𝑝𝑝: 𝐸𝐸 → ℝ+
6 3
1 B
Graficamente, scriviamo il peso 2

di ogni connessione accanto al


3 3
relativo arco in 𝐸𝐸 2
2 4

3 3

Nodi di rete A 1 5
2
Connessioni
5 5
4
Approccio modellistico – Percorso minimo su una rete

L’insieme 𝑆𝑆 delle soluzioni ammissibili del problema è costituito da tutti i


possibili percorsi dal nodo A al nodo B, vale a direi percorsi
• A-2-1-B 6 3
2 1 B
• A-2-3-1-B
3 3
2
• A-2-3-B 2 4

• A-3-B 3 3
A 1 5
2
5 5
Possiamo quindi scrivere 4
𝑆𝑆 = {A−2−1−B, A−2−3−1−B, A-2-3-B, A-3-B}
Approccio modellistico – Percorso minimo su una rete

Ciascuna soluzione ammissibile è caratterizzata da una lunghezza diversa,


data dalla somma delle lunghezze delle connessioni di rete. Definiamo quindi
la funzione di costo come una funzione a valori reali non negativi
𝑓𝑓: 𝑆𝑆 → ℝ+
Nel caso in esame, abbiamo i 2
6 1
3
B
seguenti costi associati a
3 3
ciascuna soluzione ammissibile 2
2 4
sono
3
• 𝑓𝑓(A-2-1-B) = 2+6+3=11 3
A 1 5
• 𝑓𝑓(A-2-3-1-B) = 2+3+3+3=8 2
• 𝑓𝑓(A-2-3-B) = 2+3+2=7 5 5
• 𝑓𝑓(A-3-B) = 3+2=5 4
Approccio modellistico – Percorso minimo su una rete

La funzione 𝑓𝑓 viene detta funzione obiettivo del problema perché è la


funzione da ottimizzazione nel problema di decisione di stabilire il percorso
minimo sulla rete di router.
Indicando con 𝑥𝑥 ∈ 𝑆𝑆 una qualsiasi soluzione ammissibile in 𝑆𝑆 (vale a dire un
percorso dal router A al router B), il problema di percorso minimo può essere
formulato sinteticamente come un problema di ottimizzazione

min 𝑓𝑓(𝑥𝑥)
𝑥𝑥∈𝑆𝑆
Risolvere il problema di ottimizzazione significa determinare la soluzione
ammissibile 𝑥𝑥 ∗ ∈ 𝑆𝑆 appartenente all’insieme 𝑆𝑆 di tutti i possibili percorsi da A
a B che abbia lunghezza minore di tutti gli altri, vale a dire tale che
𝑓𝑓 𝑥𝑥 ∗ ≤ 𝑓𝑓 𝑥𝑥 ∀𝑥𝑥 ∈ 𝑆𝑆
Approccio modellistico – Percorso minimo su una rete

L’istanza di problema considerata è molto semplice da risolvere. Infatti,


l’insieme delle soluzioni ammissibili consiste di un numero molto limitato di
soluzioni ( 𝑆𝑆 = 4).
Per determinare la soluzione
ottima è sufficiente quindi 2
6 1
3
B
considerare i costi delle 4
3 3
soluzioni ammissibili e scegliere 2
2 4
quella con costo minimo
3
• 𝑓𝑓(A-2-1-B) = 2+6+3=11 3
A 1 5
• 𝑓𝑓(A-2-3-1-B) = 2+3+3+3=8 2
• 𝑓𝑓(A-2-3-B) = 2+3+2=7 5 5
• 𝑓𝑓(A-3-B) = 3+2=7 4
Approccio modellistico

Formulare un problema come problema di ottimizzazione non


implica saperlo risolvere

Nell’esempio appena visto, sapere formulare il problema di percorso minimo


in una rete di telecomunicazioni non significa trovare il percorso minimo
In generale, dato un problema di ottimizzazione, la procedura di soluzione
naturale sarebbe la seguente:
1. definire l’insieme 𝑆𝑆 di tutti i possibili percorsi da A a B;

2. calcolare per ogni percorso in 𝑆𝑆 la lunghezza del percorso;


3. scegliere il percorso di lunghezza minima.
Pianificazione di un sistema di generazione distribuita

Nel primo nucleo tematico del corso ci occuperemo della formulazione e


soluzione del problema di pianificazione di sistemi complessi e distribuiti.
Considereremo diversi modelli di cui definiremo vincoli e funzione obiettivo
per alcuni scenari di riferimento.
Per ciascuno di essi:
1. Analizzeremo il problema
2. Definiremo il modello matematico come problema di ottimizzazione, di
cui definiremo l’insieme delle soluzioni ammissibili e la funzione obiettivo
3. Vedremo i principali strumenti metodologici, esatti ed euristici, per la
soluzione del problema di ottimizzazione
Problema della localizzazione di impianti di produzione di energia

Nella prossima lezione inizieremo con un problema molto semplificato: quello


di pianificare una rete di distribuzione a partire da un insieme di siti candidati
ad ospitare un impianto di produzione ed un insieme di centri di domanda

Come vedremo, il problema può essere formulato matematicamente


attraverso opportuni strumenti analitici. In particolare, vedremo come
rappresentare il problema attraverso un modello di rete (grafo di
localizzazione) e attraverso un linguaggio matematico (Programmazione
Lineare Intera)

Una volta definito e rappresentato il problema vedremo diverse tecniche di


soluzione per trovarne la soluzione
Ricerca Operativa 2

Lezione 2 di 48
Domanda aperta
Cos’è un modello, quali vantaggi offre e come è correlato ai
sistemi di pianificazione dei sistemi complessi e distribuiti?
Ricerca Operativa 2

Lezione 2 di 48
Domanda aperta
Si consideri il problema di percorso minimo sulla rete rappresentata
dal seguente grafo

6 3
2 1 B

Nodi di rete 3 3
2
2 4
Connessioni
3 3
A 1 5
2
5 5
4

Determinare la lunghezza del percorso A-3-1-B


Ricerca Operativa 2

Lezione 3 di 48
Il problema di localizzazione degli impianti
Pianificazione dei sistemi complessi e distribuiti
Approccio modellistico
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Pianificazione dei sistemi complessi e distribuiti
Analisi del problema decisionale
Identificazione del problema
Localizzazione degli impianti
Identificazione del problema – Localizzazione degli impianti

Localizzazione dei Assegnazione della domanda


centri di produzione ai centri di produzione selezionati
Identificazione del problema
Modelli di localizzazione
Identificazione del problema
Modelli di localizzazione
Identificazione del problema
Modelli di localizzazione
Identificazione del problema
Modelli di localizzazione
Identificazione del problema
Modello classico di localizzazione
Identificazione del problema
Modello di localizzazione – Rappresentazioni
Ricerca Operativa 2

Lezione 3 di 48
Grafo di localizzazione
Identificazione del problema
Modello di localizzazione – Rappresentazioni
• Esistono due principali rappresentazioni di riferimento per
formulare il problema di localizzazione:
– Rappresentazione tramite grafo (grafo di localizzazione)
– Rappresentazione tramite Programmazione Lineare Intera

Formulare un problema come problema di


ottimizzazione non implica saperlo risolvere

• In questa sessione di studio introduciamo il grafo di


localizzazione per poi passare alla seconda rappresentazione
Identificazione del problema
Grafo di localizzazione
• Dato un problema di localizzazione degli impianti, si definisce
un grafo 𝐺𝐺(𝑉𝑉, 𝐸𝐸) dove 𝑉𝑉 è l’insieme dei nodi e 𝐸𝐸 è l’insieme
degli archi del grafo

• L’insieme 𝑉𝑉 comprende due sottoinsiemi di nodi:


– 𝑉𝑉1 rappresenta l’insieme dei siti candidati (siti di produzione)
– 𝑉𝑉2 rappresenta l’insieme dei clienti (siti di domanda)
Identificazione del problema
Grafo di localizzazione
• A ogni nodo in 𝑉𝑉1 viene associato un costo di attivazione dato
dal costo di costruire effettivamente un impianto nel relativo
sito candidato
• L’insieme 𝐸𝐸 definisce le relazioni di afferenza dei clienti (nodi in
𝑉𝑉2 ) ai siti candidati (nodi in 𝑉𝑉1 )
• A ogni arco in 𝐸𝐸 viene associato un costo di afferenza di un
cliente (nodo in 𝑉𝑉2 ) a un dato sito candidato (nodo in 𝑉𝑉1 )
Identificazione del problema
Grafo di localizzazione – Esempio
• Consideriamo un problema di localizzazione degli impianti con:
– 3 siti candidati (𝑉𝑉1 ={A,B,C})
– 4 clienti (𝑉𝑉2 ={1,2,3,4 })

Rombi per i siti candidati 𝑉𝑉1 ={A,B,C}

Due insiemi di nodi


Cerchi per i clienti 𝑉𝑉2 ={ 1,2,3,4 }
Identificazione del problema
Grafo di localizzazione – Esempio
• Consideriamo un problema di localizzazione degli impianti con:
– 3 siti candidati (𝑉𝑉1 ={A,B,C})
– 4 clienti (𝑉𝑉2 ={1,2,3,4 })

A B C

1 2 3 4
Identificazione del problema
Grafo di localizzazione – Esempio
• Gli archi che connettono un rombo e un cerchio rappresentano
il fatto che un cliente può essere servito da un impianto
localizzato nel rombo
• Il numero associato all’arco rappresenta il costo di afferenza
A 6
6
8 7
3
1
10 1
B
10 1
2 4
10 5
4
1 C
Identificazione del problema
Grafo di localizzazione – Esempio
• A ogni sito candidato nell’insieme 𝑉𝑉1 ={A,B,C} viene associato il
relativo costo di attivazione
fA = 4
A 6
6
8 7
3
1
10 fB = 5 1
B
10 1
2 4
10 5
4
1 C
fC = 10
Identificazione del problema
Grafo di localizzazione – Esempio
• Il grafo di localizzazione risultante per il nostro esempio è il
seguente
fA = 4
Obiettivo del problema di
localizzazione è scegliere dove
A 6
6 attivare gli impianti
8 7
3
1
10 fB = 5 1
B Determinare quali dei 3 siti
2
10 1
4 candidati occorre attivare e come
10 5
4
assegnare i clienti in modo da
1 C minimizzare la somma del costo
fC = 10 di afferenza e del costo di
attivazione
Ricerca Operativa 2

Lezione 3 di 48
Il problema di localizzazione degli impianti
Domanda aperta
Descrivere gli elementi caratterizzanti il problema di
localizzazione degli impianti
Ricerca Operativa 2

Lezione 3 di 48
Il problema di localizzazione degli impianti
Domanda aperta
Disegnare il grafo di localizzazione con 4 siti candidati {A, B, C, D}
e 2 clienti {1,2} senza considerare i costi del problema
Ricerca Operativa 2

Lezione 4 di 48
Il problema di localizzazione degli impianti
Analisi tramite grafo di localizzazione
Identificazione del problema
Grafo di localizzazione – Ripasso
• Come abbiamo visto nella precedente lezione, la pianificazione
di un sistema di complesso e distribuito richiede strumenti
metodologici e algoritmici che tengano conto della complessità
del problema (vincoli tecnologici, budget, commerciali, etc.) e
del carattere distribuito del sistema (la produzione di ciascun
sito di produzione influenza sia la domanda che altri siti di
produzione)
• L’approccio modellistico tipico della Ricerca Operativa ci
permette di affrontare il problema come problema decisionale
e applicare tutti i passi della metodologia (ciclica) prevista da
tale approccio
Identificazione del problema
Grafo di localizzazione – Ripasso
• Abbiamo affrontato l’analisi del problema, fase in cui abbiamo
individuato le principali caratteristiche del problema, in termini
di caratterizzazioni dei siti della rete (siti di domanda e siti di
produzione), di costi, di vincoli e di obiettivi dell’ottimizzazione
• Questo ci ha permesso di identificare il problema come un
problema di localizzazione degli impianti (facility location)
• Abbiamo visto che esistono due principali rappresentazione per
tale problema:
– Rappresentazione tramite grafo (grafo di localizzazione)
– Rappresentazione tramite Programmazione Lineare Intera
Identificazione del problema
Grafo di localizzazione – Ripasso
• Il grafo di localizzazione è un grafo grafo 𝐺𝐺(𝑉𝑉, 𝐸𝐸) dove
– 𝑉𝑉 = 𝑉𝑉1 ∪ 𝑉𝑉2 è l’insieme dei nodi (siti candidati e clienti)
– 𝐸𝐸 è l’insieme degli archi del grafo che connettono nodi in 𝑉𝑉1
(siti candidati) con nodi in 𝑉𝑉2 (clienti)
– a ogni nodo in 𝑉𝑉1 (sito candidato) viene associato un costo di
attivazione
– a ogni arco in 𝐸𝐸 viene associato un costo di afferenza di un
cliente (nodo in 𝑉𝑉2 ) a un dato sito candidato (nodo in 𝑉𝑉1 )
Identificazione del problema
Grafo di localizzazione – Ripasso
• Un esempio è dato dal seguente grafo di localizzazione che
rappresenta 3 siti candidati e 4 clienti
fA = 4
A 6
6
8 7
3
1
10 fB = 5 1
B
10 1
2 4
10 5
4
1 C
fC = 10
Identificazione del problema
Grafo di localizzazione – Soluzioni ammissibili
Identificazione del problema
Grafo di localizzazione – Soluzioni ammissibili
Identificazione del problema
Grafo di localizzazione – Soluzioni ammissibili
Identificazione del problema
Grafo di localizzazione – Soluzione ottima
Identificazione del problema
Grafo di localizzazione – Soluzioni ammissibili
Identificazione del problema
Grafo di localizzazione – Soluzioni ammissibili
Identificazione del problema
Grafo di localizzazione – Soluzioni ammissibili
Soluzione del problema
Ricerca Operativa 2

Lezione 4 di 48
Il problema di localizzazione degli impianti
Esercizio proposto
Dato il grafo di localizzazione in figura, determinare il costo della
soluzione ottima del problema di localizzazione degli impianti in cui
sono attivati gli impianti A e C
fA = 3

A 6
6
8 7 3
1
fB = 6
6 4
B
7 5 4
2
10 5
4
1 C

fC = 8
Ricerca Operativa 2

Lezione 4 di 48
Il problema di localizzazione degli impianti
Domanda aperta
Dare la definizione di problema di localizzazione degli impianti
Ricerca Operativa 2

Lezione 4 di 48
Il problema di localizzazione degli impianti
Esercizio proposto
Ricerca Operativa 2

Lezione 5 di 48
Il problema di localizzazione degli impianti
Formulazione PLI
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Abbiamo visto nelle lezioni precedenti come rappresentare il
problema di localizzazione degli impianti tramite grafo di
localizzazione
• Abbiamo analizzato alcune proprietà delle soluzioni
ammissibili del problema
• In questa lezione vedremo un metodo alternativo alla
rappresentazione tramite grafo di localizzazione: la
formulazione come problema di Programmazione Lineare
Intera (PLI)
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Una volta formulato il problema è possibile utilizzare un
algoritmo di soluzione specifico per il tipo di formulazione
considerata
• Gli algoritmi di soluzioni possono essere esatti oppure euristici
Anche le migliori implementazioni di algoritmi di
soluzione esatti falliscono al crescere delle dimensioni
dei problemi di PLI
Quando necessario occorre adottare metodi di soluzione
non esatti che non assicurano l’ottimalità delle soluzioni
prodotte (euristiche) ma che in molti casi danno risultati
soddisfacenti
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
• Costruiremo il modello sullo stesso caso preso ad esempio per
definire il grafo di localizzazione, ma il metodo è estendibile a
un qualsiasi problema di localizzazione degli impianti
1. Associamo tre variabili di decisione definite nell’insieme
{0,1} ai tre siti candidati
𝑥𝑥𝐴𝐴 , 𝑥𝑥𝐵𝐵 , 𝑥𝑥𝐶𝐶
che rappresentano il fatto che il sito candidato sia scelto
oppure no.
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Le variabili di decisioni definite nell’insieme {0,1}
vengono anche dette binarie e sono definite come segue

1 se il sito 𝐴𝐴 è selezionato
𝑥𝑥𝐴𝐴 = �
0 altrimenti
𝑥𝑥𝐴𝐴 , 𝑥𝑥𝐵𝐵 , 𝑥𝑥𝐶𝐶 sono variabili del modello nel senso che nel
processo di soluzione del modello possono assumere
diversi valori, sempre nell’insieme {0,1}
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
2. Definiamo un insieme di variabili che ci indichino da quale
sito è servito un dato cliente
Sia 𝑦𝑦1𝐴𝐴 una variabile definita nell’insieme {0,1} tale che

1 se il cliente 1 è servito dall’impianto nel sito 𝐴𝐴


𝑦𝑦1𝐴𝐴 = �
0 altrimenti
Avremo tante variabili quante sono le coppie (cliente,
sito), vale a dire |𝑉𝑉1 | × |𝑉𝑉2 | variabili
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Definiamo l’intero insieme delle variabili 𝑦𝑦𝑖𝑖𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝑉𝑉2
e 𝑗𝑗 ∈ 𝑉𝑉1 che ci indichino da quale sito in 𝑉𝑉1 è servito un
dato cliente in 𝑉𝑉2
𝑦𝑦1𝐴𝐴 , 𝑦𝑦1𝐵𝐵 , 𝑦𝑦1𝐶𝐶 𝑦𝑦2𝐴𝐴 , 𝑦𝑦2𝐵𝐵 , 𝑦𝑦2𝐶𝐶 𝑦𝑦3𝐴𝐴 , 𝑦𝑦3𝐵𝐵 , 𝑦𝑦3𝐶𝐶 𝑦𝑦4𝐴𝐴 , 𝑦𝑦4𝐵𝐵 , 𝑦𝑦4𝐶𝐶

Cliente 1 Cliente 2 Cliente 3 Cliente 4


Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
3. Definiamo l’insieme dei vincoli che stabilisce le relazioni tra
le variabili definite
Prima di tutto, esprimiamo il fatto che ogni cliente debba
essere servito da esattamente un impianto
Consideriamo il cliente 1 e scriviamo il vincolo di
uguaglianza
𝑦𝑦1𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦1𝐶𝐶 = 1
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Essendo le variabili 𝑦𝑦𝑖𝑖𝑖𝑖 binarie, per poter soddisfare il
vincolo dovrà essere pari a 1 una (e una sola) delle variabili
che si trovano a sinistra del segno di uguaglianza
𝑦𝑦1𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦1𝐶𝐶 = 1
Infatti, il vincolo è soddisfatto se e solo abbiamo una delle
seguenti tre soluzioni
• 𝑦𝑦1𝐴𝐴 = 1, 𝑦𝑦1𝐵𝐵 = 0, 𝑦𝑦1𝐶𝐶 = 0
• 𝑦𝑦1𝐴𝐴 = 0, 𝑦𝑦1𝐵𝐵 = 1, 𝑦𝑦1𝐶𝐶 = 0
• 𝑦𝑦1𝐴𝐴 = 0, 𝑦𝑦1𝐵𝐵 = 0, 𝑦𝑦1𝐶𝐶 = 1
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Scriviamo quindi questo vincolo per ciascun cliente (nodo in
𝑉𝑉2 )
𝑦𝑦1𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦1𝐶𝐶 = 1
𝑦𝑦2𝐴𝐴 + 𝑦𝑦2𝐵𝐵 + 𝑦𝑦2𝐶𝐶 = 1
𝑦𝑦3𝐴𝐴 + 𝑦𝑦3𝐵𝐵 + 𝑦𝑦3𝐶𝐶 = 1
𝑦𝑦4𝐴𝐴 + 𝑦𝑦4𝐵𝐵 + 𝑦𝑦4𝐶𝐶 = 1

Notiamo che sono vincoli lineari di uguaglianza (equazioni)


Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
4. Teniamo conto del fatto che un cliente non può essere
servito da un sito se in quel sito non è attivato un impianto
Esprimiamo il fatto che il cliente 1 (nodo in 𝑉𝑉2 ) non possa
essere servito dal sito candidato A (nodo in 𝑉𝑉1 ) qualora in
tale sito non sia attivato un impianto

𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Il vincolo 𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 è soddisfatto se e solo abbiamo una
delle seguenti tre soluzioni
• 𝑦𝑦1𝐴𝐴 = 0, 𝑥𝑥𝐴𝐴 = 0
il sito 𝐴𝐴 non è attivato e il cliente 1 non viene
assegnato al sito 𝐴𝐴
• 𝑦𝑦1𝐴𝐴 = 0, 𝑥𝑥𝐴𝐴 = 1
il sito 𝐴𝐴 è attivato ma il cliente 1 non viene
assegnato al sito 𝐴𝐴
• 𝑦𝑦1𝐴𝐴 = 1, 𝑥𝑥𝐴𝐴 = 1
il sito 𝐴𝐴 è attivato e il cliente 1 viene assegnato al sito 𝐴𝐴
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Il vincolo 𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 non soddisfatto se abbiamo la soluzione
• 𝑦𝑦1𝐴𝐴 = 1, 𝑥𝑥𝐴𝐴 = 0
il sito 𝐴𝐴 non è attivato ma il cliente 1 viene assegnato al sito 𝐴𝐴

Se 𝑥𝑥𝐴𝐴 = 0 e cioè nel sito candidato 𝐴𝐴 non viene attivato un


impianto, il vincolo diventa
𝑦𝑦1𝐴𝐴 ≤ 0
che implica 𝑦𝑦1𝐴𝐴 = 1 e quindi che il cliente 1 non sia servito
dal sito 𝐴𝐴
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Scriviamo quindi questo vincolo per ciascuna coppia
(cliente, sito candidato)
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦2𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦3𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦4𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
𝑦𝑦1𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦2𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦3𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦4𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦2𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦3𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦4𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
Si tratta di |𝑉𝑉1 | × |𝑉𝑉2 | vincoli lineari di disuguaglianza
(disequazioni)
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
5. L’obiettivo è quello di minimizzare i costi di attivazione degli
impianti di produzione di energia e i costi di afferenza, dati
dai costi di distribuzione dell’energia
Definiamo la funzione obiettivo a partire da due funzioni:
• Costi di attivazione (dipendenti dai siti candidati)
• Costi di afferenza (dipendenti dalle posizioni di siti
candidati e clienti)
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Definiamo la funzione obiettivo a partire da due funzioni:
• Costi di attivazione
Se ad esempio il sito 𝐴𝐴 è attivato (𝑥𝑥𝐴𝐴 = 1) dobbiamo
sostenere il costo di attivazione del relativo impianto,
dato da 𝑓𝑓𝐴𝐴 = 4, altrimenti (𝑥𝑥𝐴𝐴 = 0) il costo è nullo
In ambo i casi, il costo di attivazione è pari a 𝑓𝑓𝐴𝐴 𝑥𝑥𝐴𝐴
Quindi il costo di attivazione complessivo sarà pari a
𝑓𝑓𝐴𝐴 𝑥𝑥𝐴𝐴 + 𝑓𝑓𝐵𝐵 𝑥𝑥𝐵𝐵 + 𝑓𝑓𝐶𝐶 𝑥𝑥𝐶𝐶 4𝑥𝑥𝐴𝐴 + 5𝑥𝑥𝐵𝐵 + 10𝑥𝑥𝐶𝐶
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
• Costi di afferenza
Se il cliente 1 è assegnato al sito A (𝑦𝑦1𝐴𝐴 = 1) il costo è
quello di portare energia dall’impianto A al cliente 1 è 6,
ovvero è pari 6𝑦𝑦1𝐴𝐴
Quindi il costo di afferenza complessivo sarà pari al
prodotto di tutte le variabili 𝑦𝑦𝑖𝑖𝑖𝑖 per il relativo costo di
assegnare il cliente 𝑖𝑖 ∈ 𝑉𝑉2 all’impianto 𝑗𝑗 ∈ 𝑉𝑉1
𝑦𝑦1𝐴𝐴 + 𝑦𝑦2𝐴𝐴 + 𝑦𝑦3𝐴𝐴 + 𝑦𝑦4𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦2𝐵𝐵 + 𝑦𝑦3𝐵𝐵 + 𝑦𝑦4𝐵𝐵 +
𝑦𝑦1𝐶𝐶 + 𝑦𝑦2𝐶𝐶 + 𝑦𝑦3𝐶𝐶 + 𝑦𝑦4𝐶𝐶 + 𝑦𝑦1𝐷𝐷 + 𝑦𝑦2𝐷𝐷 + 𝑦𝑦3𝐷𝐷 + 𝑦𝑦4𝐷𝐷
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Obiettivo Formulare il problema di localizzazione come
problema di Programmazione Lineare Intera (PLI)
Definiamo la funzione obiettivo come somma delle due
espressioni e aggiungiamo l’operatore di minimizzazione
perché vogliamo minimizzare i costi complessivi
min 4𝑥𝑥𝐴𝐴 + 5𝑥𝑥𝐵𝐵 + 10𝑥𝑥𝐶𝐶 + 𝑦𝑦1𝐴𝐴 + 𝑦𝑦2𝐴𝐴 + 𝑦𝑦3𝐴𝐴 + 𝑦𝑦4𝐴𝐴
+ 𝑦𝑦1𝐵𝐵 + 𝑦𝑦2𝐵𝐵 + 𝑦𝑦3𝐵𝐵 + 𝑦𝑦4𝐵𝐵 + 𝑦𝑦1𝐶𝐶 + 𝑦𝑦2𝐶𝐶 + 𝑦𝑦3𝐶𝐶 + 𝑦𝑦4𝐶𝐶
+ 𝑦𝑦1𝐷𝐷 + 𝑦𝑦2𝐷𝐷 + 𝑦𝑦3𝐷𝐷 + 𝑦𝑦4𝐷𝐷
Si tratta di un’espressione lineare nelle variabili decisionali
𝑥𝑥𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝑉𝑉1 e 𝑦𝑦𝑖𝑖𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝑉𝑉2 e 𝑗𝑗 ∈ 𝑉𝑉1 (funzione
obiettivo lineare)
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• La formulazione del problema di localizzazione come problema
di Programmazione Lineare Intera (PLI) è ottenuta mettendo a
sistema
1. La funzione obiettivo lineare
2. I vincoli (equazioni e disequazioni) lineari
3. Variabili binarie definite nell’insieme {0,1}
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
min 4𝑥𝑥𝐴𝐴 + 5𝑥𝑥𝐵𝐵 + 10𝑥𝑥𝐶𝐶 + 𝑦𝑦1𝐴𝐴 + 𝑦𝑦2𝐴𝐴 + 𝑦𝑦3𝐴𝐴 + 𝑦𝑦4𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦2𝐵𝐵 + 𝑦𝑦3𝐵𝐵 + 𝑦𝑦4𝐵𝐵
+ 𝑦𝑦1𝐶𝐶 + 𝑦𝑦2𝐶𝐶 + 𝑦𝑦3𝐶𝐶 + 𝑦𝑦4𝐶𝐶 + 𝑦𝑦1𝐷𝐷 + 𝑦𝑦2𝐷𝐷 + 𝑦𝑦3𝐷𝐷 + 𝑦𝑦4𝐷𝐷
𝑦𝑦1𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦1𝐶𝐶 = 1
𝑦𝑦2𝐴𝐴 + 𝑦𝑦2𝐵𝐵 + 𝑦𝑦2𝐶𝐶 = 1
𝑦𝑦3𝐴𝐴 + 𝑦𝑦3𝐵𝐵 + 𝑦𝑦3𝐶𝐶 = 1
𝑦𝑦4𝐴𝐴 + 𝑦𝑦4𝐵𝐵 + 𝑦𝑦4𝐶𝐶 = 1
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦2𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦3𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦4𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
𝑦𝑦1𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦2𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦3𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦4𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦2𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦3𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦4𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
𝑦𝑦1𝐴𝐴 ∈ {0,1} 𝑦𝑦2𝐴𝐴 ∈ {0,1} 𝑦𝑦3𝐴𝐴 ∈ {0,1} 𝑦𝑦4𝐴𝐴 ∈ {0,1}
𝑦𝑦1𝐵𝐵 ∈ {0,1} 𝑦𝑦2𝐵𝐵 ∈ {0,1} 𝑦𝑦3𝐵𝐵 ∈ {0,1} 𝑦𝑦4𝐵𝐵 ∈ {0,1}
𝑦𝑦1𝐶𝐶 ∈ {0,1} 𝑦𝑦2𝐶𝐶 ∈ {0,1} 𝑦𝑦3𝐶𝐶 ∈ {0,1} 𝑦𝑦4𝐶𝐶 ∈ {0,1}
𝑥𝑥𝐴𝐴 ∈ {0,1} 𝑥𝑥𝐵𝐵 ∈ {0,1} 𝑥𝑥𝐶𝐶 ∈ {0,1}
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• A partire dalla formulazione del problema come problema di
Programmazione Lineare Intera (PLI) vedremo nelle prossime
lezioni come risolvere matematicamente il problema
• Se le dimensioni di un problema di PLI crescono troppo, allora è
impossibile risolverlo all’ottimalità allo stato dell’arte attuale
• In questi casi, è possibile trovare la soluzione ottima ma
impossibile dimostrarne l’ottimalità
• Per trovare delle soluzioni di qualità accettabile (spesso anche
ottime) esistono in letteratura molti algoritmi di soluzione detti
euristiche
Ricerca Operativa 2

Lezione 5 di 48
Il problema di localizzazione degli impianti
Formulazione PLI - Audiolezione
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 5 di 48
Esercizio proposto
Dato il grafo di localizzazione in figura, determinare il costo della
soluzione ottima del problema di localizzazione degli impianti in cui
sono attivati gli impianti B e C
Ricerca Operativa 2

Lezione 5 di 48
Esercizio proposto
Dato il grafo di localizzazione in figura, definire le variabili del
problema e i vincoli che descrivono la regione ammissibile della
formulazione del problema come problema di PLI
fA = 4

A 1
2
4 5 3
1

2 4
7 fB = 3 2

B
6 4
Ricerca Operativa 2

Lezione 6 di 48
Il problema di localizzazione degli impianti
Algoritmo greedy
Soluzione del problema
Formulazione del problema di localizzazione degli impianti
• Per il problema di localizzazione degli impianti, abbiamo visto due possibili
rappresentazioni
• Grafo di localizzazione
• Formulazione del problema come problema di Programmazione Lineare
Intera (PLI)
• Per la soluzione del problema, abbiamo due strade alternative
• Soluzione tramite tecniche esatte, molte delle quali fanno riferimento
alle soluzione del problema di PLI
• Soluzione tramite tecniche euristiche, che non garantiscono l’ottimalità
della soluzione, ma solo l’ammissibilità della soluzione determinata
Soluzione del problema
Metodi di soluzione euristici
• Se le dimensioni di un problema di PLI crescono troppo, allora è impossibile
risolverlo all’ottimalità allo stato dell’arte attuale
• Più precisamente, è possibile trovare la soluzione ottima ma impossibile
dimostrarne l’ottimalità
• Per trovare delle soluzioni di qualità accettabile (spesso anche ottime)
esistono in letteratura molti algoritmi di soluzione detti euristiche
• In questa e nelle prossime lezioni vedremo la più semplice di queste
euristiche, l’algoritmo Greedy, e la Ricerca Locale
Soluzione del problema
Metodi di soluzione euristici – Algoritmo greedy
L’algoritmo Greedy è una procedura deterministica che costruisce una soluzione
del problema di localizzazione selezionando un sito candidato alla volta
• A ogni iterazione, il sito selezionato viene aggiunto all’insieme costituito dai
siti candidati precedentemente sezionati
• Una volta attivato, il sito rimane tale fino alla fine (non si prova mai a
disattivare, tipico del comportamento greedy)
• Viene selezionato il sito la cui attivazione massimizza la diminuzione del
costo (criterio greedy)
Soluzione del problema
Metodi di soluzione euristici – Algoritmo greedy
Alla prima iterazione, l’insieme dei siti selezionati è vuoto e viene scelto il sito la
cui attivazione comporta il minimo costo iniziale (criterio greedy)
• il costo è sempre la somma del costo di attivazione dell’impianto e del costo
di distribuzione, come visto nella formulazione come problema di PLI
L’algoritmo termina quando l’aggiunta di un qualunque altro sito non produce
diminuzioni del costo (criterio di arresto dell’algoritmo).
Soluzione del problema
Metodi di soluzione euristici – Algoritmo greedy
Dal momento che non è conveniente attivare l’unico sito residuo (C),
l’algoritmo termina attivando gli impianti nei siti candidati A e B a un
costo pari a 25.

La soluzione trovata potrebbe essere ottima o non esserlo.


In molti casi reali l’algoritmo greedy determina soluzioni di
cattiva qualità, cioè con valori piuttosto distanti dall’ottimo.
Ricerca Operativa 2

Lezione 6 di 48
Esercizio proposto
Esercizio proposto
Ricerca Operativa 2

Lezione 6 di 48
Esercizio proposto
Dato il grafo di localizzazione in figura, determinare la soluzione
greedy del problema
fA = 3

A 6
6
8 7 3
1
6 fB = 6 4

B
7 5 4
2
10 5
4
1 C

fC = 8
Ricerca Operativa 2

Lezione 6 di 48
Esercizio proposto
Dato il grafo di localizzazione in figura, applicare l’algoritmo
greedy a partire dalla soluzione in cui è attivato il solo impianto B

fA = 3

A 6
6
8 7 3
1
6 fB = 6 4

B
7 5 4
2
10 5
4
1 C

fC = 8
Ricerca Operativa 2

Lezione 7 di 48
Il problema di localizzazione degli impianti
Applicazioni
Problema della localizzazione degli impianti di produzione di
energia
Dato un insieme di siti candidati a ospitare un impianto di
produzione di energia, occorre scegliere un opportuno
sottoinsieme dei siti dove istallare gli impianti di produzione di
energia in modo da
• soddisfare determinati vincoli
• ottimizzare specifici obiettivi
Il problema così descritto è talmente generale che abbraccia tutta
una famiglia di casi di pratico interesse.
Esempio 1
Problema della localizzazione dei centri di assistenza alla
produzione

Dato un insieme di siti candidati a ospitare un centro di assistenza alla


produzione, occorre scegliere un opportuno sottoinsieme dei siti dove istallare i
centri di assistenza in modo da
• soddisfare alcuni vincoli (servire tutti gli impianti che richiedono assistenza,
sequenziare opportunamente le operazioni di assistenza, etc.)

• ottimizzare specifici obiettivi (distanza tra il centro di assistenza e gli


impianti, costi di affitto oppure di acquisto del parco vetture per l’assistenza,
costi di affitto degli uffici, etc.)
Esempio 2
Problema di dispiegamento di mezzo di soccorso in un
impianto di produzione
Si tratta di decidere come e dove utilizzare mezzi di soccorso disponibili, in
particolare

• la convenienza di affittare oppure acquisire mezzi di soccorso


• il sequenziamento delle operazioni di emergenza e soccorso
• l’instradamento dei veicoli per servire opportunamente gli impianti

• eventuali altri vincoli


Varianti del modello di localizzazione
Il problema del p-centro 1/2
Non sempre l’obiettivo di un problema di localizzazione è quello di minimizzare il
costo totale.

• Esempio: un centro di produzione di energia vuole attivare 2 nuovi centri di


assistenza per servire un certo numero di impianti
Anche in questo caso il costo di afferenza rappresenta la distanza tra il centro di
assistenza e l’impianto che deve servire.
Varianti del modello di localizzazione
Il problema del p-centro 2/2
• Esempio: un centro di produzione di energia vuole attivare 2 nuovi centri di
assistenza per servire un certo numero di impianti.
Questo costo non rappresenta il costo del trasporto, ma il disagio del potenziale
impianto causato dalla distanza dell’impianto dal centro di assistenza.
L’obiettivo in questo caso è quello di minimizzare lo svantaggio dell’impianto più
“sfortunato”, ovvero l’impianto a massima distanza dal centro di assistenza a lui
assegnato
Il problema del p-centro – Esempio
fA = 4

A 6
6
8 7 3
1
fB = 5
10 1
B
10 1 4
2
10 5
4
1 C
fC = 10
Se attivo B e C il cliente più sfortunato è 1 con costo di afferenza pari a 10.
Quindi, la soluzione che minimizza il costo del cliente più sfortunato è
attivare A e C, con costo massimo di afferenza pari a 6.
Il problema del p-centro

Nel problema del p-centro, nella funzione obiettivo non vengono


considerati i costi di attivazione degli impianti ma solamente quelli
di afferenza dei clienti agli impianti.
Inoltre, è fissato il numero (p) di impianti che si intende attivare.
L’obiettivo è quello di minimizzare il costo di afferenza del cliente
più svantaggiato.
I problemi in cui si vuole minimizzare il massimo di una certa
funzione è detto di tipo min-max.
Il problema del p-centro

Nel problema del p-centro, nella funzione obiettivo non vengono


considerati i costi di attivazione degli impianti ma solamente quelli
di afferenza dei clienti agli impianti.
Inoltre, è fissato il numero (p) di impianti che si intende attivare.
L’obiettivo è quello di minimizzare il costo di afferenza del cliente
più svantaggiato.
I problemi in cui si vuole minimizzare il massimo di una certa
funzione è detto di tipo min-max.
Ricerca Operativa 2

Lezione 7 di 48
Il problema di localizzazione degli impianti
Ricerca Locale
Metodi di soluzione euristici
Metodi di soluzione euristici

Le euristiche sono algoritmi di soluzione che cercano un “buon”


sottoinsieme di siti in cui attivare gli impianti
Non è escluso che un’euristica possa determinare la soluzione
ottima. In questo caso, non è comunque possibile sapere che si
tratti della soluzione ottima
Abbiamo già visto un’euristica molto semplice: l’algoritmo greedy.
In questa lezione formalizzeremo l’algoritmo e lo estenderemo in
maniera da limitare alcuni effetti negativi della scelta greedy
Algoritmo Greedy – Diagramma di flusso
Algoritmi Greedy e Ricerca Locale

Greedy: Una volta che il sito è nella soluzione non viene più rimosso
Una volta trovata una soluzione iniziale con l’algoritmo greedy
possiamo provare a migliorarla operando piccole modifiche
Ogni modifica è detta mossa perché “sposta” la soluzione,
modificandone caratteristiche e valore della funzione obiettivo

rimozione di un sito
Esempi di mosse
rimozione + nuovo inserimento (scambio)
Algoritmi Greedy e Ricerca Locale

Ricerca Locale: Data una soluzione ammissibile corrente, tenta di


migliorare “localmente” la soluzione corrente
Le modifiche sono piccole in quanto solitamente si agisce su una o al
massimo due componenti della soluzione corrente
Vengono considerate anche mosse che implichino la rimozione di un
impianto che in qualche iterazione precedente era stato indicato come
candidato migliore

Viene mitigato il carattere greedy nella scelta del sito candidato

La ricerca termina quando non trovo mosse migliorative (criterio di


arresto)
Ricerca Locale – Diagramma di flusso
Ricerca Locale – Caratteristiche
Ricerca Locale – Caratteristiche
Ricerca Operativa 2

Lezione 7 di 48
Il problema di localizzazione degli impianti
Domande aperte
Fornire alcuni esempi di problema di localizzazione degli
impianti
Definire il problema del p-centro e chiarire le principali
differenze rispetto al problema di localizzazione degli impianti
Ricerca Operativa 2

Lezione 7 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
Dato il grafo di localizzazione in figura, si consideri il problema del p-
centro e si determini il costo di afferenza del cliente più sfortunato
qualora si attivino gli impianti A e B
fA = 3

A 2
4
8 7 3
1
fB = 6
5 3
B
1 8 4
2
8 11
9
9 C

fC = 8
Dato il grafo di localizzazione in figura, si consideri il problema del p-
centro e si determini la soluzione che
• contenta un solo impianto attivato
• minimizzi il costo di afferenza del cliente più sfortunato

A 3
3
4 8 3
1
7 7
B
1 3 4
2
10 2
9
1 C
Ricerca Operativa 2

Lezione 8 di 48
Il problema di localizzazione degli impianti
Problema capacitato
Localizzazione degli impianti – Il problema capacitato
Consideriamo il caso di un impianto di produzione di energia elettrica.
Modifichiamo la definizione del grafo di localizzazione per introdurre due nuove
grandezze.

A ogni nodo in V1 (insieme dei siti candidati) viene associata una capacità data
dalla quantità massima di energia erogabile da un impianto attivato in quel sito
candidato

Ad ogni nodo in V2 (insieme dei clienti) viene associata una domanda data
dall’esigenze di avere un certo quantitativo di energia

L’insieme A definisce le relazioni di afferenza dei clienti (nodi in V2) ai siti candidati
(nodi in V1). A ogni arco in A viene ora associato il costo per unità di energia
fornita dall’impianto, se attivato, al cliente.
Localizzazione degli impianti – Il problema capacitato

Consideriamo il seguente esempio


Costi di attivazione
A 6
6
fA = 40 fB = 50 fC = 100
8 7
3
1
10 1 Capacità
B
10 1 cA = 40 cB = 60 cC = 50
2 4
10 5
4 Domanda
1 C
d1=20 d2=40 d3=30 d4=30
Formulazione del problema capacitato

Prima di capire come risolvere il problema determinando un algoritmo (esatto


oppure euristico) per la sua soluzione, vediamo come sia possibile formulare il
problema dal punto di vista matematico

Come abbiamo visto nella lezione 5, il problema di localizzazione degli impianti


può essere formulato come problema di Programmazione Lineare Intera (PLI)

In questa lezione vedremo come estendere il modello identificato nella lezione


5 al caso di problema capacitato di localizzazione degli impianti

Come vedremo, in questo caso il problema risultante sarà di Programmazione


Lineare Intera Mista (PLIM)
Formulazione del problema capacitato
2. In questo caso, un cliente può essere servito da più impianti:
definiamo una variabile di decisione continua che indichi quale
frazione della domanda del cliente (che deve essere integralmente
soddisfatta) è servita da ciascun sito
𝑦𝑦1𝐴𝐴 = Frazione domanda Cliente 1 servita dal sito A

Naturalmente avremo tante variabili 𝑦𝑦𝑖𝑖𝑖𝑖 quante sono le coppie


cliente/sito
y1A, y1B, y1C y2A, y2B, y2C y3A, y3B, y3C y4A, y4B, y4C

Cliente 1 Cliente 2 Cliente 3 Cliente 4


Poiché la variabile 𝑦𝑦𝑖𝑖𝑖𝑖 rappresenta la frazione di domanda del
cliente i servita dal sito j dovrà essere
0 ≤ 𝑦𝑦𝑖𝑖𝑖𝑖 ≤ 1 per ogni ij
3. Esprimiamo il fatto che la domanda del cliente 1 deve essere interamente
servita attraverso il seguente vincolo:

𝑦𝑦1𝐴𝐴 + 𝑦𝑦1𝐵𝐵 + 𝑦𝑦1𝐶𝐶 = 1 Cliente 1

Il vincolo dice che la frazione di domanda complessivamente servita deve


essere pari a 1 e viene definito per ogni cliente.

𝑦𝑦2𝐴𝐴 + 𝑦𝑦2𝐵𝐵 + 𝑦𝑦2𝐶𝐶 = 1 Cliente 2

𝑦𝑦3𝐴𝐴 + 𝑦𝑦3𝐵𝐵 + 𝑦𝑦3𝐶𝐶 = 1 Cliente 3

𝑦𝑦4𝐴𝐴 + 𝑦𝑦4𝐵𝐵 + 𝑦𝑦4𝐶𝐶 = 1 Cliente 4

Abbiamo quindi definitivo un vincolo lineare di uguaglianza (equazione)


per ciascun cliente in V2
4. Ovviamente, un cliente non può essere servito da un certo sito se
in quel sito non è attivato un impianto, esattamente come abbiamo
visto per il problema nel caso non capacitato
Esprimiamo il fatto che il cliente 1 non può essere servito dal sito
candidato A se in quel sito non è attivato un impianto:
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 Cliente 1, Impianto A

Scriviamo quindi questo vincolo per ciascuna coppia (cliente,


sito candidato)
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦2𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦3𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦4𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
𝑦𝑦1𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦2𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦3𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵 𝑦𝑦4𝐵𝐵 ≤ 𝑥𝑥𝐵𝐵
𝑦𝑦1𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦2𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦3𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴 𝑦𝑦4𝐴𝐴 ≤ 𝑥𝑥𝐴𝐴
Si tratta di |𝑉𝑉1 | × |𝑉𝑉2 | vincoli lineari di disuguaglianza
(disequazioni)
5. La quantità di energia prodotta complessivamente da un impianto
non può eccedere la capacità dell’impianto (vincoli di capacità)
Esprimiamo il fatto che l’impianto A non possa fornire in totale una
quantità di energia superiore alla sua capacità:

20𝑦𝑦1𝐴𝐴 + 40𝑦𝑦2𝐴𝐴 + 30𝑦𝑦3𝐴𝐴 + 30𝑦𝑦4𝐴𝐴 ≤ 40 Impianto A

I vincoli di questo tipo sono tanti quanti sono i siti candidati.

20𝑦𝑦1𝐵𝐵 + 40𝑦𝑦2𝐵𝐵 + 30𝑦𝑦3𝐵𝐵 + 30𝑦𝑦4𝐵𝐵 ≤ 60 Impianto B

20𝑦𝑦1𝐵𝐵 + 40𝑦𝑦2𝐵𝐵 + 30𝑦𝑦3𝐵𝐵 + 30𝑦𝑦4𝐵𝐵 ≤ 50 Impianto C

Si tratta di |𝑉𝑉2 | vincoli lineari di disuguaglianza (disequazioni)


definiti ciascuno per un sito candidato a ospitare un impianto
6. L’obiettivo è quello di minimizzare i costi di attivazione degli
impianti di produzione di energia e i costi di afferenza, dati dai costi
di distribuzione dell’energia.

Come visto nel caso non capacitato, definiamo la funzione obiettivo


a partire da due funzioni:

Costi di attivazione Se il sito A è attivato ( 𝑥𝑥𝐴𝐴 = 1 ) dovremo


sostenere il costo di attivazione del relativo impianto, dato da
𝑓𝑓𝐴𝐴 = 40, altrimenti (𝑥𝑥𝐴𝐴 = 0) il costo è nullo. In ambo i casi, il costo è
pari a 𝑓𝑓𝐴𝐴 𝑥𝑥𝐴𝐴

Quindi il costo di attivazione complessivo sarà pari a


𝑓𝑓𝐴𝐴 𝑥𝑥𝐴𝐴 + 𝑓𝑓𝐵𝐵 𝑥𝑥𝐵𝐵 + 𝑓𝑓𝐶𝐶 𝑥𝑥𝐶𝐶 40𝑥𝑥𝐴𝐴 + 50𝑥𝑥𝐵𝐵 + 100𝑥𝑥𝐶𝐶
La funzione è data dalla somma dei due costi:

40𝑥𝑥𝐴𝐴 + 50𝑥𝑥𝐵𝐵 + 100𝑥𝑥𝐶𝐶 +

6𝑦𝑦1𝐴𝐴 + 8𝑦𝑦2𝐴𝐴 + 6𝑦𝑦3𝐴𝐴 + 7𝑦𝑦4𝐴𝐴 + 10𝑦𝑦1𝐵𝐵 + 10𝑦𝑦2𝐵𝐵 +

𝑦𝑦3𝐵𝐵 + 𝑦𝑦4𝐵𝐵 + 10𝑦𝑦1𝐶𝐶 + 𝑦𝑦2𝐶𝐶 + 5𝑦𝑦3𝐶𝐶 + 4𝑦𝑦4𝐶𝐶

Introduciamo l’operatore di minimizzazione (min) per indicare che


vogliamo minimizzare la funzione obiettivo
min 40𝑥𝑥𝐴𝐴 + 50𝑥𝑥𝐵𝐵 + 100𝑥𝑥𝐶𝐶 +

6𝑦𝑦1𝐴𝐴 + 8𝑦𝑦2𝐴𝐴 + 6𝑦𝑦3𝐴𝐴 + 7𝑦𝑦4𝐴𝐴 + 10𝑦𝑦1𝐵𝐵 + 10𝑦𝑦2𝐵𝐵 +

𝑦𝑦3𝐵𝐵 + 𝑦𝑦4𝐵𝐵 + 10𝑦𝑦1𝐶𝐶 + 𝑦𝑦2𝐶𝐶 + 5𝑦𝑦3𝐶𝐶 + 4𝑦𝑦4𝐶𝐶


7. La formulazione del problema di localizzazione come problema di
Programmazione Lineare Intera Mista (PLIM) è ottenuta mettendo a
sistema
1. La funzione obiettivo lineare
2. I vincoli (equazioni e disequazioni) lineari

3. Variabili binarie definite nell’insieme {0,1} e variabili continue definite


nell’insieme [0,1]
Definiamo la formulazione come la minimizzazione della funzione obiettivo
lineare (6.) soggetta ai vincoli lineari (3., 4. e 5.) che definiscono le relazioni
tra le variabili a valori in {0,1} (1.) e le variabili continue (2.)
Ricerca Operativa 2

Lezione 8 di 48
Il problema di localizzazione degli impianti
Domande aperte
Spiegare le principali caratteristiche dell’algoritmo Greedy
Spiegare le principali caratteristiche della Ricerca Locale
Spiegare le principali differenze tra algoritmo Greedy e Ricerca
Locale
Ricerca Operativa 2

Lezione 8 di 48
Il problema di localizzazione degli impianti
Domande aperte
Illustrare le principali differenze tra il problema di Localizzazione
degli Impianti nella versione non capacitata e versione
capacitata
Definire la formulazione del problema di Localizzazione degli
Impianti nel caso capacitato
Spiegare le principali differenze tra la formulazione del
problema di Localizzazione degli Impianti nel caso capacitato e
quello non capacitato
Ricerca Operativa 2

Lezione 8 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
Dato il grafo di localizzazione in figura, si consideri il problema di
localizzazione degli Impianti nel caso capacitato e con i parametri
indicati accanto.
fA = 15

A 1
7 Capacità
8 9 3
1 cA = 25 cB = 35 cC = 60
fB = 10
4 7
B
6 8 4 Domanda
2
4 3
2 d1=15 d2=5 d3=10 d4=20
1 C

fC = 25

Definire i vincoli di capacità della formulazione matematica del


problema
Dato il grafo di localizzazione in figura, si consideri il problema di
localizzazione degli Impianti nel caso capacitato. Scrivere la
formulazione matematica del problema
fA = 10

A 9
25
14 50 Capacità
3
1 cA = 15 cB = 30

Domanda
27 26 4
2
fB = 15 d1=10 d2=2 d3=1 d4=2

60 B 12
Ricerca Operativa 2

Lezione 9 di 48
Il problema di localizzazione degli impianti
Algoritmi esatti
Programmazione Lineare

I problemi di Programmazione Lineare (PL) sono problemi di ottimizzazione


in cui la funzione obiettivo e i vincoli sono funzioni lineari di variabili
continue.

Le principali caratteristiche di un problema di PL sono:

− le variabili di decisione continue (libere o vincolate in segno: x ≥ 0 )

− la funzione obiettivo lineare nelle variabili da massimizzare o da


minimizzare

− la regione ammissibile definita attraverso vincoli lineari nelle variabili, che


in genere sono di disuguaglianza (≥, ≤) oppure di uguaglianza (=)
Programmazione Lineare Intera

I problemi di Programmazione Lineare in cui le variabili sono vincolate ad


assumere valori interi sono detti problemi di Programmazione Lineare Intera
(PLI)
I modelli di PLI vengono solitamente adottati in tutte le applicazioni
caratterizzate da:

 indivisibilità delle risorse


 necessità di scegliere da un numero finito di alternative
Esempio
In un problema di decisione, l’alternativa fare/non fare viene in genere
rappresentata con un variabile binaria
Programmazione Lineare Intera

Esempi
Si consideri il problema di acquisto di nuove automobili per il parco
macchine
Supponiamo che, per motivi di budget, al più si possano acquistare tre
automobili

Definiamo una variabile xM che indichi il numero di automobili da acquistare


La variabile xM può assumere i valori 0,1,2, o 3, ma non un valore continuo
(è impensabile acquistare 3/2 di automobile)
La variabile xM è quindi una variabile intera e il suo valore ottimo può essere
determinato come soluzione di un opportuno problema di PLI
Programmazione Lineare Intera

Esempi
− Problemi operativi (distribuzione di beni, sequenziamento di attività, …)
Sono problemi tipicamente caratterizzati da quantità intere (unità di bene,
singole attività, etc.)
− Problemi di pianificazione (localizzazione degli impianti, gestione
portafoglio, etc.)
Sono problemi tipicamente caratterizzati da decisioni da prendere
(costruire o non costruire un impianto, acquistare o meno un titolo, etc.)

− Problemi di progettazione (progetto di circuiti VLSI, progetto di sistemi


automatici di produzione, etc.)
Programmazione Lineare Intera

Un’importante classe di problemi di PLI è costituita dai problemi di


Programmazione Lineare {0,1} in cui le variabili intere possono assumere
valori binari (0 o 1)
• Esempio – Il problema di Localizzazione degli Impianti
Se il vincolo di interezza riguarda un sottoinsieme proprio delle variabili il
problema viene detto di Programmazione Lineare Intera Mista
In un problema di Programmazione Lineare Intera Mista la funzione obiettivo
e i vincoli sono lineari nelle variabili, alcune delle quali sono intere mentre
altre sono continue
• Esempio – Il problema di Localizzazione degli Impianti capacitato
Programmazione Lineare Intera – Criticità

Le metodologie di soluzione per i problemi di Programmazione Lineare


Intera si basano principalmente su tre elementi fondamentali:

1. Definizione della formulazione del problema, attraverso l’uso di tecniche


standard che a partire dalla formulazione naturale del problema
permettono di definire formulazioni più sofisticate
Esempio – La formulazione del problema di Localizzazione degli
impianti come problema di Programmazione Lineare Intera, anzi come
problema di Programmazione Lineare {0,1} vista nella lezione 5
Programmazione Lineare Intera – Criticità

Le metodologie di soluzione per i problemi di Programmazione Lineare


Intera si basano principalmente su tre elementi fondamentali:

2. Risoluzione con metodi di soluzione esatti tramite l’uso di solutori di


Programmazione Lineare comunicando al solutore quali variabili sono
intere e quali no
ATTENZIONE La PLI è più “difficile” della PL. Si possono
risolvere problemi di PL con molti milioni di variabili ma
esistono problemi di PLI con 100 variabili irrisolvibili
In questo corso vedremo diversi solutori esatti in grado di risolvere
problemi di Programmazione Lineare, Programmazione Lineare Mista e
Programmazione Lineare {0,1} di dimensioni “ragionevoli”
Programmazione Lineare Intera – Criticità

3. Risoluzione con metodi di soluzione euristici (Greedy, Ricerca Locale,


Tabù Search, Simulated Annealing, etc.)
 Utili per risolvere problemi di grandi dimensioni soprattutto quando i
metodi di soluzione esatti falliscono
 Disponibilità di indici di qualità calcolati sulla base di opportuni bound
di ottimalità che diano un’indicazione della qualità della soluzione
euristica trovata
Metodi esatti – Risolutore di Excel

Iniziamo a vedere un semplice impiego di un solutore di Programmazione


Lineare e di Programmazione Lineare Intera implementati nello strumento
Risolutore di Excel
• Semplice e intuitivo da usare
• Non richiede conoscenze
specifiche a priori
• Adatto a risolvere problemi di
piccole dimensioni
• Disponibilità di supporto ed
esempi
Gli esempio che faremo nel corso sono stati realizzati con Microsoft Excel
2016, ma lo strumento Risolutore è presente a partire da Excel 97
Risolutore di Excel – Predisposizione foglio di lavoro

Installare Microsoft Excel 2016 o precedente


Avviare Microsoft Excel 2016 e selezionare un foglio vuoto
Selezionare la sezione Dati
Cercare nell’area Analisi il componente Risolutore
Se non compare l’area Analisi e/o il componente Risolutore,
1. selezionare l’area File
2. selezionare Opzioni
3. Nella finestra Opzioni di Excel selezionare Componenti aggiuntivi
4. Nella sezione Componenti aggiuntivi selezionare Componente
aggiuntivo Risolutore
5. Selezionare Vai…
6. Nella finestra Componenti aggiuntivi selezionare il Componente
aggiuntivo Risolutore
7. Spuntare nell’elenco Componente aggiuntivo Risolutore
8. Selezionare OK
9. Attendere l’installazione del Componente aggiuntivo Risolutore
Selezionare nell’area Analisi il componente Risolutore
La finestra Parametri Risolutore apparirà sopra il foglio Excel
Metodi esatti – Risolutore di Excel

Una volta installato e invocato il componente Risolutore di Excel, nella


presente lezione inizieremo a modellare e risolvere un semplice problema di
pianificazione degli investimenti
Nelle lezioni seguenti applicheremo la procedura di formulazione e
soluzione con Risolutore di Excel al problema di localizzazione visto nelle
lezioni precedenti
Ricerca Operativa 2

Lezione 9 di 48
Il problema di localizzazione degli impianti
Algoritmi esatti - Esempio
Pianificazione degli investimenti

Si tratta di problemi in cui bisogna decidere quali investimenti attivare in un


insieme di alternative prefissate (progetti).

Non tutte le alternative possono essere attivate simultaneamente per la


presenza di vincoli di budget o di esclusività

Ad ogni alternativa è associato un costo e un indice di redditività.

L’obiettivo è quello di scegliere l’insieme di investimenti da attivare che non


violi il vincolo di budget o altri vincoli presenti e massimizzi la somma degli
indici di redditività.
Scelta dell’investimento
Gli amministratori della città di Burger devono scegliere fra 4 possibili
investimenti per migliorare la viabilità
• Costruzione di nuova strada fra Burger e Alvey (in asfalto o cemento)
• Costruzione di un ponte a Cray road
• Ristrutturazione degli impianti semaforici a Burger

Per ogni investimento sono riportati costo e reddito previsto (in milioni di
euro) nella seguente tabella:
INVESTIMENTO COSTO REDDITO

Strada asfalto (A) 10 16


Strada cemento (C) 8 12
Ponte (P) 5 7
Semafori (S) 4 6

Il budget previsto per queste attività è di 15 milioni di euro.


Pianificazione degli investimenti – Formulazione
Obiettivo: Formulare il problema di pianificazione degli investimenti
come problema di Programmazione Lineare {0,1}
1. Associamo a ogni progetto una variabile binaria (cioè a valori 0 o
1) che rappresenta la scelta di attivare il progetto oppure no
INVESTIMENTO COSTO REDDITO Nome

Strada asfalto (A) 10 16 xA


Strada cemento (C) 8 12 xC
Ponte (P) 5 7 xP
Semafori (S) 4 6 xS

0 Non costruisco la strada asfaltata fra Burger e Alvey


xA =
1 Costruisco la strada asfaltata fra Burger e Alvey
Definiamo analogamente xC, xP, e xS
Inseriamo in un foglio Excel i dati relativi ai 4 investimenti (riga 3, 4,
5 e 6) e ai loro costi (colonna C) e redditi (colonna D).
Inoltre definiamo le variabili xA, xC, xP, e xS con il loro nome
(colonna E) e il loro valore (colonna F).

B C D E F
2 Investimento Costo Reddito Nome Valore
3 Strada Asfalto (A) 10 16 xA 1
4 Strada Cemento (C) 8 12 xC 1
5 Ponte (P) 5 7 xP 1
6 Semafori (S) 4 6 xS 1

Per il momento, inseriamo dei valori a caso nella colonna F


(ipotizziamo, ad esempio, che tutti gli investimenti vengano
selezionati, senza badare al vincolo di budget)
2. L’obiettivo è quello di scegliere l’insieme di investimenti da attivare
che massimizzi il reddito complessivo.

Definiamo il reddito complessivo come la somma dei redditi (in


questo casi, i redditi sono indici diretti di redditività) in funzione
delle variabili di decisione (1.)

Se scelgo l’investimento A (xA = 1) il reddito complessivo aumenta


di 16 milioni di euro; se non scelgo l’investimento A (xA = 0) il
reddito complessivo aumenta di 0. la quota di reddito attribuibile ad
A può essere scritta come 16 xA.

Il reddito complessivo attribuibile a tutti i progetti sarà


16 xA + 12 xC + 7 xP + 6 xS
Memorizziamo la funzione obiettivo reddito complessivo
16 xA + 12 xC + 7 xP + 6 xS
in una cella (D7) del foglio Excel
B C D E F
2 Investimento Costo Reddito Nome Valore
3 Strada Asfalto (A) 10 16 xA 1
4 Strada Cemento (C) 8 12 xC 1
5 Ponte (P) 5 7 xP 1
6 Semafori (S) 4 6 xS 1
7 Reddito complessivo 41
Inserendo in D7 la formula
=D3*F3+D4*F4+D5*F5+D6*F6
combinazione lineare del valore delle variabili (colonna F) con
coefficienti dati dai redditi (colonna D)
3. Esprimiamo il vincolo di budget.

Se scelgo l’investimento A (xA = 1) il costo complessivo aumenta di


10 milioni di euro; se non scelgo l’investimento A (xA = 0) il costo
complessivo aumenta di 0. la quota di costo attribuibile ad A può
essere scritta come 10 xA.

Il costo complessivo attribuibile a tutti i progetti sarà

10 xA + 8 xC + 5 xP + 4 xS
Il vincolo di budget si scrive quindi
10 xA + 8 xC + 5 xP + 4 xS ≤ 15
Per esprimere il vincolo di budget, nel foglio Excel definiamo una
cella (C8) in cui memorizzare il costo complessivo
10 xA + 8 xC + 5 xP + 4 xS
e una (E8) in cui memorizzare il budget 15
B C D E F
2 Investimento Costo Reddito Nome Valore
3 Strada Asfalto (A) 10 16 xA 1
4 Strada Cemento (C) 8 12 xC 1
5 Ponte (P) 5 7 xP 1
6 Semafori (S) 4 6 xS 1
7 Reddito complessivo 41
8 Costo 27 Budget 15

= C3*F3+C4*F4+C5*F5+C6*F6
Definiamo la formulazione del problema di Programmazione
Lineare {0,1} come la massimizzazione della funzione obiettivo
lineare (2.) soggetta al vincolo lineare (3.) e ai vincoli di interezza
che definiscono la restrizione delle variabili xA, xC, xP, e xS a valori
in {0,1} (1.)
max 16 xA + 12 xC + 7 xP + 6 xS
10 xA + 8 xC + 5 xP + 4 xS ≤ 15
xA ∈ {0,1} xC ∈ {0,1} xP ∈ {0,1} xS ∈ {0,1}

Dal momento che il problema ha poche variabili e un solo vincolo


lineare, possiamo pensare di risolverlo con lo strumento Risolutore
di Excel.
Predisponiamo il foglio di lavoro in Excel come visto nella sessione
di studio precedente e copiamo i valori delle celle come visto nella
slide 9 (valori e formule)
B C D E F
2 Investimento Costo Reddito Nome Valore
3 Strada Asfalto (A) 10 16 xA 1
4 Strada Cemento (C) 8 12 xC 1
5 Ponte (P) 5 7 xP 1
6 Semafori (S) 4 6 xS 1
7 Reddito complessivo 41
8 Costo 27 Budget 15

Quindi selezioniamo lo strumento “Risolutore” nella sezione “Dati”


Apparirà un’interfaccia grafica che ci permetterà di definire variabili,
la massimizzazione della funzione obiettivo ed il vincolo di budget
Cominciamo con l’inserire in Parametri Risolutore di Excel gli
elementi principali del problema:
1. la funzione obiettivo (cella D7) nella sezione “Imposta
obiettivo”
2. la massimizzazione della funzione obiettivo nella check box
(Max) nella sezione “A”
3. le variabili, indicando le celle del valore delle variabili (colonna
F), senza specificare se sono continue o intere (o binarie),
nella sezione “Modificando le celle variabili”
4. il vincolo di budget nella sezione “Soggette ai vincoli”
utilizzando i comandi “Aggiungi”, “Cambia” e “Elimina” che ci
permettono di definire il vincolo che il valore della cella (C8)
deve essere minore o uguale del valore della cella (E8)
1. funzione obiettivo
2. massimizzazione della
funzione obiettivo
3. le variabili
4. il vincolo di budget
5. i vincoli di interezza delle variabili di decisione nella sezione
“Soggette ai vincoli” utilizzando i comandi “Aggiungi”, “Cambia” e
“Elimina” che ci permettono di definire il vincolo che i valori delle
celle relativi ai valori delle variabili (F3, F4, F5 e F6) deve essere
binario
Occorre inserire un vincolo alla volta, come mostrato nella figura
5. vincoli di interezza
xA ∈ {0,1}
xC ∈ {0,1}
xP ∈ {0,1}
xS ∈ {0,1}

6. selezioniamo il
metodo Simplex LP
come metodo di
risoluzione

7. Selezioniamo Risolvi
Una volta selezionato Risolvi otteniamo:
1. L’esito del processo di soluzione che ci informa se sia stata
determinata o meno una soluzione nella finestra Risultati
Risolutore
Una volta selezionato Risolvi otteniamo:
2. Il risultato del processo di soluzione:
• Il valore delle variabili nelle celle F3, F4, F5 e F6
• Il valore della funzione obiettivo nella cella D7
Vincoli logici
La Programmazione Lineare {0,1} permette anche di trattare vincoli di
tipo:

 selezionare o A o B, ma non tutti e due insieme

 se faccio A allora devo fare anche B

 non posso fare A se prima non ho fatto B

 ….

Esempio

Supponiamo ad esempio che i progetti “Strada in asfalto” (A) e “Strada


in cemento” (C) siano due progetti mutuamente esclusivi, vale a dire:
Se attivo A allora non attivo C
Se attivo C allora non attivo A
Esempio
Possiamo esprimere le due condizioni attraverso un’implicazione logica
sulle variabili di decisione:
Se attivo A (xA = 1) → non attivo C (x C = 0)
Se attivo C (xC = 1) → non attivo A (x
A = 0)
Quindi le due variabili xA e xC non potranno mai essere
contemporaneamente uguali a 1. E’ possibile esprimere questo vincolo
imponendo che la somma delle variabili xA e xC valga al massimo 1:

xA + xC ≤ 1
Esempio
Supponiamo ad esempio che la costruzione del ponte comporti la
risistemazione dei semafori, vale a dire:
Se attivo P allora attivo S
Possiamo esprimere le due condizioni attraverso un’implicazione logica
sulle variabili di decisione:
Se attivo P (xP = 1) → attivo S (x S = 1)
È comunque possibile attivare S (xS = 1) senza attivare P (xP = 0):
xP xS
xS non può essere più piccolo di xP
0 0 SI
0 1 SI xP ≤ xS
1 0 NO
1 1 SI
È possibile introdurre i vincoli logici visti negli esempi precedenti nel
foglio Excel e determinare la soluzione ottima che soddisfi tali vincoli.
B C D E F
2 Investimento w Reddito Nome Valore
3 Strada Asfalto (A) 10 16 xA 1
4 Strada Cemento (C) 8 12 xC 0
5 Ponte (P) 5 7 xP 0
6 Semafori (S) 4 6 xS 1
7 Reddito complessivo 22
8 Costo 14 Budget 15
(A) esclude (C) 1
(P) impica (S) 1

Come ci aspettavamo, il valore della soluzione ottima è diminuito


perché abbiamo aggiunto dei vincoli al problema
Ricerca Operativa 2

Lezione 9 di 48
Il problema di localizzazione degli impianti
Algoritmi esatti
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 9 di 48
Il problema di localizzazione degli impianti Foglio di
lavoro Excel
Pianificazione degli investimenti
Localizzazione degli impianti – Metodi esatti

• Scaricare il foglio Excel relativo al problema di pianificazione


degli investimenti
• Risolvere il problema con il Risolutore di Excel
Ricerca Operativa 2

Lezione 9 di 48
Il problema di localizzazione degli impianti
Domande aperte
Descrivere quali sono le principali differenze tra la
Programmazione Lineare e la Programmazione Lineare
Intera
Dare la definizione del problema della pianificazione degli
investimenti
Risolvere con il solutore di Excel il problema di
pianificazione degli investimenti tenendo conto che il
budget aumenti da 15 a 20
Ricerca Operativa 2

Lezione 10 di 48
Il problema di localizzazione degli impianti
Risolutore Excel
Il problema di localizzazione – Richiami

I modelli di localizzazione sono uno dei principali strumenti quantitativi per la


pianificazione territoriale di reti di servizio

Obiettivo: definire le localizzazioni di centri di servizio (centri di pronto intervento,


ospedali, caserme dei vigili, etc.) per soddisfare la domanda distribuita sul territorio

Importante: la scelta dei siti per la localizzazione degli impianti e l’allocazione della
domanda a ogni sito deve avvenire simultanamente

Insufficienza dei metodi che determinano l’allocazione valutando costi e benefici di un


singolo impianto alla volta
Il problema di localizzazione – Costi e grafo di localizzazione
Localizzazione degli impianti – Formulazione
Localizzazione degli impianti – Formulazione
2° passo: DEFINIZIONE DELLA FUNZIONE OBIETTIVO.
Memorizziamo la funzione obiettivo costo totale in una cella (F13) del foglio
Excel
3° passo: DEFINIZIONE DEI VINCOLI
Per esprimere i vincoli di assegnamento, nel foglio Excel definiamo una
cella (K8) in cui memorizzare il termine a sinistra dell’uguaglianza che
definisce il vincolo
Un cliente non può essere servito da un certo sito se in quel sito non è attivato un
impianto

Ad esempio, il cliente i non può essere servito dal sito j se nel sito j non è attivato
un impianto
Per esprimere questi vincoli, nel foglio Excel definiamo alcune celle
(C14:E18) in cui memorizzare il termine a sinistra della disuguaglianza
che definisce il vincolo

y3B – xB ≤ 0

= I10-I5
Predisponiamo il foglio di lavoro in Excel come visto nella lezione
precedente e copiamo i valori delle celle come visto in precedenza
(valori e formule)
Quindi selezioniamo lo strumento “Risolutore” nella sezione “Dati”
Apparirà un’interfaccia grafica che ci permetterà di definire variabili,
la massimizzazione della funzione obiettivo ed il vincolo di budget
Cominciamo con l’inserire in Parametri Risolutore di Excel gli
elementi principali del problema:
1. la funzione obiettivo (cella F13) nella sezione “Imposta
obiettivo”
2. la minimizzazione della funzione obiettivo nella check box
(Min) nella sezione “A”
3. le variabili, indicando le celle del valore delle variabili (celle H5,
I5 e J5 e colonne H, I e J, righe 8, 9, 10 e 11), senza
specificare se sono continue o intere (o binarie), nella sezione
“Modificando le celle variabili”
Una volta selezionato Risolvi otteniamo:

1. L’esito del processo di soluzione che ci informa se sia stata


determinata o meno una soluzione nella finestra Risultati
Risolutore
Una volta selezionato Risolvi otteniamo:

2. Il risultato del processo di soluzione:

• Il valore delle variabili nelle celle H5:J5 e H8:J11


• Il valore della funzione obiettivo nella cella F13
Ricerca Operativa 2

Lezione 10 di 48
Il problema di localizzazione degli impianti Foglio di
lavoro Excel
Localizzazione dei centri di pronto soccorso
Localizzazione degli impianti – Metodi esatti

• Scaricare il foglio Excel relativo al problema di localizzazione


dei centri di pronto soccorso
• Risolvere il problema con il Risolutore di Excel
SITI
A B C
COSTO ATTIVAZIONE
4 5 10

COSTO AFFERENZA
Q1 6 10 10
Q2 8 10 1
Q3 6 1 5
Q4 7 1 4
COSTI AFFERENZA 22

COSTO TOTALE 27
VINCOLI AFFERENZA
0 0 0
0 0 0
0 0 0
0 0 0
VARIABILI
A B C
ATTIVAZIONE
0 1 0

ASSEGNAMENTO
0 1 0 1 y1A + y1B + y1C = 1

0 1 0 1 y2A + y2B + y2C = 1

0 1 0 1 y3A + y3B + y3C = 1

0 1 0 1 y4A + y4B + y4C = 1

ATTIVAZIONE 5
Ricerca Operativa 2

Lezione 10 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
Risolvere il seguente problema di localizzazione degli impianti con il
solutore di Excel
Risolvere il seguente problema di localizzazione degli impianti con il
solutore di Excel
Ricerca Operativa 2

Lezione 11 di 48
Il problema di localizzazione degli impianti
Elementi di Programmazione Lineare Intera
Programmazione Lineare – Richiami
Un problema di Programmazione Lineare (PL) è un problema di ottimizzazione in
cui

• l’obiettivo è minimizzare o massimizzare una funzione lineare nelle variabili di


decisione del problema

• l’insieme delle soluzioni ammissibili è definite da un sistema di equazioni e/o


disequazioni lineari nelle variabili di decisione (vincoli)

• le variabili di decisione sono continue e possono essere libere (𝑥𝑥 ∈ ℝ) oppure


vincolate in segno (𝑥𝑥 ≤ 0 oppure 𝑥𝑥 ≥ 0)
Programmazione Lineare – Richiami
Dal corso di Ricerca Operativa 1 sappiamo che risolvere un problema di PL
significa

• individuare la soluzione ottima, vale a dire la soluzione ammissibile (che


soddisfitti tutti i vincoli) che minimizzi o massimizzi la funzione obiettivo

• concludere che il problema sia inammissibile (insieme delle soluzioni vuoto)

• concludere che il problema sia inferiormente [superiormente] illimitato nel caso


di problema di minimizzazione [massimizzazione]
Programmazione Lineare – Equivalenza tra problemi
Due problemi (𝑃𝑃1 ) e (𝑃𝑃2 ) di PL, con regioni ammissibili 𝑋𝑋1 e 𝑋𝑋2 rispettivamente, si
definiscono equivalenti se

• sono entrambi inammissibili

• sono entrambi illimitati

• ammettono entrambi soluzioni ottime finite ed esistono due trasformazioni

𝑓𝑓: 𝑋𝑋1 → 𝑋𝑋2


𝑔𝑔: 𝑋𝑋2 → 𝑋𝑋1

tali che

‒ per ogni soluzione ottima 𝑥𝑥1∗ di 𝑃𝑃1 il vettore 𝑓𝑓 𝑥𝑥1∗ è soluzione ottima di 𝑃𝑃2

‒ per ogni soluzione ottima 𝑥𝑥2∗ di 𝑃𝑃2 il vettore 𝑓𝑓 𝑥𝑥2∗ è soluzione ottima di 𝑃𝑃1
Programmazione Lineare – Esempi di equivalenza tra problemi
• Problemi con stessa funzione obiettivo e stessa regione ammissibile sono
equivalenti 𝑥𝑥2

min 5𝑥𝑥1 − 2𝑥𝑥2

𝟐𝟐𝒙𝒙𝟏𝟏 + 𝟒𝟒𝒙𝒙𝟐𝟐 ≤ 𝟏𝟏𝟏𝟏


(𝑃𝑃1 )
𝒙𝒙𝟏𝟏 − 𝒙𝒙𝟐𝟐 ≤ 𝟒𝟒

𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑥𝑥1


𝑥𝑥2

min 5𝑥𝑥1 − 2𝑥𝑥2


𝒙𝒙𝟏𝟏 + 𝟐𝟐𝒙𝒙𝟐𝟐 ≤ 𝟖𝟖
(𝑃𝑃2 )
𝟑𝟑𝒙𝒙𝟏𝟏 − 𝟑𝟑𝒙𝒙𝟐𝟐 ≤ 𝟏𝟏𝟏𝟏

𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑥𝑥1


Programmazione Lineare – Esempi di equivalenza tra problemi
• Problemi con funzioni obiettivo che differiscano per una costante e stessa
regione ammissibile

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 min 𝑐𝑐 𝑇𝑇 𝑥𝑥 + 𝛿𝛿
(𝑃𝑃1 ) 𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏 (𝑃𝑃2 ) 𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ ℝ𝑛𝑛 𝑥𝑥 ∈ ℝ𝑛𝑛

• Problemi di minimizzazione 𝑃𝑃1 e di massimizzazione 𝑃𝑃2 aventi stessa funzione


obiettivo ma cambiata di segno e stessa regione ammissibile sono equivalenti

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 max −𝑐𝑐 𝑇𝑇 𝑥𝑥


(𝑃𝑃1 ) 𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏 (𝑃𝑃2 ) 𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ ℝ𝑛𝑛 𝑥𝑥 ∈ ℝ𝑛𝑛
Programmazione Lineare Intera – Richiami
Un problema di Programmazione Lineare Intera (PLI) è un problema di PL in cui le
variabili sono vincolate ad assumere valori interi (nell’insieme ℤ)

Se la restrizione riguarda un sottoinsieme proprio delle variabili il problema di side


di Programmazione Lineare Intera Mista (MILP)

Come abbiamo visto, i problem di PLI e MILP sono tipicamente caratterizzati da:

• indivisibilità delle risorse

• necessità di scegliere da un numero finito (molto grande, nella maggior parte


dei casi) di possibili alternative

Un problema di Programmazione Lineare {0,1} (PL01) è un problema di PLI in cui


le variabili sono vincolate ad assumere valori binari nell’insieme {0,1} e
rappresentano la possibilità che un evento si verifichi oppure no
Formulazione di un problema di PLI
Il processo di associazione di un modello matematico a un problema reale viene
detto formulazione del problema

Il processo di formulazione consiste nell’identificare il sistema di equazioni e/o


disequazioni lineari che, congiuntamente alle restrizioni di interezza sulle variabili
di decisione, definiscano la regione ammissibile

L’obiettivo del processo di formulazione è identificare un problema di PLI, vale a


dire un problema di ottimizzazione nella forma

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 Regione ammissibile descritta come intersezione di


𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏 • poliedro in ℝ𝑛𝑛 P = {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏}
𝑥𝑥 ∈ ℤ𝑛𝑛 • insieme dei vettori 𝑛𝑛-dimensionali a componenti
intere
Formulazioni equivalenti
Un problema di PLI è caratterizzato dall’insieme 𝑆𝑆 delle soluzioni ammissibili e dal
vettore 𝑐𝑐 dei costi e può essere completamente descritto dalla coppia (𝑆𝑆, 𝑐𝑐)
Dato un problema, è possibile in linea di principio definire diverse formulazioni
Dato un insieme 𝑆𝑆 di soluzioni di un problema di PLI è possibile
determinare diversi insiemi di equazioni e/o disequazioni che descrivano
l’insieme 𝑆𝑆
Due formulazioni si defiscono equivalenti se entrambe identificano lo stesso
insieme delle soluzioni ammissibili 𝑆𝑆

Dato un problema, come individuare la formulazione migliore in una


famiglia di formulazioni equivalenti?
In questa lezione introdurremo un criterio di preferenza tra formulazioni che ci
permetterà di stabilire se una formulazione sia preferibile a un’altra nel caso di
problemi di Programmazione Lineare {0,1}
Formulazione di un problema di PL01
Un problema di PL01 è caratterizzato da un insieme 𝑆𝑆 ⊆ {0,1}𝑛𝑛 delle soluzioni
ammissibili e dal vettore dei costi 𝑐𝑐 ∈ ℝ𝑛𝑛

L’insieme {0,1}𝑛𝑛 è definito 𝑛𝑛 −Cubo Unitario


Risolvere un problema di PL01 significa

• individuare la soluzione ottima 𝑥𝑥 ∗ ∈ 𝑆𝑆 che minimizzi la funzione obiettivo 𝑐𝑐 𝑇𝑇 𝑥𝑥


vale a dire che sia soluzione del problema
min 𝑐𝑐 𝑇𝑇 𝑥𝑥
(PL01)
𝑥𝑥 ∈ 𝑆𝑆
• concludere che il problema sia inammissibile (insieme delle soluzioni vuoto)

Un problema di PL01 non può essere illimitato


Dal momento che 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e che 𝑛𝑛−Cubo ha cardinalità finita
(|{0,1}𝑛𝑛 |=2𝑛𝑛 ), anche 𝑆𝑆 ha cardinalità finita
Formulazione di un problema di PL01
Il processo di associazione di un modello matematico a un problema reale è
solitamente particolarmente semplice nel caso di problemi di PL01

Fasi del processo di formulazione 1/2

1. Si individuano gli 𝑛𝑛 eventi logici elementari che caratterizzino una soluzione


del problema reale

2. A ciascun evento logico elementare 𝑖𝑖 viene associata

• una variabile di decisione 𝑥𝑥𝑖𝑖 ∈ {0,1} che assuma valore 1 se l’evento si


verifica e 0 altrimenti per 𝑖𝑖 = 1, … , 𝑛𝑛

• un costo reale 𝑐𝑐𝑖𝑖 ∈ ℝ da sostenere nel caso l’evento si verifichi

Il costo elementare associato all’evento 𝑖𝑖–esimo è quindi 𝑐𝑐𝑖𝑖 𝑥𝑥𝑖𝑖 ∈ ℝ


Formulazione di un problema di PL01
Il processo di associazione di un modello matematico a un problema reale è
solitamente particolarmente semplice nel caso di problemi di PL01

Fasi del processo di formulazione 2/2

3. Si definisce l’insieme 𝑆𝑆 dei vettori rappresentativi di tutte le soluzioni


ammissibili del problema reale: ogni vettore 𝑥𝑥 ha tante componenti 𝑥𝑥𝑖𝑖 quanti
sono gli eventi logici elementari individuati al punto 1. e ciascuna componente
𝑥𝑥𝑖𝑖 può assumere valori in {0,1}

Ogni vettore 𝑥𝑥� ∈ 𝑆𝑆 rappresenta una delle 2𝑛𝑛 possibili combinazioni nelle
quali gli 𝑛𝑛 eventi logici elementari si possono presentare
4. La funzione obiettivo è costituita dalla somma dei costi elementari associati
agli 𝑛𝑛 eventi
𝑛𝑛
𝑐𝑐 𝑇𝑇 𝑥𝑥 =� 𝑐𝑐𝑖𝑖 𝑥𝑥𝑖𝑖
𝑖𝑖=1
Formulazione di un problema di PL01 – Esempi

• Formulazione del problema di Localizzazione degli Impianti come problema di


PL01 vista nella lezione 5

• Formulazione del problema di Localizzazione degli Impianti capacitato come


problema di MILP nella lezione 8

• Formulazione del problema di Pianificazione degli Investimenti come problema


di PL01 nella lezione 9

I problemi sono stati formulati e risolti matematicamente tramite lo


strumento Risolutore di Excel
Soluzione di un problema di PL01
Come abbiamo visto nella lezione 3:

Formulare un problema come problema di


ottimizzazione non implica saperlo risolvere
Se da un lato il processo di formulazione di un problema di PL01 risulta semplice
e, in alcuni casi, intuitivo, in generale non rende automaticamente disponibili
metodi di soluzione che non siano l’enumerazione completa delle soluzioni (si
veda lezione 4)

PROCEDURA DI ENUMERAZIONE COMPLETA


1. Considera tutte le soluzioni ammissibili 𝑥𝑥 ∈ 𝑆𝑆
2. Ordina le soluzioni ammissili rispetto al vettore dei costi 𝑐𝑐
3. Seleziona la soluzione di costo minimo: 𝑥𝑥 ∗ = arg min{𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}
Soluzione di un problema di PL01

La procedura di enumerazione completa diventa


rapidamente inadeguata al crescere della cardinalità di 𝑆𝑆

Come vedremo nella prossima lezione, negli algoritmi di soluzione di un problema


di PL01 gioca un ruolo fondamentale la disponibilità di un limite inferiore (lower
bound) per il problema

Le formulazioni di un problema di PL01 rappresentano uno strumento matematico


molto efficiente per la determinizione di limiti inferiori utili negli algoritmi di
soluzione
Ricerca Operativa 2

Lezione 11 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
Stabilire se i seguenti problemi di PL sono equivalenti

min 6𝑥𝑥1 − 𝑥𝑥2 min 12𝑥𝑥1 − 2𝑥𝑥2


𝑥𝑥1 + 2𝑥𝑥2 ≥ 2 𝑥𝑥1 + 5𝑥𝑥2 ≤ 20
(𝑃𝑃1 ) (𝑃𝑃2 )
𝑥𝑥1 + 𝑥𝑥2 = 4 2𝑥𝑥1 + 2𝑥𝑥2 = 8
𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
Stabilire se i seguenti problemi di PL sono equivalenti

min 12𝑥𝑥1 − 2𝑥𝑥2


min 6𝑥𝑥1 − 𝑥𝑥2 + 5
2𝑥𝑥1 + 2𝑥𝑥2 = 8
3𝑥𝑥1 + 3𝑥𝑥2 ≥ 6
(𝑃𝑃1 ) 𝑥𝑥1 ≤ 10
(𝑃𝑃2 )
𝑥𝑥1 + 𝑥𝑥2 = 4
𝑥𝑥2 ≤ 5
𝑥𝑥1 , 𝑥𝑥2 ≥ 0
𝑥𝑥1 , 𝑥𝑥2 ≥ 0
Stabilire se i seguenti problemi di PL sono equivalenti

min 6𝑥𝑥1 − 𝑥𝑥2 max −6𝑥𝑥1 + 𝑥𝑥2


3𝑥𝑥1 + 3𝑥𝑥2 ≤ 6 3𝑥𝑥1 + 3𝑥𝑥2 ≤ 6
(𝑃𝑃1 ) (𝑃𝑃2 )
2𝑥𝑥1 + 𝑥𝑥2 ≤ 4 2𝑥𝑥1 + 𝑥𝑥2 ≤ 4
𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
Stabilire se i seguenti problemi di PL sono equivalenti

min 𝑥𝑥1 − 3𝑥𝑥2 max −𝑥𝑥1 + 3𝑥𝑥2


3𝑥𝑥1 + 𝑥𝑥2 ≤ 9 3𝑥𝑥1 + 𝑥𝑥2 = 9
(𝑃𝑃1 ) (𝑃𝑃2 )
−𝑥𝑥1 + 2𝑥𝑥2 ≤ 6 −𝑥𝑥1 + 2𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
Ricerca Operativa 2

Lezione 11 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
1. Si consideri il problema di pianificazione degli
investimenti visto nella lezione 9
2. Si introduca nella formulazione del problema l’ulteriore
vincolo che i progetti “Strada in cemento” (A) e “Ponte”
(P) siano due progetti mutuamente esclusivi
3. Risolvere con il solutore di Excel la formulazione
determinata
Ricerca Operativa 2

Lezione 11 di 48
Il problema di localizzazione degli impianti
Domande aperte
Dati due problemi di PL, definire l’equivalenza tra i due
problemi
Descrivere quali sono le principali differenze tra la
Programmazione Lineare Intera e la Programmazione
Lineare {0,1}
Definire il processo di formulazione di un problema di
Programmazione Lineare Intera
Dati due formulazioni di un problema, definire
l’equivalenza tra le due formulazioni
Ricerca Operativa 2

Lezione 12 di 48
Il problema di localizzazione degli impianti
Formulazioni di PL01
Soluzione di un problema di PL01
Un problema di Programmazione Lineare {0,1} (PL01) è un problema di PLI in cui
le variabili sono vincolate ad assumere valori binari nell’insieme {0,1} e
rappresentano la possibilità che un evento si verifichi oppure no

Nella lezione 11 abbiamo visto cosa significhi formulare un problema di PL01 e


abbiamo richiamato alcuni esempi già illustrati nelle precedenti lezioni

• Il processo di formulazione non è univoco

• Possiamo definire più formulazioni per lo stesso problema

• Formulare un problema non fornisce automaticamente strumenti di risoluzione

In questa lezione vedremo come la formulazione di un problema ci permetta


agevolmente di determinare limiti inferiori utili negli algoritmi di soluzione
Lower bound
Cosideriamo un generico problema di PL01 con insieme delle soluzioni
ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛

min 𝑐𝑐 𝑇𝑇 𝑥𝑥
(PL01)
𝑥𝑥 ∈ 𝑆𝑆
Indichiamo con 𝑥𝑥̅ una qualsiasi soluzione ammissibile del problema (PL01)
𝑥𝑥̅ ∈ 𝑆𝑆 𝑥𝑥̅ è un vettore a 𝑛𝑛 componenti in {0,1}

Indichiamo con 𝑧𝑧̅ il valore della soluzione ammissibile 𝑥𝑥̅ ∈ 𝑆𝑆

𝑧𝑧̅ = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅ ∈ ℝ 𝑧𝑧̅ è un valore reale

Si supponga di conoscere un qualsiasi valore reale 𝐿𝐿𝐿𝐿 che sia un limite inferiore
del problema (PL01)
𝐿𝐿𝐵𝐵 ≤ min{𝑐𝑐 𝑇𝑇 𝑥𝑥 : 𝑥𝑥 ∈ 𝑆𝑆}
Lower bound
Dal momento che 𝐿𝐿𝐿𝐿 è un limite inferiore del problema (PL01), allora per ogni
soluzione ammissibile 𝑥𝑥̅ ∈ 𝑆𝑆 risulta

𝐿𝐿𝐵𝐵 ≤ 𝑧𝑧̅ = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅

Tanto più il valore 𝑧𝑧̅ è vicino al valore 𝐿𝐿𝐿𝐿 tanto più “buona” è la soluzione 𝑥𝑥̅

Anche nel caso in cui non si conosca il valore ottimo 𝑧𝑧 ∗ del problema (PL01), la
conoscenza del limite inferiore 𝐿𝐿𝐵𝐵 ci permette di
𝑧𝑧 ∗ = min{𝑐𝑐 𝑇𝑇 𝑥𝑥 : 𝑥𝑥 ∈ 𝑆𝑆}
stabilire quanto sia “buona” una soluzione 𝑥𝑥̅ ∈ 𝑆𝑆

La differenza 𝐠𝐠𝐠𝐠𝐠𝐠 = 𝑧𝑧̅ − 𝐿𝐿𝐿𝐿 ci permette di capire quanto la soluzione


ammissibile 𝑥𝑥̅ sia lontana dalla soluzione ottima 𝑥𝑥 ∗ del problema PL01
anche nel caso in cui né la soluzione ottima 𝑥𝑥 ∗ né il suo valore 𝑧𝑧 ∗ siano noti
Lower bound – Esempio 1/2
Consideriamo un semplice problema di (PL01) in due dimensioni
min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}

Supponiamo di conoscere un limite inferiore 𝐿𝐿𝐿𝐿 = 𝟏𝟏𝟏𝟏. 𝟓𝟓 per il problema (PL01)

Sebbene di per sé, la conoscenza del valore 𝐿𝐿𝐿𝐿 non ci dia alcuna indicazione
sulla soluzione ottima del problema (PL01), possiamo considerare questo valore
come riferimento per valutare la “qualità” delle soluzioni ammissibili del problema

Supponiamo infatti che un qualche algoritmo di soluzione ci restituisca la


soluzione ammissibile 𝑥𝑥̅ = (1,0), il cui valore è 𝑧𝑧̅ = 𝟏𝟏𝟏𝟏
Lower bound – Esempio 2/2

min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1} 𝟏𝟏𝟏𝟏 𝑧𝑧̅

La differenza 𝐠𝐠𝐠𝐠𝐠𝐠 = 𝑧𝑧̅ − 𝐿𝐿𝐿𝐿 = 1.5 ci permette di 𝐠𝐠


𝐚𝐚
• dire che la soluzione 𝑥𝑥̅ = (1,0) è una buona
𝐩𝐩
soluzione, in quanto il suo valore 𝑧𝑧̅ = 𝟏𝟏𝟏𝟏 non è troppo
lontano dal valore del limite inferiore 𝐿𝐿𝐿𝐿 = 𝟏𝟏𝟏𝟏. 𝟓𝟓 𝟏𝟏𝟏𝟏. 𝟓𝟓 𝐿𝐿𝐿𝐿
• affermare che la soluzione ottima, qualunque essa
sia, si trova nell’intervallo aperto (𝟏𝟏𝟏𝟏. 𝟓𝟓,𝟏𝟏𝟏𝟏) che ha
un’ampiezza non superiore al 𝟏𝟏𝟓𝟓% del limite inferiore
|𝑧𝑧̅ − 𝐿𝐿𝐿𝐿| 1
= < 𝟏𝟏𝟏𝟏𝟏
𝐿𝐿𝐿𝐿 7 𝟎𝟎
Formulazione lineare
Come calcolare un limite inferiore per un generico problema di PL01?

Un modo naturale è quello di “arricchire” l’insieme 𝑆𝑆 delle soluzioni ammissibili


determinando un insieme 𝑃𝑃 che

• contenga (propriamente) tutte le soluzioni ammissibili in 𝑆𝑆, vale a dire 𝑆𝑆 ⊂ 𝑃𝑃

• non contenga tutte le soluzioni intere non ammissibili

Si definisce formulazione lineare di un problema di PL01 con insieme delle


soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛 il
poliedro 𝑃𝑃 = {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝐴𝐴𝐴𝐴 ≤ 𝑏𝑏} se e solo se

𝑆𝑆 = 𝑃𝑃 ∩ {0,1}𝑛𝑛

Data una formulazione lineare di un problema di PL01, la sua intersezione con


l’𝑛𝑛–Cubo Unitario coincide con l’insieme delle soluzioni ammissibili del problema
Formulazione lineare – Proprietà
Dato un problema di PL01,

1. Una formulazione lineare 𝑃𝑃 del problema consente sempre di separare i vettori


a componenti {0,1} corrispondenti a soluzioni ammissibili del problema dai
vettori a componenti {0,1} che non appartengono a 𝑆𝑆

2. Una formulazione lineare esiste sempre ed è data dall’insieme di tutti i vettori


esprimibili come combinazione convessa dei punti in 𝑆𝑆
𝑃𝑃 = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆)

3. Data una formulazione lineare 𝑃𝑃 del problema, possiamo scrivere


l’equivalenza tra i problemi di ottimizzazione

𝑇𝑇 min 𝑐𝑐 𝑇𝑇 𝑥𝑥
min 𝑐𝑐 𝑥𝑥 = 𝑥𝑥 ∈ 𝑃𝑃
𝑥𝑥 ∈ 𝑆𝑆 𝑥𝑥 ∈ {0,1}𝑛𝑛
Rilassamento lineare
Data una formulazione lineare 𝑃𝑃 di un problema di PL01 con insieme delle
soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛 , si definisce
rilassamento lineare del problema il problema di Programmazione Lineare
min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑃𝑃

Il rilassamento lineare viene ottenuto rimuovendo i vincoli di interezza 𝑥𝑥 ∈ {0,1}𝑛𝑛


sulle componenti (intere) del vettore 𝑥𝑥

Rimuovendo i vincoli di interezza 𝑥𝑥 ∈ {0,1}𝑛𝑛 , la regione ammissibile risultante 𝑃𝑃


include l’insieme delle soluzioni ammissibili 𝑆𝑆. Il valore della funzione obiettivo
sarà necessariamente non superiore a quello ottimo per il problema di PL01

𝑇𝑇 min 𝑐𝑐 𝑇𝑇 𝑥𝑥
min 𝑐𝑐 𝑥𝑥 = 𝑥𝑥 ∈ 𝑃𝑃 ≥ min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑆𝑆 𝑥𝑥 ∈ {0,1}𝑛𝑛 𝑥𝑥 ∈ 𝑃𝑃
Rilassamento lineare – Proprietà
Data una formulazione lineare 𝑃𝑃 di un problema di PL01 con insieme delle
soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛 ,

1. il valore ottimo 𝑧𝑧 𝑅𝑅 = min{𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑃𝑃} del rilassamento lineare fornisce una
limitazione inferiore (lower bound) per il valore ottimo 𝑧𝑧 ∗ del problema di PL01
𝑧𝑧 𝑅𝑅 ≤ 𝑧𝑧 ∗
2. se la soluzione ottima 𝑥𝑥 𝑅𝑅 del rilassamento lineare ha tutte componenti intere
(𝑥𝑥 𝑅𝑅 ∈ {0,1}𝑛𝑛 ) allora 𝑥𝑥 𝑅𝑅 ∈ 𝑆𝑆 e quindi 𝑥𝑥 𝑅𝑅 è una soluzione ottima del problema di
PL01

𝑥𝑥 𝑅𝑅 ∈ 𝑃𝑃 ∧ 𝑥𝑥 𝑅𝑅 ∈ {0,1}𝑛𝑛 𝑥𝑥 𝑅𝑅 ∈ 𝑆𝑆

3. se esiste una soluzione ammissibile 𝑥𝑥̅ ∈ 𝑆𝑆 diversa da 𝑥𝑥 𝑅𝑅 ma tale che


𝑧𝑧 𝑅𝑅 = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅
allora possiamo concludere che 𝑥𝑥̅ è soluzione ottima del problema di PL01
Formulazione lineare – Esempio 1/2
Consideriamo il semplice problema di (PL01) in due dimensioni già visto in questa
lezione
min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}

L’insieme delle soluzioni ammissibili è dato da tutti i vettori in {0,1}2 che


soddisfano i vincoli −2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3 e 3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6

Per enumerazione, è facile verificare che


0 1 0
𝑆𝑆 = 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 = , ,
0 0 1

Il vettore dei costi è 𝑐𝑐 𝑇𝑇 = 0 − 1 e la soluzione ottima è 𝑥𝑥 3 con valore 11


Formulazione lineare – Esempio 2/2
Con il metodo grafico, identifichiamo le tre soluzioni ammissibili 𝑆𝑆 = 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 nel
piano cartesiano

𝟐𝟐 𝑥𝑥2
min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3 𝟏𝟏 11
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6 𝑥𝑥 3
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1} 𝑥𝑥 2
𝑥𝑥 1 12
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1

Se tratteggiamento le curve di livello (in verde in figura) è facile verificare che il


valore ottimo è 11 in corrispondenza della soluzione ottima 𝑥𝑥 3
Rilassamento lineare – Esempio 1/4
Cosa accade alla regione ammissibile quando rimuoviamo i vincoli di interezza su
variabili binarie?
min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3 𝟐𝟐 𝑥𝑥2
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}
𝟏𝟏
𝑥𝑥 3
𝑷𝑷
min −𝑥𝑥2 + 12
𝑥𝑥 1 𝑥𝑥 2
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ≥ 0

I vincoli lineari definiscono nelle variabili continue la regione ammissibile di un


problema di Programmazione Lineare (area grigia in figura)
Rilassamento lineare – Esempio 2/4
La regione ammissibile del rilassamento lineare 𝑷𝑷 include l’insieme delle soluzioni
ammissibili 𝑆𝑆 = 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 .

𝟐𝟐 𝑥𝑥2 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 = 𝑷𝑷 ∩ {0,1}2
min −𝑥𝑥2 + 12 10.5
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6 𝟏𝟏
𝑥𝑥 3 𝑥𝑥 4
𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑷𝑷
𝑥𝑥 1 𝑥𝑥 2 12
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1

Le soluzioni ammissibili del problema sono solo i punti in {0,1}2 contenuti dentro la
regione ammissibile, mentre i punti in {0,1}2 al di fuori non sono soluzioni
ammissibili: la soluzione 𝑥𝑥 4 = (1 1)𝑇𝑇 è infatti non ammissibile (𝑥𝑥 4 ∉ 𝑆𝑆).
Rilassamento lineare – Esempio 3/4
Sempre applicando il metodo grafico per problemi in due variabili, è facile
verificare che il valore ottimo del rilassamento lineare è 𝑧𝑧 𝑅𝑅 = 𝟏𝟏𝟏𝟏. 𝟓𝟓 in
corrispondenza della soluzione ottima
0
𝑥𝑥 𝑅𝑅 =
1.5
𝟐𝟐 𝑥𝑥 𝟏𝟏𝟏𝟏 𝑧𝑧̅
2
𝑥𝑥 𝑅𝑅 10.5 𝐠𝐠
𝐚𝐚
𝟏𝟏 𝐩𝐩
𝑥𝑥 3 𝑥𝑥 4
𝑷𝑷
1 2
𝟏𝟏𝟏𝟏. 𝟓𝟓 𝑧𝑧 𝑅𝑅
𝑥𝑥 𝑥𝑥 12
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1
min 𝑐𝑐 𝑇𝑇 𝑥𝑥
min 𝑐𝑐 𝑇𝑇 𝑥𝑥 𝑥𝑥 ∈ 𝑷𝑷 min 𝑐𝑐 𝑇𝑇
𝑥𝑥 = 𝐿𝐿𝐿𝐿
= ≥
𝑥𝑥 ∈ 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 𝑥𝑥 ∈ {0,1}𝑛𝑛 𝑥𝑥 ∈ 𝑷𝑷
𝟎𝟎
Rilassamento lineare – Esempio 4/4
Come ci aspettavamo, il valore ottimo del rilassamento lineare rappresenta un
lower bound per la soluzione ottima del problema (PL01): 𝑧𝑧 𝑅𝑅 = 𝐿𝐿𝐿𝐿

𝟐𝟐 𝑥𝑥2
𝑥𝑥 𝑅𝑅 10.5
𝟏𝟏𝟏𝟏 𝑧𝑧̅
𝑥𝑥 4 11
𝟏𝟏 𝐠𝐠
𝑥𝑥 3 𝐚𝐚
𝑷𝑷
𝟏𝟏𝟏𝟏 𝑧𝑧 ∗ 𝐩𝐩
𝑥𝑥 1 𝑥𝑥 2 12
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1 𝟏𝟏𝟏𝟏. 𝟓𝟓 𝐿𝐿𝐿𝐿

Infatti, la soluzione ottima 𝑥𝑥 3 ha valore 𝑧𝑧 ∗ = 11 compreso tra


il lower bound 𝑧𝑧 𝑅𝑅 = 10.5 e il valore di una qualsiasi soluzione
ammissibile del problema, ad esempio 𝑥𝑥 2 , con valore 𝑧𝑧̅ = 12
𝟎𝟎
Ordinamento delle formulazioni 1/2
Dato un problema di PL01 con insieme delle soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e
vettore dei costi elementari c ∈ ℝ𝑛𝑛 , esistono diverse formulazioni lineari per il
problema.

A ogni formulazione lineare corrisponde un diverso rilassamento lineare e un


diverso lower bound per il problema

Una formulazione è tanto migliore quanto più alto


è il valore del lower bound in maniera tale che il
gap sia il più piccolo possibile

Dipende dalla struttura della funzione obiettivo


È possibile determinare un criterio di preferenza per stabile se una
formulazione è migliore di un’altra?
Ordinamento delle formulazioni 2/2
Date due formulazioni lineari 𝑃𝑃1 e 𝑃𝑃2 di un problema di PL01, 𝑃𝑃1 è migliore di 𝑃𝑃2 se
e solo se 𝑃𝑃1 ⊂ 𝑃𝑃2

Qualunque sia il vettore dei costi elementari c ∈ ℝ𝑛𝑛 il valore ottimo 𝑧𝑧 𝑅𝑅1 del
rilassamento lineare di 𝑃𝑃1 è superiore al valore ottimo 𝑧𝑧 𝑅𝑅2 del rilassamento
lineare di 𝑃𝑃1
Il criterio è indipendente della funzione obiettivo, quindi più robusto

È possibile stabilire un ordinamento delle diverse 𝑧𝑧̅


formulazioni lineari disponibili per un problema di PL01
𝑧𝑧 𝑅𝑅1
𝑃𝑃1 ⊂ 𝑃𝑃2 ⊂ ⋯ ⊂ 𝑃𝑃𝑁𝑁
cui corrisponde una sequenza di lower bound di qualità 𝑧𝑧 𝑅𝑅2
decrescente per il problema di PL01 𝑧𝑧 𝑅𝑅𝑁𝑁

𝑧𝑧 𝑅𝑅𝑁𝑁 ≤ ⋯ ≤ 𝑧𝑧 𝑅𝑅2 ≤ 𝑧𝑧 𝑅𝑅𝑅 𝟎𝟎


Formulazione ottima 1/2

Qual è la migliore formulazione 𝑃𝑃∗ di un problema di PL01?

Il più piccolo insieme convesso contenente le soluzioni ammissibili


𝑆𝑆 ⊆ {0,1}𝑛𝑛 del problema di PL01, vale a dire l’involucro convesso delle
soluzioni in 𝑆𝑆

𝑃𝑃∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆)

𝑃𝑃∗ è contenuto in tutte le formulazioni lineari del problema di PL01 𝑧𝑧̅ = 𝑧𝑧 𝑃𝑃


Dal momento che ogni vertice di 𝑃𝑃∗ è una soluzione in 𝑆𝑆, se 𝑧𝑧 𝑅𝑅1
ottimizziamo la funzione obiettivo del problema di PL01
(𝑆𝑆, 𝑐𝑐) abbiamo l’equivalenza tra i due problemi 𝑧𝑧 𝑅𝑅2
𝑧𝑧 𝑅𝑅𝑁𝑁
min 𝑐𝑐 𝑇𝑇 𝑥𝑥 min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑆𝑆 𝑥𝑥 ∈ 𝑃𝑃∗
𝟎𝟎
Formulazione ottima 2/2

È sempre possibile definire la formulazione ottima di un problema di PL01?

Teorema Un problema di Programmazione Lineare {0,1} con insieme delle


soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛
ammette sempre la formulazione lineare 𝑃𝑃∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) con la proprietà che

𝑥𝑥 ∈ 𝑆𝑆 ⇔ 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑃𝑃∗

Quindi risolvere il problema di Programmazione Lineare {0,1} con insieme delle


soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛 è equivalente
a risolvere il problema di Programmazione Lineare
min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑃𝑃∗
Formulazione ottima – Esempio 1/3
Consideriamo il semplice problema di (PL01) in due dimensioni già visto in questa
lezione
min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}
con insieme delle soluzioni
0 1 0
𝑆𝑆 = 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 = , ,
0 0 1
e vettore dei costi 𝑐𝑐 𝑇𝑇 = 0 − 1 . Abbiamo visto che il rilassamento lineare 𝑷𝑷 è una
una formulazione del problema
min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ≥ 0
Formulazione ottima – Esempio 2/3
Consideriamo ora il poliedro 𝑷𝑷′ = {𝑥𝑥 ∈ ℝ: 𝑥𝑥1 + 𝑥𝑥2 ≤ 1, 0 ≤ 𝑥𝑥1 , 𝑥𝑥2 ≤ 1}

La regione ammissibile di 𝑷𝑷′ include l’insieme delle soluzioni ammissibili 𝑆𝑆 mentre i


punti in {0,1}2 al di fuori non sono soluzioni ammissibili
𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 = 𝑷𝑷𝑷 ∩ {0,1}2
𝑷𝑷′ è una formulazione
𝟐𝟐 𝑥𝑥2

𝑷𝑷′ ⊂ 𝑷𝑷 quindi 𝑷𝑷′ è una formulazione 10.5


migliore di 𝑷𝑷 11
𝟏𝟏 4
𝑥𝑥 3 𝑥𝑥
𝑃𝑃′
𝑧𝑧 = 11 ≥ 10.5 = 𝑧𝑧 𝑅𝑅 ove
𝑃𝑃′ 𝑥𝑥 1 𝑷𝑷𝑷 𝑥𝑥 2 12
𝑧𝑧 = min −𝑥𝑥2 + 12
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1
𝑥𝑥1 + 𝑥𝑥2 ≤ 1
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 ≤ 1
Rilassamento lineare – Esempio 3/3
Inoltre, 𝑷𝑷′ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐 𝑆𝑆 quindi è la formulazione ottima 𝑃𝑃∗ e la soluzione ottima è un

vertice di 𝑃𝑃∗ e il valore ottimo 𝑧𝑧 𝑃𝑃 è il valore ottimo del problema (PL01)

𝟐𝟐 𝑥𝑥2
𝑥𝑥 𝑅𝑅 10.5
𝟏𝟏𝟏𝟏 𝑧𝑧̅
𝑥𝑥 4 11
𝟏𝟏
𝑥𝑥 3
𝑷𝑷 ′
𝟏𝟏𝟏𝟏 𝑧𝑧 ∗ = 𝑧𝑧 𝑃𝑃
𝑥𝑥 1 𝑷𝑷𝑷 𝑥𝑥 2 12
𝟎𝟎 𝟏𝟏 𝟐𝟐 𝑥𝑥1 𝟏𝟏𝟏𝟏. 𝟓𝟓 𝐿𝐿𝐿𝐿

Il problema (PL01) viene espresso come problema di


Programmazione Lineare e l’applicazione di un metodo di soluzione
ottima di PL può essere usato per determinarne la soluzione ottima
𝟎𝟎
Conclusione
In questa lezione abbiamo visto un modo per determianre un limite inferiore utile
per valutare la qualità di una qualsiasi soluzione ammissibile di un problema di
PL01, a prescindere da come questa sia stata calcolata

Nelle prossime lezioni vedremo come la disponibilità di tale limite (e di uno


strumento come la formulazione lineare) ci permetta di delinare una strategia di
soluzione esatta per i problemi di PL01
Ricerca Operativa 2

Lezione 12 di 48
Il problema di localizzazione degli impianti
Approfondimento
Approfondimento su testo
Studiare le sezioni 4.1 e 4.2 del libro di testo, con l’esclusione della sottosezione
4.2.3.

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 12 di 48
Il problema di localizzazione degli impianti
Esercizio proposto
Esercizio proposto
Si consideri un problema di minimizzazione di (PL01) in due dimensioni con
insieme delle soluzioni

0 1 1
𝑆𝑆 = 𝑥𝑥 1 , 𝑥𝑥 2 , 𝑥𝑥 3 = , ,
0 0 1

e vettore dei costi è 𝑐𝑐 𝑇𝑇 = −4 1


Esercizio proposto
1. Applicando l’algoritmo di enumerazione, determinare la soluzione ottima del
problema (𝑆𝑆, 𝑐𝑐)

2. Applicando il metodo grafico, determinare insieme delle soluzioni e verificare


che la soluzione ottima del problema (𝑆𝑆, 𝑐𝑐) sia quella determina al punto 1.

3. Si considerino i poliedri 𝑃𝑃′ , 𝑃𝑃′′ e 𝑃𝑃′′′, verificare che siano formulazioni del
problema (𝑆𝑆, 𝑐𝑐)

𝑥𝑥1 + 2𝑥𝑥2 ≤ 2 𝑥𝑥1 − 𝑥𝑥2 ≥ 0


𝑥𝑥1 − 𝑥𝑥2 ≥ 0
(𝑃𝑃𝑃) 𝑥𝑥1 ≤ 1 (𝑃𝑃′′) (𝑃𝑃′′′) 𝑥𝑥1 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 ≥ 0
𝑥𝑥1 , 𝑥𝑥2 ≥ 0 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
Esercizio proposto
4. Determinare l’ordinamento delle formulazioni del problema (𝑆𝑆, 𝑐𝑐) tra quelle
verificate al punto 3.

5. Determinare i lower bound forniti dalle formulazioni del problema (𝑆𝑆, 𝑐𝑐) tra
quelle verificate al punto 3.

6. Determinare la formulazione ottima 𝑃𝑃∗ del problema (𝑆𝑆, 𝑐𝑐) e determinare la


soluzione ottima
Ricerca Operativa 2

Lezione 12 di 48
Il problema di localizzazione degli impianti
Domande aperte
Dare la definizione di formulazione lineare di un problema di PL01
Dare la definizione di lower bound di un problema di PL01
Definire un criterio di ordinamento delle formulazioni di un problema di PL01
Ricerca Operativa 2

Lezione 13 di 48
Il problema di localizzazione degli impianti
Metodo branch and bound
Problemi di PL01 – Metodi di soluzione
Branch and bound - Generalità
Branch and bound – Struttura del metodo (branch)
Branch and bound – Struttura del metodo (bound)
Branch and bound – Struttura del metodo (efficienza)
Branch and bound – Strategia di soluzione 1/3
Branch and bound – Strategia di soluzione 2/3
Branch and bound – Strategia di soluzione 3/3
3. Determinare la soluzione ottima del problema ottenuto con un cambio della
funzione obiettivo del sottoproblema (𝑆𝑆𝑖𝑖 , 𝑐𝑐)

Si definisca una funzione obiettivo 𝑓𝑓 𝑥𝑥 : 𝑆𝑆 → ℝ diversa da quella originaria


𝑧𝑧 𝑥𝑥 = 𝑐𝑐 𝑇𝑇 𝑥𝑥 tale che

• 𝑓𝑓 𝑥𝑥 ≤ 𝑐𝑐 𝑇𝑇 𝑥𝑥 per ogni 𝑥𝑥 ∈ 𝑆𝑆𝑖𝑖


• minimizzare 𝑓𝑓(𝑥𝑥) sull’insieme dei vincoli che definiscono 𝑆𝑆𝑖𝑖 sia più facile

Per definizione se ottimizziamo la nuova funzione obiettivo 𝑓𝑓 𝑥𝑥 sulla regione


ammissibile 𝑆𝑆𝑖𝑖 il valore ottimo del problema rappresenta un lower bound per il
sottoproblema (𝑆𝑆𝑖𝑖 , 𝑐𝑐)

min 𝑓𝑓 𝑥𝑥 𝑧𝑧 𝐶𝐶
𝑥𝑥 ∈ 𝑆𝑆𝑖𝑖
Branch and bound – Strategia di soluzione – Esempio 1/4
Branch and bound – Strategia di soluzione – Esempio 2/4
Branch and bound – Strategia di soluzione – Esempio 3/4
2. Determinare la soluzione ottima del rilassamento della formulazione del
sottoproblema (𝑆𝑆𝑖𝑖 , 𝑐𝑐) significa rilassare un sottoinsieme di vincoli, ad esempio
quelli che implicano che se un cliente viene assegnato a un sito, il sito deve
essere attivo

min � 𝑥𝑥𝑗𝑗 + � 𝑦𝑦𝑖𝑖𝑖𝑖


𝑗𝑗∈𝑉𝑉1 𝑖𝑖∈𝑉𝑉2 ,𝑗𝑗∈𝑉𝑉1

� 𝑦𝑦𝑖𝑖𝑖𝑖 = 1 𝑖𝑖 ∈ 𝑉𝑉2
𝑗𝑗∈𝑉𝑉1

𝑥𝑥𝑗𝑗 , 𝑦𝑦𝑖𝑖𝑖𝑖 ∈ {0,1} 𝑖𝑖 ∈ 𝑉𝑉2 , 𝑗𝑗 ∈ 𝑉𝑉1


Branch and bound – Strategia di soluzione – Esempio 4/4
Branch and bound – Strategia di separazione 1/3
Dato un sottoproblema (𝑆𝑆𝑖𝑖 , 𝑐𝑐) in 𝐿𝐿, la strategia di separazione determina come
partizionare l’insieme delle soluzioni ammissibili in due o più sottoinsiemi,
generando due o più sottoproblemi, qualora non si sia riusciti a chiudere il
problema (𝑆𝑆𝑖𝑖 , 𝑐𝑐)

Supponiamo che applicando una delle possibili strategie di soluzione viste in


precedenza, venga determinato un lower bound 𝐿𝐿𝐿𝐿𝑖𝑖 per il problema (𝑆𝑆𝑖𝑖 , 𝑐𝑐) in
corrispondenza di una soluzione 𝑥𝑥 𝑅𝑅 del rilassamento

Supponiamo inoltre che sia nota una soluzione ammissibile 𝑥𝑥̅ ∈ 𝑆𝑆 del problema
con valore 𝑈𝑈𝑈𝑈 = 𝑧𝑧̅ = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅

a. se 𝐿𝐿𝐿𝐿𝑖𝑖 > 𝑈𝑈𝑈𝑈 allora possiamo chiudere il problema perché nessuna soluzione
ammissibile in 𝑆𝑆𝑖𝑖 avrà valore migliore di 𝑥𝑥̅ ∈ 𝑆𝑆

Il sottoproblema (𝑆𝑆𝑖𝑖 , 𝑐𝑐) viene rimosso dalla lista 𝐿𝐿 senza essere stato risolto
Branch and bound – Strategia di separazione 2/3
Branch and bound – Strategia di separazione 3/3
Branch and bound – Strategia di selezione
Dato un sottoproblema (𝑆𝑆𝑖𝑖 , 𝑐𝑐) in 𝐿𝐿, la strategia di selezione determina la gestione
della lista 𝐿𝐿. Sono possibili diverse strategie:

• calcolare i lower bound {𝐿𝐿𝐿𝐿1 , … , 𝐿𝐿𝐿𝐿|𝐿𝐿| } di tutti i sottoproblemi nella lista 𝐿𝐿 e


scegliere

• il sottoproblema con lower bound più basso nella lista 𝐿𝐿

OBIETTIVO – favorire la determinazione di soluzioni ammissibili


• il sottoproblema con lower bound più alto nella lista 𝐿𝐿

OBIETTIVO – favorire l’eliminazione del problema dalla lista


• scegliere il primo sottoproblema nella lista 𝐿𝐿 (priorità first in first out – FIFO)

• scegliere l’ultimo sottoproblema nella lista 𝐿𝐿 (priorità last in first out – LIFO)
Branch and bound – Diagramma di flusso
Conclusioni
In questa lezione abbiamo visto una metodologia generale di soluzione di problemi di PL01

Il metodo branch and bound è caratterizzato da due aspetti principali:

• decomporre il problema in sottoproblemi

• risolvere approssimativamente ciascun sottoproblema, valutando di volta la possibilità di un’ulteriore


decomposizione

Il metodo si articola nella scelta e sviluppo di tre principali strategie

1. strategia di soluzione per la risoluzione approssimativa di un sottoproblema

2. strategia di separazione per la decomposizione di un sottoproblema

3. strategia di selezione per la scelta del prossimo sottoproblema da risolvere


Ricerca Operativa 2

Lezione 13 di 48
Il problema di localizzazione degli impianti
Applicazione branch and bound
Problemi di PL01 – Metodo branch and bound
Dato un generico problema di Programmazione Lineare {0,1} (PL01) di
minimizzazione caratterizzato da un insieme delle soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛
e da un vettore di costo c ∈ ℝ𝑛𝑛

min 𝑐𝑐 𝑇𝑇 𝑥𝑥
(PL01)
𝑥𝑥 ∈ 𝑆𝑆

un metodo di soluzione è il metodo branch and bound

• il problema viene decomposto ricorsivamente in una partizione di problemi tali


che l’insieme delle soluzioni dei sottoproblemi generati sia più piccolo di 𝑆𝑆

• ciascuno dei sottoproblemi generati viene risolto in maniera approssimata,


determinando opportuni limiti inferiori che permettano di volta in volta di
decidere se Il sottoproblema può essere eliminato senza essere risolto oppure
se va decomposto ulteriormente
Esempio di applicazione del metodo branch and bound
Si consideri il seguente problema di Programmazione Lineare {0,1} già visto nella
lezione 12

min −𝑥𝑥2 + 12
−2𝑥𝑥1 + 2𝑥𝑥2 ≤ 3
(PL01)
3𝑥𝑥1 + 4𝑥𝑥2 ≤ 6
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}

Applichiamo il metodo branch and bound a questo semplice esempio

• Strategia di soluzione – risoluzione del rilassamento lineare di (PL01)

• Strategia di separazione – scelta della componente più frazionaria

• Strategia di selezione - FIFO


Inizializzazione e selezione del primo problema
Prima iterazione – Soluzione del problema corrente
Prima iterazione – Separazione del problema corrente
Prima iterazione – Separazione del problema corrente
Prima iterazione – Rimozione del problema corrente
Seconda iterazione – Soluzione del problema corrente
Terza iterazione – Selezione e soluzione del problema
Terza iterazione – Soluzione del problema corrente
Terza iterazione – Aggiornamento della lista
Conclusione
In questa lezione abbiamo visto l’applicazione del metodo branch and bound a un
semplice problema di PL01 in 2 variabili

Nelle prossime attività di studio verranno proposti problemi in 3 e 4 variabili che


potranno essere agevolmente risolti dallo studente una volta stabilite le strategie
di soluzione, separazione e selezione viste nella lezione precedente e nella
lezione presente

Nella prossima lezione verranno invece illustrati problemi di PL01 che possono
essere risolti con il metodo branch and bound
Ricerca Operativa 2

Lezione 9 di 48
Il problema di localizzazione degli impianti
Metodo branch and bound
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 13 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di (PL01) in due
dimensioni

min −4𝑥𝑥1 + 𝑥𝑥2


2𝑥𝑥1 − 𝑥𝑥2 ≥ 0
(PL01)
𝑥𝑥1 − 𝑥𝑥2 ≤ 0.5
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di (PL01) in due
dimensioni

min 𝑥𝑥1
𝑥𝑥1 + 𝑥𝑥2 ≥ 0.5
(PL01)
𝑥𝑥1 + 3𝑥𝑥2 ≤ 2
𝑥𝑥2 ≤ 1
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di (PL01) in due
dimensioni

min −2𝑥𝑥1
𝑥𝑥1 − 𝑥𝑥2 ≥ 0
(PL01)
𝑥𝑥1 ≤ 0
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}
Ricerca Operativa 2

Lezione 13 di 48
Il problema di localizzazione degli impianti
Domande aperte
Descrivere la metodologia branch and bound per la soluzione di un problema di
PL01
Descrivere le possibili strategie di soluzione per il metodo branch and bound per
la soluzione di un problema di PL01
Descrivere le possibili strategie di separazione per il metodo branch and bound
per la soluzione di un problema di PL01
Descrivere le possibili strategie di selezione per il metodo branch and bound per
la soluzione di un problema di PL01
Descrivere il diagramma di flusso del metodo branch and bound per la soluzione
di un problema di PL01
Ricerca Operativa 2

Lezione 14 di 48
Il problema di localizzazione degli impianti
Applicazione branch and bound
Problemi di PL01 – Metodo branch and bound
Il metodo branch and bound è caratterizzato da due aspetti principali:

• decomporre il problema in sottoproblemi

• risolvere approssimativamente ciascun sottoproblema, valutando di volta la


possibilità di un’ulteriore decomposizione

In questa lezione applichiamo il metodo a un caso particolare di problemi di PL01


caratterizzati da 𝑛𝑛 variabili di decisione in {0,1} e da un solo vincolo lineare nelle
variabili di decisione

min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛
Applicazione branch and bound – Strategia di soluzione 1/3
Applichiamo il metodo branch and bound a questo tipo di problema con le
seguenti scelte:

• Strategia di soluzione – soluzione esatta del rilassamento lineare (RL)

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑇𝑇
(PL01) 𝑎𝑎 𝑥𝑥 ≥ 𝑏𝑏 (RL) 𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛

1. Ordinare gli indici delle variabili {1, . . , 𝑛𝑛} in ordine crescente di rapporto
costo/ingombro
𝑐𝑐𝑖𝑖1 𝑐𝑐𝑖𝑖2 𝑐𝑐𝑖𝑖𝑛𝑛
{𝑖𝑖1 , . . , 𝑖𝑖𝑛𝑛 }: ≤ ≤⋯≤
𝑎𝑎𝑖𝑖1 𝑎𝑎𝑖𝑖2 𝑎𝑎𝑖𝑖𝑛𝑛
Applicazione branch and bound – Strategia di soluzione 2/3
• Strategia di soluzione – soluzione esatta del rilassamento lineare (RL)

2. Determinare l’indice 𝑖𝑖ℎ ∈ {1, . . , 𝑛𝑛} tale che


ℎ−1

� 𝑎𝑎𝑖𝑖𝑗𝑗 ≤ 𝑏𝑏
𝑗𝑗=1

� 𝑎𝑎𝑖𝑖𝑗𝑗 > 𝑏𝑏
𝑗𝑗=1

3. Porre 4. Calcolare il limite inferiore


1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 < 𝑖𝑖ℎ
ℎ−1 𝑛𝑛
1
𝑥𝑥𝑖𝑖𝑘𝑘 = � (𝑏𝑏 − � 𝑎𝑎𝑖𝑖𝑗𝑗 )
∗ 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 = 𝑖𝑖ℎ 𝐿𝐿𝐿𝐿 = 𝑐𝑐 𝑇𝑇 𝑥𝑥 ∗ = � 𝑐𝑐𝑖𝑖 𝑥𝑥𝑖𝑖∗
𝑎𝑎𝑖𝑖𝑗𝑗
𝑗𝑗=1 𝑖𝑖=1
0 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 > 𝑖𝑖ℎ
Applicazione branch and bound – Strategia di soluzione 3/3
• Strategia di soluzione – data la soluzione esatta 𝑥𝑥 ∗ del rilassamento lineare
(RL), qualora 𝑥𝑥 ∗ ∉ {0,1}𝑛𝑛 possiamo facilmente calcolare una soluzione
ammissibile 𝑥𝑥̅ per il problema (PL01) a partire dalla soluzione del rilassamento
lineare

1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 < 𝑖𝑖ℎ


ℎ−1 1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 ≤ 𝑖𝑖ℎ
1 𝑥𝑥𝑖𝑖𝑘𝑘 = �
𝑥𝑥𝑖𝑖𝑘𝑘 = � (𝑏𝑏 − � 𝑎𝑎𝑖𝑖𝑗𝑗 )
∗ 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 = 𝑖𝑖ℎ
𝑎𝑎𝑖𝑖𝑗𝑗 0
𝑗𝑗=1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 > 𝑖𝑖ℎ
0 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 > 𝑖𝑖ℎ
𝑛𝑛 𝑛𝑛
𝐿𝐿𝐿𝐿 = 𝑐𝑐 𝑇𝑇 𝑥𝑥 ∗ = � 𝑐𝑐𝑖𝑖 𝑥𝑥𝑖𝑖∗ 𝑈𝑈𝐵𝐵 = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅ = � 𝑐𝑐𝑖𝑖 𝑥𝑥�𝑖𝑖
𝑖𝑖=1 𝑖𝑖=1
Applicazione branch and bound – Strategia di separazione
• Strategia di separazione – se 𝑥𝑥 ∗ ∈ {0,1}𝑛𝑛 allora il problema può essere chiuso,
altrimenti è possibile separare il problema 𝑃𝑃𝑖𝑖 scegliendo l’unica componente
frazionaria 𝑥𝑥𝑖𝑖∗ℎ definendo i due poliedri 𝑃𝑃𝑖𝑖1 e 𝑃𝑃𝑖𝑖2
min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ 𝑏𝑏
𝑃𝑃𝑖𝑖1 = 𝑃𝑃𝑖𝑖 ∩ {𝑥𝑥𝑖𝑖ℎ = 0} = {𝑥𝑥 ∈ 𝑃𝑃𝑖𝑖 : 𝑥𝑥𝑖𝑖ℎ = 0}
𝑥𝑥𝑖𝑖ℎ = 0
𝑥𝑥 ∈ {0,1}𝑛𝑛

min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ 𝑏𝑏
𝑃𝑃𝑖𝑖2 = 𝑃𝑃𝑖𝑖 ∩ {𝑥𝑥𝑖𝑖ℎ = 1} = {𝑥𝑥 ∈ 𝑃𝑃𝑖𝑖 : 𝑥𝑥𝑖𝑖ℎ = 1}
𝑥𝑥𝑖𝑖ℎ = 1
𝑥𝑥 ∈ {0,1}𝑛𝑛
• Strategia di selezione - FIFO
Esempio di applicazione del metodo branch and bound
Si consideri il seguente problema di PL01
min 3𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3
4𝑥𝑥1 + 3𝑥𝑥2 + 5𝑥𝑥3 ≥ 6
𝑥𝑥 ∈ {0,1}3

con 𝑐𝑐 𝑇𝑇 = (3,2,6) vettore dei costi e soluzioni in 𝑆𝑆 definito come l’insieme dei punti
in {0,1}3 che appartengono al poliedro P = {𝑥𝑥 ≥ 03 : 4𝑥𝑥1 + 3𝑥𝑥2 + 5𝑥𝑥3 ≥ 6}

Applichiamo il metodo branch and bound definito nelle slide precedenti con le
relative strategie di soluzione, separazione e selezione
Esempio 1/6
𝑃𝑃0 = 𝑃𝑃𝑃𝑃𝑃𝑃, 𝐿𝐿 = {𝑃𝑃0 }, 𝑖𝑖 = 0 Soluzione del problema
𝑥𝑥̅ =?, 𝑈𝑈𝑈𝑈 = ?
𝑃𝑃0 → 𝐿𝐿𝐿𝐿0
Calcolo lower bound LB0 min 3 x1 + 2 x2 + 6 x3
4 x1 + 3 x2 + 5 x3 ≥ 6
03 ≤ x ≤ 13
1. Ordina in ordine crescente i rapporti costo/ingombro
𝐿𝐿 = ∅?
2 3 6
{2,1,3} : ≤ ≤
No 3 4 5 x = (1,1,0)T
2. Determina l’indice jh = 1 ( h = 2) UB = 5
h −1
b − ∑ a jk
3
3. Poni x * = ( ,1,0)T = ( ,1,0)T
k =1
a jh 4
Selezione del problema 13
𝑃𝑃0 ∈ 𝐿𝐿 4. Determina il lower bound LB0 = cTx* =
4
Esempio 2/6

13
LB0 = LB0 ≥ 5 ?
4
No
Decomponi P0 No
x* ∈ S ?
min 3 x1 + 2 x2 + 6 x3
4 x1 + 3 x2 + 5 x3 ≥ 6
(𝑃𝑃01 ) x1 = 0 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃0 }
x ∈ {0,1}3 𝑖𝑖 = 1
min 3 x1 + 2 x2 + 6 x3
4 x1 + 3 x2 + 5 x3 ≥ 6
Selezione del problema
(𝑃𝑃02 ) x1 = 1 𝐿𝐿 = ∅ ? scegli P1 = 𝑃𝑃01 in 𝐿𝐿
x ∈ {0,1}3
No
𝐿𝐿 = 𝐿𝐿 ∪ {𝑃𝑃01 , 𝑃𝑃02 }
Esempio 3/6
Soluzione del problema
LB1 ≥ 5 ?
P1 = 𝑃𝑃01 → 𝐿𝐿𝐿𝐿1

Calcolo lower bound LB1 min 3 x1 + 2 x2 + 6 x3 Sì


4 x1 + 3 x2 + 5 x3 ≥ 6
(P1) x1 = 0 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃01 }
𝑖𝑖 = 2
03 ≤ x ≤ 13
1. Ordina in ordine crescente i rapporti costo/ingombro
2 6
{2,3} : ≤
3 5
𝐿𝐿 = ∅ ?
2. Determina l’indice jh = 3 ( h = 2)

3 No
3. Poni x = (0,1, )T
*

5
28 Selezione del problema
4. Determina il lower bound LB1 = cTx* = scegli P2 = 𝑃𝑃02 in 𝐿𝐿
5
Esempio 4/6
Soluzione del problema
LB2 ≥ 5 ?
P2 = 𝑃𝑃02 → 𝐿𝐿𝐿𝐿2

Calcolo lower bound LB2 3 + min 2 x2 + 6 x3 No

(P2) 3 x2 + 5 x3 ≥ 2
0 2 ≤ x ≤ 12 No
1. Ordina in ordine crescente i rapporti costo/ingombro x* ∈S?
2 6
{2,3} : ≤
3 5
2. Determina l’indice jh = 2 ( h = 1)

2
3. Poni x* = (1, ,0)T
3
13
4. Determina il lower bound LB2 = cTx* =
3
Esempio 5/6
𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃02 } No Selezione del problema
Decomponi P2 = 𝑃𝑃02 𝐿𝐿 = ∅ ?
𝑖𝑖 = 3 scegli P3 = 𝑃𝑃21 in 𝐿𝐿
3 + min 2 x2 + 6 x3
3 x2 + 5 x3 ≥ 2
(𝑃𝑃21 )
x2 = 0 Soluzione del problema
x ∈ {0,1}2 P3 = 𝑃𝑃21 → 𝐿𝐿𝐿𝐿3
3 + min 2 x2 + 6 x3 3 + min 6 x3
Calcolo lower bound LB3
3 x2 + 5 x3 ≥ 2 (P3) 5 x3 ≥ 2
(𝑃𝑃22 )
x2 = 1 0 ≤ x3 ≤ 1
x ∈ {0,1}2 2
3. Poni x = (1,0, )
* T

𝐿𝐿 = 𝐿𝐿 ∪ {𝑃𝑃21 , 𝑃𝑃22 } 5
27
4. Determina il lower bound LB3 =
5
Esempio 6/6
Sì 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃21 } No
27
LB3 ≥ 5 ? 𝐿𝐿 = ∅ ? Selezione del problema
LB3 = 𝑖𝑖 = 4
5 scegli P4 = 𝑃𝑃22 in 𝐿𝐿

𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃22 } Sì Soluzione del problema


LB4 ≥ 5 ? P4 = 𝑃𝑃22 → 𝐿𝐿𝐿𝐿4
𝑖𝑖 = 5
Calcolo lower bound LB4 3 + 2 + min 6 x3
(P4) 5 x3 ≥ −1
𝐿𝐿 = ∅ ? 0 ≤ x3 ≤ 1

3. Poni x* = (1,1,0)T
No STOP
x = (1,1,0)T 4. Determina il lower bound LB4 =5
soluzione ottima
UB = 5 valore ottimo
Conclusione
In questa lezione abbiamo illustrato l’applicazione del metodo branch and bound a
un caso molto particolare di problemi PL01 caratterizzati da 𝑛𝑛 variabili di decisione
in {0,1} e da un solo vincolo lineare nelle variabili di decisione

Un’applicazione interessante di questa classe di problemi sono i problemi di


knapsack che vedremo nella lezione successiva.
Ricerca Operativa 2

Lezione 14 di 48
Il problema di localizzazione degli impianti
Knapsack binario
Introduzione
Abbiamo visto nella scorsa lezione l’applicazione del metodo branch and bound a
problemi di PL01 caratterizzati da 𝑛𝑛 variabili di decisione in {0,1} e da un solo
vincolo lineare nelle variabili di decisione.
min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛

Abbiamo visto che, in questo caso, la determinazione della soluzione del


rilassamento lineare del problema ci permette agevolmente di determinare anche
una soluzione ammissibile con la quale inizializzare il metodo.

In questa lezione vedremo un’applicazione molto comune introducendo il


problema di knapsack binario
Knapsack binario
Si considerino 𝑛𝑛 potenziali progetti sui quali investire. Ciascun progetto 𝑖𝑖 è
caratterizzato da un costo 𝑎𝑎𝑖𝑖 e da un ritorno 𝑐𝑐𝑖𝑖 . Ciascun progetto può essere
realizzato oppure no, ma non può essere realizzato parzialmente. Si desidera
massimizzare il ritorno complessivo dei progetti realizzati tenendo conto che il
budget disponibile per la realizzazione di tutti i progetti è 𝑏𝑏.

Definiamo 𝑛𝑛 variabili di decisione in {0,1} che rappresentino l’evento “realizzare un


progetto”

1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑖𝑖 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑖𝑖 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟𝑟


𝑥𝑥𝑖𝑖 = �
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎
Knapsack binario – Formulazione naturale
Il vincolo logico sul budget disponibile può essere espresso calcolando il costo di
realizzazione come somma dei costi dei singoli progetti moltiplicati per la
variabile di decisione relativa al progetto
𝑎𝑎1 𝑥𝑥1 + 𝑎𝑎2 𝑥𝑥2 + ⋯ + 𝑎𝑎𝑛𝑛 𝑥𝑥𝑛𝑛 ≤ 𝑏𝑏
La funzione obiettivo può essere analogamente espressa calcolando il beneficio
da massimizzare come la somma dei ritorni dei singoli progetti moltiplicati per la
variabile di decisione relativa al progetto
max 𝑐𝑐1 𝑥𝑥1 + 𝑐𝑐2 𝑥𝑥2 + ⋯ + 𝑐𝑐𝑛𝑛 𝑥𝑥𝑛𝑛

In forma matriciale, la formulazione naturale del problema di knapsack binario è


la seguente
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛
Knapsack binario – Definizioni
Il nome (problema dello zaino) deriva dalla descrizione tradizionale del problema,
nella quale il budget 𝑏𝑏 rappresenta il peso massimo che uno zaino può portare e
dati 𝑛𝑛 oggetti ciascuno caratterizzato da un peso 𝑎𝑎𝑖𝑖 e da un valore 𝑐𝑐𝑖𝑖 .

L’obiettivo è massimizzare il valore degli oggetti che si riescono a portare nello


zaino senza eccederne la capacità e tenendo conto del vincolo di indivisibilità
degli 𝑛𝑛 oggetti.

• Se ciascuno degli 𝑛𝑛 oggetti può o meno comparire nello zaino, allora definiamo
𝑛𝑛 variabili di decisione in {0,1}
• Se ciascuno degli 𝑛𝑛 oggetti può comparire un numero qualsiasi di volte, allora
definiamo 𝑛𝑛 variabili di decisione intere in ℕ
• Se ciascuno degli 𝑛𝑛 oggetti può comparire un certo numero di volte, allora
definiamo 𝑛𝑛 variabili di decisione intere in ℕ vincolate superiormente
𝑥𝑥𝑖𝑖 ≤ 𝑑𝑑𝑖𝑖
Knapsack binario – Metodo branch and bound
Applichiamo il metodo branch and bound al problema di knapsack binario con 𝑛𝑛
variabili di decisione in {0,1}
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛

Notiamo che il problema di knapsack può essere visto come un problema di PL01
caratterizzato da 𝑛𝑛 variabili di decisione in {0,1} e da un solo vincolo lineare nelle
variabili di decisione. Tenuto conto dell’equivalenza dei due problemi
max 𝑐𝑐 𝑇𝑇 𝑥𝑥 − min −𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏 −𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ −𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛 𝑥𝑥 ∈ {0,1}𝑛𝑛
stabiliamo le strategie del metodo branch and bound consequentemente
Knapsack binario – Strategia di soluzione 1/3
Definiamo le strategie caratterizzanti il metodo branch and bound per il problema
di knapsack binario con 𝑛𝑛 variabili di decisione in {0,1}
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛
• Strategia di soluzione – soluzione esatta del rilassamento lineare (RL)
max 𝑐𝑐 𝑇𝑇 𝑥𝑥 max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑇𝑇
(KP01) 𝑎𝑎 𝑥𝑥 ≤ 𝑏𝑏 (RL) 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ {0,1}𝑛𝑛 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛
1. Ordinare gli indici delle variabili {1, . . , 𝑛𝑛} in ordine decrescente di rapporto
costo/ingombro
𝑐𝑐𝑖𝑖1 𝑐𝑐𝑖𝑖2 𝑐𝑐𝑖𝑖𝑛𝑛
{𝑖𝑖1 , . . , 𝑖𝑖𝑛𝑛 }: ≥ ≥⋯≥
𝑎𝑎𝑖𝑖1 𝑎𝑎𝑖𝑖2 𝑎𝑎𝑖𝑖𝑛𝑛
Knapsack binario – Strategia di soluzione 2/3

2. Determinare l’indice 𝑖𝑖ℎ ∈ {1, . . , 𝑛𝑛} tale che


ℎ−1

� 𝑎𝑎𝑖𝑖𝑗𝑗 ≥ 𝑏𝑏
𝑗𝑗=1

� 𝑎𝑎𝑖𝑖𝑗𝑗 < 𝑏𝑏
𝑗𝑗=1

3. Porre 4. Calcolare il limite superiore


1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 < 𝑖𝑖ℎ 𝑛𝑛
ℎ−1
1
𝑥𝑥𝑖𝑖𝑘𝑘 = � (𝑏𝑏 − � 𝑎𝑎𝑖𝑖𝑗𝑗 ) 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 = 𝑖𝑖ℎ
∗ 𝑈𝑈𝐵𝐵 = 𝑐𝑐 𝑇𝑇 𝑥𝑥 ∗ = � 𝑐𝑐𝑖𝑖 𝑥𝑥𝑖𝑖∗
𝑎𝑎𝑖𝑖𝑗𝑗
𝑗𝑗=1 𝑖𝑖=1
0 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 > 𝑖𝑖ℎ
Knapsack binario – Strategia di soluzione 3/3
• Strategia di soluzione – data la soluzione esatta 𝑥𝑥 ∗ del rilassamento lineare
(RL), qualora 𝑥𝑥 ∗ ∉ {0,1}𝑛𝑛 possiamo facilmente calcolare una soluzione
ammissibile 𝑥𝑥̅ per il problema (PL01) a partire dalla soluzione del rilassamento
lineare

1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 < 𝑖𝑖ℎ


ℎ−1 1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 < 𝑖𝑖ℎ
1 𝑥𝑥𝑖𝑖𝑘𝑘 = �
𝑥𝑥𝑖𝑖𝑘𝑘 = � (𝑏𝑏 − � 𝑎𝑎𝑖𝑖𝑗𝑗 )
∗ 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 = 𝑖𝑖ℎ
𝑎𝑎𝑖𝑖𝑗𝑗 0
𝑗𝑗=1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 ≥ 𝑖𝑖ℎ
0 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 > 𝑖𝑖ℎ
𝑛𝑛 𝑛𝑛
𝑈𝑈𝐵𝐵 = 𝑐𝑐 𝑇𝑇 𝑥𝑥 ∗ = � 𝑐𝑐𝑖𝑖 𝑥𝑥𝑖𝑖∗ 𝐿𝐿𝐵𝐵 = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅ = � 𝑐𝑐𝑖𝑖 𝑥𝑥�𝑖𝑖
𝑖𝑖=1 𝑖𝑖=1
Knapsack binario – Strategia di separazione
• Strategia di separazione – se 𝑥𝑥 ∗ ∈ {0,1}𝑛𝑛 allora il problema può essere chiuso,
altrimenti è possibile separare il problema 𝑃𝑃𝑖𝑖 scegliendo l’unica componente
frazionaria 𝑥𝑥𝑖𝑖∗ℎ definendo i due poliedri 𝑃𝑃𝑖𝑖1 e 𝑃𝑃𝑖𝑖2
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑃𝑃𝑖𝑖1 = 𝑃𝑃𝑖𝑖 ∩ {𝑥𝑥𝑖𝑖ℎ = 0} = {𝑥𝑥 ∈ 𝑃𝑃𝑖𝑖 : 𝑥𝑥𝑖𝑖ℎ = 0}
𝑥𝑥𝑖𝑖ℎ = 0
𝑥𝑥 ∈ {0,1}𝑛𝑛

max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑃𝑃𝑖𝑖2 = 𝑃𝑃𝑖𝑖 ∩ {𝑥𝑥𝑖𝑖ℎ = 1} = {𝑥𝑥 ∈ 𝑃𝑃𝑖𝑖 : 𝑥𝑥𝑖𝑖ℎ = 1}
𝑥𝑥𝑖𝑖ℎ = 1
𝑥𝑥 ∈ {0,1}𝑛𝑛
• Strategia di selezione – FIFO
Knapsack binario – Esempio di soluzione 1/9
Si consideri il seguente problema di PL01
max 4𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3 + 𝑥𝑥4
3𝑥𝑥1 + 𝑥𝑥2 + 8𝑥𝑥3 + 2𝑥𝑥4 ≤ 10
𝑥𝑥 ∈ {0,1}4

con 𝑐𝑐 𝑇𝑇 = (4,2,6,1) vettore dei costi e soluzioni in 𝑆𝑆 definito come l’insieme dei
punti in {0,1}4 che appartengono al poliedro

𝑃𝑃 = {𝑥𝑥 ≥ 04 : 3𝑥𝑥1 + 𝑥𝑥2 + 8𝑥𝑥3 + 2𝑥𝑥4 ≤ 10}

Applichiamo il metodo branch and bound definito nelle slide precedenti con le
relative strategie di soluzione, separazione e selezione
Knapsack binario – Esempio di soluzione 2/9
𝑃𝑃0 = 𝑃𝑃𝑃𝑃𝑃𝑃, 𝐿𝐿 = {𝑃𝑃0 }, 𝑖𝑖 = 0 Soluzione del problema
𝑥𝑥̅ =?, 𝐿𝐿𝐿𝐿 = ?
𝑃𝑃0 → 𝑈𝑈𝐵𝐵0
Calcolo upper bound UB0 max 4𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3 + 𝑥𝑥4
3𝑥𝑥1 + 𝑥𝑥2 + 8𝑥𝑥3 + 2𝑥𝑥4 ≤ 10
04 ≤ 𝑥𝑥 ≤ 14
1. Ordina in ordine decrescente i rapporti costo/ingombro
𝐿𝐿 = ∅?
4 6 1
{2,1,3,4} : 2 ≥ ≥ ≥
3 8 2 x = (1,1,0,0)
T
No
2. Determina l’indice jh = 3 ( h = 3) LB = 6
h −1
b − ∑ a jk
6
3. Poni x * = (1,1, ,0)T = (1,1, ,0)T
k =1
a jh 8
Selezione del problema 21
𝑃𝑃0 ∈ 𝐿𝐿 4. Determina l’upper bound UB0 = cTx* =
2
𝐿𝐿 = {𝑃𝑃01 , 𝑃𝑃02 }, 𝑖𝑖 = 1
Knapsack binario – Esempio di soluzione 3/9 𝑥𝑥̅ = (1,1,0,0), 𝐿𝐿𝐿𝐿 = 6

21
UB0 = UB0 ≤ 6?
2
No
Decomponi P0 No
x* ∈ S ?
max 4𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3 + 𝑥𝑥4
3𝑥𝑥 + 𝑥𝑥2 + 8𝑥𝑥3 + 2𝑥𝑥4 ≤ 10
(𝑃𝑃01 ) 1 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃0 }
𝑥𝑥3 = 0
𝑥𝑥 ∈ {0,1}4 𝑖𝑖 = 1

max 4𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3 + 𝑥𝑥4


2
3𝑥𝑥1 + 𝑥𝑥2 + 8𝑥𝑥3 + 2𝑥𝑥4 ≤ 10 Selezione del problema
(𝑃𝑃0 ) 𝑥𝑥 = 1 𝐿𝐿 = ∅ ?
3 scegli P1 = 𝑃𝑃01 in 𝐿𝐿
𝑥𝑥 ∈ {0,1}4
No
𝐿𝐿 = 𝐿𝐿 ∪ {𝑃𝑃01 , 𝑃𝑃02 }
𝐿𝐿 = {𝑃𝑃02 }, 𝑖𝑖 = 2
Knapsack binario – Esempio di soluzione 4/9 𝑥𝑥̅ = (1,1,0,1), 𝐿𝐿𝐿𝐿 =7

Soluzione del problema


P1 = 𝑃𝑃01 → 𝑈𝑈𝐵𝐵1 UB1 ≤ 6 ?

Calcolo upper bound UB1 max 4𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3 + 𝑥𝑥4 No


3𝑥𝑥1 + 𝑥𝑥2 + 8𝑥𝑥3 + 2𝑥𝑥4 ≤ 10
(P1) 𝑥𝑥 = 0
3 x* ∈ S ?
04 ≤ 𝑥𝑥 ≤ 14
1. Ordina in ordine decrescente i rapporti costo/ingombro

4 1
{2,1,4} : 2 ≥ ≥
3 2 Aggiornamento
2. Determina l’indice jh = 4 ( h = 4) 𝑥𝑥̅ = (1,1,0,1), LB = 7

3. Poni x* = (1,1,0,1)T
𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃1 }
4. Determina l’upper bound UB2 = cTx* = 7 𝑖𝑖 = 2
𝐿𝐿 = {𝑃𝑃02 }, 𝑖𝑖 = 2
Knapsack binario – Esempio di soluzione 5/9 𝑥𝑥̅ = (1,1,0,1), 𝐿𝐿𝐿𝐿 =7

Soluzione del problema


P2 = 𝑃𝑃02 → 𝑈𝑈𝐵𝐵2
𝐿𝐿 = ∅ ?
Calcolo upper bound UB2 6 + max 4𝑥𝑥1 + 2𝑥𝑥2 + 𝑥𝑥4
No 3𝑥𝑥1 + 𝑥𝑥2 + 2𝑥𝑥4 ≤ 2
(P2)
03 ≤ 𝑥𝑥 ≤ 13
Selezione del problema
scegli P2 = 𝑃𝑃02 in 𝐿𝐿 1. Ordina in ordine decrescente i rapporti costo/ingombro
4 1
{2,1,4} : 2 ≥ ≥
3 2
UB2 ≤ 7 ?
2. Determina l’indice jh = 1 ( h = 2)

No 1
3. Poni x* = ( ,1,1,0)T
3
28
4. Determina l’upper bound UB2 = cTx* =
3
𝐿𝐿 = {𝑃𝑃21 , 𝑃𝑃22 }, 𝑖𝑖 =3
Knapsack binario – Esempio di soluzione 6/9 𝑥𝑥̅ = (1,1,0,1), 𝐿𝐿𝐿𝐿 =7

Decomponi P2 No
x* ∈ S ?
6 + max 4𝑥𝑥1 + 2𝑥𝑥2 + 𝑥𝑥4
(𝑃𝑃21 ) 3𝑥𝑥1 + 𝑥𝑥2 + 2𝑥𝑥4 ≤ 2 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃2 }
𝑥𝑥1 = 0
𝑥𝑥 ∈ {0,1}3 𝑖𝑖 = 3

6 + max 4𝑥𝑥1 + 2𝑥𝑥2 + 𝑥𝑥4


3𝑥𝑥 + 𝑥𝑥2 + 2𝑥𝑥4 ≤ 2 Selezione del problema
(𝑃𝑃22 ) 1 𝐿𝐿 = ∅ ?
𝑥𝑥1 = 1 scegli P3 = 𝑃𝑃21 in 𝐿𝐿
𝑥𝑥 ∈ {0,1}3
No
𝐿𝐿 = 𝐿𝐿 ∪ {𝑃𝑃21 , 𝑃𝑃22 }
𝐿𝐿 =
Knapsack binario – Esempio di soluzione 7/9 {𝑃𝑃21 , 𝑃𝑃22 , 𝑃𝑃31 , 𝑃𝑃32 }
Soluzione del problema UB3 ≤ 7? 𝑖𝑖 =3
𝑥𝑥̅ = (1,1,0,1),
P3 = 𝑃𝑃21 → 𝑈𝑈𝐵𝐵3 𝐿𝐿𝐿𝐿 =7
No
Calcolo upper bound UB3 6 + max 2 x2 + x4
x* ∈ S ?
(P3) x2 + 2 x4 ≤ 2
0 2 ≤ x ≤ 12 No
1. Ordina in ordine decrescente i rapporti costo/ingombro Decomponi P3
1 6 + max 2𝑥𝑥2 + 𝑥𝑥4
{2,4} : 2 ≥
2 (𝑃𝑃31 ) 𝑥𝑥2 + 2𝑥𝑥4 ≤ 2
𝑥𝑥4 = 0
2. Determina l’indice jh = 4 ( h = 2) 𝑥𝑥 ∈ {0,1}2
6 + max 2𝑥𝑥2 + 𝑥𝑥4
1 𝑥𝑥2 + 2𝑥𝑥4 ≤ 2
3. Poni x* = (0,1,1, )T 2
(𝑃𝑃3 ) 𝑥𝑥 = 1
2 4
17 𝑥𝑥 ∈ {0,1}2
4. Determina l’upper bound UB3 = cTx* =
2 𝐿𝐿 = 𝐿𝐿 ∪ {𝑃𝑃31 , 𝑃𝑃32 }
𝐿𝐿 = {𝑃𝑃31 , 𝑃𝑃32 }, 𝑖𝑖 =4
Knapsack binario – Esempio di soluzione 8/9 𝑥𝑥̅ = (1,1,0,1), 𝐿𝐿𝐿𝐿 =7

𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃3 } Soluzione del problema


𝐿𝐿 = ∅ ? P4 = 𝑃𝑃22 → 𝑈𝑈𝐵𝐵4
𝑖𝑖 = 4

No Calcolo upper bound UB4 6 + 4 + max 2𝑥𝑥2 + 𝑥𝑥4


(P4) 𝑥𝑥2 + 2𝑥𝑥4 ≤ −1
02 ≤ 𝑥𝑥 ≤ 12

Selezione del problema Il problema è VUOTO: UB4 = −∞


scegli P4 = 𝑃𝑃22 in 𝐿𝐿

Selezione del problema No 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃4 } Sì


𝐿𝐿 = ∅ ? 𝑖𝑖 = 5 UB4 ≤ 7 ?
scegli P5 = 𝑃𝑃31 in 𝐿𝐿
𝐿𝐿 = {𝑃𝑃32 }, 𝑖𝑖 = 6
𝑥𝑥̅ = (0,1,1,0), 𝐿𝐿𝐿𝐿 =8
Soluzione del problema
P5 = 𝑃𝑃31 → 𝑈𝑈𝐵𝐵5 UB5 ≤ 7 ?
Calcolo upper bound UB5 6 + max 2𝑥𝑥2
(P5) 𝑥𝑥2 ≤ 2 No
0 ≤ 𝑥𝑥2 ≤ 1
x* ∈ S ?
x* = (0,1,1,0)T UB5 = cTx* =8

𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃31 } Aggiornamento
𝐿𝐿 = ∅ ? 𝑖𝑖 = 6 𝑥𝑥̅ = (0,1,1,0), LB = 8

Soluzione del problema


No
P6 = 𝑃𝑃32 → 𝑈𝑈𝐵𝐵6
Selezione del problema
Calcolo upper bound UB6 6 + 1 + max 2𝑥𝑥2
scegli P6 = 𝑃𝑃32 in 𝐿𝐿 (P6) 𝑥𝑥2 ≤ 0
x* = (0,0,1,1)T UB5 = cTx* =7 0 ≤ 𝑥𝑥2 ≤ 1
𝐿𝐿 = ∅, 𝑖𝑖 = 7
Knapsack binario – Esempio di soluzione 9/9 𝑥𝑥̅ = (0,1,1,0), 𝐿𝐿𝐿𝐿 =8

STOP
Sì 𝐿𝐿 = 𝐿𝐿 \ {𝑃𝑃6 } No
x = (0,1,1,0)T
UB6 ≤ 7 ? 𝑖𝑖 = 7 𝐿𝐿 = ∅ ?
soluzione ottima
LB = 8 valore ottimo
Conclusione
In questa lezione abbiamo illustrato l’applicazione del metodo branch and bound
al problema di knapsack binario caratterizzato da 𝑛𝑛 variabili di decisione in {0,1} e
da un solo vincolo lineare nelle variabili di decisione

Il metodo branch and bound con la strategia di soluzione vista (soluzione ottima
del rilassamento lineare) è uno dei metodi più usati per risolvere questa famiglia di
problemi
Ricerca Operativa 2

Lezione 14 di 48
Il problema di localizzazione degli impianti
Approfondimento
Approfondimento su testo
Studiare le sezioni 4.4 e 4.4.1 del libro di testo, con l’esclusione della sottosezione
4.4.2.

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 14 di 48
Il problema di localizzazione degli impianti
Domande aperte
Descrivere una possibile strategia di soluzione per i problemi di PL01
caratterizzati da 𝑛𝑛 variabili decisionali in {0,1}𝑛𝑛 e da un vincolo lineare di
disuguglianza
Descrivere i problemi di knapsack con particolare attenzione al problema di
knapsack binario
Descrivere una strategia di soluzione esatta per il problema di knapsack binario
Ricerca Operativa 2

Lezione 15 di 48
Il problema di localizzazione degli impianti
Esercizi proposti
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di (PL01) in due
dimensioni

min 𝑥𝑥1 + 2𝑥𝑥2


𝑥𝑥1 + 𝑥𝑥2 ≥ 0.5
(PL01)
𝑥𝑥2 ≤ 1
𝑥𝑥1 , 𝑥𝑥2 ∈ {0,1}
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di (PL01) in
cinque variabili di decisione

min 2𝑥𝑥1 + 𝑥𝑥2 + 7𝑥𝑥3 + 11𝑥𝑥4 + 𝑥𝑥5


(PL01)
12𝑥𝑥1 + 3𝑥𝑥2 + 2𝑥𝑥3 + 4𝑥𝑥4 + 7𝑥𝑥5 ≥ 15
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 , 𝑥𝑥5 ∈ {0,1}
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di (PL01) in
cinque variabili di decisione

min 3𝑥𝑥1 + 2𝑥𝑥2 + 6𝑥𝑥3 + 𝑥𝑥4


(PL01)
2𝑥𝑥1 + 6𝑥𝑥2 + 5𝑥𝑥3 + 4𝑥𝑥4 ≥ 11
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
Esercizio proposto
Si risolva con il metodo branch and bound il seguente problema di knapsack
binario

max 10𝑥𝑥1 + 15𝑥𝑥2 + 25𝑥𝑥3


(PL01)
20𝑥𝑥1 + 10𝑥𝑥2 + 25𝑥𝑥3 ≤ 30
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 ∈ {0,1}
Ricerca Operativa 2

Lezione 16 di 48
Clustering dei dati
Introduzione
Introduzione 1/2
In questa parte di corso introdurremo il clustering dei dati e illustreremo alcune famiglie di
problemi di programmazione matematica particolarmente rilevanti nella soluzione di
clustering dei dati.

Con il termine «clustering» generalmente si identifica la partizione dei dati in gruppi


omogenei di dati, detti «cluster».

Nella prima parte della sezione dedicata al clustering dei dati, verranno presentate le
definizioni preliminari relative al clustering dei dati e verrà illustrato il principale framework
applicativo, noto come apprendimento automatico (machine learning).

Dopo aver illustrato alcune applicazioni, illustreremo alcuni problemi di programmazione


matematica ampiamente usatI in ambito machine learning per la soluzione di clustering dei
dati
Introduzione 2/2
Il termine «clustering» viene utilizzato in diverse comunità scientifiche per descrivere la
classe di metodologie per la classificazione di osservazioni (descritte da dati a disposizione)
in gruppi quando non si abbia a disposizione una definizione a priori dei gruppi in cui è
possibile la classificazione. Per questo, la classificazione delle osservazioni in gruppi si dice
non supervisionata per distinguerla dal caso in cui vi sia una definizione, esplicita o implicita
nei dati, delle possibili classi in cui organizzare le osservazioni.

Ciascuna comunità ha adottato diverse terminologie e ipotesi su ciascuna componente di


processo di clustering e sul contesto di applicazione delle suddette metodologie. In questo
corso, adotteremo la terminologia della teoria dei grafi, della geometria analitica e della
programmazione matematica.
Apprendimento automatico 1/2
Apprendimento automatico 2/2
Estrazione di informazione da un sistema fisico 1/2
Estrazione di informazione da un sistema fisico 2/2
Estrazione della conoscenza e big data
L’apprendimento automatico è l’insieme di modelli, tecniche e algoritmi sul quale si fonda il
processo di estrazione della conoscenza da grandi quantità di dati.

Oggi, data l’enorme eterogeneità di dati disponibili da diverse fonti (sensori, sistemi
informativi, reti eterogenee, etc.), sono essenziali algoritmi di apprendimento automatico che
siano efficaci ed efficienti nell’analizzare grandi volumi di dati

Il ruolo della ricerca operativa è fornire modelli e tecniche di programmazione matematica


per analizzare e organizzare efficientemente grandi quantità di dati eterogenei provenienti
da fonti sempre più distribuite e in grado di supportare la raccolta massiva di dati a diverse
frequenze di aggiornamento
Clustering – Alcune applicazioni 1/2
Clustering – Alcune applicazioni 2/2
Information retrieval – Processo di raccolta e recupero automatico di informazioni
(es. libri e riviste di una biblioteca, classificazioni automatica di documenti web)

Segmentazione di grandi database in gruppi omogenei di dati

Analisi descrittiva in sistemi Customer Relationship Management (CRM)

• Customer profiling

• Customer retention

• Market segmentation

• …
CONCLUSIONE

In questa lezione abbiamo definito a grandi linee cosa significa clusterizzare i dati,
qual è il suo ruolo nell’apprendimento automatico non supervisionato e alcune
applicazioni

Nella prossima lezione daremo alcune definizioni preliminari di distanza per iniziare a
identificare le proprietà che deve avere la soluzione di un problema di clustering dei
dati
Ricerca Operativa 2

Lezione 16 di 48
Clustering dei dati
Definizioni preliminari
Introduzione
Nella scorsa lezione abbiamo introdotto il concetto generale di clustering dei dati.
Con questo termine generalmente si identifica la partizione dei dati in gruppi
omogenei di dati, detti «cluster» o categorie

In questa lezione, verranno presentate le definizioni preliminari relative al


clustering dei dati utili a definire i problemi di programmazione matematica
ampiamente usato in ambito machine learning per la soluzione di clustering dei
dati
DEFINIZIONE DEL PROBLEMA
DEFINIZIONE DEL PROBLEMA

Un cluster è un gruppo di oggetti simili. Se gli oggetti sono punti in uno spazio di
distanza allora possiamo dare la seguente definizione:

Un cluster è un sottoinsieme di punti tali che la distanza tra due punti


qualsiasi del cluster è minore della distanza tra un qualsiasi punto del
cluster e un punto esterno al cluster.

Sia X uno spazio di oggetti e 𝑑𝑑 una distanza definita su X. Una distanza è una
relazione a valori non negativi definita sullo spazio cartesiano X x X che gode di
alcune proprietà

𝑑𝑑: X x X → ℝ+

Indicheremo con (X, 𝑑𝑑) lo spazio di distanza definito da 𝑑𝑑 una distanza definita su X
DISTANZE 1/5

Una distanza 𝑑𝑑 definita sull’insieme X è una relazione a valori non negativi che gode
delle seguenti proprietà:

• 𝑑𝑑 è simmetrica 𝑑𝑑 𝑖𝑖, 𝑗𝑗 = 𝑑𝑑 𝑗𝑗, 𝑖𝑖 per ogni coppia (𝑖𝑖, 𝑗𝑗) di elementi in X

• 𝑑𝑑 assume valore nullo 𝑑𝑑 𝑖𝑖, 𝑖𝑖 = 0 per ogni coppia (𝑖𝑖, 𝑗𝑗) di elementi con 𝑖𝑖 = 𝑗𝑗 in X

Una semimetrica 𝑑𝑑 è una distanza che soddisfa la diseguaglianza triangolare:

𝑑𝑑 𝑖𝑖, 𝑗𝑗 ≤ 𝑑𝑑 𝑖𝑖, 𝑘𝑘 + 𝑑𝑑 𝑘𝑘, 𝑗𝑗

per ogni terna (𝑖𝑖, 𝑗𝑗, 𝑘𝑘) di elementi in X

Una metrica 𝑑𝑑 è una semimetrica che soddisfa l’ulteriore proprietà:

• 𝑑𝑑 𝑖𝑖, 𝑗𝑗 = 0 ⇒ 𝑖𝑖 = 𝑗𝑗
DISTANZE 2/5

Essendo una distanza una relazione tra l’insieme X e se stesso, possiamo


rappresentarla come un grafo non orientato completo G(X, A) dove X è l’insieme dei
nodi e A = X x X è l’insieme degli archi.
La distanza 𝑑𝑑 è la funzione che assegna a ogni arco (𝑖𝑖, 𝑗𝑗) del grafo G(X, A)
un’etichetta 𝑑𝑑 𝑖𝑖, 𝑗𝑗 ≥ 0 non negativa
DISTANZE 3/5

Affinché sia una distanza, l’etichetta 𝑑𝑑 𝑖𝑖, 𝑗𝑗 ≥ 0 deve rispettare le due proprietà
• 𝑑𝑑 𝑖𝑖, 𝑗𝑗 = 𝑑𝑑 𝑗𝑗, 𝑖𝑖 per ogni coppia (𝑖𝑖, 𝑗𝑗) di elementi in X
• 𝑖𝑖 = 𝑗𝑗 ⇒ 𝑑𝑑 𝑖𝑖, 𝑗𝑗 = 0 per ogni coppia (𝑖𝑖, 𝑗𝑗) di elementi X
Quindi, non sono distanze le seguenti
DISTANZE 4/5

Affinché sia una semimetrica, deve valere la diseguaglianza triangolare per gni terna
(𝑖𝑖, 𝑗𝑗, 𝑘𝑘) di elementi in X
Le seguenti distanze sono semimetriche

v2
2
v1 2 v2
2
v3
3 0 v1 3
4
v3
1
v4 4
DISTANZE 5/5

Affinché sia una metrica, la semimetrica non deve assumere valore nullo per coppie
(𝑖𝑖, 𝑗𝑗) di elementi in X tali che 𝑖𝑖 = 𝑗𝑗
Le seguenti semimetriche sono metriche

v2
2
v1 3 v2
2
v3
3 1 v1 3
4
v3
1
v4 4
NORME
Se X è uno spazio vettoriale definito sul campo dei reali ℝ, una funzione
∙ : X → ℝ+
si definisce norma se:
• || v || = 0 ⇔ v = 0 per ogni v in X
• || λ v || = | λ | || v || per ogni λ in ℝ, v in X
• || vi + vj || ≤ || vi || + || vj || per ogni vi ,vj in X

Si definisce spazio normato la coppia (X, || • ||). A uno spazio normato (X, || • ||)
può essere associata la topologia metrica indotta dalla norma || • || tramite
l’identità:

d ⋅ (v i , v j ) = v i - v j per ogni vi ,vj in X

d ∙ è detta metrica norma indotta dalla norma ∙


TEOREMA DELLA METRICA NORMA 1/2

Una metrica norma è una metrica

Dimostrazione
Sia || • || : X → ℝ+ una norma definita su X. La funzione

d ⋅ (v i , v j ) = v i - v j

a) è simmetrica

d ⋅ (v i , v j ) = v i - v j = − 1(v j - v i ) = | −1 | v j - v i = v j - v i = d ⋅ (v j , v i )

|| λ v || = | λ | || v ||
TEOREMA DELLA METRICA NORMA 2/2

Una metrica norma è una metrica

Dimostrazione
b) d assume valore nullo per ogni coppia (i,i) in X
|| v || = 0 ⇔ v = 0

d ⋅ (v i , v i ) = v i - v i = 0 = 0

c) d soddisfa la diseguaglianza triangolare per ogni terna (i,j,k) in X

d ⋅ (v i , v j ) = v i - v j = v i - v j + v k − v k = (v i − v k ) + ( v k − v j ) ≤
≤ (v i − v k ) + ( v k − v j ) = d ⋅ (v i , v k ) + d ⋅ (v j , v k )
|| vi + vj || ≤ || vi || + || vj ||
METRICHE NORMA

Una classe molto nota di norme è rappresentata dalle norme ℓ𝑝𝑝 definite
come segue per 𝑝𝑝 intero non negativo

m 1

v p = (∑ | v k | ) p p

k =1

Consideriamo lo spazio normato (ℝ𝑚𝑚 , || • ||p) dove || • ||p è la norma ℓ𝑝𝑝

m 1

d ⋅ (v i , v j ) = v i - v j = (∑ | v ik - v | )
j p p
k
p p
k =1
METRICHE NORMA – ESEMPI
• p = 1 – distanza di Manhattan o metrica “city-block”
m
d ⋅ (v , v ) = ∑ | v ik - v kj |
i j
1
k =1

• p = 2 – distanza Euclidea
m
d ⋅ (v , v ) =
2
i j
∑| v
k =1
i
k - v kj |2

• p = ∞ – distanza di Lagrange

d ⋅ (v i , v j ) = v i - v j = max | v ik - v kj |
∞ ∞ k =1,..., m

• p = 0 – distanza di Hamming

d ⋅ (v i , v j ) = v i - v j =| { k = 1,..., m : | v ik - v kj | > 0} |
0 0
CONCLUSIONE

In questa lezione abbiamo dato alcune definizioni preliminari di distanza,


semimetrica e metrica. Abbiamo inoltre visto una famiglia molto nota di metriche, le
cosiddette metriche norme.

Nella definizione dei problemi di clustering dei dati le distanze e le metriche giovano
un ruolo fondamentale, perché come vedremo è su tali concetti che si fonda quello
principale nel clustering: la similarità.

Nella prossima lezione vedremo lo schema generale di una procedura di clustering e


capiremo il ruolo della misura di similarità.
Ricerca Operativa 2

Lezione 16 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Stabilire se la relazione rappresentata dal seguente grafo è una distanza, una
semimetrica o una metrica. Motivare la risposta

v2
5

v1 13
2
v3

0
7 3

v4
Esercizio proposto
Stabilire per quali valori dei parametri 𝑥𝑥, 𝑦𝑦 e 𝑧𝑧 la relazione rappresentata dal
seguente grafo è una semimetrica.

v2
𝑥𝑥

v1 4
2
v3

0
𝑦𝑦 𝑧𝑧

v4
Esercizio proposto
Appliare la metrica norma ℓ1 ai seguenti punti

1 2 0 1
𝑣𝑣 1 = 0 , 𝑣𝑣 2 = 0 , 𝑣𝑣 3 = 2 e 𝑣𝑣 4 = 1
0 3 0 1
Esercizio proposto
Appliare la metrica norma ℓ0 ai seguenti punti

2 3 1 0
1 4 1
𝑣𝑣 1 = −1 , 𝑣𝑣 2 = , 𝑣𝑣 3 = e 𝑣𝑣 4 =
0 2 2 0
1 0 1 1
Ricerca Operativa 2

Lezione 16 di 48
Clustering dei dati
Domande aperte
Definire il problema di clustering dei dati
Determinare l’espressione della metrica norma ℓ3
Dimostrare che una metrica norma è una metrica
Ricerca Operativa 2

Lezione 17 di 48
Clustering dei dati
Metodologia generale di soluzione
Introduzione
Nella scorsa lezione abbiamo introdotto il clustering dei dati e abbiamo richiamato
alcune definizioni ed esempi utili di distanze e metriche

Abbiamo inoltre visto alcuni esempi di applicazioni di clustering dei dati

In questa lezione verrà illustrata una metodologia di soluzione dei problemi di


clustering dei dati. Nelle lezioni successive verranno illustrati alcuni problemi di
ampio interesse applicativo in cui modelli e metodi della ricerca operativa sono
fondamentali per la soluzione di problemi di grandi dimensioni

La metodologia generale di soluzione prevede la disponibilità di:

• dati da organizzare, possibilmente in grandi volumi

• specifici algoritmi di soluzione per il problema di clustering


Metodologia generale di clustering dei dati 1/2
Metodologia generale di clustering dei dati 2/2
Astrazione sui dati
Astrazione sui dati – Esempi
Clustering partizionale – Rappresentazione dei dati
Rappresentazione dei dati – Matrice delle istanze
Un’osservazione (o istanza) 𝑣𝑣 è rappresentata da un vettore di 𝑚𝑚 caratteristiche (o
attributi).
𝑣𝑣1
𝑣𝑣2
𝑣𝑣 = ⋮
𝑣𝑣𝑚𝑚

L’insieme X = {𝑣𝑣 1 , 𝑣𝑣 2 , … , 𝑣𝑣 𝑛𝑛 } delle istanze viene rappresentato come una matrice


𝑛𝑛 × 𝑚𝑚 detta matrice delle istanze.

(𝑣𝑣 1 )𝑇𝑇 𝑣𝑣11 𝑣𝑣21 … 𝑣𝑣𝑚𝑚


1

(𝑣𝑣 2 )𝑇𝑇 𝑣𝑣12 𝑣𝑣22 … 𝑣𝑣 2


X= = 𝑚𝑚
⋮ ⋮ ⋮ ⋮ ⋮
(𝑣𝑣 )𝑇𝑇
𝑛𝑛
𝑣𝑣1𝑛𝑛 𝑣𝑣2𝑛𝑛 … 𝑣𝑣 𝑛𝑛
𝑚𝑚
Rappresentazione dei dati – Caratteristiche
Un’istanza può rappresentare un oggetto fisico oppure un concetto astratto

Una caratteristica o attributo che descrive un’istanza può essere di diversi tipi:

 quantitativo
• continuo (es. peso, larghezza, temperatura)
• discreto (es. età di un individuo)
• intervallo (es. durata di un evento)

 qualitativo
• nominale (es. colori)
• ordinato (es. intensità di un suono, valutazione di una sensazione)

Sono inoltre possibili altre rappresentazioni delle istanze


Rappresentazione dei dati – Matrice delle relazioni 1/2
Sia X = {𝑣𝑣 1 , 𝑣𝑣 2 , … , 𝑣𝑣 𝑛𝑛 } un insieme di 𝑛𝑛 istanze. Indichiamo con

𝑉𝑉𝑛𝑛 = 1,2, … , 𝑛𝑛

l’insieme degli indici da 1 a 𝑛𝑛.

Una qualsiasi relazione 𝑟𝑟: X × X → ℝ definita sullo spazio X × X delle coppie di


istanze può essere rappresentata come una matrice R 𝑛𝑛 × 𝑛𝑛 detta matrice delle
relazioni.

𝑟𝑟11 𝑟𝑟12 … 𝑟𝑟1𝑛𝑛


𝑟𝑟21 𝑟𝑟22 … 𝑟𝑟2𝑛𝑛
R= ⋮ ⋮ ⋮ ⋮
𝑟𝑟𝑛𝑛1 𝑟𝑟𝑛𝑛2 … 𝑟𝑟𝑛𝑛𝑛𝑛
Rappresentazione dei dati – Matrice delle relazioni 2/2
Nel clustering dei dati si considerano relazioni simmetriche (𝑟𝑟𝑖𝑖𝑖𝑖 = 𝑟𝑟𝑗𝑗𝑖𝑖 per ogni
𝑖𝑖, 𝑗𝑗 ∈ 𝑉𝑉𝑛𝑛 ) quindi la matrice delle relazioni R è simmetrica
𝑟𝑟11 𝑟𝑟12 … 𝑟𝑟1𝑛𝑛
𝑟𝑟12 𝑟𝑟22 … 𝑟𝑟2𝑛𝑛
R= ⋮ ⋮ ⋮ ⋮
𝑟𝑟1𝑛𝑛 𝑟𝑟2𝑛𝑛 … 𝑟𝑟𝑛𝑛𝑛𝑛

In questo corso, considereremo particolare:

 relazioni di similarità (più 𝑣𝑣 𝑖𝑖 e 𝑣𝑣 𝑗𝑗 sono simili, più 𝑟𝑟𝑖𝑖𝑖𝑖 assume valori elevati)

 relazioni di dissimilarità (più 𝑣𝑣 𝑖𝑖 e 𝑣𝑣 𝑗𝑗 sono simili, più 𝑟𝑟𝑖𝑖𝑖𝑖 assume valori bassi)

Le relazioni di dissimilarità più usate nel clustering sono le distanze e,


in particolare le metriche
CONCLUSIONE
Ricerca Operativa 2

Lezione 17 di 48
Clustering dei dati
Approfondimento
Approfondimento su testo
Studiare le sezioni 1 e 2 delle dispense “Data Clustering”

La dispense “Data Clustering” è reso disponibile per consultazione telematica dal


docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 17 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Definire la matrice delle istanze relativa all’insieme di dati di seguito riportati

2 0 1 1
𝑣𝑣 1 = 1 , 𝑣𝑣 2 = 3 , 𝑣𝑣 3 = −2 e 𝑣𝑣 4 = 0
0 −1 3 4
Esercizio proposto
Definire la matrice delle istanze relativa all’insieme di dati di seguito riportati

S= { 1,1,3,alto;
1,0,3,alto;
1,-1,8,basso;
2,4,2,alto;
1,0,7,basso}
Esercizio proposto
Definire la matrice delle relazioni indotta dalla metrica norma ℓ2 sul seguente
insiemi di vettori
2 0 1 1
𝑣𝑣 1 = 1 , 𝑣𝑣 2 = 3 , 𝑣𝑣 3 = −2 e 𝑣𝑣 4 = 0
0 −1 3 4
Esercizio proposto
Definire la matrice delle relazioni indotta dalla metrica norma ℓ∞ sul seguente
insiemi di vettori

0 −2 0 2
0 1 3
𝑣𝑣 1 = 1 , 𝑣𝑣 2 = , 𝑣𝑣 3 = e 𝑣𝑣 4 =
0 0 0 1
2 0 1 0
Ricerca Operativa 2

Lezione 17 di 48
Clustering dei dati
Domande aperte
Illustrare la procedura generale di soluzione di un problema di clustering dei dati
Definire il ruolo della misura di similarità nella metodologia generale di soluzione
del problema di clustering dei dati
Definire il ruolo dell’algoritmo di clustering e dell’astrazione sui dati nella
metodologia generale di soluzione del problema di clustering dei dati
Ricerca Operativa 2

Lezione 18 di 48
Clustering dei dati
Clustering partizionale
Introduzione
Nelle scorse lezioni abbiamo introdotto il clustering dei dati e la metodologia
generale di soluzione. La metodologia prevede la definizione di una misura di
similarità e un algoritmo di clustering.

In questa lezione vedremo come il problema di clustering è un problema di


ottimizzazione, che può essere formulato come problema di Programmazione
Matematica e risolto tramite adeguate tecniche di Ricerca Operativa.

Per la formulazione matematica del problema seguiremo la stessa metodologia


adottata per i problemi di localizzazione.
Clustering partizionale
Rappresentazione dei dati
Clustering di un grafo
Clique – Esempi 1/2 5
1 4
Si consideri il grafo non orientato 𝐺𝐺(𝑁𝑁, 𝐴𝐴)
con 𝑁𝑁 = 1,2,3,4,5,6 e l’insieme 𝐴𝐴 degli
6
archi rappresentato in figura a destra

2
3
5
1 4 L’insieme 𝑉𝑉1 = 1,2,3,4 ⊂ 𝑁𝑁 definisce una
clique del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴).
6
Infatti, comunque si scelgano due nodi in 𝑉𝑉1

2 l’arco che li connette appartiene ad 𝐴𝐴


3
Clique – Esempi 2/2
Clustering partizionale – Insieme delle soluzioni
Sia X = {𝑣𝑣 1 , 𝑣𝑣 2 , … , 𝑣𝑣 𝑛𝑛 } l’insieme delle istanze. Il problema di clustering partizionale
di tipo hard è il problema di determinare una partizione delle istanze X sulla base
di una misura di similarità.

Il problema può essere quindi definito come il problema di determinare un


clustering partizionale P(𝐺𝐺) dei nodi del grafo delle istanze 𝐺𝐺 𝑁𝑁, 𝐴𝐴 .

Come possiamo rappresentare matematicamente le soluzioni di un problema di


clustering partizionale?

Caratterizziamo le componenti del clustering, che abbiamo visto essere le


clique del grafo, per determinare la partizione ottima dei nodi del grafo delle
istanze
Clustering partizionale – Insieme di taglio 1/3
Clustering partizionale – Insieme di taglio 2/3
Clustering partizionale – Insieme di taglio 3/3
Clustering partizionale – Insieme multi-taglio
Clustering partizionale – Insieme partizione 1/3
Clustering partizionale – Insieme partizione 2/3
In generale, dati 𝑘𝑘 sottoinsiemi disgiunti 𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘 ⊆ 𝑁𝑁 dei nodi del grafo delle
istanze, indichiamo con 𝐸𝐸(𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘 ) l’unione degli 𝑘𝑘 insiemi 𝐸𝐸 𝑉𝑉1 , . . , 𝐸𝐸(𝑉𝑉𝑘𝑘 )

𝑉𝑉2

𝑘𝑘
𝐸𝐸 𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘 = � 𝐸𝐸(𝑉𝑉ℎ ) 𝑉𝑉3
ℎ=1

𝑉𝑉1

Se 𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘 sono componenti di una partizione dei nodi del grafo in 𝑘𝑘 sottoinsiemi,
allora 𝐸𝐸(𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘 ) è detto insieme partizione del grafo nei sottoinsiemi 𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘
Clustering partizionale – Insieme partizione 3/3
A ogni soluzione del problema di clustering partizionale, e quindi a ogni clustering
𝑃𝑃(𝐺𝐺) = {𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), è possibile associare un insieme partizione
𝐸𝐸(𝑃𝑃 𝐺𝐺 ) del clustering definito come insieme partizione del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) negli
elementi della partizione 𝑃𝑃 𝐺𝐺
𝐸𝐸 𝑃𝑃(𝐺𝐺) = 𝐸𝐸 𝑉𝑉1 , … , 𝑉𝑉𝑘𝑘
𝑉𝑉2 𝛿𝛿 𝑉𝑉1 , 𝑉𝑉2 , 𝑉𝑉3 , 𝑉𝑉4
Essendo 𝐸𝐸 𝑃𝑃(𝐺𝐺) ⊆ 𝐴𝐴 possiamo definire il vettore
di incidenza 𝑥𝑥𝑃𝑃 ∈ {0,1}𝑚𝑚 dell’insieme partizione 𝑉𝑉3
𝐸𝐸(𝑃𝑃 𝐺𝐺 )

1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑖𝑖 ∈ 𝐸𝐸(𝑃𝑃 𝐺𝐺 )


𝑥𝑥𝑖𝑖𝑖𝑖 = �
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑉𝑉1 𝑉𝑉4
Clustering partizionale – Partizione di nodi e archi 1/2
Clustering partizionale – Partizione di nodi e archi 2/2
CONCLUSIONE

In questa lezione abbiamo iniziato a dare tutte le definizioni utili per definire l’insieme
delle soluzioni ammissibili di un problema di clustering partizionale.

Nella prossima lezione definiremo tale insieme e modelleremo il problema come


problema di Programmazione Lineare {0,1} in modo da poter disporre di metodi, sia
euristici che esatti, della PL01 per la soluzione di problemi di grandi dimensioni,
come quelli che si affrontano nell’apprendimento automatico.
Ricerca Operativa 2

Lezione 18 di 48
Clustering dei dati
Insieme delle soluzioni
Introduzione
Nella precedente lezione abbiamo dato alcune definizioni preliminari di partizione
dei nodi e degli archi di un grafo non orientato. In questa lezione utilizzeremo
queste definizioni per definire l’insieme delle soluzioni ammissibili di un problema
di clustering partizionale.

Faremo riferimento alla metodologia generale di soluzione che prevede la


definizione di una misura di similarità e un algoritmo di clustering.
Clustering partizionale – Richiami
Clustering partizionale
Clustering partizionale – Insieme delle soluzioni
L’insieme 𝑆𝑆 delle soluzioni del problema di clustering di X è l’insieme dei
vettori di incidenza di tutte le possibili insiemi partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) del grafo
𝐺𝐺(𝑁𝑁, 𝐴𝐴) associato a X

S = {𝑥𝑥𝑝𝑝 ∈ 0,1 𝑚𝑚 : 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑 𝐸𝐸 𝑃𝑃 𝐺𝐺 }


𝑝𝑝

Supponiamo di voler determinare una partizione in 𝑘𝑘 cluster contenenti


ciascuno un egual numero di osservazioni. Se 𝑛𝑛 sono le osservazioni in X,
allora ciascun cluster dovrà contenere almeno 𝑠𝑠 elementi con
𝑛𝑛
𝑠𝑠 =
𝑘𝑘
Clustering partizionale – Vincolo di dimensione 1/2

Traduciamo questa specifica su ogni possibile insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) del grafo
𝐺𝐺 𝑁𝑁, 𝐴𝐴 . Partiamo da un caso molto semplice con 𝑛𝑛 = 3 e supponiamo di voler
determinare un solo cluster (𝑘𝑘 = 1): il parametro 𝑠𝑠 sarà pari a 3.
Consideriamo il nodo 𝑖𝑖. La stella 𝛿𝛿 𝑖𝑖 dovrà necessariamente contenere almeno
s−1=2
archi affinché il nodo 𝑖𝑖 appartenga a un cluster con almeno 𝑠𝑠 = 3 elementi.

Possiamo quindi scrivere il seguente vincolo


𝑗𝑗 sugli elementi dell’insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 )
𝑖𝑖 𝑉𝑉 con 𝑃𝑃 𝐺𝐺 = 𝑉𝑉 = {{𝑖𝑖, 𝑗𝑗, 𝑘𝑘}} e vettore di
incidenza 𝑥𝑥𝑃𝑃 ∈ {0,1}3
𝛿𝛿(𝑖𝑖)
𝑘𝑘 𝑠𝑠 = 3
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑘𝑘 ≥ 𝑠𝑠 − 1 ⇒ 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 2
Clustering partizionale – Vincolo di dimensione 2/2

Se vogliamo che la condizione valga per tutti gli elementi del clustering 𝑃𝑃 𝐺𝐺 = 𝑉𝑉 =
{{{𝑖𝑖, 𝑗𝑗, 𝑘𝑘}}, il vincolo sugli elementi dell’insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) va scritta per tutti i
nodi dell’insieme 𝑉𝑉

𝑗𝑗
𝑖𝑖 𝑉𝑉 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≥ 𝑠𝑠 − 1 ⇒ 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≥ 2
𝑥𝑥𝑖𝑖𝑘𝑘 + 𝑥𝑥𝑗𝑗𝑘𝑘 ≥ 𝑠𝑠 − 1 ⇒ 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≥ 2

𝛿𝛿(𝑖𝑖)
𝑘𝑘 𝑠𝑠 = 3

In generale, possiamo scrivere un vincolo di dimensione per ciascuno dei nodi che
rappresentano le osservazioni in X

� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 𝑠𝑠 − 1 ∀ 𝑖𝑖 ∈ 𝑁𝑁
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)
Clustering partizionale – Insieme delle soluzioni
L’insieme 𝑆𝑆 delle soluzioni del problema di clustering di X è l’insieme dei vettori di
incidenza di tutte le possibili insiemi partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) associato a X
che soddisfino tutti i vincoli di dimensione relativi ai nodi 𝑁𝑁 del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)

S = {𝑥𝑥𝑝𝑝 ∈ 0,1 𝑚𝑚 : 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑 𝐸𝐸 𝑃𝑃 𝐺𝐺 ,


𝑝𝑝

� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 𝑠𝑠 − 1 ∀ 𝑖𝑖 ∈ 𝑁𝑁 }
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)

In base al valore del parametro s l’insieme delle soluzioni del problema di clustering di
X cambia notevolmente

Si considerano in generale 4 possibili casi con relativi problemi di clustering


partizionale.
Clustering partizionale – Tipologie di problemi 1/3

S = {𝑥𝑥𝑝𝑝 ∈ 0,1 𝑚𝑚 : 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑 𝐸𝐸 𝑃𝑃 𝐺𝐺 ,


𝑝𝑝

� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 𝑠𝑠 − 1 ∀ 𝑖𝑖 ∈ 𝑁𝑁 }
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)

 se 𝑠𝑠 ≤ 1, S è l’insieme delle soluzioni del problema di partizione in


clique (CPP) dei nodi di un grafo

In questo caso, i vincoli di dimensione divengono inattivi. Infatti, per 𝑠𝑠 = 1 ,


abbiamo i vincoli

� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 0 ∀ 𝑖𝑖 ∈ 𝑁𝑁
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)

che sono automaticamente soddisfatti da qualsisi vettore 𝑥𝑥𝑝𝑝 ∈ 0,1 𝑚𝑚


Clustering partizionale – Tipologie di problemi 2/3

S = {𝑥𝑥𝑝𝑝 ∈ 0,1 𝑚𝑚 : 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑 𝐸𝐸 𝑃𝑃 𝐺𝐺 ,


𝑝𝑝

� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 𝑠𝑠 − 1 ∀ 𝑖𝑖 ∈ 𝑁𝑁 }
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)

 se 𝑠𝑠 > 1, S è l’insieme delle soluzioni del problema di partizione in


clique con vincolo di dimensione (CPPMIN)
In questo caso, i vincoli di dimensione sono attivi ed escludono dall’insieme delle
soluzioni ammissibili tutte le partizioni con elementi aventi meno di 𝑠𝑠 nodi
Clustering partizionale – Tipologie di problemi 2/3

S = {𝑥𝑥𝑝𝑝 ∈ 0,1 𝑚𝑚 : 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑 𝐸𝐸 𝑃𝑃 𝐺𝐺 ,


𝑝𝑝

� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 𝑠𝑠 − 1 ∀ 𝑖𝑖 ∈ 𝑁𝑁 }
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)

 se 𝑘𝑘 = 2, S è l’insieme delle soluzioni del problema di equipartizione

 se 𝑛𝑛 è multiplo di 𝑠𝑠 , S è l’insieme delle soluzioni del problema di


equipartizione in 𝑘𝑘 sottoinsiemi
In questo caso, i vincoli di dimensione sono attivi e possono essere soddisfatti
all’uguaglianza
∑x
ij∈δ(i)
ij ≥ s −1 → ∑x
ij∈δ(i)
ij = s − 1 ∀i ∈ N
CONCLUSIONE

In questa lezione abbiamo identificato l’insieme delle soluzioni ammissibili di un


problema di clustering partizionale. A ogni soluzione ammissibile è associato un
vettore di incidenza e l’insieme di questi vettori di incidenza rappresenta l’insieme
delle soluzioni ammissibili, che possono essere o meno soggette a vincoli di
dimensione.

Nella prossima lezione definiremo un primo criterio di ottimalità delle soluzioni


ammissibili e definiremo il problema di clustering partizionale come problema di
Programmazione Lineare {0,1}.
Ricerca Operativa 2

Lezione 18 di 48
Clustering dei dati
Clustering partizionale
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 18 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Si consideri il grafo in figura. Stabilire se l’insieme 𝑉𝑉 = {v 3 , v 4 , v 5 } è una clique del
grafo

5
1 4

2
3
Esercizio proposto
Si consideri il grafo in figura. Stabilire se l’insieme 𝑉𝑉 = {v 2 , v 3 , v 4 , v 6 } è una clique
del grafo

5
1 4

2
3
Esercizio proposto
Determinare l’insieme multi-taglio della partizione 𝑃𝑃 = 𝑉𝑉1 , 𝑉𝑉2 , 𝑉𝑉3 dove 𝑉𝑉1 =
v1 , v 2 , 𝑉𝑉2 = v 3 , 𝑉𝑉3 = {v 4 , v 5 }
v2

v1
v3

v4
v5
Esercizio proposto
Determinare l’insieme partizione della partizione 𝑃𝑃 = 𝑉𝑉1 , 𝑉𝑉2 , 𝑉𝑉3 dove 𝑉𝑉1 =
v1 , v 2 , 𝑉𝑉2 = v 3 , 𝑉𝑉3 = {v 4 , v 5 }
v2

v1
v3

v4
v5
Ricerca Operativa 2

Lezione 18 di 48
Clustering dei dati
Domande aperte
Dare la definizione di clustering partizionale e di partizione dei nodi di un grafo
Definire gli insiemi multi-taglio e partizione di una partizione dei nodi di un
generico grafo non orientato
Si consideri una generica partizione 𝑃𝑃(𝐺𝐺) = {𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } di un grafo non
orientato 𝐺𝐺 𝑁𝑁, 𝐴𝐴 . Siano 𝑥𝑥𝑃𝑃 e 𝑦𝑦𝑃𝑃 i vettori di incidenza dell’insieme multi-taglio e
dell’insieme partizione di 𝑃𝑃(𝐺𝐺).

Definiamo il vettore 𝑧𝑧𝑃𝑃 ∈ {0,1}𝑚𝑚 definito come


𝑧𝑧𝑃𝑃 = 𝑥𝑥𝑃𝑃 + 𝑦𝑦𝑃𝑃
Dire quanto valgono le componenti del vettore 𝑧𝑧𝑃𝑃
Ricerca Operativa 2

Lezione 19 di 48
Clustering dei dati
Formulazione matematica
Introduzione
Nella precedente lezione abbiamo definito l’insieme delle soluzioni ammissibili di
un problema di clustering partizionale.

L’insieme delle soluzioni è basato sulla definizione del vettore di incidenza di un


insieme partizione del grafo associato all’insieme delle osservazioni da
clusterizzate.

In base al valore del parametro relativo ai vincoli di dimensione, abbiamo


identificato quattro diversi problemi di clustering partizionale

• partizione in clique (CPP)


• partizione in clique con vincolo di dimensione (CPPMIN)
• problema di equipartizione
• problema di equipartizione in k sottoinsiemi
Clustering partizionale – Comparazione tra soluzioni 1/2
Abbiamo visto come a ogni soluzione del problema di clustering partizionale, e quindi
a ogni clustering 𝑃𝑃(𝐺𝐺) = {𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), è possibile associare un
sottoinsieme di archi detto insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) ⊆ 𝐴𝐴 del clustering definito come
insieme partizione del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) negli elementi della partizione 𝑃𝑃 𝐺𝐺
Date due soluzioni di clustering 𝑃𝑃1 𝐺𝐺 e𝑃𝑃2 𝐺𝐺 possiamo associarvi due distinti vettori
di incidenza 𝑥𝑥𝑃𝑃1 e 𝑥𝑥𝑃𝑃2
Come possiamo stabilire quale sia tra le due la migliore soluzione per il nostro
problema di clustering partizionale?
Richiamiamo la definizione di vettore di incidenza 𝑥𝑥𝑃𝑃 ∈ {0,1}𝑚𝑚 dell’insieme partizione
𝐸𝐸(𝑃𝑃 𝐺𝐺 )
1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑖𝑖 ∈ 𝐸𝐸(𝑃𝑃 𝐺𝐺 )
𝑥𝑥𝑖𝑖𝑖𝑖 = � 𝑝𝑝𝑝𝑝𝑝𝑝 𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 ∈ 𝐴𝐴
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎
Clustering partizionale – Comparazione tra soluzioni 2/2
Esempio – Sia X = { v1, v2, v3, v4, v5, v6, v7, v8 } e s = 2
Definiamo il grafo G(N,A) associato all’insieme X, dove
N = { 1, 2, 3, 4, 5, 6, 7, 8 } con n = 8, e A = { ij | 1 ≤ i < j ≤ 8 }.
Consideriamo i due clustering P1(G)= { V1, V2, V3 } e P2(G)= { V4, V5, V6 }

6 7 6 7
V6
3 4 3 4
8 8
V2 V3
5 V5 5
1 1
V1
2 In 𝑃𝑃1 𝐺𝐺 i punti appartenenti allo 2
V4
stesso cluster sono più vicini
Clustering partizionale – Il ruolo della matrice delle relazioni
Nell’osservazione precedente abbiamo tenuto conto di una prossimità spaziale per
indurre il concetto di vicinanza tra le osservazioni rappresentate tramite grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) .

Come abbiamo visto, le osservazioni possono rappresentare entità fisiche oppure


astratte. Sulle osservazioni possiamo in generale definire una relazione che
rappresenti una misura di similarità o di distanza, come illustrato nelle lezioni 16 e 17.

L’insieme 𝑆𝑆 delle soluzioni del problema di clustering di X è l’insieme dei vettori di


incidenza di tutte le possibili insiemi partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) associato a X
e non tiene conto della relazione definita tra le osservazioni.

La matrice delle relazioni contiene le informazioni relative alla similarità o alla


dissimilarità tra i punti. Vediamo come introdurre questo elemento nella funzione
obiettivo della formulazione del problema di clustering partizionale.
Clustering partizionale – Costo di un cluster 1/2

Sia D la matrice 𝑛𝑛 × 𝑛𝑛 delle relazioni di dissimilarità o distanza (più 𝑖𝑖 e


𝑗𝑗 sono simili, più 𝑑𝑑𝑖𝑖𝑖𝑖 è basso)
Assegniamo a ogni arco 𝑖𝑖𝑗𝑗 di 𝐴𝐴 il peso 𝑑𝑑𝑖𝑖𝑖𝑖
6 1
7 6 7
1 V6
1
1 1 3 1 4 1 3 1
4
8 8
1 1 3 3
V2 2

5 5
1 1.5 V3 1 3
2 V5 2
V1 V4
Clustering partizionale – Costo di un cluster 2/2
Assegniamo a ogni arco 𝑖𝑖𝑖𝑖 di 𝐴𝐴 il peso 𝑑𝑑𝑖𝑖𝑖𝑖

Assegniamo a ogni cluster 𝑉𝑉 ⊆ 𝑁𝑁 un costo dato


𝑐𝑐 𝑉𝑉 = � 𝑑𝑑𝑖𝑖𝑗𝑗
dalla somma dei pesi degli archi in E(𝑉𝑉)
𝑖𝑖𝑗𝑗∈𝐸𝐸(𝑉𝑉)

Assegniamo a ogni partizione 𝑃𝑃(𝐺𝐺) = {𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) un costo che è
dato dalla somma dei costi degli elementi della partizione
𝑘𝑘

𝑐𝑐 𝑃𝑃 𝐺𝐺 = 𝑐𝑐({𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 }) = � 𝑐𝑐(𝑉𝑉𝑖𝑖 )


𝑖𝑖=1
𝑉𝑉1
6 1
7
1 1.5
1
1
2 𝑐𝑐 𝑉𝑉1 = 1.5 𝑐𝑐 𝑉𝑉2 = 1 + 1 + 1 = 3
8
𝑉𝑉2
Clustering partizionale – Costo di una soluzione
Il peso di 𝑃𝑃1 𝐺𝐺 è minore del peso di 𝑃𝑃2 𝐺𝐺 𝑃𝑃1 𝐺𝐺 è migliore di 𝑃𝑃2 𝐺𝐺

c(P1(G)) = 1.5 + 3 + 3 = 7.5 < c(P2(G)) = 15


c(V5 ) = 11
c(V2 ) = 3
6 1
7 6 7 c(V6 ) = 1
1 V6
c(V3 ) = 3 1
1 1 3 1 4 1 3 1
4
8 8
1 1 3 3
V2 2

5 5
1 1.5 V3 1 3
2 c(V1 ) = 1.5 V5 c(V ) = 3 2
V1 4 V4
Clustering partizionale – Funzione obiettivo 1/3
A ogni partizione 𝑃𝑃(𝐺𝐺) = {𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } del grafo 𝐺𝐺 𝑁𝑁, 𝐴𝐴 associamo il costo
𝑘𝑘

𝑐𝑐 𝑃𝑃 𝐺𝐺 = 𝑐𝑐({𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 }) = � 𝑐𝑐(𝑉𝑉𝑖𝑖 )


𝑖𝑖=1

A ogni 𝑃𝑃(𝐺𝐺) = { 𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } è associato il vettore di incidenza 𝑥𝑥𝑃𝑃 ∈ {0,1}𝑚𝑚
dell’insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 )
𝐸𝐸 𝑃𝑃 𝐺𝐺 = 𝐸𝐸(𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 )

1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑖𝑖 ∈ 𝐸𝐸(𝑃𝑃 𝐺𝐺 )


𝑥𝑥𝑖𝑖𝑖𝑖 = � 𝑝𝑝𝑝𝑝𝑝𝑝 𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 ∈ 𝐴𝐴 𝑥𝑥𝑖𝑖𝑖𝑖 = 1
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑝𝑝𝑝𝑝𝑝𝑝 𝑜𝑜𝑜𝑜𝑜𝑜𝑜𝑜 𝑖𝑖𝑖𝑖 ∈ E 𝑉𝑉ℎ , ℎ = 1, … , 𝑘𝑘
Clustering partizionale – Funzione obiettivo 2/3
Se quindi nella formula del peso 𝑐𝑐 𝑉𝑉 di un cluster 𝑉𝑉 andiamo a moltiplicare i valori
della relazione di dissimilarità dei nodi in 𝑉𝑉 per le componenti del vettore di incidenza
dell’insieme partizione relativo all’insieme 𝐸𝐸 𝑉𝑉 otteniamo l’uguaglianza

𝑐𝑐 𝑉𝑉 = � 𝑑𝑑𝑖𝑖𝑗𝑗 = � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖𝑖𝑖


𝑖𝑖𝑗𝑗∈𝐸𝐸(𝑉𝑉) 𝑖𝑖𝑗𝑗∈𝐸𝐸(𝑉𝑉)

Sfruttando l’equazione per ogni componente 𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 della partizione 𝑃𝑃(𝐺𝐺) =
{𝑉𝑉1 , 𝑉𝑉2 ,...., 𝑉𝑉𝑘𝑘 } del grafo 𝐺𝐺 𝑁𝑁, 𝐴𝐴 possiamo scrivere il costo della partizione 𝑃𝑃(𝐺𝐺) in
funzione del vettore di incidenza dell’insieme 𝐸𝐸(𝑃𝑃 𝐺𝐺 )

𝑘𝑘 𝑘𝑘

𝑐𝑐 𝑃𝑃 𝐺𝐺 = � 𝑐𝑐(𝑉𝑉ℎ ) = � � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖𝑖𝑖 = � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖𝑖𝑖


ℎ=1 ℎ=1 𝑖𝑖𝑗𝑗∈𝐸𝐸(𝑉𝑉ℎ ) 𝑖𝑖𝑗𝑗∈𝐴𝐴
Clustering partizionale – Funzione obiettivo 3/3
Sia X = { v1, v2, v3, v4, v5, v6, v7, v8 } e s = 2
 x12   1 
   
Consideriamo la soluzione 𝑥𝑥𝑃𝑃 ∈ {0,1}28  x13   0 
 x  0
 14   
 x15   0 
associata al clustering P(G)= { V1, V2, V3 } x   
 16   0 
 x17   0 
   
 x18   0 
c(V2 ) = 3  x 23   0 
  
6 1
7 
 x 24   0 
 x  0
 25   
c(V3 ) = 3  x 26   0 
 x  0

1 1 3 1 4  27   
 x 28   0 
   
 x 34  =  1 

c(P(G)) = ∑ d ij x ij =
 x 35   1 
8 𝑥𝑥𝑃𝑃 =    
 x 36   0 
 x 37   0 
    ij∈A
1 1
V2  x 38   0 
 x  1
 45    d12 + d 34 + d 35 + d 45
 x 46   0 
   
5  x 47   0 
 x 48   0 
   
+ d 67 + d 68 + d 78 = 7.5
 x 56   0 
1 1.5 V3  x 57   0 
   
 x 58   0 

2 c(V1 ) = 1.5  x  1


 67   
V1  x 68   1 
   
 x 78   1 
Clustering partizionale – Formulazione 1/3
Tra tutte le soluzioni ammissibili di un problema di clustering partizionale, l’obiettivo
è quello di determinare la soluzione di costo minimo. Questa soluzione corrisponde
al clustering in cui la somma delle distanze tra i punti appartenenti allo stesso cluster
sia minima.

Abbiamo visto come a ogni clustering 𝑃𝑃 𝐺𝐺 sia possibile associare un vettore di


incidenza 𝑥𝑥𝑃𝑃 a 𝑚𝑚 componenti {0,1} e un peso 𝑐𝑐 𝑃𝑃 𝐺𝐺 .

Formuliamo il problema di clustering partizionale come problema di programmazione


matematica

• Le variabili del problema sono le componenti di un vettore 𝑥𝑥 ∈ {0,1}𝑚𝑚 che


rappresentano ciascuna l’evento che il relativo arco appartenga all’insieme
partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 )
Clustering partizionale – Formulazione 2/3
• La funzione obiettivo è il costo 𝑐𝑐 𝑃𝑃(𝐺𝐺) dato dalla somma delle componenti del
vettore 𝑥𝑥 ∈ {0,1}𝑚𝑚 moltiplicata per la relazione di dissimilarità relativa all’arco
corrispondente

• I vincoli sono che:

• 𝑥𝑥 sia il vettore di incidenza di un insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 )

• 𝑥𝑥 soddisfi i vincoli di dimensione per un determinato valore (noto) del


parametro 𝑠𝑠

Mentre sappiamo come esprimere i vincoli di dimensione come disequazioni lineari


nelle variabili del problema, ancora non sappiamo come esprimere il vincolo che 𝑥𝑥
rappresenti il vettore di incidenza di un insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 )
Clustering partizionale – Formulazione 3/3
Ci sono diversi modi per esprimere il vincolo che 𝑥𝑥 rappresenti il vettore di incidenza
di un insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ). Nella prossima lezione ne vedremo uno che ci
permetterà di formulare il problema come problema di PL01.

In generale, possiamo affermare che Risolvere il problema di clustering partizionale


dei nodi di un grafo significa determinare la soluzione del seguente problema

min � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖𝑖𝑖


𝑖𝑖𝑗𝑗∈𝐴𝐴
𝑥𝑥 ∈ 𝑆𝑆
dove l’insieme 𝑆𝑆 è l’insieme delle soluzioni ammissibili visto nella lezione precedente
S = {𝑥𝑥 ∈ 0,1 𝑚𝑚 : 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑 𝐸𝐸 𝑃𝑃 𝐺𝐺 ,
� 𝑥𝑥𝑖𝑖𝑖𝑖 ≥ 𝑠𝑠 − 1 ∀ 𝑖𝑖 ∈ 𝑁𝑁}
𝑖𝑖𝑗𝑗∈𝛿𝛿(𝑖𝑖)
CONCLUSIONE

In questa lezione abbiamo formulato il problema di clustering partizionale come


problema di programmazione matematica dove l’insieme delle variabili è dato da un
vettore a componenti binarie associate alla decisione di inserire o meno un arco
nell’insieme partizione associato a una soluzione ammissibile.

Ogni soluzione ammissibile ha un costo che abbiamo espresso come combinazione


lineare delle variabili binarie a coefficienti pari alle relazioni di dissimilarità (o
distanza) definite sul grafo delle osservazioni.

Nella prossima lezione definiremo i vincoli che rendono il problema di


programmazione matematica un problema di Programmazione Lineare {0,1}.
Ricerca Operativa 2

Lezione 19 di 48
Clustering dei dati
Approfondimento
Approfondimento su testo
Studiare la sezione 5 delle dispense “Data Clustering”

La dispense “Data Clustering” è reso disponibile per consultazione telematica dal


docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 19 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Sia X = { v1, v2, v3, v4, v5, v6, v7, v8 } e 𝑠𝑠 = 2. Scrivere il vettore di incidenza
relativo all’insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) dove 𝑃𝑃 𝐺𝐺 = 𝑉𝑉1 , 𝑉𝑉2 , 𝑉𝑉1 = {1,6,7,8} e
𝑉𝑉2 = {2,3,4,5}

6 7
3 4
8
V1

5
1
V2
2
Esercizio proposto
Si consideri la seguente matrice delle relazioni di dissimilarità

0 1 2 1 3
1 0 4 1 5
𝐷𝐷 = 2 4 0 3 1
1 1 3 0 6
3 5 1 6 0

Determinare la funzione obiettivo del problema di clustering partizionale


Esercizio proposto
Considerato un insieme di 𝑛𝑛 = 6 istanze e definite le distanze illustrate nel
seguente grafo (arco 𝑖𝑖𝑖𝑖 assente → 𝑑𝑑𝑖𝑖𝑖𝑖 = 0)
Si considerino le due partizioni dei nodi:
4
1 4 P1(G)= { V1, V2, V3 } e P2(G)= { V4, V5 }
2 5 2
3
1
2 6 3 4
4 2 7
1 con
3 5
6 V1 = { 1, 2, 3 }, V2 = { 4, 5 }, V3 = { 6 },
V4 = { 2, 3 }, V5 = { 1, 4, 5, 6 }
2

Dire se sono soluzioni ammissibili del problema di partizione in clique con 𝑠𝑠 = 1 e


valutare quale delle due è la miglior soluzione
Ricerca Operativa 2

Lezione 19 di 48
Clustering dei dati
Domande aperte
Dare le definizione generale del problema di partizione in clique con vincolo di
dimensione
Descrivere il ruolo della relazione di dissimilarità nella formulazione del problema
di clustering partizionale
Descrivere la formulazione del problema di clustering partizionale come problema
di programmazione matematica
Ricerca Operativa 2

Lezione 20 di 48
Clustering dei dati
Disequazioni triangolo
Introduzione
Nella precedente lezione abbiamo formulato il problema di clustering partizionale
come problema di programmazione matematica. L’insieme delle soluzioni
ammissibili, come pure la funzione obiettivo, è stato espresso in funzione del
vettore di incidenza di un insieme partizione dei nodi di un grafo.

In questa lezione vedremo come tale insieme delle soluzioni ammissibili possa
essere espresso come l’insieme delle soluzioni ammissibili di un particolare
sistema di disequazioni lineari nelle variabili di decisione.

Tale sistema descriverà l’insieme delle soluzioni della formulazione del problema
di clustering partizionale come problema di Programmazione Lineare {0,1}.
Programmazione Lineare {0,1} – Richiami
Un problema di Programmazione Lineare {0,1} (PL01) è un problema di PLI in cui le
variabili sono vincolate ad assumere valori binari nell’insieme {0,1} e rappresentano
la possibilità che un evento si verifichi oppure no

Cosideriamo un generico problema di PL01 con insieme delle soluzioni ammissibili


𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari 𝑐𝑐 ∈ ℝ𝑛𝑛

min 𝑐𝑐 𝑇𝑇 𝑥𝑥
(PL01)
𝑥𝑥 ∈ 𝑆𝑆

Nella precedente lezione abbiamo visto come un problema di clustering partizionale


si possa formulare come problema di PL01. In questa lezione, ci concentreremo sul
problema di partizione in clique dei nodi di un grafo, ottenuto dal problema generale
visto nella lezione 18 ponendo 𝑠𝑠 ≤ 1 nei vincoli lineari di dimensione
Problema di partizione in clique – Richiami
Data una partizione 𝑃𝑃(𝐺𝐺) dei nodi di un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), un insieme partizione 𝐸𝐸(𝑃𝑃(𝐺𝐺))
è l’unione degli insiemi degli archi che connettono nodi in ciascuna componente della
partizione 𝑃𝑃(𝐺𝐺).

Nel problema di partizione in clique (Clique Partitioning Problem - CPP) dei nodi di
un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con 𝑚𝑚 = |𝐴𝐴| archi, l’insieme 𝑆𝑆 ⊆ {0,1}𝑚𝑚 delle soluzioni è l’insieme
dei vettori di incidenza di un insieme partizione incidenza di tutte le possibili insiemi
partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴).

Dal momento che il grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) è completo, 𝑆𝑆 è l’insieme di tutte le possibili
partizioni in clique dei nodi di 𝐺𝐺(𝑁𝑁, 𝐴𝐴).
Problema di partizione in clique – Esempi 1/3
Consideriamo il grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con un insieme 𝑁𝑁 = 1,2,3,4,5,6 e insieme degli archi
6 6−1
𝐴𝐴 completo. L’insieme degli archi 𝐴𝐴 si compone di 𝑚𝑚 = 2 = 15 elementi

𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5
1 4

2
3

Vediamo alcuni esempi di soluzioni ammissibili dell’insieme 𝑆𝑆


Problema di partizione in clique – Esempi 2/3
Si consideri la partizione 𝑃𝑃1 𝐺𝐺 = {𝑉𝑉1 , 𝑉𝑉2 } di 𝐺𝐺(𝑁𝑁, 𝐴𝐴) dove 𝑉𝑉1 = {1,2.3} e 𝑉𝑉2 = {4,5,6}.
La partizione è mostrata nella figura sotto e l’insieme partizione 𝐸𝐸(𝑃𝑃1 𝐺𝐺 ) è dato
dall’unione degli insiemi 𝐸𝐸(𝑉𝑉1 ) e 𝐸𝐸(𝑉𝑉2 ) degli archi che connettono nodi nelle
componenti 𝑉𝑉1 e 𝑉𝑉2 della partizione 𝑃𝑃1 (𝐺𝐺). Il relativo vettore di incidenza è riportato
accanto alla figura
 x12   1
   
 x13   1
x   0
 14   
 x15 
𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5 
 x16 

 0
 0
 
 x 23   1
1 4
 
 x 24 
 
 0
𝑃𝑃1 𝐺𝐺 = 𝑉𝑉1 , 𝑉𝑉2 𝑥𝑥𝑃𝑃1 = x 
 25 
=  0
 
 x 26   0
   0
6  x 34 
 x 35 
 
 
 0
 0
 x 36   
x   1
 45   
2  x 46 
x 
 1
 1
 
3
 56 
Problema di partizione in clique – Esempi 3/3
Una partizione diversa è data da 𝑃𝑃2 𝐺𝐺 = {𝑉𝑉3 , 𝑉𝑉4 } di 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con 𝑉𝑉3 = {1,2.3,4} e
𝑉𝑉4 = {5,6}. Anche in questo caso, l’insieme partizione 𝐸𝐸(𝑃𝑃2 𝐺𝐺 ) è dato dall’unione
degli insiemi 𝐸𝐸(𝑉𝑉3 ) e 𝐸𝐸(𝑉𝑉4 ) degli archi che connettono nodi nelle componenti 𝑉𝑉3 e
𝑉𝑉4 della partizione 𝑃𝑃2 (𝐺𝐺) e il relativo vettore di incidenza è riportato accanto alla
figura
 x12   1
   
 x13   1
x   1
 14   
 x15 
𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5 
 x16 

 0
 0
 
 x 23   1
1 4
 
 x 24 
 
 1
𝑃𝑃2 𝐺𝐺 = 𝑉𝑉3 , 𝑉𝑉4 𝑥𝑥𝑃𝑃2 = x 
 25 
=  0
 
 x 26   0
   0
6  x 34 
 x 35 
 
 
 0
 0
 x 36   
x   0
 45   
2  x 46 
x 
 0
 1
 
3
 56 
Problema di partizione in clique – Richiami
Come abbiamo visto nella lezione precedente, il criterio di ottimalità adottato per
scegliere la migliore partizione in clique è il costo 𝑐𝑐 𝑃𝑃(𝐺𝐺) dato dalla somma delle
componenti del vettore 𝑥𝑥 ∈ {0,1}𝑚𝑚 moltiplicata per la relazione di dissimilarità
𝑑𝑑 relativa all’arco corrispondente
𝑘𝑘

𝑐𝑐 𝑃𝑃(𝐺𝐺) = � 𝑐𝑐(𝑉𝑉ℎ ) = � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖𝑖𝑖


ℎ=1 𝑖𝑖𝑗𝑗∈𝐴𝐴

Quindi il problema di partizione in clique può essere scritto come problema di PL01

min 𝑑𝑑 𝑇𝑇 𝑥𝑥
(PL01)
𝑥𝑥 ∈ 𝑆𝑆
Dove 𝑑𝑑 è il vettore delle relazioni di dissimlarità associate agli archi e 𝑆𝑆 è l’insieme
dei vettori di incidenza di tutti i possibili insiemi partizione del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)
CPP – Soluzione del problema
Come abbiamo visto nella lezione 11, risolvere un problema di PL01 significa
determinare la soluzione 𝑥𝑥 ∗ che minimizza la funzione obiettivo.

Nel caso del problema CPP, significa determinare la partizione 𝑥𝑥 ∗ a costo minimo
𝑥𝑥 ∗ = arg min{𝑑𝑑 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}

Come per ogni problema di PL01, anche l’insieme ammissibile del problema CPP è
finita, in quanto il numero di possibili partizioni di un insieme finito di nodi è a sua
volta finite.

La soluzione ottima 𝑥𝑥 ∗ esiste sempre e può essere


individuata con una procedura di enumerazione completa
CPP – Enumerazione completa

PROCEDURA DI ENUMERAZIONE COMPLETA


1. Considera tutte le partizioni in clique dei nodi del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)
2. Ordina le soluzioni ammissili rispetto al vettore delle relazioni di
dissimilarità 𝑑𝑑
3. Seleziona la soluzione di costo minimo: 𝑥𝑥 ∗ = arg min{𝑑𝑑 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}

La procedura di enumerazione completa diventa


rapidamente inadeguata al crescere della cardinalità di 𝑆𝑆

Come visto nella lezione 11 e successive, negli algoritmi di soluzione di un


problema di PL01 è molto importante conoscere un limite inferiore (lower bound)
per il problema
CPP – Formulazione ottima
Come abbiamo visto nella lezione 12, un problema di PL01 con insieme delle
soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari 𝑐𝑐 ∈ ℝ𝑛𝑛 ammette
sempre la formulazione lineare 𝑃𝑃∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) con la proprietà che
𝑥𝑥 ∈ 𝑆𝑆 ⇔ 𝑥𝑥 𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑃𝑃∗

Per il problema della partizione in clique dei nodi di un grafo, non conosciamo tutte le
disequazioni che definiscono il poliedro 𝑃𝑃∗ ma

• si conoscono alcune famiglie di disequazioni che definiscono 𝑃𝑃∗

• si conoscono famiglie di disequazioni valide per 𝑃𝑃∗

Una disequazione 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏 si definisce valida per un poliedro 𝑃𝑃 se e


solo se è soddisfatta da tutti i punti in 𝑃𝑃

𝑃𝑃 ⊆ {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏}


CPP – Disequazioni triangolo 1/2
Dato un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), si considerino tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 ∈ 𝑁𝑁. Si definisce disequazione
triangolo relativa ai nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 la disequazione lineare
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑘𝑘 − 𝑥𝑥𝑗𝑗𝑘𝑘 ≤ 1

Una disequazione triangolo rappresenta il vincolo logico:


𝑥𝑥𝑖𝑖𝑖𝑖 = 1 𝐴𝐴𝐴𝐴𝐴𝐴 𝑥𝑥𝑖𝑖𝑖𝑖 = 1 ⇒ 𝑥𝑥𝑗𝑗𝑗𝑗 = 1

i i

j j
𝐺𝐺(𝑁𝑁, 𝐴𝐴) k 𝐺𝐺(𝑁𝑁, 𝐴𝐴) k
CPP – Disequazioni triangolo 2/2
Di fatto, la disequazione triangolo relativa ai nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 implica che se l’arco 𝑖𝑖𝑖𝑖 e l’arco
𝑖𝑖𝑘𝑘 appartengono a una clique (e quindi all’insieme partizione 𝐸𝐸(𝑃𝑃)), allora anche
l’arco 𝑗𝑗𝑗𝑗 appartiene alla clique (e quindi all’insieme partizione 𝐸𝐸 𝑃𝑃 )

Si noti che l’ordine in cui i tre nodi compaiono nella disequazione è importante
perché determina il tipo di implicazione logica. La disequazione triangolo relativa ai
nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖 (diversa da 𝑖𝑖, 𝑗𝑗, 𝑘𝑘) implica infatti che

i i

j j
𝐺𝐺(𝑁𝑁, 𝐴𝐴) k 𝐺𝐺(𝑁𝑁, 𝐴𝐴) k
CPP – Disequazioni triangolo e clique (caso a)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1
Verifichiamo quali sono le configurazioni delle tre variabili 𝑥𝑥𝑖𝑖𝑖𝑖 , 𝑥𝑥𝑖𝑖𝑖𝑖 e 𝑥𝑥𝑗𝑗𝑗𝑗 che soddisfino
la disequazione e le relative clique

Il caso (a) in cui nessun arco faccia parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑖𝑖 = 𝑥𝑥𝑖𝑖𝑖𝑖 = 𝑥𝑥𝑗𝑗𝑗𝑗 = 0)
soddisfa la disequazione triangolo: in tal caso, 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 non formano una clique

 x ij   0 
i
   
 x ik  =  0 
 x   0
 jk    j k
(a)
CPP – Disequazioni triangolo e clique (caso b)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Il caso (b) in cui l’arco 𝑖𝑖𝑖𝑖 faccia parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑖𝑖 = 1) mentre i
rimanenti archi non ne fanno parte (𝑥𝑥𝑖𝑖𝑘𝑘 = 𝑥𝑥𝑗𝑗𝑘𝑘 = 0) soddisfa la disequazione triangolo:
in tal caso, 𝑖𝑖, 𝑗𝑗 formano una clique, ma da questa clique è escluso il nodo 𝑘𝑘

 x ij   1 
i
   
 x ik  =  0 
 x   0 j k
 jk   
(b)
CPP – Disequazioni triangolo e clique (caso c)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Il caso (c) in cui l’arco 𝑖𝑖𝑘𝑘 faccia parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑘𝑘 = 1) mentre i
rimanenti archi non ne fanno parte (𝑥𝑥𝑖𝑖𝑗𝑗 = 𝑥𝑥𝑗𝑗𝑘𝑘 = 0) soddisfa la disequazione triangolo:
in tal caso, 𝑖𝑖, 𝑘𝑘 formano una clique, ma da questa clique è escluso il nodo 𝑗𝑗

 x ij   0  i
   
 x ik  =  1 
 x   0 k
 jk    j
(c)
CPP – Disequazioni triangolo e clique (caso d)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Il caso (d) in cui l’arco 𝑗𝑗𝑗𝑗 faccia parte dell’insieme partizione (𝑥𝑥𝑗𝑗𝑗𝑗 = 1) mentre i
rimanenti archi non ne fanno parte (𝑥𝑥𝑖𝑖𝑗𝑗 = 𝑥𝑥𝑖𝑖𝑖𝑖 = 0) soddisfa la disequazione triangolo:
in tal caso, 𝑗𝑗, 𝑘𝑘 formano una clique, ma da questa clique è escluso il nodo 𝑖𝑖

 x ij   0 
   
i
 x ik  =  0 
 x  1 k
 jk    j
(d)
CPP – Disequazioni triangolo e clique (caso e)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Il caso (e) in cui gli archi 𝑖𝑖𝑖𝑖 e 𝑖𝑖𝑖𝑖 facciano parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑗𝑗 = 𝑥𝑥𝑖𝑖𝑖𝑖 = 1)
mentre il rimanente arco non ne fa parte (𝑥𝑥𝑗𝑗𝑗𝑗 = 0) non soddisfa la disequazione
triangolo: in tal caso, l’unico modo per soddisfare il vincolo è che si verifichi 𝑥𝑥𝑗𝑗𝑗𝑗 = 1
che corrisponde al caso in cui 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 formano una clique

NO
 x ij   1  i
   
 x ik  =  1 
 x   0 k
 jk    j
(e)
CPP – Disequazioni triangolo e clique (casi f e g)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1
I casi (f) in cui gli archi 𝑖𝑖𝑖𝑖 e 𝑗𝑗𝑗𝑗 facciano parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑗𝑗 = 𝑥𝑥𝑗𝑗𝑗𝑗 = 1)
mentre il rimanente arco non ne fa parte (𝑥𝑥𝑖𝑖𝑖𝑖 = 0), e (g) in cui gli archi 𝑖𝑖𝑘𝑘 e 𝑗𝑗𝑗𝑗
facciano parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑘𝑘 = 𝑥𝑥𝑗𝑗𝑗𝑗 = 1) mentre il rimanente arco non ne
fa parte ( 𝑥𝑥𝑖𝑖𝑗𝑗 = 0 ), soddisfano entrambe la disequazione triangolo: la singola
disequazione triangolo relativa a 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 non è sufficiente a garantire che i tre nodi
formino una clique

 x ij   1 
   
i  x ij   0 
i
 x ik  =  0     
 x  1  x ik  =  1 
 jk    j k  x  1 j k
 jk   
(f) (g)
CPP – Disequazioni triangolo e clique (caso h)
Consideriamo tre nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 e la disequazione triangolo relativa ai nodi 𝑗𝑗, 𝑘𝑘, 𝑖𝑖
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Il caso (h) in cui tutti gli archi facciano parte dell’insieme partizione (𝑥𝑥𝑖𝑖𝑖𝑖 = 𝑥𝑥𝑖𝑖𝑖𝑖 = 𝑥𝑥𝑗𝑗𝑗𝑗 =
1) soddisfa la disequazione triangolo: in tal caso, 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 formano una clique

 x ij  1 i
   
 x ik  = 1
 x  1
 jk    j k
(h)
CONCLUSIONE

In questa lezione abbiamo visto una disequazione lineare nelle variabili di decisione
definite nella lezione 19 per il problema di partizione in clique dei nodi di un grafo

Una disequazione triangolo relativa a tre nodi non è sufficiente (da sola) a descrivere
matematicamente (tramite relazioni matematiche) il vincolo logico che devono
necessariamente soddisfare tre nodi per formare una clique (vedi casi f e g)

Nella prossima lezione vedremo come una adeguata combinazione di disequazioni


triangolo permetta la completa descrizione del problema di partizione in clique e
definiremo una prima formulazione lineare del problema
Ricerca Operativa 2

Lezione 20 di 48
Clustering dei dati
Disequazioni a due partizioni
Introduzione
Nella precedente lezione abbiamo definito la disequazione triangolo relativa a una
terna di nodi del grafo.

In questa lezione vedremo come combinazione diverse disequazioni triangolo per


descrivere l’insieme delle soluzioni ammissibili del problema di partizione in
clique.

Vedremo quindi un’ulteriore famiglia di disequazioni utili (disequazioni a due


partizioni) e, nelle lezioni successive, definiremo una strategia di soluzione basata
su ambo le famiglie di disequazioni
Disequazioni triangolo – Richiami
Dato un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), la disequazione triangolo relativa ai nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 ∈ 𝑁𝑁 è la
disequazione
𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑘𝑘 − 𝑥𝑥𝑗𝑗𝑘𝑘 ≤ 1

che implica il seguente il vincolo logico:


𝑥𝑥𝑖𝑖𝑖𝑖 = 1 𝐴𝐴𝐴𝐴𝐴𝐴 𝑥𝑥𝑖𝑖𝑖𝑖 = 1 ⇒ 𝑥𝑥𝑗𝑗𝑗𝑗 = 1
Abbiamo visto che, dati tre nodi, la relativa disequazione triangolo è soddisfatta:

• nel caso in cui i tre nodi non formino una clique (caso a)

• nel caso in cui i tre nodi formino una clique (casi b, c, d)

• nel caso in cui due dei tre nodi formino una clique (caso h)

Delle tre soluzioni non ammissibili relative ai casi e, f, g, la disequazione triangolo ne


esclude solamente una (!)
CPP – Formulazione con disequazioni triangolo 1/2
Consideriamo il poliedro definito da tutte le possibili disequazioni triangolo relative al
grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)

𝑥𝑥𝑖𝑖𝑖𝑖 +𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1


𝑃𝑃′ = �0 ≤ 𝑥𝑥𝑖𝑖𝑖𝑖 ≤ 1: 𝑥𝑥𝑖𝑖𝑖𝑖 −𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1 1 ≤ 𝑖𝑖 < 𝑗𝑗 < 𝑘𝑘 ≤ 𝑛𝑛}
−𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Ogni soluzione del problema di partizione in clique soddisfa le disequazioni del


poliedro 𝑃𝑃′ , quindi 𝑆𝑆 ⊂ 𝑃𝑃′ . D’altra parte, come vedremo nelle slide successive, ogni
vettore a 𝑚𝑚 componenti {0,1} che soddisfa le disequazioni del poliedro 𝑃𝑃′ è una
soluzione ammissibile in 𝑆𝑆 del problema di partizione in clique

Il poliedro 𝑃𝑃𝑃 è una formulazione del problema problema di partizione in


clique dei nodi di un grafo
𝑃𝑃′ ∩ 0,1 𝑚𝑚 = 𝑆𝑆
CPP – Formulazione con disequazioni triangolo 2/2
Consideriamo il poliedro definito da tutte le possibili disequazioni triangolo relative al
grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴). Quante sono le disequazioni triangolo di 𝑃𝑃′ per un grafo di 𝑛𝑛 nodi?

𝑥𝑥𝑖𝑖𝑖𝑖 +𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1


𝑃𝑃′ = �0 ≤ 𝑥𝑥𝑖𝑖𝑖𝑖 ≤ 1: 𝑥𝑥𝑖𝑖𝑖𝑖 −𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1 1 ≤ 𝑖𝑖 < 𝑗𝑗 < 𝑘𝑘 ≤ 𝑛𝑛}
−𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1

Dobbiamo considerare tutti i sottoinsiemi ordinato di 3 oggetti estratti da un insieme


di n oggetti, vale a dire tutte le terne ordinate di nodi del grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴). Questo
numero è pari alle disposizioni di 𝑛𝑛 elementi di classe 𝑘𝑘, ovvero presi 𝑘𝑘 alla volta,
con 𝑘𝑘 = 3

Il poliedro 𝑃𝑃𝑃 è definite da un numero di disequazioni triangolo pari a


𝑛𝑛 𝑛𝑛!
3 =
3 2 𝑛𝑛 − 3 !
CPP – Formulazione – Esempio 1/4
Consideriamo la partizione 𝑃𝑃1 𝐺𝐺 = {𝑉𝑉1 , 𝑉𝑉2 } di 𝐺𝐺(𝑁𝑁, 𝐴𝐴) dove 𝑉𝑉1 = {1,2.3} e 𝑉𝑉2 =
{4,5,6}. Come abbiamo visto, il relativo vettore di incidenza dell’insieme partizione
𝐸𝐸(𝑃𝑃1 𝐺𝐺 ) appartiene a 𝑆𝑆. Verifichiamo che soddisfino tutte le disequazioni della
formulazione 𝑃𝑃′
x   1
 12
 
 x   1
13
x 
𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5 
x 

 0
 
14

15  0
   0
1 4
 x16 
 x 23 
 
 
 1
 
 x 24   0
𝑃𝑃1 𝐺𝐺 = 𝑉𝑉1 , 𝑉𝑉2 𝑥𝑥𝑃𝑃1 = x 
 25 
=  0
 
6  x 26 
 
 x 34 
 0
 0
 
 x 35   0
   0
 x 36   
2
x   1
 45   
3  x 46 
x 
 56 
 1
 1
 
Notiamo innanzi tutto che il poliedro 𝑃𝑃′ è definito da un numero di disequazioni
triangolo pari a 6 6! 6!
3 = = = 6 × 5 × 2 = 60
3 2 3! 2 3!
 x12   1
   
CPP – Formulazione – Esempio 2/4  x13 
x 
 14 
 1
 0 Verifichiamo che
 
 x15  la soluzione
𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5 
 x16 

 0
 0
 
 x 23   1
verifichi tutti i 60
1 4
 
 x 24 
 
 0 vincoli organizzati
𝑥𝑥𝑃𝑃1 = x 
 25 
=  0
 x 26 
 
 0
in 20 gruppi di 3
   0
6  x 34 
 x 35 
 
 
 0
disequazioni
 0
 x 36   
x   1
 45   
2  x 46 
x 
 1
 1
 
3
 56 

𝑥𝑥12 + 𝑥𝑥13 − 𝑥𝑥23 ≤ 1 𝑥𝑥12 + 𝑥𝑥15 − 𝑥𝑥25 ≤ 1 𝑥𝑥13 + 𝑥𝑥14 − 𝑥𝑥34 ≤ 1


𝑥𝑥12 −𝑥𝑥13 + 𝑥𝑥23 ≤ 1 𝑥𝑥12 −𝑥𝑥15 + 𝑥𝑥25 ≤ 1 𝑥𝑥13 −𝑥𝑥14 + 𝑥𝑥34 ≤ 1
−𝑥𝑥12 + 𝑥𝑥13 + 𝑥𝑥23 ≤ 1 −𝑥𝑥12 + 𝑥𝑥15 + 𝑥𝑥25 ≤ 1 −𝑥𝑥13 + 𝑥𝑥14 + 𝑥𝑥34 ≤ 1
𝑥𝑥12 + 𝑥𝑥14 − 𝑥𝑥24 ≤ 1 𝑥𝑥12 + 𝑥𝑥16 − 𝑥𝑥26 ≤ 1 𝑥𝑥13 + 𝑥𝑥15 − 𝑥𝑥35 ≤ 1
𝑥𝑥12 −𝑥𝑥14 + 𝑥𝑥24 ≤ 1 𝑥𝑥12 −𝑥𝑥16 + 𝑥𝑥26 ≤ 1 𝑥𝑥13 −𝑥𝑥15 + 𝑥𝑥35 ≤ 1
−𝑥𝑥12 + 𝑥𝑥14 + 𝑥𝑥24 ≤ 1 −𝑥𝑥12 + 𝑥𝑥16 + 𝑥𝑥26 ≤ 1 −𝑥𝑥13 + 𝑥𝑥15 + 𝑥𝑥35 ≤ 1
 x12   1
   
CPP – Formulazione – Esempio 3/4  x13 
x 
 14 
 1
 0 Verifichiamo che
 
 x15  la soluzione
𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5 
 x16 

 0
 0
 
 x 23   1
verifichi tutti i 60
1 4
 
 x 24 
 
 0 vincoli organizzati
𝑥𝑥𝑃𝑃1 = x 
 25 
=  0
 x 26 
 
 0
in 20 gruppi di 3
   0
6  x 34 
 x 35 
 
 
 0
disequazioni
 0
 x 36   
x   1
 45   
2  x 46 
x 
 1
 1
 
3
 56 

𝑥𝑥13 + 𝑥𝑥16 − 𝑥𝑥36 ≤ 1 𝑥𝑥15 + 𝑥𝑥16 − 𝑥𝑥56 ≤ 1 𝑥𝑥23 + 𝑥𝑥24 − 𝑥𝑥34 ≤ 1


𝑥𝑥13 −𝑥𝑥16 + 𝑥𝑥36 ≤ 1 𝑥𝑥15 −𝑥𝑥16 + 𝑥𝑥56 ≤ 1 𝑥𝑥23 −𝑥𝑥24 + 𝑥𝑥34 ≤ 1
−𝑥𝑥13 + 𝑥𝑥16 + 𝑥𝑥36 ≤ 1 −𝑥𝑥15 + 𝑥𝑥16 + 𝑥𝑥56 ≤ 1 −𝑥𝑥23 + 𝑥𝑥24 + 𝑥𝑥34 ≤ 1
𝑥𝑥14 + 𝑥𝑥15 − 𝑥𝑥45 ≤ 1 𝑥𝑥14 + 𝑥𝑥16 − 𝑥𝑥46 ≤ 1 𝑥𝑥23 + 𝑥𝑥25 − 𝑥𝑥35 ≤ 1
𝑥𝑥14 −𝑥𝑥15 + 𝑥𝑥45 ≤ 1 𝑥𝑥14 −𝑥𝑥16 + 𝑥𝑥46 ≤ 1 𝑥𝑥23 −𝑥𝑥25 + 𝑥𝑥35 ≤ 1
−𝑥𝑥14 + 𝑥𝑥15 + 𝑥𝑥45 ≤ 1 −𝑥𝑥14 + 𝑥𝑥16 + 𝑥𝑥46 ≤ 1 −𝑥𝑥23 + 𝑥𝑥25 + 𝑥𝑥35 ≤ 1
CPP – Formulazione – Esempio 4/4
 x12   1
   
 x13   1
x 
 14 
 0 𝑥𝑥23 + 𝑥𝑥26 − 𝑥𝑥36 ≤ 1 𝑥𝑥25 + 𝑥𝑥26 − 𝑥𝑥56 ≤ 1
 
 x15 
 
 0
 0
𝑥𝑥23 −𝑥𝑥26 + 𝑥𝑥36 ≤ 1 𝑥𝑥25 −𝑥𝑥26 + 𝑥𝑥56 ≤ 1
 x16 
 x 23 
 
 
 1 −𝑥𝑥23 + 𝑥𝑥26 + 𝑥𝑥36 ≤ 1 −𝑥𝑥25 + 𝑥𝑥26 + 𝑥𝑥56 ≤ 1
 
 x 24   0
𝑥𝑥𝑃𝑃1 = x 
 25 
=  0
  𝑥𝑥24 + 𝑥𝑥25 − 𝑥𝑥45 ≤ 1 𝑥𝑥24 + 𝑥𝑥26 − 𝑥𝑥46 ≤ 1
 x 26   0
 
 x 34 
 0
 
𝑥𝑥24 −𝑥𝑥25 + 𝑥𝑥45 ≤ 1 𝑥𝑥24 −𝑥𝑥26 + 𝑥𝑥46 ≤ 1
 x 35 
 
 0
 0 −𝑥𝑥24 + 𝑥𝑥25 + 𝑥𝑥45 ≤ 1 −𝑥𝑥24 + 𝑥𝑥26 + 𝑥𝑥46 ≤ 1
 x 36   
x   1
 45   
 x 46   1
x 
 56 
 1
  𝑥𝑥34 + 𝑥𝑥35 − 𝑥𝑥45 ≤ 1 𝑥𝑥35 + 𝑥𝑥36 − 𝑥𝑥56 ≤ 1
𝑥𝑥34 −𝑥𝑥35 + 𝑥𝑥45 ≤ 1 𝑥𝑥35 −𝑥𝑥36 + 𝑥𝑥56 ≤ 1
Verifichiamo che −𝑥𝑥34 + 𝑥𝑥35 + 𝑥𝑥45 ≤ 1 −𝑥𝑥35 + 𝑥𝑥36 + 𝑥𝑥56 ≤ 1
la soluzione
verifichi tutti i 60 𝑥𝑥34 + 𝑥𝑥36 − 𝑥𝑥46 ≤ 1 𝑥𝑥45 + 𝑥𝑥46 − 𝑥𝑥56 ≤ 1
vincoli organizzati 𝑥𝑥34 −𝑥𝑥36 + 𝑥𝑥46 ≤ 1 𝑥𝑥45 −𝑥𝑥46 + 𝑥𝑥56 ≤ 1
in 20 gruppi di 3 −𝑥𝑥34 + 𝑥𝑥36 + 𝑥𝑥46 ≤ 1 −𝑥𝑥45 + 𝑥𝑥46 + 𝑥𝑥56 ≤ 1
disequazioni
CPP – Rilassamento formulazione con disequazioni triangolo 1/2
Consideriamo il problema di partizione in clique dei nodi di un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)

min 𝑑𝑑 𝑇𝑇 𝑥𝑥
(PL01)
𝑥𝑥 ∈ 𝑆𝑆
Se consideriamo il rilassamento della formulazione con disequazioni triangolo, vale a
dire consideriamo il problema

min 𝑑𝑑 𝑇𝑇 𝑥𝑥
(RL)
𝑥𝑥 ∈ 𝑃𝑃′

La soluzione ottima del problema (RL) può avere componenti non intere e, quindi,
non essere ammissibile per il problema (PL01)
CPP – Rilassamento formulazione con disequazioni triangolo 2/2
Ad esempio, una soluzione ammissibile 𝑥𝑥� ∈ 𝑃𝑃′ per il problema visto in precedenza è
quella rappresentata in figura, dove gli archi tratteggiati rappresentano le componenti
della soluzione x   1 
 
  12
 2
5  x13 
x   1 
 2
1  14 
 x15 
 0 

1
 
1 4
4
2

 x16 
  0 
 0 
 
 x 23   12 
   
𝑃𝑃� 𝐺𝐺 = …
 x 24 
1 1 𝑥𝑥� = x  =  0 
 0 

2 1
1
4 4 6  25 
 x 26 

 0 

?
   
2  x 34 
 x 35 
 14 
 
 0 
   0 

2 1
 x 36 
x 

 1 

3
 4 
 45   1 
2  x 46 
x 
 4
 1 

 56   2
Nel caso dell’insieme 𝑆𝑆, ogni soluzione 𝑥𝑥 ∈ 𝑆𝑆 corrisponde al vettore di incidenza di un
insieme partizione 𝐸𝐸(𝑃𝑃 𝐺𝐺 ) definite sul grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴). Nel caso del poliedro 𝑃𝑃′ una
soluzione ammissibile 𝑥𝑥� ∈ 𝑃𝑃′ non corrisponde a un vettore di incidenza e, quindi, non
è possibile associargli univocamente un insieme partizione
CPP – Disequazioni a due partizioni 1/2
Dato un grafo 𝐺𝐺 𝑁𝑁, 𝐴𝐴 e un sottoinsieme di archi 𝐴𝐴′ ⊆ 𝐴𝐴, definiamo con 𝑥𝑥(𝐴𝐴′) la
somma delle componenti del vettore 𝑥𝑥 relative agli archi 𝑖𝑖𝑖𝑖 ∈ 𝐴𝐴′

𝑥𝑥 𝐴𝐴′ = � 𝑥𝑥𝑖𝑖𝑖𝑖
𝑖𝑖𝑖𝑖∈𝐴𝐴′

Dato un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), si considerino due sottoinsiemi 𝑆𝑆 e 𝑇𝑇 disgiunti e non vuoti di 𝑁𝑁

La disequazione a due partizioni (𝑆𝑆, 𝑇𝑇) associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 è

𝑥𝑥 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥 𝐸𝐸 𝑆𝑆 − 𝑥𝑥 𝐸𝐸 𝑇𝑇 ≤ min{ 𝑆𝑆 , |𝑇𝑇|}

dove 𝛿𝛿(𝑆𝑆, 𝑇𝑇) è l’insieme degli archi che connettono nodi in 𝑆𝑆 e nodi in 𝑇𝑇 mentre 𝐸𝐸 𝑆𝑆
e 𝐸𝐸 𝑇𝑇 sono gli insiemi partizione relativi ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 in base alle definizioni
date nella lezione 18
CPP – Disequazioni a due partizioni 2/2
Consideriamo un semplice grafo 𝐺𝐺 𝑁𝑁, 𝐴𝐴 con 𝑁𝑁 = {1,2,3,4}. Consideriamo i due
sottoinsiemi disgiunti e non vuoti 𝑆𝑆 = {1} e 𝑇𝑇 = {2,3,4} dell’insieme 𝑁𝑁
𝑆𝑆 1

Si noti che 𝑆𝑆 = 1 e 𝑇𝑇 = 3
𝑇𝑇
2
Dal momento che 𝑆𝑆 ha un solo
elemento, 𝐸𝐸 𝑆𝑆 = ∅ 4 3

La disequazione a 2 partizioni (𝑆𝑆, 𝑇𝑇) associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 è

x12 + x13 + x14 − x 23 − x 24 − x 34 ≤ 1

x( δ(S, T) ) x(E(T))
CONCLUSIONE

In questa lezione abbiamo introdotto la formulazione con disequazioni triangolo del


problema di partizione in clique dei nodi di un grafo

Abbiamo inoltre introdotto una famiglia di disequazioni che saranno molto utili per
migliorare la formulazione con disequazioni triangolo

Nella prossima lezione vedremo come le due famiglie di equazioni introdotte in


questa lezione definiscono un algoritmo di soluzione per il problema di partizione in
clique dei nodi di un grafo
Ricerca Operativa 2

Lezione 20 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Si consideri il grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con un insieme 𝑁𝑁 = 1,2,3,4,5,6 visto a lezione.
Definire la partizione 𝑃𝑃 𝐺𝐺 illustrata in figura indicando le componenti della
partizione e il relativo vettore di incidenza

5
1 4

2
3
Esercizio proposto
Consideriamo la partizione 𝑃𝑃2 𝐺𝐺 = {𝑉𝑉3 , 𝑉𝑉4 } di 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con 𝑉𝑉3 = {1,2.3,4} e 𝑉𝑉4 = {5,6}-
Verificare che il vettore di incidenza dell’insieme partizione 𝐸𝐸(𝑃𝑃2 𝐺𝐺 ) soddisfi tutte le
disequazioni della formulazione 𝑃𝑃′ .

𝐺𝐺(𝑁𝑁, 𝐴𝐴) 5
1 4 𝑃𝑃2 𝐺𝐺 = 𝑉𝑉3 , 𝑉𝑉4

2
3
Esercizio proposto
Si consideri il grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con un insieme 𝑁𝑁 = 1,2,3,4 . Definire il poliedro 𝑃𝑃′
completo di tutte le disequazioni triangolo

1 2

4 3
Ricerca Operativa 2

Lezione 20 di 48
Clustering dei dati
Domande aperte
Definire una disequazioni triangolo e spiegare le implicazioni logiche relative ai
nodi di un grafo
Descrivere la formulazione del problema di partizione in clique dei nodi di un grafo
basata sulle disequazioni triangolo
Si considerino i casi (f) e (g) delle disequazioni triangolo applicate a una generica
terna di nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘

Dimostrare che la formulazione con disequazioni triangolo del problema di


partizione in clique dei nodi di un grafo rende inammissibili i casi (f) e (g)
Ricerca Operativa 2

Lezione 21 di 48
Clustering dei dati
Euristica di separazione
Introduzione
Nella precedente lezione abbiamo definito la disequazione a due partizioni relativa
a una coppia di sottoinsiemi disgiunti dei nodi del grafo

In questa lezione verrà illustrata una formulazione del problema di partizione in


clique dei nodi di un grafo e la relativa strategia di separazione per determinare
disequazioni a due partizioni violate da una soluzione della formulazione con
disequazioni triangolo

Prima di affrontare il metodo di soluzione del problema di partizione in clique


approfondiremo alcuni aspetti interessanti delle disequazioni a due partizioni
Disequazioni a due partizioni – Richiami
Dato un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴), si considerino due sottoinsiemi 𝑆𝑆 e 𝑇𝑇 disgiunti e non vuoti di 𝑁𝑁

La disequazione a due partizioni (𝑆𝑆, 𝑇𝑇) associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 è

𝑥𝑥 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥 𝐸𝐸 𝑆𝑆 − 𝑥𝑥 𝐸𝐸 𝑇𝑇 ≤ min{ 𝑆𝑆 , |𝑇𝑇|}

dove 𝛿𝛿(𝑆𝑆, 𝑇𝑇) è l’insieme degli archi che connettono nodi in 𝑆𝑆 e nodi in 𝑇𝑇 mentre 𝐸𝐸 𝑆𝑆
e 𝐸𝐸 𝑇𝑇 sono gli insiemi partizione relativi ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 rispettivamente

Abbiamo visto un semplice esempio nella lezione precedente mentre altri esempi
sono lasciati come esercizio (vedi lezione corrente)

Notiamo preliminarmente un’interessante proprietà delle disequazioni a due


partizioni
Disequazioni a due partizioni e disequazioni triangolo
Nel caso in cui 𝑆𝑆 = 1 e 𝑇𝑇 = 2 la disequazione a due partizioni (𝑆𝑆, 𝑇𝑇) associata ai
sottoinsiemi 𝑆𝑆 e 𝑇𝑇 si riduce a una disequazione triangolo
𝑆𝑆 𝑖𝑖
𝑥𝑥 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥 𝐸𝐸 𝑇𝑇 ≤1

𝑇𝑇 𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤1


𝑗𝑗
𝑘𝑘

Quindi tutte le disequazioni triangolo che si possono definire per un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)
sono un caso particolare di disequazione a due partizioni per un’opportuna scelta
degli insiemi 𝑆𝑆 e 𝑇𝑇
CPP – Formulazione con disequazioni a due partizioni 1/2
Consideriamo il poliedro definito da tutte le possibili disequazioni a due partizioni
relative al grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴)

𝑃𝑃′′ = {0𝑚𝑚 ≤ 𝑥𝑥 ≤ 1𝑚𝑚 : 𝑥𝑥 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥 𝐸𝐸 𝑆𝑆 − 𝑥𝑥 𝐸𝐸 𝑇𝑇 ≤ min 𝑆𝑆 , 𝑇𝑇 ,


𝑆𝑆, 𝑇𝑇 ⊂ 𝐴𝐴, 𝑆𝑆, 𝑇𝑇 ≠ ∅, 𝑆𝑆 ∩ 𝑇𝑇 = ∅ }

Dal momento che le disequazioni triangolo che si possono definire per un grafo
𝐺𝐺(𝑁𝑁, 𝐴𝐴) sono un caso particolare di disequazione a due partizioni, possiamo
concludere che
𝑃𝑃 ′′ ⊆ 𝑃𝑃′

Grazie a un semplice esempio numerico, è facile concludere che il poliedro 𝑃𝑃′


ammette soluzioni che non sono ammissibili per 𝑃𝑃′′ e quindi possiamo scrivere
𝑃𝑃′′ ⊂ 𝑃𝑃′
CPP – Formulazione con disequazioni a due partizioni 2/2
Consideriamo un semplice grafo 𝐺𝐺 𝑁𝑁, 𝐴𝐴 con 𝑁𝑁 = {1,2,3,4}. Consideriamo i due
sottoinsiemi disgiunti e non vuoti 𝑆𝑆 = {1} e 𝑇𝑇 = {2,3,4} dell’insieme 𝑁𝑁 e la soluzione
rappresentata in figura, dove gli archi tratteggiati rappresentano le componenti nulle
della soluzione
𝑆𝑆 1  x12   1 2  x̂ soddisfa tutte le 12
 
1 1  x13   1 2  disequazioni triangolo
2 2 x   1 
x̂ = 
14
 =  2 x̂ non soddisfa la
1
𝑇𝑇 2 0 2  x 23   0 
x    disequazione a due
0
3  24   0  partizioni relativa agli
4 0 x    insiemi 𝑆𝑆 e 𝑇𝑇
 23   0 

x12 + x13 + x14 − x 23 − x 24 − x 34 > 1


x̂ ∈ P'
1 + 1 + 1 −0 −0 −0 >1
2 2 2 x̂ ∉ P''
Disequazioni a due partizioni e clique
Una disequazione a due partizioni (𝑆𝑆, 𝑇𝑇) associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 è valida per il
poliedro 𝑃𝑃∗

La disequazione a due partizioni (𝑆𝑆, 𝑇𝑇) associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 definisce il


poliedro 𝑃𝑃∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) se e solo se 𝑆𝑆 ≠ |𝑇𝑇|

L’insieme di tutte le possibili disequazioni a due partizioni (𝑆𝑆, 𝑇𝑇) associate a


sottoinsiemi 𝑆𝑆 e 𝑇𝑇 tali che 𝑆𝑆 ≠ |𝑇𝑇| non definisce completamente il poliedro 𝑃𝑃∗

Possiamo però concludere che 𝑃𝑃′′ è una formulazione migliore di 𝑃𝑃′ in base alle

x’ P’
definizioni date nella lezione 12

Possiamo inoltre concludere l’inclusione stretta


P’’
P*
𝑃𝑃∗ ⊂ 𝑃𝑃′′ ⊂ 𝑃𝑃′
Disequazioni a due partizioni – Separazione
Nell’esempio precedente abbiamo visto come una soluzione appartenente al
poliedro 𝑃𝑃′ sia inammissibile per il poliedro 𝑃𝑃′′ . Questo implica che esista una
disequazione a due partizioni che definisce il poliedro 𝑃𝑃′′ violata dalla soluzione

Problema di separazione

Data una soluzione 𝑥𝑥� ∈ 𝑃𝑃′ , è possibile verificare che appartenga al poliedro 𝑃𝑃′′
ovvero, se non vi appartiene, identificare due sottoinsiemi disgiunti e non vuoti 𝑆𝑆 e 𝑇𝑇
tali che la disequazione a due partizioni associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 sia violata
dalla soluzione 𝑥𝑥�?

𝑥𝑥� 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥� 𝐸𝐸 𝑆𝑆 − 𝑥𝑥� 𝐸𝐸 𝑇𝑇 > min 𝑆𝑆 , 𝑇𝑇


Disequazioni a due partizioni – Euristica di separazione 1/2
Sia 𝑥𝑥 ′ ∈ 𝑃𝑃′ una soluzione appartenente al poliedro 𝑃𝑃′ . L’obiettivo dell’euristica di
separazione è identificare due sottoinsiemi disgiunti e non vuoti 𝑆𝑆 e 𝑇𝑇 con 𝑆𝑆 = 1 tali
che la disequazione a due partizioni associata ai sottoinsiemi 𝑆𝑆 e 𝑇𝑇 sia violata dalla
soluzione 𝑥𝑥 ′ ?

Euristica di separazione
Per ogni i ∈N
poni S = { i } e determina l’insieme W = { j ∈N \{i} : 0 < xij’ < 1 }
scegli un ordinamento nell’insieme W: W = { j1, …, jl }
poni T = { j1}
per ogni k = 2, …, l poni T = T ∪ { jk } se xjkjk’’ = 0 per ogni jk’ ∈T
se |T|>1 e x’(δ(S,T))>1, la disequazione a 2 partizioni (S,T) è violata
Disequazioni a due partizioni – Euristica di separazione 2/2
Si noti che l’algoritmo proposto è euristico con complessità 𝑂𝑂 𝑛𝑛3

Come molte euristiche, l’output dell’algoritmo dipende dai parametri in input: la


disequazione a due partizioni restituita dipende dall’ordinamento scelto nell’insieme
W. Cambiando l’ordinamento potrebbe cambiare la disequazione restituita

Dal momento che non si tratta di un metodo esatto, se l’algoritmo non restituisce
alcuna disequazione non possiamo concludere che 𝑥𝑥 ′ ∈ 𝑃𝑃′′
Euristica di separazione – Esempio 1/2
Consideriamo la soluzione x’ in figura
S 1

1 1 Iterazione 1
2 2
T
1 Sia i = 1 e poniamo S = { 1 }
2 0 2
0 Definiamo W = { 2, 3, 4 } e scegliamo come
3
4 0
ordinamento dato dalla permutazione naturale
Poniamo T = { 2 } e verifichiamo:
T = T ∪ { 3 } se x32’ = 0 T = { 2, 3 }
T = T ∪ { 4 } se x43’ = 0 e x42’ = 0 T = { 2, 3, 4 }

x’(S,T)= 3 / 2 >1 x(δ(S, T)) − x(E(S)) − x(E(T)) > 1

x(δ(S, T)) − x(E(S)) − x(E(T)) ≤ 1


Euristica di separazione – Esempio 2/2
Iterazione 2
1 1
2 2
T Sia i = 2 e poniamo S = { 2 }
1
2 0 2
0 Definiamo W = { 1 }
3
4 0

Poniamo T = { 1 }

|T| = 1 non è possibile determinare una disequazione violata


Per simmetria, è facile verificare che le iterazione 3 e 4 danno lo
stesso risultato dell’iterazione 2.
L’unica disequazione violata da x’ trovata dall’algoritmo è
x12 + x13 + x14 − x 23 − x 24 − x 34 ≤ 1
CPP – Formulazione

Per il problema di partizione in clique dei nodi di un grafo non conosciamo tutte le
disequazioni che definiscono la formulazione ottima 𝑃𝑃 ∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) ma

• conosciamo alcune famiglie di disequazioni valide per 𝑃𝑃∗

• conosciamo alcune famiglie di disequazioni che definiscono 𝑃𝑃∗

In particolare, conosciamo le disequazioni triangolo relative ai nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 ∈ 𝑁𝑁


𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1 ⇒ 𝑃𝑃′

e le disequazioni a due partizioni relative ai sottoinsiemi disgiunti e non vuoti 𝑆𝑆 e 𝑇𝑇


dell’insieme dei nodi 𝑁𝑁
𝑥𝑥 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥 𝐸𝐸 𝑆𝑆 − 𝑥𝑥 𝐸𝐸 𝑇𝑇 ≤ min{ 𝑆𝑆 , |𝑇𝑇|} ⇒ 𝑃𝑃′′
CONCLUSIONE

In questa lezione abbiamo introdotto la formulazione del problema di partizione in


clique dei nodi di un grafo rispetto alle disequazioni a due partizioni, che abbiamo
visto comprendere l’insieme delle disequazioni triangolo in particolari condizioni.

Abbiamo quindi illustrato un algoritmo euristico di separazione per le disequaioni a


due partizioni

Nella prossime lezioni vedremo la strategia di soluzione del problema di partizione in


clique basata sul metodo dei piani di taglio
Ricerca Operativa 2

Lezione 21 di 48
Clustering dei dati
Approfondimento
Approfondimento su testo
Studiare le sezioni 6 e 6.1 delle dispense “Data Clustering”

Le dispense “Data Clustering” sono rese disponibili per consultazione telematica


dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 21 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Si consideri il grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con un insieme 𝑁𝑁 = 1,2,3,4 . Definire la disequazione
a due partizione associata agli insiemi 𝑆𝑆 = {1,4} e 𝑆𝑆 = {2,3}

1 2

4 3
Esercizio proposto
Si consideri un insieme 𝑁𝑁 = 1,2,3,4,5 di osservazioni e la soluzione del problema
di partizione in clique illustrata nel seguente grafo
0
b
a
0
0.5 0.5
1
0.5
0.5
c 0
1
d e
0
Determinare se la soluzione appartenga o meno alla formulazione con
disequazioni triangolo
Esercizio proposto
Si consideri un insieme 𝑁𝑁 = 1,2,3,4,5 di osservazioni e la soluzione del problema
di partizione in clique illustrata nel seguente grafo
0
2 1

0.5 0.2
0.5
0
0.5
4 0
1 0.3
3
5
0.3
Applicare l’algoritmo euristico per determinare una disequazione a due partizioni
violata dalla soluzione data
Ricerca Operativa 2

Lezione 21 di 48
Clustering dei dati
Domande aperte
Illustrare la famiglia di disequazioni a due partizioni valide per il problema di
partizione in clique dei nodi di un grafo
Spiegare in che relazione sono tra loro la formulazione con disequazioni triangolo
e disequazioni a due partizioni valide per il problema di partizione in clique dei
nodi di un grafo
Definire l’algoritmo euristico di separazione delle disequazioni a due partizioni per
il problema di partizione in clique dei nodi di un grafo
Ricerca Operativa 2

Lezione 22 di 48
Clustering dei dati
Metodo dei piani di taglio
Introduzione
Nella precedente lezione abbiamo introdotto la formulazione del problema di
partizione in clique dei nodi di un grafo rispetto alle disequazioni a due partizioni,
che abbiamo visto comprendere l’insieme delle disequazioni triangolo in particolari
condizioni

In questa lezione illustreremo una strategia di soluzione del problema di partizione


in clique basato sul metodo dei piani di taglio, disequazioni triangolo e
disequazioni a due partizioni, dove sfrutteremo l’euristica di separazione vista in
precedenza

Nella prossime lezioni vedremo alcuni esempi e concluderemo questa parte del
corso presentando un metodo euristico di soluzione per il problema
Metodo dei piani di taglio - Generalità
Il metodo del piano di taglio fu introdotto dal ricercatore americano Ralph Edward
Gomory nel 1958 per la soluzione di problemi di Programmazione Lineare Intera
(PLI). Nella forma originale e successive rielaborazioni, il metodo non faceva
riferimento al concetto di formulazione visto in questo corso

Il metodo verrà qui presentato come metodo generale per la soluzione di problemi di
PL01 e una sua diretta applicazione verrà mostrata per il problema di partizione in
clique dei nodi di un grafo introdotto nelle lezioni precedenti

Faremo quindi riferimento alle definizioni di formulazione, formulazione ottima e


disequazione valida per un problema di PL01 viste nelle lezioni precedenti

Di conseguenza, restringeremo la nostra attenzione a problemi di PL01 con insieme


delle soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛 , con
𝑆𝑆 insieme limitato
Formulazione e rilassamento lineare – Richiami 1/2
Come abbiamo visto nella lezione 12, dato un problema di PL01 con insieme delle
soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e vettore dei costi elementari c ∈ ℝ𝑛𝑛 , si definisce si
definisce formulazione lineare il poliedro 𝑃𝑃 = {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝐴𝐴𝐴𝐴 ≤ 𝑏𝑏} tale che

𝑆𝑆 = 𝑃𝑃 ∩ {0,1}𝑛𝑛

dove {0,1}𝑛𝑛 è l’𝑛𝑛–Cubo Unitario. Data la definizione di formulazione, possiamo


riscrivere il problema di PL01 nel seguente modo
𝑇𝑇 min 𝑐𝑐 𝑇𝑇 𝑥𝑥
min 𝑐𝑐 𝑥𝑥 ⇒ 𝑥𝑥 ∈ 𝑃𝑃
𝑥𝑥 ∈ 𝑆𝑆 𝑥𝑥 ∈ {0,1}𝑛𝑛
Il problema di PL ottenuto rimuovendo i vincoli di interezza sulle componenti del
vettore 𝑥𝑥 viene detto rilassamento lineare del problema di PL01

min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑃𝑃
Formulazione e rilassamento lineare – Richiami 2/2
Come abbiamo visto nella lezione 12, possiamo concludere che

1. il valore ottimo 𝑧𝑧 𝑅𝑅 = min{𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑃𝑃} del rilassamento lineare fornisce una
limitazione inferiore per il valore ottimo 𝑧𝑧 ∗ del problema di PL01
𝑧𝑧 𝑅𝑅 ≤ 𝑧𝑧 ∗
2. se la soluzione ottima 𝑥𝑥 𝑅𝑅 del rilassamento lineare ha tutte componenti intere
allora 𝑥𝑥 𝑅𝑅 è una soluzione ottima del problema di PL01

𝑥𝑥 𝑅𝑅 ∈ 𝑃𝑃 ∧ 𝑥𝑥 𝑅𝑅 ∈ 0,1 𝑛𝑛
⇒ 𝑥𝑥 𝑅𝑅 ∈ 𝑆𝑆

3. se esiste una soluzione ammissibile 𝑥𝑥̅ ∈ 𝑆𝑆 diversa da 𝑥𝑥 𝑅𝑅 ma tale che


𝑧𝑧 𝑅𝑅 = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅
allora possiamo concludere che 𝑥𝑥̅ è soluzione ottima del problema di PL01
Formulazione ottima – Richiami
La formulazione ottima 𝑃𝑃∗ di un problema di PL01 è il più piccolo insieme convesso
contenente le soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 del problema di PL01, vale a dire
l’involucro convesso delle soluzioni in 𝑆𝑆

𝑃𝑃∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆)

Data una qualsiasi formulazione 𝑃𝑃′ di un problema di PL01, 𝑃𝑃′ contiene 𝑃𝑃∗

𝑃𝑃∗ ⊆ 𝑃𝑃′

Dal momento che ogni vertice di 𝑃𝑃∗ è una soluzione in 𝑆𝑆, se ottimizziamo la funzione
obiettivo del problema di PL01 (𝑆𝑆, 𝑐𝑐) abbiamo l’equivalenza tra i due problemi

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 min 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑆𝑆 𝑥𝑥 ∈ 𝑃𝑃∗
Piani di taglio – Principali caratteristiche
Il metodo dei piani di taglio (anche detto metodo di Gomory) individua la soluzione
ottima del problema di PL01 in un numero finito di passi per raffinamenti successivi
della formulazione lineare del problema

Le caratteristiche principali sono rappresentate da due concetti chiavi, che andiamo


a illustrare prima di definire il metodo dei piani di taglio:

1. il rafforzamento di una disequazione valida per un poliedro

2. la sequenza di Gomory
Piani di taglio – Rafforzamento di una disequazione valida
Rafforzamento di una disequazione valida per un poliedro

Sia
𝛼𝛼 𝑇𝑇 𝑥𝑥 ≤ 𝛽𝛽
una disequazione valida per il poliedro 𝑃𝑃 (vale a dire 𝑃𝑃 ⊆ {𝑥𝑥: 𝛼𝛼 𝑇𝑇 𝑥𝑥 ≤ 𝛽𝛽} ). La
disequazione
𝑛𝑛

� 𝛼𝛼𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝛽𝛽
𝑖𝑖=1

è soddisfatta da ogni vettore 𝑦𝑦 ∈ 𝑃𝑃 ∩ {0,1}𝑛𝑛

L’idea nasce dall’osservazione che l’ipotesi di interezza delle componenti del vettore
soluzione 𝑥𝑥 può consentire il rafforzamento di una disequazione valida per un
poliedro 𝑃𝑃 contenente tutte e sole le soluzioni ammissibili del problema di PL01
Piani di taglio – Sequenza di Gomory
Dato un problema di PL01 con insieme delle soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e
vettore dei costi elementari c ∈ ℝ𝑛𝑛 e una sua formulazione 𝑃𝑃, si definisce sequenza
di Gomory una sequenza di poliedri {𝑃𝑃0 , 𝑃𝑃1 , … , 𝑃𝑃𝑡𝑡 } tali che 𝑃𝑃0 ⊃ 𝑃𝑃1 ⊃ ⋯ ⊃ 𝑃𝑃𝑡𝑡 aventi le
seguenti proprietà:

1. 𝑃𝑃𝑖𝑖 è una formulazione del problema di PL01 per 𝑖𝑖 = 0,1, … , 𝑡𝑡

∗ ∗
2. 𝑥𝑥𝑖𝑖−1 ∉ 𝑃𝑃𝑖𝑖 dove 𝑥𝑥𝑖𝑖−1 = arg min{ 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑃𝑃𝑖𝑖−1 }

3. 𝑥𝑥𝑡𝑡∗ è a componenti intere (𝑥𝑥𝑡𝑡∗ ∈ {0,1}𝑛𝑛 ) dove 𝑥𝑥𝑡𝑡∗ = arg min{ 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑃𝑃𝑡𝑡 }

Data una sequenza di Gomory, le proprietà 1. e 3. implicano che 𝑥𝑥𝑡𝑡∗ è la soluzione


ottima del problema di PL01
Piani di taglio – Oracolo di separazione
Si definisce sequenza parziale di Gomory una sequenza di poliedri {𝑃𝑃0 , 𝑃𝑃1 , … , 𝑃𝑃𝑡𝑡 } tali
che 𝑃𝑃0 ⊃ 𝑃𝑃1 ⊃ ⋯ ⊃ 𝑃𝑃𝑡𝑡 e che godano delle proprietà 1. e 2.

Determinare la soluzione ottima 𝑥𝑥 ∗ del problema di PL01 è sempre


possibile attraverso la costruzione di una sequenza di Gomory

Si definisce oracolo di separazione un algoritmo che, data la soluzione ottima 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖
della formulazione 𝑖𝑖-esima, restituisce (se esiste) un iperpiano
𝐻𝐻 = {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝛼𝛼 𝑇𝑇 𝑥𝑥 = 𝛽𝛽}

tale che
a) 𝛼𝛼 𝑇𝑇 𝑥𝑥𝑖𝑖∗ > 𝛽𝛽 𝐻𝐻 permette di separare la soluzione ottima
della formulazione corrente (𝑖𝑖-esima) dalle
b) 𝛼𝛼 𝑇𝑇 𝑥𝑥 ≤ 𝛽𝛽 per ogni 𝑥𝑥 ∈ 𝑃𝑃∗
soluzioni ammissibili del problema di PL01
𝐻𝐻 viene detto iperpiano di separazione
Metodo dei piani di taglio 1/2
Dato un problema di PL01 con insieme delle soluzioni ammissibili 𝑆𝑆 ⊆ {0,1}𝑛𝑛 e
vettore dei costi elementari c ∈ ℝ𝑛𝑛 , il metodo dei piani di taglio produce una
sequenza di Gomory per il problema di PL01

Ogni formulazione 𝑃𝑃𝑖𝑖 della sequenza definisce un rilassamento lineare del problema
di PL01, quindi 𝑃𝑃𝑖𝑖 ∩ 0,1 𝑛𝑛 = 𝑆𝑆. Vediamo i due passi principali in cui si articola il
metodo:

1. Se la soluzione ottima 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖 della formulazione 𝑖𝑖-esima ha tutte le componenti


intere allora 𝑥𝑥𝑖𝑖∗ ∈ 𝑆𝑆. In questo caso 𝑥𝑥𝑖𝑖∗ è la soluzione ottima del problema di PL01
e il metodo termina
Metodo dei piani di taglio 2/2
2. Altrimenti almeno una componente di 𝑥𝑥𝑖𝑖∗ è frazionaria e viene invocato l’oracolo
di separazione sulla soluzione 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖 per separare la soluzione frazionaria dalle
soluzioni a componenti intere in 𝑆𝑆

a) l’oracolo restituisce un iperpiano 𝐻𝐻 = {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝛼𝛼 𝑇𝑇 𝑥𝑥 = 𝛽𝛽} tale che


𝑆𝑆 ⊆ {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝛼𝛼 𝑇𝑇 𝑥𝑥 ≤ 𝛽𝛽} che separa la soluzione ottima del rilassamento
lineare 𝑃𝑃𝑖𝑖 dalle soluzioni a componenti intere in 𝑆𝑆

b) la disequazione fornita dall’oracolo e valida per 𝑆𝑆 può essere rafforzata


tramite la procedura vista per il rafforzamento di una disequazione valida

c) aggiungendo la disequazione determinata dall’oracolo e rafforzata al


poliedro 𝑃𝑃𝑖𝑖 si ottiene un nuovo poliedro
𝑃𝑃𝑖𝑖+1 = 𝑃𝑃𝑖𝑖 ∩ {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝛼𝛼 𝑇𝑇 𝑥𝑥 ≤ 𝛽𝛽}
che contiene tutte le soluzioni a componenti intere in 𝑆𝑆 tranne la
soluzione frazionaria 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖
Metodo dei piani di taglio – Convergenza 1/2
Il metodo itera la procedura appena definita finché la soluzione ottima 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖 della
formulazione 𝑖𝑖-esima non abbia tutte le componenti intere. In tal caso, l’oracolo di
separazione non produce alcun iperpiano di separazione

L’iperpiano di separazione 𝐻𝐻 = {𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝛼𝛼 𝑇𝑇 𝑥𝑥 = 𝛽𝛽} viene dettto anche piano di taglio
o taglio di Gomory

Gli aspetti più interessanti del metodo sono che

• Aggiungendo disequazioni generate e rafforzate iterativamente, si ottengono


formulazioni sempre migliori (rispetto al criterio definito nella lezione 12)
𝑃𝑃0 ⊃ 𝑃𝑃1 ⊃ ⋯ ⊃ 𝑃𝑃𝑡𝑡

• Si può dimostrare che è necessario generare un numero finito 𝑡𝑡 di piani di taglio


𝐻𝐻1 , 𝐻𝐻2 , . . , 𝐻𝐻𝑡𝑡 per produrre una formulazione 𝑃𝑃𝑡𝑡 con soluzione ottima intera (anche
se non necessariamente 𝑃𝑃𝑡𝑡 = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆)).
Metodo dei piani di taglio – Convergenza 2/2
Si noti che se al passo 2. della procedura l’oracolo di separazione non restituisce
alcun iperpiano di separazione, allora non esiste un iperpiano che separi la soluzione
𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖 dalle soluzioni a componenti intere in 𝑆𝑆

In tal caso, 𝑥𝑥𝑖𝑖∗ deve soddisfare le disequazioni che definiscono il poliedro 𝑃𝑃∗ =
𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) e quindi 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃∗

Inoltre, poiché 𝑥𝑥𝑖𝑖∗ è un vertice di 𝑃𝑃𝑖𝑖 e quindi è anche un vertice di 𝑃𝑃∗ e quindi
appartiene a 𝑆𝑆. Di conseguenza,

• 𝑥𝑥𝑖𝑖∗ è a componenti intere

• 𝑃𝑃𝑖𝑖 = 𝑃𝑃𝑡𝑡

• l’algoritmo termina
CONCLUSIONE

In questa lezione abbiamo introdotto un metodo generale di soluzione dei problemi di


PL01 detto metodo dei piani di taglio. Il metodo di basa sui concetti di rafforzamento
di una disequazione valida per il problema di PL01 e di sequenza di Gomory.

Nella prossima lezione vedremo l’applicazione del metodo dei piani di taglio al
problema di partizione in clique dei nodi di un grafo
Ricerca Operativa 2

Lezione 22 di 48
Clustering dei dati
Applicazione del metodo dei piani di taglio
Introduzione
Nella precedente lezione abbiamo introdotto un metodo generale di soluzione dei
problemi di PL01 detto metodo dei piani di taglio che si basa su due concetti
fondamentali: rafforzamento di una disequazione valida per il problema di PL01 e
sequenza di Gomory, che comprende il meccanismo di generazione degli
iperpiani di taglio attraverso la definizione di un opportuno oracolo di separazione

In questa lezione vedremo l’applicazione del metodo dei piani di taglio al


problema di partizione in clique dei nodi di un grafo definito nelle lezioni
precedenti

Si considerano qui richiamate le definizioni delle disequazioni triangolo e delle


disequazioni a due partizioni illustrate per il problema, nonché dell’euristica di
separazione introdotta nella lezione 21
CPP – Richiami
Per il problema di partizione in clique dei nodi di un grafo non conosciamo tutte le
disequazioni che definiscono la formulazione ottima 𝑃𝑃 ∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) ma

• conosciamo alcune famiglie di disequazioni valide per 𝑃𝑃∗

• conosciamo alcune famiglie di disequazioni che definiscono 𝑃𝑃∗

In particolare, conosciamo le disequazioni triangolo relative ai nodi 𝑖𝑖, 𝑗𝑗, 𝑘𝑘 ∈ 𝑁𝑁


𝑥𝑥𝑖𝑖𝑖𝑖 + 𝑥𝑥𝑖𝑖𝑖𝑖 − 𝑥𝑥𝑗𝑗𝑗𝑗 ≤ 1 ⇒ 𝑃𝑃′

e le disequazioni a due partizioni relative ai sottoinsiemi disgiunti e non vuoti 𝑆𝑆 e


𝑇𝑇 dell’insieme dei nodi 𝑁𝑁
𝑥𝑥 𝛿𝛿(𝑆𝑆, 𝑇𝑇) − 𝑥𝑥 𝐸𝐸 𝑆𝑆 − 𝑥𝑥 𝐸𝐸 𝑇𝑇 ≤ min{ 𝑆𝑆 , |𝑇𝑇|} ⇒ 𝑃𝑃′′
CPP e piani di taglio – Generalità 1/2
Per il problema di partizione in clique dei nodi di un grafo possiamo applicare il
metodo dei piani di taglio tenendo conto del fatto che conosciamo due
formulazioni del problema: 𝑃𝑃′ e 𝑃𝑃′′

Dato che ambo le formulazioni sono definite da un considerevole numero di


disequazioni, rilasseremo il vincolo che la sequenza di problemi generati dal
metodo dei piani di taglio sia una sequenza di formulazioni del problema CPP

La sequenza di problemi che andremo a definire sfrutterà un oracolo di


separazione diverso per ciascuna formulazione
CPP e piani di taglio – Generalità 2/2
𝑛𝑛
• Per 𝑃𝑃′ consideriamo che è sempre possibile enumerare tutte le 3
3
disequazioni triangolo per un grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con 𝑛𝑛 = |𝑁𝑁| nodi e quindi possiamo
sempre verificare se una disequazione triangolo è violata dalla soluzione ottima
𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖 senza necessariamente inserire tutte le disequazioni triangolo nel
problema corrente: se 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃𝑖𝑖 soddisfa tutte le disequazioni triangolo, allora
possiamo concludere che 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃′

• Per 𝑃𝑃′′ abbiamo invece definito un algoritmo euristico per la separazione di una
soluzione a componenti frazionarie dalla soluzioni a componenti intere in 𝑆𝑆. Dal
momento che la separazione avviene tramite un’euristica,
• se l’oracolo di separazione determina un iperpiano di separazione, allora
possiamo rafforzare il problema corrente e procedere oltre
• altrimenti non possiamo concludere che 𝑥𝑥𝑖𝑖∗ ∈ 𝑃𝑃′′
CPP – Metodo dei piani di taglio 1/4
CPP – Metodo dei piani di taglio 2/4
CPP – Metodo dei piani di taglio 3/4
CPP – Metodo dei piani di taglio 4/4
Metodo dei piani di taglio – Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Esempio
Metodo dei piani di taglio - Considerazioni

Nell’esempio appena visto non abbiamo fatto alcun riferimento a una soluzione
ammissibile per il problema

La disponibilità di tale soluzione ammissibile avrebbe potuto giocare un ruolo


determinante nell’applicazione del metodo branch and bound all’ultima iterazione,
soprattutto nel caso in cui l’intersezione P 2 ∩ {0,1}15 avesse contenuto molte
soluzioni ammissibili

Serve pertanto un metodo euristico molto efficiente in grado di fornirci una soluzione
ammissibile per il problema dei partizione in clique dei nodi di un grafo
CONCLUSIONE

In questa lezione abbiamo applicato il metodo generale dei piani di taglio al


problema di partizione in clique dei nodi di un grafo che permette di rafforzare
successivamente i rilassamenti del problema limitando il numero di disquequazioni
valide da generare grazie a due oracoli di separazione: enumerativo (e quindi esatto)
il primo, euristico il secondo

L’approccio di soluzione proposto permette di risolvere il problema invocando il


metodo branch and bound su un problema descritto da un numero molto limitato di
disquazioni

Nella prossima lezione vedremo un metodo euristico di soluzione per il problema di


partizione in clique dei nodi di un grafo
Ricerca Operativa 2

Lezione 22 di 48
Clustering dei dati
Approfondimento
Approfondimento su testo
Studiare le sezioni 4.4.2 del libro di testo.

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 22 di 48
Clustering dei dati
Domande aperte
Illustrare le principali caratteristiche del metodo dei piani di taglio
Definire i principali passi del metodo dei piani di taglio
Illustrare come applicare il metodo dei piani di taglio al problema di partizione in
clique dei nodi di un grafo
Ricerca Operativa 2

Lezione 23 di 48
Clustering dei dati
Metodo euristico
Introduzione
CPP – Algoritmo euristico 1/3
CPP – Algoritmo euristico 2/3
CPP – Algoritmo euristico 3/3
Algoritmo euristico – Esempio 1/4
Algoritmo euristico – Esempio 2/4
Algoritmo euristico – Esempio 3/4
Algoritmo euristico – Esempio 4/4
Conclusione
Ricerca Operativa 2

Lezione 23 di 48
Clustering dei dati
Approfondimento
Approfondimento su testo
Studiare le sezioni 6.2 e 6.3 delle dispense “Data Clustering”

Le dispense “Data Clustering” sono rese disponibili per consultazione telematica


dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 23 di 48
Clustering dei dati
Metodo euristico
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 23 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
Si consideri il grafo la soluzione ottima x 3 del problema di partizione in clique del
grafo 𝐺𝐺(𝑁𝑁, 𝐴𝐴) con insieme 𝑁𝑁 = 1,2,3,4,5,6 . Definire la partizione ottima
P ∗ associata a x 3
 x12   0
   
 x13 
2 x 
 0
3  14 
 x15 
 1
 
 0
x   0
 16   
 x 23 
1 1  
 0
 
 x 24   0
 x 25 
x3 =   = 1
 
 x 26   0
x   0
1  34   
 x 35 
1
4 x 
 0
 1
 36   
 x 45 
6  
 0
5  x 46 
x 
 
 0
 56   0
 
Esercizio proposto
Esercizio proposto
Ricerca Operativa 2

Lezione 23 di 48
Clustering dei dati
Domande aperte
Illustrare i principali metodi di risoluzione del problema di partizione in clique dei
nodi di un grafo
Illustrare il metodo euristico per la soluzione dei problemi di partizione in clique dei
nodi di un grafo
Spiegare il ruolo dell’algoritmo euristico nella soluzione dei problemi di partizione
in clique dei nodi di un grafo
Ricerca Operativa 2

Lezione 24 di 48
Clustering dei dati
Esercizi proposti
Esercizio proposto
ESERCIZIO: Considerato un insieme di n = 6 istanze e definite le
distanze illustrate nel seguente grafo (arco tratteggiato = peso 0)

2
1 5
7 2 1
4
2 2 4 3
3 4 2
1
3 6
3
1
Verificare e motivare se le relazioni date definiscono sull’insieme
delle istanze una distanza, una semimetrica o una metrica
Esercizio proposto 1/2
ESERCIZIO: Considerato un insieme di n = 6 istanze e definite le
distanze illustrate nel seguente grafo (arco assente = peso 0)

1
4 4
2 5 2
3
1 6
2 3 4
4 2 7
1
3 5
6
2
Esercizio proposto 2/2

Si considerino le due partizioni dei nodi:


P1(G)= { V1, V2, V3 } e P2(G)= { V4, V5 }
con V1 = { 1, 2, 3 }, V2 = { 4, 5 }, V3 = { 6 },
V4 = { 2, 3 }, V5 = { 1, 4, 5, 6 }.
Dire se sono soluzioni ammissibili del problema di partizione in
clique con s = 1 e valutare quale delle due è la miglior soluzione
Esercizio proposto
ESERCIZIO: Considerato un insieme di n = 5 istanze e la soluzione
del problema di partizione in clique illustrata nel seguente grafo

0
b
a
0
0.5 0.5
1
0.5
0.5
c 0
1
d e
0
verificare che la soluzione data appartenga al poliedro P’ definito
dalle disequazioni triangolo
Esercizio proposto
ESERCIZIO: Considerato un insieme di n = 5 istanze e la soluzione
del problema di partizione in clique illustrata nel seguente grafo
0.5
b
a
0.5
0.5 0.5
1
0.5
0.5
c 1
1
d e
0
verificare che la soluzione data appartenga al poliedro P’ definito
dalle disequazioni triangolo
Ricerca Operativa 2

Lezione 25 di 48
AMPL
Introduzione
Introduzione

Nelle precedenti parti del corso abbiamo visto prevalentemente modelli matematici e
metodi di soluzione, esatti ed euristici, per alcune classi di problemi di ottimizzazione

In questa terza parte del corso introdurremo invece un linguaggio di


programmazione che permette di definire un qualsiasi problema di programmazione
matematica e di invocare uno o più pacchetti software disponibili (proprietari e open
source) che implementano algoritmi di soluzione per problemi di PL e di PLI

Nella prima lezione di questa parte del corso introdurremo i concetti generali per
definire poi le istruzioni del linguaggio e illustrare alcuni esempi nelle lezioni
successive
AMPL in breve 1/2

AMPL sta per A Mathematical Programming Language

AMPL è un linguaggio di modellazione algebrico per problemi di


programmazione matematica:

• problemi lineari e non lineari

• problemi in variabili intere e continue

AMPL impiega una notazione basata su concetti semplici e di uso


comune per rendere più facile il processo di modellazione di un
qualsiasi problema di programmazione matematica
AMPL in breve 2/2

AMPL sta per A Mathematical Programming Language

Come abbiamo visto, modellare o formulare matematicamente un


problema non significa risolverlo. Una volta formulato tramite il
linguaggio AMPL, occorre un opportuno solutore di
programmazione matematica per risolvere il problema attraverso
un processo di soluzione

L’interprete AMPL permette di risolvere un problema formulato


tramite il linguaggio AMPL impiegando direttamente un solutore di
programmazione matematica
Solutori per AMPL – Problemi di programmazione lineare

Sono disponibili diversi solutori richiamabili direttamente


dell’interprete AMPL
La scelta del solutore dipende ovviamente dal tipo di problema
Per i problemi di programmazione lineare dipende dalla natura
delle variabili:
• con variabili continue: BPMPD, CPLEX, LAMPS, LOQO, lp_solve,
MINOS, MOSEK, OSL, SOPT, XA, Xpress-MP
• con variabili intere: CPLEX, LAMPS, lp_solve, MINTO, MOSEK,
OSL, SOPT, XA, Xpress-MP
Solutori per AMPL – Problemi di programmazione non lineare

La scelta del solutore dipende ovviamente dal tipo di problema


Problemi di programmazione non lineare dipende dalla natura delle
variabili:
• quadratici: CPLEX, MOSEK, OSL
• convessi: MOSEK, SOPT
• generali continui: CONOPT, DONLP2, FILTER, FSQP, IPOPT,
KNITRO, LANCELOT, LOQO, MINOS, NPSOL, PENNON, SNOPT
• generali interi: MINLP
Per gli esempi mostrati in questo corso utilizzeremo l’interprete
AMPL e il solutore CPLEX, versione student
AMPL – Informazioni preliminari 1/2

AMPL – Sito ufficiale: www.ampl.com

Tutte le informazioni utili all’installazione e utilizzo di AMPL si trovano sul sito


ufficiale

È possibile scaricare l’interprete AMPL insieme ad alcuni solutori in versione demo


(Free demo version) alla pagina

https://ampl.com/try-ampl/download-a-free-demo/

È possibile il download di un unico file compresso per AMPL Command Line per
Windows (ampl.mswin32.zip o ampl.mswin64.zip) o Linux (ampl.linux32.tgz o
ampl.linux64.tgz)

Decomprimere il file seguendo le istruzioni a seconda del sistema operativo


AMPL – Informazioni preliminari 2/2

AMPL – Sito ufficiale: www.ampl.com

Oltre a informazioni utili, esempi e file in AMPL, sul sito ufficiale è disponibile il libro
AMPL: A Modeling Language for Mathematical Programming scaricabile alla pagina

https://ampl.com/resources/the-ampl-book/

L’appendice del libro è il manuale AMPL ed è


scaricabile separatamente al link

https://ampl.com/BOOK/CHAPTERS/24-refman.pdf
Il linguaggio AMPL – Generalità 1/2
AMPL contiene diversi operatori per esprimere la notazione
matematica normalmente utilizzata nello scrivere problemi di
ottimizzazione (=, <, >, ≤, ≥ , sommatorie, funzioni elementari,
etc.)

La disponibilità di tali operatori rende il linguaggio di immediato


utilizzo sebbene la sintassi delle istruzioni più complesse, come
vedremo, non è sempre ovvia né agevole

Ciascuna istruzione di AMLP deve terminare con un punto e virgola (;).

È quindi possibile l’indentazione delle istruzioni in un file di codice


Il linguaggio AMPL – Generalità 2/2
È possibile scrivere in un unico file di testo con estensione .mod tutte le
istruzioni AMPL che definiscono il modello

MA è bene separare due elementi del problema da risolvere:

1. la struttura del modello nel file .mod in cui sono descritte le


componenti del problema di programmazione matematica (variabili,
funzione obiettivo, vincoli, etc.)

2. i dati del problema nel file .dat in cui sono scritti i dati del problema
(che in AMPL vengono chiamati parametri)

Le righe di commento, sia nel file .mod che nel file .dat, devono essere
precedute dal simbolo # oppure delimitate da /* e */
Conclusione

In questa lezione abbiamo introdotto il linguaggio di programmazione matematica


AMPL per la modellazione e soluzione di un generico problema di programmazione
matematica

La disponibilità di operatori matematici e di adeguate strutture dati (quali quello di


insieme matematico e di vettore) rende il linguaggio estremamente flessibile e
relativamente immediato da usare per formulare un problema di programmazione
matematica

Vedremo alcune di queste strutture dati nella prossima attività


Ricerca Operativa 2

Lezione 25 di 48
AMPL
Insiemi e parametri multidimensionali
Introduzione
Nelle precedente attività abbiamo introdotto il linguaggio di programmazione AMPL (A
Mathematical Programming Language) che permette di formulare un qualsiasi problema di
programmazione matematica e di invocare uno o più pacchetti software disponibili (proprietari e
open source, in base al tipo di problema e alla natura delle variabili) che implementano
algoritmi di soluzione per problemi di PL e di PLI

In questa attività definiremo le istruzioni di dichiarazione di insiemi e parametri in AMPL. Queste


istruzioni sono indispensabili per definire i coefficienti e le variabili di un problema di
programmazione matematica e quindi propedeutiche al resto del corso

Come vedremo successivamente, definire un modello in AMPL significa dichiarare variabili,


vincoli e funzioni obiettivo, per mezzo di insiemi (set) e parametri (parameter)
Gli insiemi in AMPL 1/2

AMPL consente di utilizzare la struttura dato insieme

Un insieme contiene zero o più elementi, detti anche membri


dell’insieme
Ogni elemento di un insieme deve essere distinto dagli altri,
quindi deve avere una rappresentazione diversa
Ciascun elemento dell’insieme è una lista ordinata di uno o più
componenti: tutti i membri di un insieme devono avere pari
lunghezza della lista, detta dimensione dell’insieme
AMPL consente di utilizzare operazioni elementari tra insiemi, quali
unione, intersezione, differenza, differenza simmetrica e cardinalità.
Gli insiemi in AMPL 2/2

Per poter essere usato in AMPL un insieme dev’essere:

• dichiarato (nel file .mod) attraverso la parola chiave set


seguita dal nome identificativo dell’insieme e, opzionalmente,
da un insieme di indicizzazione e da uno o più attributi

• definito (nel file .dat), assegnando gli elementi all’insieme


dichiarato con l’operatore di assegnazione := seguito dagli
elementi dell’insieme separati da spazio, qualora l’insieme
non sia già stato definito in fase di dichiarazione attraverso un
insieme di indicizzazione o da uno o più attributi
Esempi di definizione di un insieme in AMPL 1/2

Per definire l’insieme A di elementi a, b1, b2 e c, dichiariamo nel file


MD25.mod:

set A;

Successivamente definiamo nel file MD25.dat l’insieme assegnando gli


elementi a, b1, b2 e c:

set A := a b1 b2 c;

Sia la dichiarazione che la definizione di un insieme è un’istruzione AMPL:


occorre terminare entrambe le istruzioni con un punto e virgola (;).

Il linguaggio AMLP è case sensitive (e.g. a e A sono elementi diversi)


Esempi di definizione di un insieme in AMPL 2/2
Per definire l’insieme B di elementi 1, 2, 3 , 4 e 5, dichiariamo
nel file MD25.mod:

set B;

Successivamente definiamo nel file MD25.dat l’insieme


assegnando gli elementi a, b1, b2 e c:

set B := 1 2 3 4 5;

Il linguaggio AMLP gli elementi di un insieme sono rappresentati


da espressioni letterari separate da virgole. Quindi l’elemento 1
dell’insieme B è diverso dal valore numerico 1
Insiemi di indicizzazione degli elementi di insiemi in AMPL

Una volta dichiarato un insieme A in AMPL, è possibile descrivere


in maniera sintetica tutti gli elementi dell’insieme tramite
l’espressione {A} o {i in A}

Nel secondo caso, l’indice i varia in A assumendo tutti gli


elementi dell’insieme
Per copiare tutti gli elementi di un insieme in un altro insieme
possiamo usare l’operatore di copia =

Per restringere l’insieme a un sottoinsieme, possiamo specificare


delle restrizioni l’indice i nell’espressione {i in A}

Per definire un insieme come sottoinsieme di un altro


Esempi di indicizzazione degli elementi di un insieme
Per definire l’insieme C avente tutti gli elementi a, b1, b2 e c,
dell’insieme A è sufficiente dichiarare nel file MD25.mod:

set C = A;

Senza definirlo successivamente nel file MD25.dat

Per definire l’insieme D avente tutti gli elementi dell’insieme A tranne c


è sufficiente dichiarare nel file MD25.mod:

set D = {i in A: i <> "c"};

L’operatore : è usato come nella notazione matematica adottata in


ricerca operativa e assume il significato di «tale che»

L’operatore diverso si può esprimere con <> oppure !=


Attributi nella dichiarazione di insiemi in AMPL

Nella dichiarazione (nel file .mod) di un insieme, il nome può essere


seguito da uno o più attributi. Ogni attributo è preceduto da una delle
seguenti parole chiave

• dimen seguito dalla dimensione dell’insieme dichiarato, vale a dire


dalla lunghezza della lista di cui ciascun elemento della lista si
compone
• within seguito da un insieme base (precedentemente dichiarato) di
cui l’insieme è un sottoinsieme
• = seguito dalla definizione degli elementi dell’insieme (come visto
nell’esempio relativo alla dichiarazione dell’insieme C)
• default seguito dall’insieme assunto di default (ad esempio,
l’insieme vuoto, indicato da {})
Esempi di insiemi a più dimensioni in AMPL 1/2
Per definire l’insieme E di elementi ciascuno dei quali è una coppia di
componenti (ad esempio, <a,1>, <b,2> e <c,3>) dichiariamo un
insieme di dimensione 2 nel file MD25.mod:

set E dimen 2;

Successivamente definiamo nel file MD25.dat l’insieme assegnando gli


elementi separati da spazi:

set E := (a,1) (b,2) (c,3);

Ciascuna coppia di componenti può essere rappresentata all’interno di


parentesi tonde () oppure no. Quindi è corretta anche la definizione

set E := a,1 b,2 c,3;


Esempi di insiemi a più dimensioni in AMPL 2/2

Per definire l’insieme F prodotto cartesiano degli insiemi A e B,


dichiariamo nel file MD25.mod l’insieme seguito dall’operatore = e dalla
definizione dell’insieme prodotto cartesiano

set F = {i in A, j in B};

Si noti come {i in A, j in B} definisca un insieme di elementi (di


dimensione 2) ciascuno dei quali è una coppia di componenti (i e j) di
cui il primo fa parte dell’insieme A e il secondo fa parte dell’insieme B

Gli insiemi A e B devono essere precedentemente dichiarati nel file


MD25.mod mentre l’insieme F non necessita di alcuna definizione nel
file MD25.dat
Esempio di sottoinsieme in AMPL

Per definire l’insieme G come sottoinsieme dell’insieme B dichiariamo


nel file MD25.mod l’insieme seguito dalla parola chiave within :

set G within B;

Successivamente definiamo nel file MD25.dat l’insieme assegnando gli


elementi dell’insieme B separati da spazi:

set G := 1 4 5;

In caso gli elementi assegnati a G non siano elementi dell’insieme B di


cui G viene dichiarato sottoinsieme, l’interprete AMPL restituisce un
errore
Esempio di insieme default in AMPL

Per dichiarare l’insieme vuoto come valore di default di un


insieme H dichiariamo nel file MD25.mod l’insieme seguito dalla
parola chiave default seguita dall’insieme vuoto
set H default {};
Se il valore di default di H è l’insieme con elemento 1 allora la
dichiarazione diviene:
set H default {1};

Quando l’insieme H viene definito nel file MD25.dat, i valori


assegnati all’insieme vengono sostituiti all’insieme dichiarato di
default
I parametri in AMPL

AMPL consente di utilizzare la struttura dato parametro


In AMPL i parametri sono i dati del problema, da non confondere con le
variabili: una volta invocato il solutore, il valore dei parametri resta
costante, mentre quello delle variabili viene restituito dal solutore

Per poter essere usato in AMPL un parametro dev’essere:

• dichiarato (nel file .mod), dicendo all’interprete AMPL che un nome


identifica il parametro che vogliamo utilizzare attraverso la parola
chiave param

• definito (nel file .dat), assegnando gli elementi all’insieme dichiarato


con l’operatore di assegnazione :=
Esempio di definizione di un parametro in AMPL
Per definire il parametro n, dichiariamo nel file MD25.mod:

param a;

Successivamente definiamo nel file MD25.dat il valore del


parametro:

param a := 1 ;
Restrizioni sui parametri in AMPL

AMPL consente di dichiarare opportune restrizioni sui parametri

In fase di dichiarazione è possibile indicare delle restrizioni sui


valori che il parametro può assumere attraverso una specifica
della restrizione che segue il nome identificativo del parametro

Se in fase di definizione nel file .dat del valore del parametro


dichiarato, le restrizioni non sono rispettate (ad es. si assegna
un valore negativo a un parametro dichiarato con restrizione di
non negatività), l’interprete AMPL restituisce un errore
Esempi di restrizioni sui parametri in AMPL 1/2

Per definire il parametro positivo b, dichiariamo nel file MD25.mod:

param b > 0;

Per definire il parametro intero positivo c, dichiariamo nel file


MD25.mod:

param c > 0 integer;

Per definire il parametro binario d, dichiariamo nel file MD25.mod:

param d binary;
Esempi di restrizioni sui parametri in AMPL 2/2

Per definire che il parametro e non può assumere valore


inferiore di un altro parametro c precedentemente dichiarato,
dichiariamo nel file MD25.mod:

param e >= c;

Altri operatori che possono compare nelle restrizioni sono gli


operatori matematici e logici

< <= = == != <> > >=


Parametri a più dimensioni 1/2

AMPL consente di utilizzare la struttura dato parametro a più


dimensioni

In AMPL un parametro è per definizione a dimensione nulla

Un parametro a una dimensione è un vettore di parametri

I vettori di parametri sono molto utili per definire vettori di


coefficienti
Parametri a più dimensioni 2/2

Per poter essere usato in AMPL un vettore di parametri dev’essere:

• dichiarato (nel file .mod), dicendo all’interprete AMPL che un nome


identifica il vettore e l’insieme sul quale viene definito l’indice delle
sue componenti attraverso la parola chiave param e le parentesi
{};

• definito (nel file .dat), assegnando i valori al vettore di parametri


dichiarato con l’operatore di assegnazione := seguito da tante
coppie (i,v(i)) quante sono le componenti del vettore con i indice
appartenente all’insieme dichiarato e v(i) valore del vettore
corrispondente all’indice i
Esempi di parametri a una dimensione in AMPL
Per definire il vettore di parametri vett di componenti indicizzate
su un insieme A dichiariamo nel file MD25.mod

param vett{A};

Successivamente definiamo nel file MD25.dat i valori dei


parametri indicizzati sull’insieme A

param vett := a 1 b1 2 b2 3 c 4;
Conclusione

In questa attività abbiamo visto le principali istruzioni di dichiarazione e definizione di


insiemi, parametri e vettori di parametri

Dalla prossima lezione vedremo come dichiarare variabili, vincoli e funzione obiettivo
di un problema di programmazione matematica in AMPL

Successivamente, vedremo come modellare alcuni importanti problemi su grafi e


come invocare diversi solutori per la loro soluzione
Ricerca Operativa 2

Lezione 25 di 48
AMPL
Approfondimento
Approfondimento su manuale
Scaricare il manuale AMPL (AMPL Reference Manual) al link

https://ampl.com/BOOK/CHAPTERS/24-refman.pdf

Leggere le A.6 e A.7

In caso di difficoltà nel reperire il manuale, inviare un messaggio tramite sistema


di messaggistica al docente
Ricerca Operativa 2

Lezione 25 di 48
AMPL
Esercizi proposti
Esercizio proposto

Dato un insiemi di prodotti P = {penne, matite, pennelli}, dichiarare


e definire in AMPL un’adeguata struttura dati per rappresentare
tale insieme
Esercizio proposto

Dato un insiemi di prezzi definiti sull’insieme di prodotti P = {penne,


matite, pennelli}, con
Prezzo(penne) = 2
Prezzo(matite) = 1
Prezzo(pennelli) = 2
dichiarare e definire in AMPL delle adeguate strutture dati per
rappresentare tale dati
Esercizio proposto

Dato un insiemi di nodi N = {v1, v2, v3} e di archi A = {(v1,v2), (v2,v3)},


definiamo i pesi degli archi
c(v1,v2) = 3
c(v2,v3) = 5
Dichiarare e definire in AMPL un’adeguata struttura dati per
rappresentare tali dati
Ricerca Operativa 2

Lezione 26 di 48
AMPL
Rappresentazione di un grafo
Introduzione
Grafo orientato
Sia dato il grafo orientato G(N,A) in figura con
• N = {A, B, C, D, E} insieme dei nodi
• A = {AB, AC, BC, BE, CD, DB, DE} insieme degli archi orientati

A E

C D
Matrice di incidenza nodi archi
La matrice di incidenza nodi archi M di un generico grafo
orientato G(N,A) è una matrice |N|x|A| è una matrice che ha
tante righe quante sono i nodi del grafo e tante colonne quanti
sono gli archi del grafo
Gli elementi 𝑀𝑀𝑖𝑖𝑖𝑖 sono valori in {-1,0,1} che determinano il nodo
sorgente (riga corrispondente con valore -1) e il nodo
destinazione (riga corrispondente con valore 1)

−1 𝑠𝑠𝑠𝑠 𝑖𝑖 è 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑑𝑑𝑑𝑑𝑑𝑑𝑙𝑙′ 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑗𝑗


𝑀𝑀𝑖𝑖𝑖𝑖 = � 1 𝑠𝑠𝑠𝑠 𝑖𝑖 è 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑑𝑑𝑑𝑑𝑑𝑑𝑙𝑙′ 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎 𝑗𝑗
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎
Matrice di incidenza nodi archi – Esempio
Struttura dati GRAFO in AMPL – Dichiarazioni
Struttura dati GRAFO in AMPL – Definizioni
Struttura dati GRAFO in AMPL – Definizioni plurime
Struttura dati GRAFO in AMPL – Esempio 1/2
Struttura dati GRAFO in AMPL – Esempio 2/2
Successivamente definiamo nel file MD26.dat gli elementi degli
insiemi NODI e ARCHI e i valori del parametro a due dimensioni
(matrice) M che caratterizzano la specifica istanza di G(N,A)
set NODI := A B C D E ;
set ARCHI := AB AC BC BE CD DB DE ;

param M :=
A AB -1 A AC -1 A BC 0 A BE 0 A CD 0 A DB 0 A DE 0
B AB 1 B AC 0 B BC -1 B BE -1 B CD 0 B DB 1 B DE 0
C AB 0 C AC 1 C BC 1 C BE 0 C CD -1 C DB 0 C DE 0
D AB 0 D AC 0 D BC 0 D BE 0 D CD 1 D DB -1 D DE -1
E AB 0 E AC 0 E BC 0 E BE 1 E CD 0 E DB 0 E DE 1 ;
Definizione di parametri a due dimensioni – Alternativa 1/2
Definizione di parametri a due dimensioni – Alternativa 2/2
Conclusione
Ricerca Operativa 2

Lezione 26 di 48
AMPL
Flusso su rete di costo minimo
Introduzione

Nella precedente lezione abbiamo visto due definizioni di strutture dati


estremamente utili nel linguaggio di programmazione AMPL: gli insiemi e i parametri.
Nella precedente attività, abbiamo definito insiemi e parametri utili a rappresentare
un grafo in AMPL

In questa attività daremo la definizione di flusso e di rete di flusso. Definiremo il


problema del flusso di costo minimo formulandolo come problema di
Programmazione Matematica
Flusso su rete 1/2
Dato un grafo G(N,A) orientato e
• un vettore d di domande definito sull’insieme N dei nodi del
grafo G(N,A) – d(i)∈ ℝ, ∀ i ∈ N
• un vettore c di capacità positive definito sull’insieme A degli
archi del grafo G(N,A) – c(i,j)>0, ∀(i,j) ∈ A
si definisce flusso di (G,c,d) un vettore x a componenti continue
definito sull’insieme A degli archi del grafo G(N,A) tale che
Flusso su rete 2/2
1. per ogni arco (i,j) del grafo G(N,A) il flusso x(i,j) non ecceda
la capacità c(i,j) dell’arco
vincoli di
0≤ x(i,j) ≤ c(i,j) ∀(i,j) ∈ A capacità
2. per ogni nodo i del grafo G(N,A) la somma dei flussi entranti
(dagli altri nodi in i) meno la somma dei flussi uscenti (da i
agli altri nodi) dev’essere pari alla domanda d(i) del nodo

Indichiamo con 𝛿𝛿− (i) e 𝛿𝛿+ (i) le stelle entranti e uscenti


nel/dal nodo i del grafo G(N,A) ed esprimiamo il vincolo 2.

vincoli di
∑𝑗𝑗∈𝛿𝛿− (i) 𝑥𝑥 𝑗𝑗, i − ∑𝑗𝑗∈𝛿𝛿+ (𝑖𝑖) 𝑥𝑥 i, 𝑗𝑗 = d(i) ∀i ∈ N conservazione
del flusso
Rete di flusso 1/4
Una rete di flusso (G,c,x,d,w) è un grafo orientato G(N,A) in cui
1. ogni arco (i,j) in A ha
• una capacità c(i,j) > 0 positiva

B
6 7

A 2 4 E

4 5
C D
8
Rete di flusso 2/4
Una rete di flusso (G,c,x,d,w) è un grafo orientato G(N,A) in cui
1. ogni arco (i,j) in A ha
• una capacità c(i,j) > 0 positiva
• un flusso xij o x(i,j)

(6, xAB) B (7, xBE)

A (2, xBC) (4, xDB) E

(4, xAC) (5, xDE)


C D
(8, xCD)
Rete di flusso 3/4
Una rete di flusso (G,c,x,d,w) è un grafo orientato G(N,A) in cui
1. ogni arco (i,j) in A ha
• una capacità c(i,j) > 0 positiva
• un flusso xij o x(i,j)
• un costo w(i,j) positivo o negativo

B
2 5

A 1 2 E

3 1 4
C D
Rete di flusso 4/4
2. ogni nodo i in N ha una domanda di flusso d(i) che è
 positiva se è una domanda
 negativa se è un’offerta
La somma delle domande d(i) di una rete di flusso è nulla

6
B

-5 A E 4

C D
-5 0
Vincoli in un rete di flusso 1/2
Vincoli in un rete di flusso 2/2
Flusso di costo minimo
Dato un grafo G(N,A) e
• un vettore d di domande definito sull’insieme N dei nodi del
grafo G(N,A)
• un vettore c di capacità definito sull’insieme A degli archi del
grafo G(N,A)
• un vettore w di costi definito sull’insieme A degli archi del
grafo G(N,A)
il problema del flusso di costo minimo (Minimum Cost Flow –
MCF) è il problema di determinare un flusso x (incognito) sul
grafo di flusso (G,c,x,d,w) che rispetti i vincoli di capacità e i
vincoli di conservazione del flusso e minimizzi il costo totale,
vale a dire la funzione
w(x) = wTx
Flusso di costo minimo – Formulazione 1/2
Per formulare il problema del flusso di costo minimo (MCF)
definiamo
• le variabili del problema – le componenti del flusso incognito
x, ogni componente x(i,j) del vettore indica la quantità di
flusso che transita dal nodo i al nodo j, per ogni arco (i,j) in A

• l’insieme dei vincoli che rende il vettore x un flusso


ammissibile nella rete di flusso (G,c,x,d,w) – l’insieme è dato
dai vincoli di capacità (tanti quanti sono gli archi in A) e dai
vincoli di conservazione del flusso (tanti quanti sono i nodi in
N)

• la funzione obiettivo – il costo totale w(x) = wTx


Flusso di costo minimo – Formulazione 2/2
La formulazione del problema del flusso di costo minimo (MCF)
come problema di Programmazione Lineare è la seguente

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|

L’insieme delle soluzioni del problema MCF è dato dal poliedro

Q = {x ∈ ℝ|A| : M x = d, 0|A| ≤ x ≤ c }
Flusso di costo minimo – Esempio 1/5
Flusso di costo minimo – Esempio 2/5
Flusso di costo minimo – Esempio 3/5
Flusso di costo minimo – Esempio 4/5
Flusso di costo minimo – Esempio 5/5
Conclusione
Ricerca Operativa 2
Lezione 26 di 48
AMPL
Rappresentazione di un grafo
Audiolezione
• Ascolta il commento audio alla lezione
• Scarica l’archivio compresso (file MD26.zip) presente
nell’attività
Ricerca Operativa 2

Lezione 26 di 48
AMPL
Esercizi proposti
Esercizio proposto

Dato il grafo G(N,A) orientato in figura, dichiarare e definire in


AMPL un’adeguata struttura dati per rappresentare tale insieme
a

d b

c
Esercizio proposto

Dato il grafo G(N,A) non orientato in figura, dichiarare e definire in


AMPL un’adeguata struttura dati per rappresentare tale insieme
3

1
6 4

2
5
Esercizio proposto
Ricerca Operativa 2

Lezione 26 di 48
AMPL
Domande aperte
Dare la definizione di flusso e di rete di flusso
Illustrare il problema del flusso di costo minimo (MCF)
Formulare il problema di flusso di costo minimo come problema di
Programmazione Matematia
Ricerca Operativa 2

Lezione 27 di 48
AMPL
Formulazione MCF
Introduzione

Nella precedente lezione abbiamo introdotto visto come dichiarare e definire in AMPL
tutte le strutture dati utili alla gestione di un grafo orientato.

Abbiamo quindi dato la definizione di flusso e di rete di flusso e abbiamo introdotto il


problema di flusso di costo minimo formulandolo come problema di Programmazione
Lineare.

In questa lezione vedremo come dichiarare la struttura del problema (modello) in


AMPL e come risolvere l’istanza di problema vista nella precedente lezione
definendone gli insiemi e i parametri.
Flusso di costo minimo – Richiami 1/2
Flusso di costo minimo – Richiami 2/2
Tenendo conto che il flusso x deve rispettare sia i vincoli di
capacità che i vincoli di conservazione del flusso, la formulazione
naturale del problema è un problema di Programmazione
Lineare (PL)

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|

L’insieme delle soluzioni del problema MCF è dato dal poliedro

Q = {x ∈ ℝ|A| : M x = d, 0|A| ≤ x ≤ c }
Flusso di costo minimo – Formulazione in AMPL
Flusso di costo minimo – Dichiarazione in AMPL

Dichiariamo nel file MCF.mod tutti gli elementi che definiscono la


struttura del modello della formulazione naturale MCF

• La dichiarazione di insiemi e parametri che descrivono la rete


di flusso (G,c,x,d,w):
• gli insiemi N e A e il parametro a due dimensioni M
• i vettori c, d e w
• la dichiarazione delle variabili: parametro a una dimensione x
• la struttura e la definizione della funzione obiettivo wTx
• la struttura e la descrizione dei vincoli: M x = d, 0|A| ≤ x ≤ c
MCF.mod – Dichiarazione di insiemi e parametri
MCF.mod – Dichiarazione delle variabili
• la dichiarazione delle variabili x non negative e soggette a
vincoli di capacità attraverso la parola chiave var seguita dal
nome identificativo della variabile (x) e, opzionalmente, da un
insieme di indicizzazione ({j in ARCHI} nel nostro caso
perché il vettore x delle variabili è indicizzato sull’insieme
degli archi in ARCHI) e da uno o più attributi (>= 0 per i
vincoli di non negatività e <= capacita[j] per i vincoli di
capacità)

var x {j in ARCHI} >= 0, <= capacita[j];

0|A| ≤ x ≤ c
MCF.mod – Dichiarazione della funzione obiettivo
MCF.mod – Dichiarazione dei vincoli

• la struttura e la descrizione dei vincoli M x = d attraverso la parola


chiave subject to seguita dall’etichetta identificativa del vincolo
(Incidenza) eventualmente seguita da un insieme di indicizzazione
dei vincoli ({i in NODI} perché nel nostro caso abbiamo tanti
vincoli di conservazione del flusso quanti sono i nodi) e
dall’operatore : seguito dalla definizione del vincolo, che possiamo
definire con l’operatore di sommatoria sum seguito da un insieme
di indicizzazione della sommatoria ({j in ARCHI}) e dalle
componenti della sommatoria (M[i,j] * x[j]) e con l’operatore di
uguaglianza = seguito dal termine noto (domanda[i])
subject to Incidenza {i in NODI}:
sum {j in ARCHI} M[i,j] * x[j] = domanda[i];
Flusso di costo minimo – Definizione in AMPL
MCF.dat – Definizioni di insiemi e parametri 1/2
Compiliamo il file MCF.dat con la definizione di insiemi e parametri che
descrivono la rete di flusso (G,c,x,d,w)
• Grafo G(N,A)
set NODI := A B C D E ;
set ARCHI := AB AC BC BE CD DB DE ;
param M :
AB AC BC BE CD DB DE :=
A -1 -1 0 0 0 0 0
B 1 0 -1 -1 0 1 0
C 0 1 1 0 -1 0 0
D 0 0 0 0 1 -1 -1
E 0 0 0 1 0 0 1 ;
MCF.dat – Definizioni di insiemi e parametri 2/2
• i parametri a una dimensione relativi a domanda d
indicizzata sull’insieme dei nodi e a costo w e capacità c
indicizzata sull’insieme degli archi

param domanda := A -5 B 6 C -5 D 0 E 4 ;
param capacita := AB 4 BC 2 BE 7 CD 8 DB 4 AB 5;
param costo := AB 3 BC 1 BE 5 CD 1 DB 2 AB 4;
MCF.dat – Definizioni alternativa di parametri
Dal momento che i parametri costo e capacita hanno la stessa
dimensione e sono indicizzati sullo stesso insieme (ARCHI), una
definizione alternativa prevede che la parola chiave param sia seguita
dall’operatore : seguito dalla lista degli identificativi dei parametri da
definire e che dopo l’operatore := valori vengano assegnati
simultaneamente

param: capacita costo :=


AB 6 2
AC 4 3
BC 2 1
BE 7 5
CD 8 1
DB 4 2
DE 5 4 ;
Conclusione

In questa lezione abbiamo visto come dichiarare la struttura del problema (modello)
relativo al flusso di costo minimo (MCF) in AMPL e come definirne le diverse
componenti. In particolare, abbiamo introdotto nuove strutture dati come le variabili e
nuove istruzioni per dichiarare funzione obiettivo e vincoli in AMPL

Nella prossima attività didattica vedremo come l’interprete AMPL acquisisca le


dichiarazioni e le definizioni date e come possa invocare un solutore di
Programmazione Lineare per risolvere il problema
Ricerca Operativa 2

Lezione 27 di 48
AMPL
Soluzione MCF
Introduzione

Nella precedente attività abbiamo visto come dichiarare e definire in AMPL tutte le
strutture dati utili alla formulazione del problema di flusso di costo minimo in una rete
di flusso.

In questa attività vedremo come invocare l’interprete AMPL e quali sono le istruzioni
che gli permettono di acquisire le dichiarazione e le definizioni relative alla
formulazione del problema di flusso di costo minimo e di chiamare uno specifico
solutore per risolvere un’istanza del problema
Flusso di costo minimo – File MCF.mod e MCF.dat
Assumeremo di avere già pronti i file relativi alla dichiarazione
del modello (MCF.mod) e alla definizione dei parametri di una
specifica istanza (MCF.dat)

La compilazione di tali file è stata spiegata nel dettaglio


nell’attività precedente, insieme ai file pronti per essere utilizzati
in questa attività
Avvio dell’interprete AMPL 1/2
L’interprete AMPL è contenuto nel pacchetto d’installazione scaricato come
pacchetto compresso

In tale pacchetto sono presenti

• Una cartella doc contenente i file di testo readme relativi ai diversi solutori
presenti nel pacchetto

• Una cartella models contenente diversi esempi di file .mod e .dat con
dichiarazioni e definizioni di modelli di Programmazione Matematica

• Un file readme.txt

• Diversi file eseguibili .exe che saranno utili in questa lezione

• Altri file (licenze e definizioni di parametri)


Avvio dell’interprete AMPL 2/2
Tra i file eseguibili c’è AMPL.exe
Facendo doppio click su tale file si apre la shell AMPL
Ogni riga di comando della shell AMPL inizia con
ampl: _
Il trattino indica che l’interprete è in attesa di istruzioni
Un modo alternativo e più comodo per gestire le istruzioni AMPL
da riga di comando è quello di richiamare AMPL.exe dalla
finestra che compare facendo doppio click sul file sw.exe
sw: _
Dando l’istruzione ampl e premendo invio, tutti i comandi AMPL
potranno essere scritti nella finestra sw
sw: ampl
Acquisizione dei file MCF.mod e MCF.dat

L’interprete AMPL è pronto per acquisire le dichiarazioni (MCF.mod) e le


definizioni (MCF.dat) del problema di flusso di costo minimo visto nella
lezione precedente

L’istruzione model seguita dal nome del file contenente le dichiarazioni


serve per acquisire la struttura del modello
ampl: model MCF.mod;
L’istruzione data seguita dal nome del file contenente le definizioni
serve per acquisire i dati del modello
ampl: data MCF.dat;
Se le istruzioni model e data vengono invertite, l’interprete AMPL
restituisce un errore
Soluzione di un’istanza del problema MCF
Scelta del solutore 1/2
Nel pacchetto d’installazione sono contenuti diversi file eseguibili
relativi a solutori che possiamo invocare per risolvere i diversi
tipi di problemi di Programmazione Matematica (si veda la
lezione 25)
Se non viene specificato altrimenti, il solutore di default è
MINOS
Per risolvere il problema MCF scegliamo come solutore CPLEX
Per indicare all’interprete AMPL di utilizzare CPLEX come
solutore, utilizziamo l’istruzione option seguita dal parametro di
cui vogliamo cambiare il valore (in questo caso, il solutore quindi
il parametro è solver) seguito dal nuovo valore del parametro
(in questo caso cplex)
ampl: option solver cplex;
Scelta del solutore 2/2
L’istruzione option può essere utilizzata, oltre per assegnare un
valore a un parametro, anche per visualizzare l’attuale valore
assunto dal parametro
L’istruzione option seguita dal parametro di cui vogliamo
visualizzare (in questo caso, il solutore quindi il parametro è
solver) ci restituisce la stringa con il valore attuale del
parametro (in questo caso option solver cplex)
ampl: option solver;
option solver cplex;
Invocazione del solutore 1/2
Invocazione del solutore 2/2
Visualizzazione della soluzione ottima 1/2
Una volta risolto il problema, se è stata determinata la soluzione
ottima (come in questo caso), il valore delle variabili
corrispondenti alla soluzione ottima possono essere visualizzati
tramite l’istruzione display seguita dal nome della o delle
variabili che vogliamo visualizzare (in questo caso il parametro
di una dimensione x)
ampl: display x;
Visualizzazione della soluzione ottima 2/2
In questo caso, otteniamo
x [*] :=
AB 5
AC 0
BC 0
BE 0
CD 5
DB 1
DE 4
;
Soluzione ottima 1/2
Indichiamo con x* la soluzione ottima determinata e inseriamo i
valori delle componenti del flusso ottimo nella rete di flusso
(G,c,x,d,w) con x=x*
x [*] :=
6
AB 5 B
(5, 6) (0, 7)
AC 0
BC 0
-5 A (0, 2) (1, 4) E 4
BE 0
CD 5 (0, 4) (5, 8) (4, 5)
C D
DB 1 -5 0
DE 4
Soluzione ottima 2/2
È facile verificare che x* è un flusso ammissibile per rete di
flusso (G,c,x,d,w). Infatti soddisfa sia i vincoli di capacità che i
vincoli di conservazione del flusso. Il suo costo è pari a 33

6
B
(5, 6) (0, 7)

-5 A (0, 2) (1, 4) E 4

(0, 4) (5, 8) (4, 5)


C D
-5 0

costo(x*) = 2 x 5 + 1 x 5 + 2 x 1 + 4 x 4 = 33
Conclusione

In questa lezione abbiamo visto come far acquisire all’interprete AMPL la struttura
del problema (modello) relativo al flusso di costo minimo (MCF) e le definizioni
relative a una singola istanza del problema

Abbiamo visto come selezionare e invocare uno specifico solutore per la soluzione
dell’istanza del problema

Nelle prossime lezioni vedremo altri due problemi di ottimizzazione su rete che
possono facilmente essere modellate e risolve in AMPL
Ricerca Operativa 2

Lezione 27 di 48
AMPL
Esercizi proposti
Esercizio proposto
Esercizio proposto
Ricerca Operativa 2

Lezione 27 di 48
AMPL
Domande aperte
Descrivere come è possibile formulare il problema di flusso di costo minimo in
AMPL
Illustrare le principali istruzioni AMPL per la dichiarazione di variabili, funzione
obiettivo e vincoli
Ricerca Operativa 2

Lezione 28 di 48
AMPL
Cammini minimi
Introduzione

Nelle due precedenti lezioni abbiamo visto come formulare e risolvere in AMPL il
problema di flusso di costo minimo

In questa lezione affronteremo un altro problema di ottimizzazione su rete molto utile


nelle pratiche applicazioni: il problema del cammino di costo minimo

In questa attività vedremo come il problema del cammino di costo minimo sia un
caso particolare di flusso di costo minimo
Rete di flusso – Richiami
Cammino di costo minimo
Cammino di costo minimo come caso particolare di MCF 1/3
Cammino di costo minimo come caso particolare di MCF 2/3
Cammino di costo minimo come caso particolare di MCF 3/3
Cammino di costo minimo – Formulazione 1/2

Per formulare il problema del cammino di costo minimo (SP) definiamo


• le variabili del problema – le componenti del flusso incognito x, ogni
componente x(i,j) del vettore indica la quantità di flusso che transita
dal nodo i al nodo j, per ogni arco (i,j) in A

• l’insieme dei vincoli che rende il vettore x un flusso ammissibile nella


rete di flusso (G,c,x,d,w) – l’insieme è dato dai vincoli di capacità
(tanti quanti sono gli archi in A) e dai vincoli di conservazione del
flusso (tanti quanti sono i nodi in N)

• la funzione obiettivo – il costo totale w(x) = wTx


Flusso di costo minimo – Formulazione 2/2
La formulazione del problema del cammino di costo minimo (SP)
come problema di Programmazione Lineare è la seguente

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
Con la particolarità che:
• le domande d sono pari a -1 per il nodo s, 1 per il nodo t e 0
per tutti gli altri nodi in N
• le capacità c sono pari a infinito per tutti gli archi in A
Cammino di costo minimo – Esempio 1/5
Cammino di costo minimo – Esempio 2/5
Cammino di costo minimo – Esempio 3/5
Cammino di costo minimo – Esempio 4/5
Cammino di costo minimo – Esempio 5/5
Conclusione

In questa lezione abbiamo introdotto il problema del cammino di costo minimo e


abbiamo visto come possa essere formulato come caso particolare del problema di
flusso di costo minimo

Nella prossima attività vedremo come formulare il problema in AMPL e risolverlo


sull’istanza di problema presentata in questa lezione
Ricerca Operativa 2

Lezione 28 di 48
AMPL
Formulazione SP
Introduzione

Nella precedente attività abbiamo introdotto il problema del cammino di costo minimo
(Shortest Path – SP) formulandolo come problema di Programmazione Lineare

In particolare, abbiamo visto come il problema SP sia un caso particolare di


problema MCF con alcune restrizioni sui vettori che definiscono la rete di flusso

In questa attività vedremo come dichiarare la struttura del problema (modello) in


AMPL
Cammino di costo minimo – Richiami 1/2
Dato un grafo orientato G(N,A) con un nodo sorgente s e un
nodo pozzo t e un vettore w di costi definito sull’insieme A degli
archi, il problema del cammino a costo minimo (SP) determina
un cammino x da s a t sul grafo G(N,A) che minimizzi il costo
totale

w(x) = wTx
Cammino di costo minimo – Richiami 2/2
La formulazione del problema del cammino di costo minimo (SP)
come problema di Programmazione Lineare è la seguente

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
Con:
• le domande d pari a -1 per il nodo s, 1 per il nodo t e 0 per
tutti gli altri nodi in N
• le capacità c pari a infinito per tutti gli archi in A
Cammino di costo minimo – Formulazione in AMPL 1/2
Per formulare in AMPL il problema SP possiamo usare la stessa
formulazione del problema MCF

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
Dal momento che la struttura del modello è uguale per i
problemi SP e MCF possiamo utilizzare lo stesso file FCM.mod
contenente le dichiarazioni relative alla struttura del modello del
problema MCD
Cammino di costo minimo – Formulazione in AMPL 2/2
Per caratterizzare il problema SP rispetto al problema MCF,
creiamo un solo file

• file SP.dat contenente i valori dei coefficienti del modello SP


che sono diversi dai coefficienti del modello MCF in quanto

• le domande d sono pari a -1 per il nodo s, 1 per il nodo t e


0 per tutti gli altri nodi in N
• le capacità c sono pari a infinito per tutti gli archi in A
Cammino di costo minimo – Dichiarazione in AMPL
Riutilizziamo il file MCF.mod contenente tutti gli elementi che
definiscono la struttura del modello della formulazione naturale MCF

• La dichiarazione di insiemi e parametri che descrivono la rete di


flusso (G,c,x,d,w):

• gli insiemi N e A e il parametro a due dimensioni M

• i vettori c, d e w

• la dichiarazione delle variabili: parametro a una dimensione x

• la struttura e la definizione della funzione obiettivo wTx

• la struttura e la descrizione dei vincoli: M x = d, 0|A| ≤ x ≤ c


Cammino di costo minimo – Definizione in AMPL
SP.dat – Definizioni di insiemi e parametri 1/2
SP.dat – Definizioni di insiemi e parametri 2/2
• i parametri a una dimensione relativi a domanda d
indicizzata sull’insieme dei nodi e a costo w e capacità c
indicizzata sull’insieme degli archi

param domanda := A -1 B 6 C -5 D 0 E 1 ;

param capacita := AB Infinity BC Infinity BE


Infinity CD Infinity DB Infinity AB Infinity ;

param costo := AB 3 BC 1 BE 5 CD 1 DB 2 AB 4;
SP.dat – Definizioni alternativa di parametri
Conclusione

In questa lezione abbiamo visto come dichiarare la struttura del problema (modello)
relativo al cammino di costo minimo (SP) in AMPL e come definirne le diverse
componenti

Nella prossima lezione vedremo come l’interprete AMPL acquisisca le dichiarazioni e


le definizioni date e come possa invocare un solutore di Programmazione Lineare
per risolvere il problema
Ricerca Operativa 2

Lezione 28 di 48
AMPL
Esercizi proposti
Esercizio proposto

Dato il grafo G(N,A) in figura e le componenti del vettore w di


costi definito sull’insieme A riportate in figura determinare la
soluzione ottima per il problema del cammino di costo minimo
(Shortest Path – SP) dal nodo s = A al nodo t = D
Esercizio proposto
Ricerca Operativa 2

Lezione 28 di 48
AMPL
Domande aperte
Definire il problema del cammino di costo minimo da s a t e mostrare come sia un
caso particolare di problema di flusso di costo minimo
Descrivere come è possibile formulare il problema del cammino di costo minimo
da s a t in AMPL
Ricerca Operativa 2

Lezione 29 di 48
AMPL
Soluzione SP
Introduzione

Nella precedente attività abbiamo visto come dichiarare e definire in AMPL tutte le
strutture dati utili alla formulazione del problema di cammino da un nodo s a un nodo
t di costo minimo in una rete di flusso.

In questa attività vedremo come invocare l’interprete AMPL e quali sono le istruzioni
che gli permettono di acquisire le dichiarazione e le definizioni relative alla
formulazione del problema di cammino di costo minimo e di chiamare uno specifico
solutore per risolvere un’istanza del problema

Vedremo quindi come generalizzare il problema del cammino minimo da s a t al


problema di determinare l’albero dei cammini minimi
Cammino di costo minimo – File MCF.mod e SP.dat
Assumeremo di avere già pronti i file relativi alla dichiarazione
del modello (MCF.mod) e alla definizione dei parametri di una
specifica istanza (SP.dat)

La compilazione di tali file è stata spiegata nel dettaglio


nell’attività precedente, insieme ai file pronti per essere utilizzati
in questa attività
Avvio dell’interprete AMPL
L’interprete AMPL è contenuto nel pacchetto d’installazione
scaricato come pacchetto compresso
Facendo doppio click sul file eseguibile AMPL.exe si apre la shell
AMPL
Un modo alternativo e più comodo per gestire le istruzioni AMPL
da riga di comando è quello di richiamare AMPL.exe dalla
finestra che compare facendo doppio click sul file sw.exe
sw: _
Dando l’istruzione ampl e premendo invio, tutti i comandi AMPL
potranno essere scritti nella finestra sw
sw: ampl
Acquisizione dei file MCF.mod e SP.dat
L’interprete AMPL è pronto per acquisire le dichiarazioni
(MCF.mod) e le definizioni (SP.dat) del problema di cammino di
costo minimo dal nodo s al nodo t visto nella lezione precedente
L’istruzione model seguita dal nome del file contenente le
dichiarazioni serve per acquisire la struttura del modello
ampl: model MCF.mod;
L’istruzione data seguita dal nome del file contenente le
definizioni serve per acquisire i dati del modello
ampl: data SP.dat;
Se è già stato precedentemente caricato il modello e un primo
file .dat, caricando un secondo file .dat (relativo sempre allo
stesso modello) l’interprete AMPL restituisce un errore. Vedremo
più avanti come sia possibile caricare più file dati
Soluzione di un’istanza del problema SP
A questo punto è stato caricato
1. il modello di Programmazione Lineare del problema MCF
min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
2. i dati relativi a un’istanza del problema MCF
0
B B
2 5 (2,∞) (5, ∞)
s t s t
A 1 2 E -1 A (1, ∞) (2, ∞) E 1

3 1 4 (3, ∞) C D (4, ∞)
C D (1, ∞)
0 0
Scelta del solutore
Come visto nella lezione 27, nel pacchetto d’installazione sono
contenuti diversi file eseguibili relativi a solutori che possiamo
invocare per risolvere i diversi tipi di problemi di
Programmazione Matematica (si veda la lezione 25)
Se non viene specificato altrimenti, il solutore di default è
MINOS
Per risolvere il problema MCF scegliamo come solutore CPLEX
Per indicare all’interprete AMPL di utilizzare CPLEX come
solutore, utilizziamo l’istruzione option seguita dal parametro di
cui vogliamo cambiare il valore (in questo caso, il solutore quindi
il parametro è solver) seguito dal nuovo valore del parametro
(in questo caso cplex)
ampl: option solver cplex;
Invocazione del solutore 1/2
Una volta caricati modello e valori dei coefficienti e selezionato
un opportuno solutore, invochiamo l’impiego del solutore per
risolvere l’istanza di problema corrente tramite l’istruzione solve
ampl: solve;
Una volta portata a termine l’istruzione, il compilatore visualizza
le informazioni di log restituite dal solutore per l’invocazione
precedente
In questo caso, otteniamo
CPLEX 12.8.0.0: optimal solution; objective 7
0 dual simplex iterations (0 in phase I)
Invocazione del solutore 2/2
CPLEX 12.8.0.0: optimal solution; objective 7
0 dual simplex iterations (0 in phase I)
È stata impiegata la versione 12.8 di CPLEX (CPLEX 12.8.0.0,
quella disponibile nel pacchetto d’installazione, in caso di rilascio
di nuova versione va scaricato il nuovo pacchetto o aggiornato il
file eseguibile e il file di licenza rilasciato da IBM)
È stata determinata la soluzione ottima (optimal solution) e
viene visualizzato il valore della funzione obiettivo (7) in
corrispondenza del cammino ottimo (non visualizzato)
Vengono quindi visualizzati i dettagli sul numero di iterazioni del
metodo utilizzato dal solutore, in questo caso il metodo del
simplesso duale
Visualizzazione della soluzione ottima 1/2
Una volta risolto il problema, se è stata determinata la soluzione
ottima (come in questo caso), il valore delle variabili
corrispondenti alla soluzione ottima possono essere visualizzati
tramite l’istruzione display seguita dal nome della o delle
variabili che vogliamo visualizzare (in questo caso il parametro
di una dimensione x)
ampl: display x;
Visualizzazione della soluzione ottima 2/2
In questo caso, otteniamo
x [*] :=
AB 1
AC 0
BC 0
BE 1
CD 0
DB 0
DE 0
;
Soluzione ottima 1/2
Indichiamo con x* la soluzione ottima determinata e inseriamo i
valori delle componenti del cammino ottimo nella rete di flusso
(G,c,x,d,w) con x=x*
x [*] :=
0
AB 1 B
(∞,1,2) (∞,1,5)
AC 0
s t
BC 0 E 1
-1 A (∞,0,1) (∞,0,2)
BE 1
CD 0 (∞,0,3) (∞,0,1) (∞,0,4)
C D
DB 0 0 0
DE 0
Soluzione ottima 2/2
È facile verificare che x* è un cammino ammissibile per rete di
flusso (G,c,x,d,w). Infatti soddisfa i vincoli di conservazione del
flusso. Il suo costo è pari a 7

0
B
(∞,1,2) (∞,1,5)
s t

-1 A (∞,0,1) (∞,0,2) E 1

(∞,0,3) (∞,0,1) (∞,0,4)


C D
0 0

costo(x*) = 2 x 1 + 5 x 1 = 7
Conclusione

In questa lezione abbiamo visto come far acquisire all’interprete AMPL la struttura
del problema (modello) relativo al cammino dal nodo s al nodo t di costo minimo (SP)
e le definizioni relative a una singola istanza del problema

Nella prossima attività vedremo un altro problema di ottimizzazione su reti, di grande


interesse pratico, che può facilmente essere modellato e risolto in AMPL
Ricerca Operativa 2

Lezione 29 di 48
AMPL
Massimo flusso
Introduzione

Nelle precedenti lezioni abbiamo visto come formulare e risolvere in AMPL il


problema di flusso di costo minimo e il problema del cammino di costo minimo dal
nodo s al nodo t

In questa lezione affronteremo un altro problema di ottimizzazione su rete molto utile


nelle pratiche applicazioni: il problema del massimo flusso

In questa attività vedremo come il problema del massimo flusso sia un caso
particolare di flusso di costo minimo
Rete di flusso – Richiami
Nella definizione di rete di flusso (G,c,x,d,w) è possibile inserire
una coppia di nodi speciali del grafo G(N,A), detti nodo sorgente
s e nodo pozzo t di N, e richiedere che un certo flusso d viaggi
dal nodo s al nodo t

s t
A E

C D
Flusso massimo
Dato un grafo G(N,A), un nodo sorgente s e un nodo pozzo t di
N, e un vettore c di capacità definito sull’insieme A degli archi
del grafo G(N,A), il problema del flusso massimo (Max Flow –
MF) è il problema di determinare il massimo flusso ammissibile
uscente da s ed entrante in t
B
6 7
s t
A 2 4 E

4 5
8
C D
Flusso massimo come caso particolare di MCF 1/4
Il problema del flusso massimo (Max Flow – MF) dal nodo s al
nodo t su un grafo G(N,A) rispetto a un vettore c di capacità
definito sull’insieme A può essere visto come caso particolare del
problema di determinare il flusso di costo minimo (MCF) su una
particolare rete di flusso (G,c,x,d,w) con nodo sorgente s e nodo
pozzo t di N
B
6 7
s t
A 2 4 E

4 5
8
C D
Flusso massimo come caso particolare di MCF 2/4
Consideriamo una rete di flusso (G,c,x,d,w) in cui il grafo G(N,A)
e il vettore c di capacità siano quelli del problema di flusso
massimo. Aggiungiamo all’insieme A degli archi un arco fittizio
(E,A) orientato dal nodo pozzo t=E al nodo sorgente s=A con
capacità c(E,A) infinita
B
6 7
s t
2 4
A E

4 5
8
C D


Flusso massimo come caso particolare di MCF 3/4
Se definiamo tutte nulle le componenti del vettore domanda d
nella rete di flusso (G,c,x,d,w), il flusso entrante in ogni nodo
dovrà essere necessariamente uguale al flusso uscente: l’unica
limitazione al valore che le componenti del flusso possono
assumere è data dalla capacità c
B
6 0 7
s t
2 4
0 A E 0

4 5
8
C D
0 0

Flusso massimo come caso particolare di MCF 4/4
Dal momento che vogliamo massimizzare il flusso uscente da
s=A ed entrante in t=E, ovvero il flusso uscente da t=E ed
entrante in s=A sull’arco fittizio (E,A), poniamo pari a 1 proprio
il costo w(E,A) di tale arco, mentre lasciamo a 0 il costo di tutti
gli altri 0
B
(0,6) (0,7)
s t
0 A (0,2) (0,4) E 0
(0,4) (0,5)
(0, 8)
C D
0 0
(1, ∞)
Massimo flusso – Formulazione 1/2
Per formulare il problema del massimo flusso (MF) indichiamo
con A’ = A ∪ {(t,s)} definiamo

• le variabili del problema – le componenti del flusso incognito


x, ogni componente x(i,j) del vettore indica la quantità di
flusso che transita dal nodo i al nodo j, per ogni arco (i,j) in A’

• l’insieme dei vincoli che rende il vettore x un flusso


ammissibile nella rete di flusso (G,c,x,d,w) – l’insieme è dato
dai vincoli di capacità (tanti quanti sono gli archi in A’) e dai
vincoli di conservazione del flusso (tanti quanti sono i nodi in
N)

• la funzione obiettivo – il costo totale w(x) = wTx


Massimo flusso – Formulazione 2/2
La formulazione del problema del massimo flusso (MF) come
problema di Programmazione Lineare è la seguente

max wTx
Mx=d
0|A’| ≤ x ≤ c

x ∈ ℝ|A |
Con la particolarità che:
• le domande d sono tutte pari a 0 per ogni nodo in N
• le capacità c sono finite tranne che per l’arco (t,s)
• i costi w sono pari a 1 per l’arco (t,s) e 0 per tutti gli archi in A
Flusso massimo – Esempio 1/5
Consideriamo il grafo G(N,A) visto in precedenza con nodo
sorgente s = A e nodo pozzo t = E
• vettore c di capacità definito sull’insieme A degli archi
c = {6, 4, 2, 7, 8, 4, 5, ∞ }
A = {AB, AC, BC, BE, CD, DB, DE, EA}
• vettore d di domande definito sull’insieme N dei nodi
d = {0, 0, 0, 0, 0}
N = {A, B, C, D, E }
• vettore w il vettore di costi definito sull’insieme A degli archi
w = { 0, 0, 0, 0, 0, 0, 0 , 1 }
A = {AB, AC, BC, BE, CD, DB, DE , EA}
Flusso massimo – Esempio 2/5
Vogliamo determinare il flusso x di valore massimo nella
componente x(t,s) che rispetti i vincoli di conservazione del
flusso e i vincoli di capacità

0
B
(0,6) (0,7)
s t
0 A (0,2) (0,4) E 0
(0,4) (0,5)
(0, 8)
C D
0 0
(1, ∞)
Flusso massimo – Esempio 3/5
La formulazione del problema è
max x(E,A)
x(E,A) - x(A,B) - x(A,C) = 0
x(A,B) + x(B,D) - x(B,C) - x(B,E) = 0
x(A,C) + x(B,C) - x(C,D) = 0
x(C,D) - x(B,D) - x(D,E) = 0
x(B,E) + x(D,E) - x(E,A) = 0
0 ≤ x(A,B) ≤ 6 0 ≤ x(C,D) ≤ 8
0 ≤ x(A,C) ≤ 4 0 ≤ x(D,B) ≤ 4
0 ≤ x(B,C) ≤ 2 0 ≤ x(B,E) ≤ 7
0 ≤ x(D,E) ≤ 5 0 ≤ x(E,A)
Flusso massimo – Esempio 4/5
Una soluzione ammissibile è
x = { 0, 4, 0, 0, 4, 0, 4, 4 }
A = {AB, AC, BC, BE, CD, DB, DE, EA}
0
B
(0,6) (0,7)
s t
0 A (0,2) (0,4) E 0
(0,4) (0,5)
C
(0, 8) D
0 0
(1, ∞)
È facile verificare che il flusso dato è ammissibile
Il costo della soluzione è w(x) = wTx = 1 x 4 = 4
Flusso massimo – Esempio 5/5
Un’altra soluzione ammissibile è
x = { 6, 0, 0, 6, 0, 0, 0, 6 }
A = {AB, AC, BC, BE, CD, DB, DE, EA}
0
B
(0,6) (0,7)
s t
0 A (0,2) (0,4) E 0
(0,4) (0,5)
C
(0, 8) D
0 0
(1, ∞)
È facile verificare che il flusso dato è ammissibile
Il costo della soluzione è w(x) = wTx = 1 x 6 = 6
Conclusione

In questa lezione abbiamo introdotto il problema del massimo flusso da un nodo


sorgente a un nodo pozzo di una rete di flusso. Abbiamo visto come possa essere
formulato come caso particolare del problema di flusso di costo minimo

Nella prossima lezione vedremo come formulare il problema in AMPL e risolverlo


sull’istanza di problema presentata in questa lezione
Ricerca Operativa 2

Lezione 29 di 48
AMPL
Massimo flusso
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 29 di 48
AMPL
Esercizi proposti
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore c delle
capacità definito sull’insieme A riportate in figura scrivere la
formulazione del problema del massimo flusso dal nodo s = A al
nodo t = C

3
A B
1 2 5

4 F 2 C
1
4
E D
5
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore c delle
capacità definito sull’insieme A riportate in figura determinare
una soluzione ammissibile per del massimo flusso dal nodo s =
A al nodo t = G
3 6
B E G

2 5
3 1

1
A F

3 2
D
Ricerca Operativa 2

Lezione 29 di 48
AMPL
Domande aperte
Definire il problema del massimo flusso da s a t e mostrare come sia un caso
particolare di problema di flusso di costo minimo
Scrivere la formulazione del problema del massimo flusso da s a t
Ricerca Operativa 2

Lezione 30 di 48
AMPL
Formulazione MF
Introduzione

Nella precedente attività abbiamo introdotto il problema del massimo flusso da un


nodo sorgente a un nodo pozzo (Max Flow – MF) formulandolo come problema di
Programmazione Lineare

In particolare, abbiamo visto come il problema MF sia un caso particolare di


problema MCF dove il grafo della rete di flusso ha un arco fittizio (t,s) e i vettori di
costi, domanda e capacità hanno alcune peculiarità specifiche

In questa lezione vedremo come dichiarare la struttura del problema (modello) in


AMPL e come risolvere il problema di PL invocando un opportuno solutore
Flusso massimo – Richiami 1/2
Dato un grafo G(N,A), un nodo sorgente s e un nodo pozzo t di
N, e un vettore c di capacità definito sull’insieme A, il problema
del flusso massimo (MF) è il problema di determinare il massimo
flusso ammissibile (che rispetti i vincoli di capacità e i vincoli di
conservazione del flusso) uscente da s ed entrante in t

B
6 7
s t
A 2 4 E

4 5
8
C D
Flusso massimo – Richiami 2/2
La formulazione del problema del massimo flusso (MF) come
problema di Programmazione Lineare è la seguente

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
Con
• le domande d tutte pari a 0 per ogni nodo in N
• le capacità c finite tranne che per l’arco (t,s)
• i costi w pari a 1 per l’arco (t,s) e 0 per tutti gli archi in A
Massimo flusso – Formulazione in AMPL 1/2
Per formulare in AMPL il problema MF potremmo usare la stessa
formulazione del problema MCF

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
e quindi lo stesso file MCF.mod contenente le dichiarazioni
relative alla struttura del modello del problema MCF scrivendo
adeguatamente il file MF.dat
In questa lezione vedremo invece un modo alternativo di
scrivere i vincoli che sarà utile nelle lezioni successive
Massimo flusso – Formulazione in AMPL 2/2
Per caratterizzare il problema MF creiamo due file

• file MF.mod contenente le dichiarazioni relative alla struttura


del modello (vale a dire insiemi e parametri che descrivono il
la rete di flusso derivata per il problema MF, variabili, vincoli e
funzione obiettivo)

• file MF.dat contenente i valori dei coefficienti del modello MF


che sono diversi dai coefficienti del modello MCF in quanto

• le domande d tutte pari a 0 per ogni nodo in N


• le capacità c finite tranne che per l’arco (t,s)
• i costi w pari a 1 per l’arco (t,s) e 0 per tutti gli archi in A
Massimo flusso – Dichiarazione in AMPL
Dichiariamo nel file MF.mod tutti gli elementi che definiscono la
struttura del modello della formulazione naturale MCF

• La dichiarazione di insiemi e parametri che descrivono la rete


di flusso (G’,c,x,d,w), tenendo conto che il grafo G’ contiene
l’arco (t,s) che il grafo originale G non aveva
• gli insiemi N e A’ e il parametro a due dimensioni M
• i vettori c, d e w
• la dichiarazione delle variabili: parametro a una dimensione x
• la struttura e la definizione della funzione obiettivo wTx
• la struttura e la descrizione dei vincoli: M x = d, 0|A’| ≤ x ≤ c
MF.mod – Dichiarazione di insiemi e parametri
Compiliamo il file MF.mod con
• la dichiarazione di insiemi e parametri che descrivono la rete
di flusso (G’,c,x,d,w)
• l’insiemi dei nodi N e degli archi A’ e il parametro a due
dimensioni (M)
set NODI; (N)
set ARCHI; (A’)
param M {NODI, ARCHI}; (M)
• i parametri a una dimensione (w, d, c) :
param costo {ARCHI}; (w)
param domanda {NODI}; (d)
param capacita {ARCHI}; (c)
MF.mod – Dichiarazione delle variabili
• la dichiarazione delle variabili x non negative attraverso la
parola chiave var seguita dal nome identificativo della
variabile (x) e, opzionalmente, da un insieme di indicizzazione
({j in ARCHI} nel nostro caso perché il vettore x delle
variabili è indicizzato sull’insieme degli archi in ARCHI) e da
uno o più attributi (>= 0 per i vincoli di non negatività in
questo caso)

var x {j in ARCHI} >= 0 ;


MF.mod – Dichiarazione della funzione obiettivo
• la struttura e definizione della fuzione obiettivo wTx attraverso
la parola chiave maximize (minimize se si fosse trattato di
un problema di minimizzazione) seguita dall’etichetta
identificativa della funzione obiettivo (Costo_Totale) e
dall’operatore : seguito dalla definizione della funzione
obiettivo, che possiamo definire con l’operatore di
sommatoria sum seguito da un insieme di indicizzazione della
sommatoria ({j in ARCHI}) e dalle componenti della
sommatoria (costo[j] * x[j])

maximize Costo_Totale:
sum {j in ARCHI} costo[j] * x[j];
MCF.mod – Dichiarazione dei vincoli 1/2
• la struttura e la descrizione dei vincoli M x = d attraverso la
parola chiave subject to seguita dall’etichetta identificativa
del vincolo (Incidenza) eventualmente seguita da un insieme
di indicizzazione dei vincoli ({i in NODI} perché nel nostro
caso abbiamo tanti vincoli di conservazione del flusso quanti
sono i nodi) e dall’operatore : seguito dalla definizione del
vincolo, che possiamo definire con l’operatore di sommatoria
sum seguito da un insieme di indicizzazione della sommatoria
({j in ARCHI}) e dalle componenti della sommatoria
(M[i,j] * x[j]) e con l’operatore di uguaglianza = seguito
dal termine noto (domanda[i])
subject to Incidenza {i in NODI}:
sum {j in ARCHI} M[i,j] * x[j] = domanda[i];
MF.mod – Dichiarazione dei vincoli 2/2
• la struttura e la descrizione dei vincoli 0|A’| ≤ x ≤ c attraverso
la parola chiave subject to seguita dall’etichetta identificativa
del vincolo (Capacita) eventualmente seguita da un insieme
di indicizzazione dei vincoli ({j in ARCHI} perché nel nostro
caso abbiamo tanti vincoli di capacità quanti sono gli archi) e
dall’operatore : seguito dalla definizione del vincolo, che
possiamo definire con l’operatore di disuguaglianza <=
seguito dal termine noto (capacita[j])

subject to Capacita {j in ARCHI}:


x[j] <= capacita[j];
Massimo flusso – Definizione in AMPL
Definiamo nel file MF.dat i valori dei coefficienti del modello della
formulazione naturale MF, vale a dire i valori numerici dei
parametri

- N = { A, B, C, D, E}
- A = {AB, AC, BC, BE, CD, DB, DE,EA}
max wTx
- w = { 0, 0, 0, 0, 0, 0, 0, 1}
Mx=d
- d = {0, 0, 0, 0, 0}
- c = {6, 4, 2, 7, 8, 4, 5, ∞ } 0|A| ≤ x ≤ c

–1 –1 0 0 0 0 0 1 x ∈ ℝ|A|
1 0 – 1 –1 0 1 0 0
-M = 0 1 1 0 –1 0 0 0
0 0 0 0 1 – 1 –1 0
0 0 0 1 0 0 1 -1
MF.dat – Definizioni di insiemi e parametri 1/2
Compiliamo il file MF.dat con la definizione di insiemi e parametri
che descrivono la rete di flusso (G’,c,x,d,w)
• Grafo G(N,A’)
set NODI := A B C D E ;
set ARCHI := AB AC BC BE CD DB DE EA;
param M :
AB AC BC BE CD DB DE EA :=
A -1 -1 0 0 0 0 0 1
B 1 0 -1 -1 0 1 0 0
C 0 1 1 0 -1 0 0 0
D 0 0 0 0 1 -1 -1 0
E 0 0 0 1 0 0 1 -1;
MF.dat – Definizioni di insiemi e parametri 2/2
• i parametri a una dimensione relativi a domanda d
indicizzata sull’insieme dei nodi e a costo w e capacità c
indicizzata sull’insieme degli archi

param domanda := A 0 B 0 C 0 D 0 E 0 ;

param capacita := AB 6 AC 4 BC 2 BE 7 CD 8 DB 4 DE
5 EA Infinity ;

param costo := AB 0 AC 0 BC 0 BE 0 CD 0 DB 0 DE 0
EA 1 ;
SP.dat – Definizioni alternativa di parametri
Come visto per i file MCF.dat e SP.dat, i parametri costo e capacita di
pari dimensione e indicizzati sullo stesso insieme (ARCHI) possono
essere definiti tramite la parola chiave param seguita dall’operatore :
seguito dalla lista degli identificativi dei parametri da definire. Dopo
l’operatore := valori vengono assegnati simultaneamente ai due
parametri
param: capacita costo :=
AB 6 0
AC 4 0
BC 2 0
BE 7 0
CD 8 0
DB 4 0
DE 5 0
EA Infinity 1 ;
Conclusione

In questa attività abbiamo visto come dichiarare la struttura del problema (modello)
relativo al massimo flusso (MF) in AMPL e come definirne le diverse componenti

Nella prossima attività vedremo come l’interprete AMPL acquisisca le dichiarazioni e


le definizioni date e come possa invocare un solutore di Programmazione Lineare
per risolvere il problema
Ricerca Operativa 2

Lezione 30 di 48
AMPL
Soluzione MF
Introduzione

Nella precedente attività abbiamo visto come dichiarare e definire in AMPL tutte le
strutture dati utili alla formulazione del problema del massimo flusso da un nodo
sorgente s a un nodo pozzo t in una rete di flusso.

In questa attività vedremo come invocare l’interprete AMPL e chiamare uno specifico
solutore per risolvere un’istanza del problema
Massimo flusso – File MF.mod e MF.dat
Assumeremo di avere già pronti i file relativi alla dichiarazione
del modello (MF.mod) e alla definizione dei parametri di una
specifica istanza (MF.dat)

La compilazione di tali file è stata spiegata nel dettaglio


nell’attività precedente, insieme ai file pronti per essere utilizzati
in questa attività
Avvio dell’interprete AMPL
L’interprete AMPL è contenuto nel pacchetto d’installazione
scaricato come pacchetto compresso
Facendo doppio click sul file eseguibile AMPL.exe si apre la shell
AMPL
Un modo alternativo e più comodo per gestire le istruzioni AMPL
da riga di comando è quello di richiamare AMPL.exe dalla
finestra che compare facendo doppio click sul file sw.exe
sw: _
Dando l’istruzione ampl e premendo invio, tutti i comandi AMPL
potranno essere scritti nella finestra sw
sw: ampl
Avvio dell’interprete AMPL 2/2
Tra i file eseguibili c’è AMPL.exe
Facendo doppio click su tale file si apre la shell AMPL
Ogni riga di comando della shell AMPL inizia con
ampl: _
Il trattino indica che l’interprete è in attesa di istruzioni
Un modo alternativo e più comodo per gestire le istruzioni AMPL da riga
di comando è quello di richiamare AMPL.exe dalla finestra che compare
facendo doppio click sul file sw.exe
sw: _
Dando l’istruzione ampl e premendo invio, tutti i comandi AMPL
potranno essere scritti nella finestra sw
sw: ampl
Acquisizione dei file MF.mod e MF.dat
L’interprete AMPL è pronto per acquisire le dichiarazioni
(MF.mod) e le definizioni (MF.dat) del problema del massimo
flusso visto nella lezione precedente
L’istruzione model seguita dal nome del file contenente le
dichiarazioni serve per acquisire la struttura del modello
ampl: model MF.mod;
L’istruzione data seguita dal nome del file contenente le
definizioni serve per acquisire i dati del modello
ampl: data MF.dat;
Soluzione di un’istanza del problema MF
A questo punto è stato caricato
1. il modello di Programmazione Lineare del problema MF
max wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
2. i dati relativi a un’istanza del problema MF
B
6 7
s t
A 2 4 E

4 8 5
C D
Scelta del solutore
Come visto nella lezione 27, nel pacchetto d’installazione sono
contenuti diversi file eseguibili relativi a solutori che possiamo invocare
per risolvere diversi tipi di problemi di Programmazione Matematica (si
veda la lezione 25)

Se non viene specificato altrimenti, il solutore di default è MINOS

Per risolvere il problema MF scegliamo come solutore CPLEX

Per indicare all’interprete AMPL di utilizzare CPLEX come solutore,


utilizziamo l’istruzione option seguita dal parametro di cui vogliamo
cambiare il valore (in questo caso, il solutore quindi il parametro è
solver) seguito dal nuovo valore del parametro (in questo caso cplex)

ampl: option solver cplex;


Invocazione del solutore 1/2
Una volta caricati modello e valori dei coefficienti e selezionato
un opportuno solutore, per invocare l’impiego del solutore per
risolvere l’istanza di problema corrente usiamo l’istruzione solve
ampl: solve;
Una volta portata a termine l’istruzione, il compilatore visualizza
le informazioni di log restituite dal solutore per l’invocazione
precedente
In questo caso, otteniamo
CPLEX 12.8.0.0: optimal solution; objective 10
1 dual simplex iterations (0 in phase I)
Invocazione del solutore 2/2
CPLEX 12.8.0.0: optimal solution; objective 10
1 dual simplex iterations (0 in phase I)
È stata impiegata la versione 12.8 di CPLEX (CPLEX 12.8.0.0,
quella disponibile nel pacchetto d’installazione, in caso di rilascio
di nuova versione va scaricato il nuovo pacchetto o aggiornato il
file eseguibile e il file di licenza rilasciato da IBM)
È stata determinata la soluzione ottima (optimal solution) e
viene visualizzato il valore della funzione obiettivo (10) in
corrispondenza del flusso massimo (non visualizzato)
Vengono quindi visualizzati i dettagli sul numero di iterazioni del
metodo utilizzato dal solutore, in questo caso il metodo del
simplesso duale
Visualizzazione della soluzione ottima 1/2
Una volta risolto il problema, se è stata determinata la soluzione
ottima (come in questo caso), il valore delle variabili
corrispondenti alla soluzione ottima possono essere visualizzati
tramite l’istruzione display seguita dal nome della o delle
variabili che vogliamo visualizzare (in questo caso il parametro
di una dimensione x)
ampl: display x;
Visualizzazione della soluzione ottima 2/2
In questo caso, otteniamo
x [*] :=
AB 6
AC 4
BC 0
BE 7
CD 4
DB 1
DE 3
EA 10
Soluzione ottima 1/2
Indichiamo con x* la soluzione ottima determinata e inseriamo i
valori delle componenti del flusso ottimo nella rete di flusso
(G,c,x,d,w) con x=x*
x [*] := 0
B
AB 6 (6, 6) (7, 7)
AC 4
BC 0 0 A (0, 2) (1, 4) E 0
BE 7
CD 4
(4, 4) (4, 8) (3, 5)
DB 1 C D
DE 3 0 0
EA 10 (10, 5)
Soluzione ottima 2/2
È facile verificare che x* è un flusso ammissibile per rete di
flusso (G’,c,x,d,w). Infatti soddisfa sia i vincoli di capacità che i
vincoli di conservazione del flusso. Il suo costo è pari a 10
0
B
(6, 6) (7, 7)

0 A (0, 2) (1, 4) E 0

(4, 4) (4, 8) (3, 5)


C D
0 0
(10, 5)
costo(x*) = 1 x 10 = 10
Conclusione

In questa lezione abbiamo visto come far acquisire all’interprete AMPL la struttura
del problema (modello) relativo al massimo flusso (MF) e le definizioni relative a una
singola istanza del problema

Abbiamo visto come selezionare e invocare uno specifico solutore per la soluzione
dell’istanza del problema

Nelle prossime lezioni vedremo un altro problema strettamente connesso al


problema del massimo flusso che può facilmente essere modellato e risolto in AMPL
Ricerca Operativa 2

Lezione 30 di 48
AMPL
Esercizi proposti
Esercizio proposto 1/2
Formulare in AMPL il problema MF usando la stessa formulazione
del problema MCF

min wTx
Mx=d
0|A| ≤ x ≤ c
x ∈ ℝ|A|
e lo stesso file MCF.mod contenente le dichiarazioni relative alla
struttura del modello del problema MCF
Scrivere un opportuno file MF.dat per risolvere l’istanza di
problema vista a lezione e riportata nella slide seguente
Esercizio proposto 2/2

B
6 7
s t
A 2 4 E

4 5
8
C D
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore c delle
capacità definito sull’insieme A riportate in figura risolvere con
AMPL il problema del massimo flusso dal nodo s = A al nodo t =
C
3
A B
1 2 5

4 F 2 C
1
4
E D
5
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore c delle
capacità definito sull’insieme A riportate in figura risolvere con
AMPL il problema del massimo flusso dal nodo s = A al nodo t =
G
3 6
B E G

2 5
3 1

1
A F

3 2
D
Ricerca Operativa 2

Lezione 30 di 48
AMPL
Domande aperte
Descrivere come è possibile formulare il problema del massimo flusso da s a t in
AMPL
Definire le istruzioni MODEL e DATA in AMPL e descrivere ruolo e caratteristiche
dei file .mod e .dat
Ricerca Operativa 2

Lezione 31 di 48
AMPL
Teoria della dualità - Richiami
Introduzione

Nelle precedenti lezioni abbiamo visto come formulare e risolvere in AMPL alcuni problemi di
ottimizzazione su reti di pratico interesse, come il problema di flusso di costo minimo (MCF), il
problema del cammino minimo (SP) e il problema del massimo flusso (MF) in reti di flusso con
un nodo sorgente e un nodo pozzo

In questa lezione richiameremo alcuni concetti della teoria della dualità

Oltre a rivestire una fondamentale importanza nella Programma Lineare per quanto riguarda gli
aspetti teorici, la dualità fornisce strumenti estremamente efficienti per la definizione di metodi e
algoritmi di soluzione di importanti classi di problemi di pratico interesse

In questo corso, vedremo una prima applicazione di tale teoria al problema del Massimo Flusso
da s a t in un rete di flusso
Il problema duale 1/2

Si consideri il seguente problema di Programmazione Lineare (P)


min 𝑐𝑐 𝑇𝑇 𝑥𝑥

(P) 𝐴𝐴𝐴𝐴 ≥ 𝑏𝑏
𝑥𝑥 ≥ 0

con

• 𝑥𝑥 vettore di variabili a 𝑛𝑛 componenti reali

• 𝑐𝑐 vettore dei costi a 𝑛𝑛 componenti reali

• 𝐴𝐴 matrice a 𝑚𝑚 × 𝑛𝑛 componenti reali

• 𝑏𝑏 vettore dei termini noti a 𝑚𝑚 componenti reali


Il problema duale 2/2

Si definisce problema duale di (P) il problema di Programmazione Lineare


max 𝑏𝑏 𝑇𝑇 𝑦𝑦

(D) 𝐴𝐴𝑇𝑇 𝑦𝑦 ≤ 𝑐𝑐
𝑦𝑦 ≥ 0

con

• 𝑦𝑦 vettore di variabili a 𝑚𝑚 componenti reali

• 𝑏𝑏 vettore dei costi a 𝑚𝑚 componenti reali

• 𝐴𝐴𝑇𝑇 matrice a 𝑛𝑛 × 𝑚𝑚 componenti reali

• 𝑐𝑐 vettore dei termini noti 𝐴𝐴𝑇𝑇 a 𝑛𝑛 componenti reali


Il problema duale – Caratteristiche 1/4
Consideriamo la coppia di problemi primale-duale (P,D)

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 max 𝑏𝑏 𝑇𝑇 𝑦𝑦

(P) 𝐴𝐴𝐴𝐴 ≥ 𝑏𝑏 (D) 𝐴𝐴𝑇𝑇 𝑦𝑦 ≤ 𝑐𝑐


𝑥𝑥 ≥ 0 𝑦𝑦 ≥ 0

1. Se (P) è un problema di minimizzazione [massimizzazione], allora (D) è un


problema di massimizzazione [minimizzazione]
Il problema duale – Caratteristiche 2/4
2. Il numero 𝑛𝑛 di variabili di (P) corrisponde al numero di vincoli di (D)

a) Se la variabile 𝑥𝑥𝑖𝑖 di (P) è vincolata in segno, allora il vincolo 𝑖𝑖-esimo di (D)


è di disuguaglianza

i. Se 𝑥𝑥𝑖𝑖 ≥ 0 e (P) è di minimizzazione [massimizzazione], il vincolo di


(D) sarà di ≤ [≥]

ii. Se 𝑥𝑥𝑖𝑖 ≤ 0 e (P) è di minimizzazione [massimizzazione], il vincolo di


(D) sarà di ≥ [≤]

b) Se la variabile 𝑥𝑥𝑖𝑖 di (P) è non vincolata, allora il vincolo 𝑖𝑖-esimo di (D) è di


uguaglianza

3. Il vettore dei costi 𝑐𝑐 di (P) corrisponde al vettore dei termini noti di (D)
Il problema duale – Caratteristiche 3/4
4. Il numero 𝑚𝑚 di vincoli di (P) corrisponde al numero di variabili 𝑦𝑦 di (D)

a) Se il vincolo 𝑗𝑗-esimo di (P) è di disuguaglianza, allora la variabile 𝑦𝑦𝑗𝑗 di (D)


è vincolata in segno

i. Se il vincolo di (P) è di ≥ e (P) è di minimizzazione


[massimizzazione], la variabile 𝑦𝑦𝑗𝑗 ≥ 0 [𝑦𝑦𝑗𝑗 ≤ 0] di (D) è non negativa
[non positiva]

ii. Se il vincolo di (P) è di ≤ e (P) è di minimizzazione


[massimizzazione], la variabile 𝑦𝑦𝑗𝑗 ≤ 0 [𝑦𝑦𝑗𝑗 ≥ 0] di (D) è non positiva
[non negativa]

b) Se il vincolo 𝑗𝑗-esimo di (P) è di uguaglianza, allora la variabile 𝑦𝑦𝑗𝑗 di (D) è


non vincolata in segno (libera)
Il problema duale – Caratteristiche 4/4
5. Il vettore dei termini noti 𝑏𝑏 di (P) corrisponde al vettore dei costi di (D)

6. Il coefficiente del vincolo 𝑗𝑗-esimo e della variabile 𝑖𝑖-esimo di (P) è uguale al


coefficiente del vincolo 𝑗𝑗-esimo e della variabile 𝑗𝑗-esima di (D)

min 𝑐𝑐 𝑇𝑇 𝑥𝑥 max 𝑏𝑏 𝑇𝑇 𝑦𝑦

(P) 𝐴𝐴𝐴𝐴 ≥ 𝑏𝑏 (D) 𝐴𝐴𝑇𝑇 𝑦𝑦 ≤ 𝑐𝑐


𝑥𝑥 ≥ 0 𝑦𝑦 ≥ 0
Problema duale – Proprietà 1/2

La coppia di problemi (P,D) duale gode di interessanti proprietà che saranno


richiamate nelle seguenti slide

1. Il duale del problema duale (D) coincide con il problema primale (P)

2. Se (P) e (D) ammettono soluzioni ammissibili 𝑥𝑥̅ e 𝑦𝑦� rispettivamente allora vale
necessariamente
𝑏𝑏 𝑇𝑇 𝑦𝑦� ≤ 𝑐𝑐 𝑇𝑇 𝑥𝑥̅

3. Se (P) e (D) ammettono soluzioni ammissibili 𝑥𝑥 ∗ e 𝑦𝑦 ∗ tali che


𝑏𝑏 𝑇𝑇 𝑦𝑦� = 𝑐𝑐 𝑇𝑇 𝑥𝑥̅

allora vale necessariamente 𝑥𝑥 ∗ e 𝑦𝑦 ∗ sono soluzioni ottime per i problemi (P) e


(D) rispettivamente
Problema duale – Proprietà 2/2

4. Il primale (P) [duale (D)] ammette soluzione ottima se e solo se (D) [(P)] ammette
soluzione ottima e all’ottimo i valori delle funzioni obiettivo di (P) e (D) coincidono

5. Se (P) è inferiormente [(D) è superiormente] illimitato, allora (D) [(P)] è vuoto

6. Se (P) [(D)] è inammissibile, allora (D) è superiormente [(P) è inferiormente]


illimitato

7. Se (P) e (D) ammettono soluzioni ottime 𝑥𝑥 ∗ e 𝑦𝑦 ∗ , allora 𝑥𝑥 ∗ e 𝑦𝑦 ∗ soddisfano le


condizioni di complementarietà
(𝑏𝑏 − 𝐴𝐴𝑥𝑥 ∗ )𝑇𝑇 𝑦𝑦 ∗ = 0
(𝐴𝐴𝑇𝑇 𝑦𝑦 ∗ − 𝑐𝑐)𝑇𝑇 𝑥𝑥 ∗ = 0
Problema duale – Esempio 1/5

Consideriamo un problema di Programmazione Lineare

min 3 𝑥𝑥1 + 2 𝑥𝑥3


𝑥𝑥1 + 4 𝑥𝑥3 = 1
𝑥𝑥2 + 𝑥𝑥3 ≥ 5
𝑥𝑥1 , 𝑥𝑥2 ≥ 0

Determiniamo il suo problema duale (D) con le caratteristiche viste in precedenza


Problema duale – Esempio 2/5

1. Se (P) è un problema di minimizzazione, (D) è un min 3 𝑥𝑥1 + 2 𝑥𝑥3


problema di massimizzazione 𝑥𝑥1 + 4 𝑥𝑥3 = 1
(P)
2. Il numero 𝑛𝑛 = 3 di variabili di (P) corrisponde al numero di 𝑥𝑥2 + 𝑥𝑥3 ≥ 5
vincoli di (D) 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
a) Le variabili 𝑥𝑥1 e 𝑥𝑥2 di (P) sono vincolate in segno,
quindi il primo e secondo vincolo di (D) sono di
disuguaglianza max

i. 𝑥𝑥1 , 𝑥𝑥2 ≥ 0 e (P) è di minimizzazione, quindi i ≥


(D)
relativi vincoli di (D) sono di ≥ ≥
=
b) La variabile 𝑥𝑥3 di (P) non è vincolata in segno,
quindi il terzo vincolo di (D) è di uguaglianza
Problema duale – Esempio 3/5

3. Il vettore dei costi 𝑐𝑐 = (3 0 2)𝑇𝑇 di (P) corrisponde al min 3 𝑥𝑥1 + 2 𝑥𝑥3


vettore dei termini noti di (D) 𝑥𝑥1 + 4 𝑥𝑥3 = 1
(P)
4. Il numero 𝑚𝑚 = 2 di vincoli di (P) corrisponde al numero di 𝑥𝑥2 + 𝑥𝑥3 ≥ 5
variabili 𝑦𝑦 = (𝑦𝑦1 𝑦𝑦2 )𝑇𝑇 di (D) 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
a) Il secondo vincolo di (P) è di disuguaglianza,
quindi la variabile 𝑦𝑦2 di (D) è vincolata in segno
max
i. Il secondo vincolo di (P) è di ≥ e (P) è di
minimizzazione, quindi la variabile 𝑦𝑦2 ≥ 0 di ≥3
(D)
(D) è non negativa ≥0
=2
b) Il primo vincolo di (P) è di uguaglianza, quindi la
variabile 𝑦𝑦1 di (D) è non vincolata in segno (libera) 𝑦𝑦2 ≥ 0
Problema duale – Esempio 4/5

5. Il vettore dei termini noti 𝑏𝑏 = (1 5)𝑇𝑇 di (P) corrisponde al min 3 𝑥𝑥1 + 2 𝑥𝑥3
vettore dei costi di (D) 𝑥𝑥1 + 4 𝑥𝑥3 = 1
(P)
6. Il coefficiente del vincolo 𝑗𝑗-esimo e della variabile 𝑖𝑖-esimo 𝑥𝑥2 + 𝑥𝑥3 ≥ 5
di (P) è uguale al coefficiente del vincolo 𝑗𝑗-esimo e della 𝑥𝑥1 , 𝑥𝑥2 ≥ 0
variabile 𝑗𝑗-esima di (D)

1 0
1 0 4 𝑇𝑇 max 𝑦𝑦1 + 5𝑦𝑦2
𝐴𝐴 = ⇒ 𝐴𝐴 = (0 1)
0 1 1
4 1 𝑦𝑦1 ≥3
(D)
𝑦𝑦2 ≥ 0
4𝑦𝑦1 + 𝑦𝑦2 = 2

𝑦𝑦2 ≥ 0
Problema duale – Esempio 5/5

Abbiamo quindi determinato la coppia primale-duale (P,D)

max 𝑦𝑦1 + 5𝑦𝑦2


min 3 𝑥𝑥1 + 2 𝑥𝑥3
𝑦𝑦1 ≥3
𝑥𝑥1 + 4 𝑥𝑥3 = 1
(P) 𝑦𝑦2 ≥ 0
𝑥𝑥2 + 𝑥𝑥3 ≥ 5 (D)
4𝑦𝑦1 + 𝑦𝑦2 = 2
𝑥𝑥1 , 𝑥𝑥2 ≥ 0
𝑦𝑦2 ≥ 0

Si lascia come esercizio allo studente la verifica che il problema duale di (D) è il
problema (P)
Conclusioni

In questa prima attività abbiamo richiamato alcuni concetti della teoria della dualità
che sono stati studiati nel corso di Ricerca Operativa

Nella prossima attività vedremo un’interessante applicazione di tale teoria al


problema di ottimizzazione su reti visto nelle lezioni precedenti: il problema del
Massimo Flusso da s a t in un rete di flusso

Vedremo quindi come calcolare la soluzione duale di un problema primale formulato


e risolto in AMPL
Ricerca Operativa 2

Lezione 31 di 48
AMPL
Minimo taglio
Introduzione

In questa attività applicheremo la teoria della dualità al problema del massimo flusso
da s a t su una rete di flusso

Deriveremo il problema duale e vedremo come questo problema corrisponda a un


altro problema di ottimizzazione su reti molto noto in ottimizzazione su rete: il
problema di determinare il taglio di costo minimo in un rete di flusso
Massimo flusso – Richiami
Dato un grafo G(N,A), un nodo sorgente s e un nodo pozzo t di
N, e un vettore c di capacità definito sull’insieme A degli archi
del grafo G(N,A), il problema del flusso massimo (Max Flow –
MF) è il problema di determinare il massimo flusso ammissibile
uscente da s ed entrante in t

B
6 7
s t
A 2 4 E

4 8 5
C D
Massimo flusso – Formulazione esplicita

Come abbiamo visto, il problema può essere formulato come un


problema di Programmazione Lineare in N vincoli di conservazione del
flusso e A+1 vincoli di capacità in A+1 variabili non negative

max wTx

Mx=d

0|A’| ≤ x ≤ c

x ∈ ℝ|A |
• le domande d tutte pari a 0 per ogni nodo in N

• le capacità c finite tranne che per l’arco (t,s)

• i costi w pari a 1 per l’arco (t,s) e 0 per tutti gli archi in A


Massimo flusso – Problema duale 1/3
Determiniamo il problema duale del problema MF max wTx
1. (P) è un problema di massimizzazione, quindi (D) è Mx=0
un problema di minimizzazione
(P) 0|A’| ≤ x ≤ c
2. Il numero 𝑛𝑛 = A+1 di variabili di (P) corrisponde al ′
x ∈ ℝ|A |
numero di vincoli di (D)
a) Le variabili 𝑥𝑥 di (P) sono vincolate in segno,
quindi i vincoli di (D) sono di disuguaglianza
min
i. 𝑥𝑥 ≥ 0 e (P) è di massimizzazione, quindi i
relativi vincoli di (D) sono di ≥ ≥ 0|A|
(D)
3. Il vettore dei costi 𝑐𝑐 = w =(0|A| 1)𝑇𝑇 di (P) ≥1
corrisponde al vettore dei termini noti di (D)
Massimo flusso – Problema duale 2/3

4. Il numero 𝑚𝑚 = N+A+1 di vincoli di (P) corrisponde al max wTx


numero di variabili z ∈ ℝ|N| e y ∈ ℝ|A+1| di (D) Mx=0
a) Gli ultimi A+1 vincoli di (P) sono di (P) 0|A’| ≤ x ≤ c
disuguaglianza quindi le variabili y sono ′
x ∈ ℝ|A |
vincolate in segno
i. i vincoli di (P) sono di ≤ e (P) è di
massimizzazione, quindi le variabili y ≥ 0
min
di (D) sono non negative
≥ 0|A|
b) I primi N vincoli di (P) sono di uguaglianza,
quindi le variabili z di (D) sono non vincolate in (D) ≥1

segno (libere) y ≥ 0|A’|

z ∈ ℝ|N|
Massimo flusso – Problema duale 3/3
5. Il vettore dei termini noti 𝑏𝑏 = d c 𝑇𝑇
= 0 c 𝑇𝑇
di (P) max wTx
corrisponde al vettore dei costi di (D) Mx=0

6. I coefficienti del vincolo 𝑗𝑗-esimo e della variabile 𝑖𝑖- (P) 0|A’| ≤ x ≤ c


esimo di (P) sono pari a 1 se l’arco 𝑖𝑖 parte dal nodo 𝑗𝑗, ′
x ∈ ℝ|A |
− 1 se l’arco 𝑖𝑖 arriva al nodo 𝑗𝑗, 0 altrimenti
La matrice trasposta MT ha A+1 righe e
N+A+1 colonne (corrispondenti alle variabili min c Ty
duali z e y)
zu – zv + yuv ≥ 0|A| uv ∈ A
Ciascun vincolo 𝑖𝑖-esimo di (D) corrisponde a
z t – zs ≥ 1
un arco uv e ha valore 1 in corrispondenza (D)
della variabile zu e yuv e −1 della variabile zv y ≥ 0|A’|
mentre gli altri coefficienti hanno valore nullo z ∈ ℝ|N|
Massimo flusso – Interpretazione del problema duale 1/4
Analizziamo il problema duale del problema del massimo flusso

min c Ty
zu – zv + yuv ≥ 0|A| uv ∈ A
(D) zt – zs ≥ 1
y ≥ 0|A’|
z ∈ ℝ|N|
Consideriamo una soluzione duale (z*,y*) ammissibile per (D)
Definiamo due sottoinsiemi (𝑁𝑁1 ,𝑁𝑁2 ) dell’insieme N dei nodi della
rete di flusso nel seguente modo
𝑁𝑁1 ≔ 𝑖𝑖 ∈ 𝑁𝑁: 𝑧𝑧𝑖𝑖 ≤ 0 𝑁𝑁2 ≔ {𝑖𝑖 ∈ 𝑁𝑁: 𝑧𝑧𝑖𝑖 ≥ 1}
Massimo flusso – Interpretazione del problema duale 2/4
Consideriamo una soluzione duale (z*,y*) ammissibile per (D)

Definiamo due sottoinsiemi (𝑁𝑁1 ,𝑁𝑁2 ) dell’insieme N dei nodi della


rete di flusso nel seguente modo
𝑁𝑁1 ≔ 𝑖𝑖 ∈ 𝑁𝑁: 𝑧𝑧𝑖𝑖∗ ≤ 0 𝑁𝑁2 ≔ {𝑖𝑖 ∈ 𝑁𝑁: 𝑧𝑧𝑖𝑖∗ ≥ 1}

Con 𝑁𝑁1 = N ∖ 𝑁𝑁2


Si noti che il vincolo

zt – zs ≥ 1

È soddisfatto se e solo se zs∈ 𝑁𝑁1 e zt∈ 𝑁𝑁2


Massimo flusso – Interpretazione del problema duale 3/4
Per ogni altro arco (u,v)∈ A il vincolo
zu – zv + yuv ≥ 0|A|
implica che
1. se zu∗ , zv∗ ∈ 𝑁𝑁1 allora yuv

≥0
2. se zu∗ , zv∗ ∈ 𝑁𝑁2 allora yuv

≥0
3. se zu∗ ∈ 𝑁𝑁1 e zv∗ ∈ 𝑁𝑁2 allora yuv

≥1
4. se zv∗ ∈ 𝑁𝑁1 e zu∗ ∈ 𝑁𝑁2 allora yuv

≥ −1
Dal momento che in funzione obiettivo minimizziamo cTy e che
le capacità c sono non negative, possiamo considerare tutte le

soluzioni ammissibili tali che siano nulle le variabili yuv che
ricadono nei casi 1., 2. e 4.
Massimo flusso – Interpretazione del problema duale 4/4

Nel caso 3. avremo necessariamente che yuv =1
Pertanto il costo della soluzione duale (z*,y*) è dato da


c Ty∗= � cuv yuv
u ∈ N1 ,v∈N2

Pertanto y* è il vettore di incidenza del sottoinsieme A′ di archi


in A che separa i nodi del sottoinsieme 𝑁𝑁1 dai nodi del
sottoinsieme 𝑁𝑁2
Dal momento che s ∈ 𝑁𝑁1 e t ∈ 𝑁𝑁2 il sottoinsieme A′ viene detto
taglio s-t e viene indicato con (𝑁𝑁1 ,N ∖ 𝑁𝑁2 )
c Ty∗ viene detta capacità del taglio s-t
Il problema del taglio minimo
Il problema duale del massimo flusso è quindi il problema di
determinare il taglio di capacità minima nella rete di flusso, vale
a dire il problema di determinare il sottoinsieme proprio W ⊂ 𝑁𝑁 di
nodi tale che
• s∈W
• sia minima la capacità del taglio (W,N ∖ W)


c Ty∗= � cuv yuv
u ∈ N1 ,v∈N2

con y∗ vettore di incidenza del taglio (W,N ∖ W)


Il problema del taglio minimo – Esempio 1/4
Consideriamo la rete di flusso dell’esempio visto nel problema di
massimo flusso da s a t

B
6 7
s t
A 2 4 E

4 8 5
C D

Per determinare un taglio s-t è sufficiente definire il sottoinsieme


W⊂N
Il problema del taglio minimo – Esempio 2/4
Un esempio di taglio s-t è dato dal sottoinsieme proprio W = {s}
di N
B
6 7
s t
A 2 4 E

4 8 5
C D

Il taglio (W,N ∖ W) è costituito dagli archi (A,B) e (A,C)


La capacità del taglio (W,N ∖ W) è data da c Ty∗= 6 + 4 = 10
Il problema del taglio minimo – Esempio 3/4
Un altro esempio di taglio s-t è dato dal sottoinsieme proprio
W = {s, B} di N

B
6 7
s t Nel taglio s-t
A 2 4 E consideriamo
solo gli archi
da W a N ∖ W
4 8 5
C D

Il taglio (W,N ∖ W) è costituito dagli archi (A,C), (B,C) e (B,E)


La capacità del taglio (W,N ∖ W) è data da c Ty∗= 4+2+7 =13
Il problema del taglio minimo – Esempio 4/4
Il taglio W = {B} NON è un taglio s-t (s,t ∈ N ∖ W)

B
6 7
s t
A 2 4 E

4 8 5
C D

Nella prossima attività Qual è il taglio s-t di capacità minima?


Massimo flusso e minimo taglio – Principali proprietà 1/2

Consideriamo dunque la coppia primale-duale (P,D) dove (P) è un problema di


massimo flusso da s a t e (D) è il relativo problema duale di taglio s-t di capacità
minima nella stessa rete di flusso

min c Ty
max wTx
zu – zv + yuv ≥ 0|A| uv ∈ A
Mx=0
(P) 0|A’| ≤ x ≤ c (D) zt – zs ≥ 1
y ≥ 0|A’|
|A′ |
x∈ℝ
z ∈ ℝ|N|
Massimo flusso e minimo taglio – Principali proprietà 2/2

Dalla teoria della duale (si veda attività precedente) possiamo dedurre che

Se (P) e (D) ammettono soluzioni ammissibili 𝑥𝑥̅ e 𝑦𝑦�, 𝑧𝑧̅ rispettivamente allora,
ricordando che w =(0|A| 1)𝑇𝑇 vale
𝑥𝑥st ≤ c𝑇𝑇 𝑦𝑦�

Quindi il valore di un flusso ammissibile da s a t è un lower bound per la capacità di


un qualsiasi taglio s-t

Inoltre, all’ottimo, si ha che il valore del massimo flusso da s a t è pari alla capacità
del minimo taglio s-t

𝑥𝑥st ≤ c𝑇𝑇 𝑦𝑦 ∗
Conclusione

In questa attività abbiamo definito il problema duale del problema del massimo flusso
da s a t su una rete di flusso

Abbiamo visto le principali relazioni tra il problema del massimo flusso e il problema
del minimo taglio

Nella prossima attività vedremo come formulare il problema in AMPL e risolverlo


sull’istanza di problema presentata in questa lezione
Ricerca Operativa 2

Lezione 31 di 48
AMPL
Esercizi proposti
Esercizio proposto
Dato il grafo G(N,A) in figura scrivere le componenti del vettore
di incidenza del taglio (W,N\W) con W={A,D}
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore c delle
capacità definito sull’insieme A riportate in figura scrivere la
formulazione del problema del taglio di capacità minima s-t con
s=Aet=C
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore c delle
capacità definito sull’insieme A riportate in figura scrivere
determinare il taglio corrispondente al sottoinsieme W={1,2},
dire se è un taglio s-t con s = 2 e t = 4, e calcolarne la capacità
Ricerca Operativa 2

Lezione 31 di 48
AMPL
Domande aperte
Descrivere il problema del minimo taglio s-t in una rete di flusso
Descrivere le principali caratteristiche che legano il problema del massimo flusso
e il problema del minimo taglio
Descrivere come è possibile formulare il problema del minimo taglio s-t in AMPL
Ricerca Operativa 2

Lezione 32 di 48
AMPL
Soluzione minimo taglio
Introduzione

Nelle precedenti lezioni abbiamo visto come formulare e risolvere in AMPL alcuni
problemi di ottimizzazione su reti di pratico interesse, come il problema di flusso di
costo minimo (MCF), il problema del cammino minimo (SP) e il problema del
massimo flusso (MF) in reti di flusso con un nodo sorgente e un nodo pozzo

In questa lezione vedremo come formulare e risolvere in AMPL il problema duale del
MF: il problema di determinare il taglio s-t di capacità minima in un rete di flusso
Massimo flusso – Formulazione in AMPL
In questa attività assumeremo di avere già pronti i file relativi
alla dichiarazione del modello (MF.mod) e alla definizione dei
parametri di una specifica istanza (MF.dat)

La compilazione di tali file è stata spiegata nel dettaglio nella


lezione 30, insieme ai file pronti per essere utilizzati in questa
attività
Massimo flusso – File MF.mod 1/2
Per motivi di chiarezza, riportiamo di seguito la formulazione del
problema presente nella dichiarazione del modello (MF.mod)
set NODI;
set ARCHI;

param domanda {NODI};


param capacita {ARCHI};
param costo {ARCHI};
param M {NODI, ARCHI};
Massimo flusso – File MF.mod 2/2
Invocazione del solutore
Una volta caricati modello e valori dei coefficienti e selezionato
un opportuno solutore, abbiamo visto che possiamo risolvere
l’istanza data (MF.dat) con l’istruzione solve

ampl: solve;

Una volta portata a termine l’istruzione, otteniamo

CPLEX 12.8.0.0: optimal solution; objective 10


1 dual simplex iterations (0 in phase I)

È stata determinata la soluzione ottima (optimal solution) e


viene visualizzato il valore della funzione obiettivo (10) in
corrispondenza del flusso massimo (non visualizzato)
Visualizzazione della soluzione ottima primale
Una volta risolto il problema, il valore delle variabili primali
corrispondenti alla soluzione ottima possono essere visualizzati
tramite l’istruzione display seguita dall’identificativo delle
variabili primali x
ampl: display x; B
(6, 6) (7, 7)
x [*] :=
AB 6 A (0, 2) (1, 4) E 0
AC 4
BC 0
BE 7 (4, 4) (4, 8) (3, 5)
CD 4 C D
DB 1 0 0
DE 3 (10, 5)
EA 10
Visualizzazione della soluzione ottima duale 1/3
Quando disponibile una soluzione primale (come in questo
caso), è possibile visualizzare il valore delle variabili duali
corrispondente alla soluzione ottima primale tramite l’istruzione
display seguita dall’identificativo dei vincoli primali Incidenza
e Capacita

ampl: display Incidenza, Capacita;


Visualizzazione della soluzione ottima duale 2/3
In questo caso, otteniamo
Incidenza [*] :=
A 1
B
B 0 (6, 6) (7, 7)

C 0
A (0, 2) (1, 4) E 0
D 0
E 0
(4, 4) (4, 8) (3, 5)
C D
;
0 0
(10, 5)
Visualizzazione della soluzione ottima duale 3/3
Capacita [*] :=
AB 1
AC 1 B
(6, 6) (7, 7)
BC 0
BE 0 A (0, 2) (1, 4) E 0

CD 0
DB 0 (4, 4) (4, 8) (3, 5)
C D
DE 0 0 0
EA 0 (10, 5)
;
Soluzione ottima duale 1/2
Come abbiamo visto nella lezione precedente, y* rappresenta il
vettore di incidenza del taglio s-t di capacità minima nella rete di
flusso (G,c,x,d,w) con W={A} mentre z* rappresenta il vettore
di incidenza del sottoinsieme W di N
B
(6, 6) (7, 7)

A (0, 2) (1, 4) E 0

(4, 4) (4, 8) (3, 5)


C D
0 0
(10, 5)
Soluzione ottima duale 2/2
È facile verificare che y* è un taglio s-t per la rete di flusso
(G’,c,x,d,w). Infatti A ∈ W e E ∈ N\W e la capacità del taglio è 10

B
(6, 6) (7, 7)

A (0, 2) (1, 4) E 0

(4, 4) (4, 8) (3, 5)


C D
0 0
(10, 5)

cTy* = 6 + 4 = 10
Soluzione primale e soluzione duale all’ottimo
Consideriamo la terna (x*, y*, z*) di soluzione ottima primale
x* e soluzione ottima duale y*, z*
B
(6, 6) (7, 7)

A (0, 2) (1, 4) E 0

(4, 4) (4, 8) (3, 5)


C D
0 0
(10, 5)

Il valore del massimo flusso è pari alla capacità del taglio minimo

xts = 10 = 6 + 4 = cTy*
Conclusione

In questa lezione abbiamo visto come risolvere il problema del taglio s-t di capacità
minima a partire dalla formulazione e soluzione del problema del massimo flusso da
s a t in AMPL

Nella prossima attività vedremo altre istruzioni AMPL molto utili per la soluzione di
problemi di programmazione matematica
Ricerca Operativa 2

Lezione 32 di 48
AMPL
Elementi di programmazione
Introduzione

Nelle precedenti lezioni abbiamo visto come formulare e risolvere in AMPL alcuni
problemi di ottimizzazione su reti di pratico interesse

In questa e nelle prossime lezioni vedremo alcune istruzioni avanzate di AMPL che
permettono di modificare i dati di un problema, di gestire I/O e altre importanti
operazioni disponibili per la formulazione di problemi sempre più articolati
AMPL – Richiami 1/2
AMPL è un linguaggio di modellazione algebrico che ci permette
di modellare problemi di programmazione matematica di diversa
natura
Abbiamo visto come dichiarare (file .mod) e definire (file .dat) i
seguenti elementi:
• Insiemi (parola chiave set)
• Parametri semplici o a più dimensioni (parola chiave param)
• Variabili (parola chiave var)
• Funzione obiettivo (parola chiave minimize o maximize)
• Vincoli (parola chiave subject to)
AMPL – Richiami 2/2
Abbiamo visto come far interpretare i file .mod e .dat
all’interprete AMPL
Abbiamo visto come far risolvere il problema modellato
all’interprete AMPL invocando un opportuno solutore di
programmazione matematica (CPLEX)
In questa lezione iniziamo a vedere altre funzionalità del
linguaggio AMPL che sono utili come istruzioni
• Da riga di comando
• Da inserire in script in AMPL per risolvere in maniera flessile
ed efficiente problemi di programmazione matematica
Modalità data (file .dat)
Il comando data dice all’interprete che segue la definizione delle
entità precedentemente dichiarate
Nei file .dat visti finora la definizione dei parametri dell’istanza
del problema da caricare era sempre preceduta da tale comando

data;

set NODI;
set ARCHI;

param domanda {NODI};


param capacita {ARCHI};
param costo {ARCHI};
param M {NODI, ARCHI};
Modalità data (da linea di comando) 1/2
Il comando data può essere anche utilizzato per porre
l’interprete in modalità dati digitando l’istruzione da riga di
comando

ampl: model MCF.mod;


ampl: data;
ampl data:

Una volta entrato in modalità dati, l’interprete si aspetta


definizioni coerenti con le dichiarazioni contenute nel file .mod
precedentemente caricato (in questo caso MCF.mod)
In caso di definizione di dati non precedentemente dichiarati
l’interprete AMPL restituisce un errore
Modalità data (da riga di comando) 2/2
A questo punto, possiamo definire gli elementi del file MCF.mod
da riga di comando

ampl data: set NODI := A;

Se chiediamo di visualizzare l’insieme NODI, verrà visualizzato il


contenuto dell’insieme

ampl data: display NODI;


set NODI := A;
ampl:

Non appena viene data un’istruzione diversa da una


definizione (in questo caso display) l’interprete esce
automaticamente dalla modalità dati
Ridefinizioni in AMPL
Sia quando chiediamo all’interprete di acquisire un file .dat che
quando definiamo elementi da riga di comando dopo l’istruzione
data, l’interprete verifica che a un’entità non venga assegnato
più di un valore
Se ripetiamo la definizione di un insieme già definito, l’interprete
restituisce un errore

ampl: model MCF.mod;


ampl: data;
ampl data: set NODI := A;
ampl data: set NODI := B;

data for NODI already read


context: set >>> NODI <<< := B;
Aggiornamento di un’entità – Istruzione reset 1/2
Per aggiornare il valore assegnato a un’entità abbiamo due
modi:
1. Con l’istruzione reset seguita opzionalmente dalla lista di
entità di cui cancellare il valore assegnato è possibile
cancellare tutti i valori assegnati a entità precedentemente
dichiarate
reset data;
oppure cancellare il valore assegnato a un sottoinsieme di
entità specificato in lista_entita
reset data <lista_entita>;
Aggiornamento di un’entità – Istruzione reset 2/2
Consideriamo il seguente esempio
ampl: model MCF.mod;
ampl: data;
ampl data: set NODI := A;
ampl data: display NODI;
set NODI := A;

ampl: reset data NODI; Da questo momento è possibile


ampl: display NODI; definire nuovamente l’insieme NODI
Error executing "display" command:
no data for set NODI Non risulta infatti alcun insieme
ampl: data; assegnato a NODI
ampl data: set NODI := B;
ampl data: display NODI;
set NODI := B;
Aggiornamento di un’entità – Istruzione update 1/2
2. Con l’istruzione update seguita opzionalmente dalla lista di
entità di cui aggiornare il valore assegnato è possibile
aggiornare tutti i valori assegnati a entità precedentemente
dichiarate
update data;
oppure aggiornare il valore assegnato a un sottoinsieme di
entità specificato in lista_entita
update data <lista_entita>;
Aggiornamento di un’entità – Istruzione update 2/2
Consideriamo il seguente esempio
ampl: model MCF.mod;
ampl: data;
ampl data: set NODI := A;
ampl data: display NODI;
set NODI := A;

ampl: update data NODI; Da questo momento è possibile


ampl: display NODI; definire nuovamente l’insieme NODI
Error executing "display" command:
no data for set NODI Non risulta infatti alcun insieme
ampl: data; assegnato a NODI
ampl data: set NODI := B;
ampl data: display NODI;
set NODI := B;
Conclusione

In questa abbiamo visto alcune istruzioni AMPL per la ridefinizione dei valori di
insiemi e parametri e come fornire dati da riga di comando

Nella prossima lezione vedremo come gestire i dati in input e in output di un


algoritmo di soluzione, prima di passare a definire funzioni in AMPL che renderanno
ancora più agevole la formulazione e soluzione di problemi di programmazione
lineare
Ricerca Operativa 2

Lezione 32 di 48
AMPL
Esercizio proposto
Esercizio proposto
Formulare il problema del taglio s-t di capacità minima in AMPL
come problema primale (scrivere i file MC.mod e MC.dat)
Ricerca Operativa 2

Lezione 32 di 48
AMPL
Minimo taglio in AMPL
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 32 di 48
AMPL
Approfondimento
Approfondimento su testo

Scaricare il capitolo 5 del testo

AMPL: A Modeling Language for Mathematical


Programming

al link

https://ampl.com/BOOK/CHAPTERS/08-sets1.pdf

Studiare le sezioni 5.1, 5.2, 5.3, 5.4 e 5.5

In caso di difficoltà nel reperire il testo, inviare un messaggio tramite sistema di


messaggistica al docente
Ricerca Operativa 2

Lezione 33 di 48
AMPL
Localizzazione degli impianti
Introduzione

In questa lezione richiameremo la formulazione del problema di localizzazione degli


impianti visto nella prima parte del corso di Ricerca Operativa 2 al fine di formulare e
risolvere alcune istanze del problema tramite AMPL

Nelle prima attività, viene richiamata la formulazione del problema mentre nelle
seguenti attività sarà richiesto allo studente di scrivere il file .mod del problema e due
file .dat relativi a due istanze date per esercizio
Localizzazione degli impianti – Richiami

Data una rete di siti collegati tra loro,

• alcuni siti della rete (siti di produzione) forniscono una o più risorse che possono
essere utili ad altri siti della rete per diversi scopi

• alcuni siti (siti di domanda) presentano invece una domanda da soddisfare con
una certa quantità di una o più risorse prodotte dai siti fornitori

decidere quali siti di produzione debbano produrre (e quanto) per soddisfare la


domanda dei diversi siti di domanda minimizzando i costi di produzione e i costi di
fornitura del bene dal sito di produzione al sito di domanda

In questa attività considereremo il problema nella sua versione non capacitata


Localizzazione degli impianti – Grafo di localizzazione

I siti di domanda vengono detti anche clienti, mentre quelli di produzione siti
candidati alla produzione
Il grafo di localizzazione è un grafo grafo 𝐺𝐺(𝑉𝑉, 𝐸𝐸) dove

• 𝑉𝑉 = 𝑉𝑉1 ∪ 𝑉𝑉2 è l’insieme dei nodi (siti candidati e clienti)

• 𝐸𝐸 è l’insieme degli archi del grafo che connettono nodi in 𝑉𝑉1 (siti candidati) con
nodi in 𝑉𝑉2 (clienti)

• a ogni nodo in 𝑉𝑉1 (sito candidato) viene associato un costo di attivazione

• a ogni arco in 𝐸𝐸 viene associato un costo di afferenza di un cliente (nodo in 𝑉𝑉2 ) a


un dato sito candidato (nodo in 𝑉𝑉1 )
Localizzazione degli impianti – Variabili del problema

Definiamo le variabili di decisione del problema in riferimento al grafo di


localizzazione visto nella lezione 4
• Una variabili di decisione definita nell’insieme {0,1} per ciascun sito candidato in
𝑉𝑉1

1 se il sito 𝑗𝑗 è selezionato
𝑥𝑥𝑗𝑗 = � ∀𝑗𝑗 ∈ 𝑉𝑉1
0 altrimenti

• Una variabili di decisione definita nell’insieme {0,1} per ciascuna coppia in 𝐸𝐸

1 se il cliente 𝑖𝑖 è servito dall’impianto nel sito 𝑗𝑗


𝑦𝑦𝑖𝑖𝑗𝑗 = � ∀𝑗𝑗 ∈ 𝑉𝑉1 , 𝑖𝑖 ∈ 𝑉𝑉2
0 altrimenti
Localizzazione degli impianti – Vincoli del problema

Definiamo i vincoli lineari che legano le variabili di decisione tra loro

• ogni cliente 𝑖𝑖 deve essere servito da esattamente un impianto in 𝑉𝑉1

� 𝑦𝑦𝑖𝑖𝑖𝑖 = 1 ∀𝑖𝑖 ∈ 𝑉𝑉 2
𝑗𝑗∈𝑉𝑉1

• un cliente non può essere servito da un sito se in quel sito non è attivato un
impianto

𝑦𝑦𝑖𝑖𝑖𝑖 ≤ 𝑥𝑥𝑗𝑗 ∀𝑗𝑗 ∈ 𝑉𝑉1 , 𝑖𝑖 ∈ 𝑉𝑉2


Localizzazione degli impianti – Funzione obiettivo

Definiamo la funzione obiettivo che si compone di due termini


• termine relativo ai costi di attivazione e produzione 𝑓𝑓

� 𝑓𝑓𝑗𝑗 𝑥𝑥𝑗𝑗
𝑗𝑗∈𝑉𝑉1

• termine relativo ai costi di afferenza 𝑑𝑑 di un cliente (nodo in 𝑉𝑉2 ) a un dato sito


candidato (nodo in 𝑉𝑉1 )

� � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑦𝑦𝑖𝑖𝑖𝑖
𝑖𝑖∈𝑉𝑉2 𝑗𝑗∈𝑉𝑉1
Localizzazione degli impianti – Formulazione

La formulazione del problema come problema di PLI è la seguente

𝑚𝑚𝑚𝑚𝑚𝑚 � 𝑓𝑓𝑗𝑗 𝑥𝑥𝑗𝑗 + � � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑦𝑦𝑖𝑖𝑖𝑖


𝑗𝑗∈𝑉𝑉1 𝑖𝑖∈𝑉𝑉2 𝑗𝑗∈𝑉𝑉1

� 𝑦𝑦𝑖𝑖𝑖𝑖 = 1 ∀𝑖𝑖 ∈ 𝑉𝑉 2
𝑗𝑗∈𝑉𝑉1

𝑦𝑦𝑖𝑖𝑖𝑖 ≤ 𝑥𝑥𝑗𝑗 ∀𝑗𝑗 ∈ 𝑉𝑉1 , 𝑖𝑖 ∈ 𝑉𝑉2

𝑥𝑥𝑗𝑗 , 𝑦𝑦𝑖𝑖𝑖𝑖 ∈ {0,1} ∀𝑗𝑗 ∈ 𝑉𝑉1 , 𝑖𝑖 ∈ 𝑉𝑉2


Conclusioni

In questa attività abbiamo richiamato alcuni concetti chiave della trattazione del
problema di localizzazione degli impianti visto nella prima parte del corso di Ricerca
Operativa 2

In particolare, sono state richiamate la definizione del problema (lezioni 3 e 4) e la


formulazione del problema come problema di PLI (lezione 5) nella versione non
capacitata

Nelle prossime attività verrà richiesto allo studente di formulare il problema e di


risolvere alcune istanze del problema tramite AMPL
Ricerca Operativa 2

Lezione 33 di 48
AMPL
Formulazione del problema di localizzazione
Formulare il problema di localizzazione degli impianti (nella versione non
capacitata vista nell’attività precedente) e scrivere il relativo file .mod in AMPL

𝑚𝑚𝑚𝑚𝑚𝑚 � 𝑓𝑓𝑗𝑗 𝑥𝑥𝑗𝑗 + � � 𝑑𝑑𝑖𝑖𝑖𝑖 𝑦𝑦𝑖𝑖𝑖𝑖


𝑗𝑗∈𝑉𝑉1 𝑖𝑖∈𝑉𝑉2 𝑗𝑗∈𝑉𝑉1

� 𝑦𝑦𝑖𝑖𝑖𝑖 = 1 ∀𝑖𝑖 ∈ 𝑉𝑉 2
𝑗𝑗∈𝑉𝑉1

𝑦𝑦𝑖𝑖𝑖𝑖 ≤ 𝑥𝑥𝑗𝑗 ∀𝑗𝑗 ∈ 𝑉𝑉1 , 𝑖𝑖 ∈ 𝑉𝑉2

𝑥𝑥𝑗𝑗 , 𝑦𝑦𝑖𝑖𝑖𝑖 ∈ {0,1} ∀𝑗𝑗 ∈ 𝑉𝑉1 , 𝑖𝑖 ∈ 𝑉𝑉2


Ricerca Operativa 2

Lezione 33 di 48
AMPL
Esercizio proposto
Scrivere il file .dat per il seguente problema di localizzazione degli impianti

fA = 3

A 6
6
8 7 3
1
6 fB = 6 4

B
7 5 4
2
10 5
4
1 C

fC = 8
Si faccia riferimento alla formulazione descritta nella prima attività e formulato in
AMPL nella seconda attività
Ricerca Operativa 2

Lezione 33 di 48
AMPL
Esercizio proposto
Modificare il file MD32.mod fornito nella seconda attività didattica includendo i
vincoli di capacità nel caso di problema di localizzazione degli impianti capacitato
(si veda la lezione 8 per tutti i riferimenti)
Formulare e risolvere in AMPL il seguente problema di localizzazione degli
impianti capacitato

fA = 15

A 1
7 Capacità
8 9 3
1 cA = 25 cB = 35 cC = 60
fB = 10
4 7
B
6 8 4 Domanda
2
4 3
2 d1=15 d2=5 d3=10 d4=20
1 C

fC = 25
Ricerca Operativa 2

Lezione 34 di 48
AMPL
Elementi di programmazione
Introduzione

In questa lezione vedremo altre istruzioni avanzate di AMPL che permettono di


modificare i dati di un problema, di gestire I/O e altre importanti operazioni disponibili
per la formulazione di problemi sempre più articolati

Queste istruzioni saranno utili per sviluppare algoritmi di soluzione basati sulla
soluzione di più problemi di Programmazione Lineare, come vedremo nella prossima
lezione
AMPL – Richiami 1/2
AMPL è un linguaggio di modellazione algebrico che ci permette
di modellare problemi di programmazione matematica di diversa
natura
Abbiamo visto come dichiarare (file .mod) e definire (file .dat) i
seguenti elementi:
• Insiemi (parola chiave set)
• Parametri semplici o a più dimensioni (parola chiave param)
• Variabili (parola chiave var)
• Funzione obiettivo (parola chiave minimize o maximize)
• Vincoli (parola chiave subject to)
Insiemi in AMPL - Richiami
Come abbiamo visto, per poter essere usato in AMPL un insieme
dev’essere:
• dichiarato (nel file .mod) attraverso la parola chiave set
seguita dal nome identificativo dell’insieme e, opzionalmente,
da un insieme di indicizzazione e da uno o più attributi; tra
questi abbiamo visto che dimen seguito dalla dimensione
dell’insieme dichiarato permette di dichiarare insiemi a più
dimensioni
• definito (nel file .dat), assegnando gli elementi all’insieme
dichiarato con l’operatore di assegnazione := seguito dagli
elementi dell’insieme separati da spazio, qualora l’insieme
non sia già stato definito in fase di dichiarazione attraverso un
insieme di indicizzazione o da uno o più attributi
Proiezione di un insieme in AMPL
Se abbiamo un insieme a più dimensioni, in AMPL possiamo
determinare la sua proiezione su una o più dimensioni senza
ridefinire esplicitamente tutti gli elementi dell’insieme proiezione

Per poter essere usato in AMPL un insieme proiezione di un


insieme S (precedentemente dichiarato) dev’essere dichiarato
(nel file .mod) attraverso la parola chiave set seguita dal nome
identificativo dell’insieme e dall’operatore di assegnazione :=
seguito dall’istruzione setof, da un insieme di indicizzazione I di
S e dal sottoinsieme di I rispetto al quale proiettare S
Proiezione di un insieme in AMPL – Esempio 1/3
Supponiamo di dichiarare un insieme COPPIE di dimensione 2:
ogni elemento dell’insieme è caratterizzato da due elementi
ampl: set COPPIE dimen 2;

ampl: data;

ampl data: set COPPIE := (A,B) (A,C) (B,C);


ampl data: display COPPIE;

set COPPIE := (A,B) (A,C) (B,C);


Proiezione di un insieme in AMPL – Esempio 2/3
Possiamo ora dichiarare un insieme PROIEZIONEx di dimensione
1 che sia la proiezione dell’insieme COPPIE nello spazio della
prima dimensione (ogni elemento di COPPIE è caratterizzato da
due elementi)
ampl: set PROIEZIONEx := setof {(i,j) in COPPIE} i;
ampl: display PROIEZIONEx;

set PROIEZIONEx := A B;

Si noti che l’istruzione setof è seguita dall’insieme di


indicizzazione {(i,j) in COPPIE} in cui compare
esplicitamente l’insieme COPPIE e dalla dimensione i contenuta
rispetto al quale proiettare COPPIE
Proiezione di un insieme in AMPL – Esempio 3/3
Se avessimo voluto proiettare l’insieme COPPIE nello spazio della
seconda dimensione, avremmo indicato lo stesso insieme di
indicizzazione {(i,j) in COPPIE} ma avremmo indicato la
dimensione j rispetto al quale proiettare COPPIE
ampl: set PROIEZIONEy := setof {(i,j) in COPPIE} j;
ampl: display PROIEZIONEy;

set PROIEZIONEy := B C;
Lettura dati in AMPL 1/2
Per leggere i singoli valori di una o più entità (parametri, insiemi, etc.)
da una sorgente dati (tastiera, file, etc.) è disponibile l’istruzione read
seguita dalla lista delle entità cui assegnare un valore nell’ordine in cui i
valori sono forniti nella sorgente e, se la sorgente è diversa dal canale
standard di input (tastiera) come nel caso di un file, dall’operatore <
seguito dal nome della sorgente dei dati (e.g., il nome del file)

read <lista_entità> < <nome_sorgente>;

Si noti che i valori delle entità vengono letti nell’ordine in cui


compaiono in <lista_entità> dalla sorgente <nome_sorgente>
Lettura dati in AMPL 2/2
Se manca l’operatore < l’interprete attende i valori da assegnare
attraverso il canale standard di input

In <lista_entità> le entità della lista sono separate da virgole ,

Possiamo avere anche entità a più dimensioni (ad esempio parametri


o insiemi) e in questo caso l’entità è preceduta dall’insieme di
indicizzazione indici tra parentesi graffe {}
Lettura dati in AMPL – Esempio da riga di comando 1/3
Supponiamo di dichiarare da riga di comando due parametri n e m e un
parametro c a una dimensione di n componenti

ampl: param n;
ampl: param m;
ampl: param c {1..n};
L’espressione 1..n indica l’intervallo chiuso [1,n] ovvero l’insieme
1,2,3,...,n

Invece di definire i valori dei parametri nel file .dat, assegniamo i valori
da tastiera usando l’istruzione read

ampl: read n, m, {i in 1..n} c[i];


ampl?
Lettura dati in AMPL – Esempio da riga di comando 2/3
Da questo momento, l’interprete è in modalità lettura dati

È necessario inserire da tastiera dei valori separati da virgola che siano


compatibili con la lista ordinata <lista_entità> = n,m,{i in
1..n} c[i]
Quando i valori corrispondenti (non noti al momento della
dichiarazione) saranno immessi, l’interprete uscirà dalla modalità
lettura dati

Supponiamo di voler assegnare i valori 3 e 2 ai parametri n e m,


rispettivamente, e i valori 10,20 e 30 alle tre componenti di c
Lettura dati in AMPL – Esempio da riga di comando 3/3
Inseriamo tali valori da tastiera esattamente in questo ordine n, m,
c[1], c[2], c[3]
ampl? 3
ampl? 2
ampl? 10
ampl? 20
ampl? 30
ampl:
Se ora interroghiamo l’interprete chiedendo di visualizzare i valori dei
parametri n,m,c vengono restituiti i valori corretti
ampl: display n,m,c; c [*] :=
n = 3 1 10
m = 2 2 20
3 30
;
Lettura dati in AMPL – Esempio da file 1/3
Supponiamo di dichiarare da riga di comando i parametri utili a
descrivere il grafo orientato in figura con i relativi costi
sugli archi e di volerne leggere i valori da file 50 3
Chiamiamo il file grafo.txt 30
2
Dichiariamo il numero di nodi e il numero 20
di archi come parametri e scriviamo nel 4
10
file grafo.txt i relativi valori (4 e 5)
4 25
Dichiariamo quindi un vettore di 1
5
dimensione 3 dove ciascuna componente
1 2 10
rappresenta un arco ed è una terna
1 3 20
(i,j,c(i,j)) con i nodo sorgente, j nodo
2 3 50
destinazione e c(i,j) la capacità dell’arco
1 4 25
Scriviamo nel file grafo.txt i valori relativi 3 4 30
Lettura dati in AMPL – Esempio da file 2/3
Le dichiarazioni da riga di comando sono
ampl: param M; 50 3
ampl: param N;
30
ampl: param costi {1..N,1..N}; 2
ampl: param i; 20
4
ampl: param j;
10
I parametri i e j sono parametri 25
1
ausiliari che ci servono per indicizzare
le coppie (i, j) rispetto alle quali
leggere i valori del parametro
costi(i,j)

ampl: read N, M, {1..M} (i,j,costi[i,j]) < grafo.txt;


Lettura dati in AMPL – Esempio da file 3/3
Se ora interroghiamo l’interprete chiedendo di visualizzare i valori dei
parametri N,M e costi vengono restituiti i valori correttamente letti
dal file grafo.txt

ampl: display N, M, costi;


N = 4
M = 5

costi :=
1 2 10
1 3 20
1 4 25
2 3 50
3 4 30
;
Scrittura dati in AMPL 1/2
Per scrivere i singoli valori di una o più entità (parametri, insiemi, etc.)
in una destinazione (visualizzazione a video, file, etc.) sono disponibili
le istruzioni display e print seguite dalla lista delle entità di cui
visualizzare il valore nell’ordine in cui i valori sono disponibili nella
destinazione e, se la destinazione è diversa dal canale standard di
output (video) come nel caso di un file, dall’operatore > seguito dal
nome della destinazione dei dati (e.g., il nome del file)

display <lista_entità> > <nome_destinazione>;

display <lista_entità> > <nome_destinazione>;


Si noti che i valori delle entità vengono visualizzati nell’ordine in cui
compaiono in <lista_entità> nella destinazione
<nome_destinazione>
Scrittura dati in AMPL 2/2
Se manca l’operatore > l’interprete scrive i valori da visualizzare
attraverso il canale standard di output

Altrimenti è possibile

• sovrascrivere i dati nel file di cui il nome del file segue l’operatore >

• appendere i dati alla fine del file di cui il nome del file segue
l’operatore >>

In ambo i casi, se il file con il nome indicato non esiste, viene creato

In <lista_entità> le entità della lista sono separate da virgole ,

Possiamo avere anche entità a più dimensioni (ad esempio parametri o


insiemi) e in questo caso l’entità è preceduta dall’insieme di
indicizzazione indici tra parentesi graffe {}
Scrittura dati in AMPL – Esempio da riga di comando
Supponiamo di dichiarare da riga di comando un parametro n e di
assegnargli il valore 3

ampl: param n;
ampl: read n;
ampl? 3
Visualizziamo a video il valore del parametro n tramite le istruzioni
print e display
ampl: display n;
n = 3 Il comando print stampa il dato
non formattato, contrariamente
ampl: print n; al comando display
3
Scrittura dati in AMPL – Esempio su file 1/3
Supponiamo di voler scrivere il valore della funzione obiettivo e il valore
delle variabili del problema di flusso a costo minimo (MCF) dal nodo s al
nodo visto nella lezione 30 sul file soluzione.txt
ampl: model MCF.mod;
ampl: data MCF.dat;
ampl: option solver cplex;
ampl: solve;
CPLEX 12.8.0.0: optimal solution; objective 10
1 dual simplex iterations (0 in phase I)
ampl: display Costo_Totale >> soluzione.txt;
ampl: display x >> soluzione.txt;
Scrittura dati in AMPL – Esempio su file 2/3
Durante l’esecuzione dell’istruzione

ampl: display Costo_Totale >> soluzione.txt;

il file soluzione.txt viene creato nella stessa direttrice dove si trova il


file eseguibile ampl.exe, vi viene salvato il valore della funzione
obiettivo Costo_Totale e viene chiuso

Durante l’esecuzione dell’istruzione

ampl: display x >> soluzione.txt;

il file soluzione.txt viene riaperto e il valore del vettore delle variabili


all’ottimo viene salvato in fondo al file, che viene quindi chiuso
Scrittura dati in AMPL – Esempio su file 3/3
Se apriamo il file soluzione.txt possiamo leggere

Costo_Totale = 10

x [*] :=
AB 6
AC 4
BC 0
BE 7
CD 4
DB 1
DE 3
EA 10
;
Conclusione

In questa attività abbiamo visto alcune istruzioni AMPL per la gestione di lettura e
scrittura dei valori di insiemi, parametri, variabili e altre entità definibili e gestibili in
AMPL, sia da riga di comando che da/a file

Nella prossima attività vedremo alcune operazioni sulle stringhe e come strutturare
un blocco di istruzioni in una funzione in AMPL
Ricerca Operativa 2

Lezione 34 di 48
AMPL
Elementi di programmazione
Introduzione

In questa lezione vedremo altre istruzioni avanzate di AMPL per la gestione delle
stringhe e come strutturare e richiamare una sequenza di istruzioni in un’unica
funzione in AMPL

Queste istruzioni saranno utili per sviluppare algoritmi che includano cicli iterativi e la
soluzione di più problemi di Programmazione Lineare, come vedremo nella prossima
lezione dedicata al Metodo del Simplesso dinamico
Concatenazione di stringhe in AMPL – Insiemi
In AMPL i membri di un insieme, i valori dei parametri e i nomi dei file
sono trattati come stringhe di caratteri

Stringhe di caratteri possono essere concatenate tra loro tramite


l’operatore &

L’operazione di concatenazione può essere molto utile quando vogliamo


definire rapidamente le relazioni tra due insiemi di elementi
Concatenazione di stringhe in AMPL – Esempio 1/3
Consideriamo gli insiemi dichiarati e definiti nel caso del problema di
flusso di costo intero (si veda lezione 27)

ampl: model MCF.mod;

ampl: data MCF.dat;

Consideriamo l’insieme NODI composto da 5 nodi {A B C D E}

ampl: display NODI;

set NODI := A B C D E;

Supponiamo di voler definire in AMPL l’insieme completo degli archi


ordinati che connettono tutti i nodi dell’insieme NODI vale a dire
l’insieme degli archi orientati che connettono ogni coppia di nodi in {A
B C D E}
Concatenazione di stringhe in AMPL – Esempio 2/3
Definiamo l’insieme di tutte le stringhe ottenute come concatenazione
degli elementi dell’insieme NODI

ampl: set ARCHI_COMPLETO := setof {i in NODI,j in NODI} i & j;

Visualizziamo i valori dell’insieme ARCHI_COMPLETO


ampl: display ARCHI_COMPLETO;

set ARCHI_COMPLETO :=

AA AC AE BB BD CA CC CE DB DD EA EC EE

AB AD BA BC BE CB CD DA DC DE EB ED;
Concatenazione di stringhe in AMPL – Esempio 3/3
Per evitare i cicli (i, j) con i = j, definiamo una restrizione sulle coppie
di indici i e j nell’insieme di indicizzazione {i in NODI, j in NODI }

ampl: set ARCHI_NO_LOOP :=

setof {i in NODI, j in NODI : i != j} i & j;

Visualizziamo i valori dell’insieme ARCHI_COMPLETO

ampl: display ARCHI _NO_LOOP;

set ARCHI _NO_LOOP :=

A_B A_D B_A B_D C_A C_D D_A D_C E_A E_C

A_C A_E B_C B_E C_B C_E D_B D_E E_B E_D;
Concatenazione di stringhe in AMPL – File e opzioni

In AMPL le stringhe di caratteri possono apparire tra parentesi tonde ()


in diversi contesti

Può risultare molto utile concatenare stringhe relative ai nomi di file


che compaiono come parametri dei comandi model, data e
commands (che vedremo più avanti in questa attività)

In AMPL i valori da passare come parametro dell’istruzione option sono


stringhe
Concatenazione di stringhe in AMPL – Esempio
Consideriamo il problema di flusso di costo intero. Una volta caricato il
modello

ampl: model MCF.mod;

supponiamo di avere due istanze di problema da risolvere: la prima


definita nel file MCF_1.dat e la seconda nel file MCF_2.dat

Il nome del file da passare come parametro dell’istruzione data può


essere composto dinamicamente
ampl: param i := 1;
ampl: data ("MCF_" & i & ".dat");
ampl: display NODI;
set NODI := A B C D E;
Script in AMPL
Uno script in AMPL è una sequenza di comandi AMPL da eseguire

La sequenza di comandi AMPL può essere memorizzata in una file di


testo con estensione .run

Memorizzare una sequenza di comandi AMPL può essere molto utile per
evitare errori di battitura nell’inserimento dei comandi, come pure nel
poter eseguire la sequenza più di una volta senza doverla inserire
nuovamente da riga di comando

Il comando commands legge il file .run contenente la sequenza di


comandi AMPL da eseguire
Script in AMPL – Esempio Script1.run 1/4
Consideriamo un semplice script AMPL che

1. carichi il modello del problema del flusso di costo minimo in una


rete di flusso (MCF.mod)

2. carichi i dati relativi a un’istanza del problema (MCF.dat)

3. selezioni il solutore CPLEX

4. risolva l’istanza di problema caricata

5. salvi la soluzione primale in uno specifico file (MCF.sol.txt)

6. salvi la soluzione duale nello stesso file della soluzione primale


Script in AMPL – Esempio Script1.run 2/4
Creiamo un file Script1.run e scriviamo la sequenza di istruzioni AMPL
relative al flusso di operazioni definito

model MCF.mod;

data MCF.dat;

option solver cplex;

solve;

display x > MCF.sol.txt;

display Incidenza > MCF.sol.txt;

Salviamo il file nella stessa direttrice dove si trova l’eseguibile


AMPL.exe
Script in AMPL – Esempio Script1.run 3/4
Diamo un’unica istruzione all’interprete AMPL per eseguire la sequenza
di istruzioni contenuta nel file Script1.run

ampl: commands script_MCF_1.run;

Comparirà a video l’informazione relativa al processo CPLEX

CPLEX 12.8.0.0: optimal solution; objective 33

0 dual simplex iterations (0 in phase I)

Nella stessa direttrice dov’è stato salvato il file Script1.run è stato


creato il file MCF.sol.txt contenente

• Le componenti della soluzione ottima primale x

• Le componenti della soluzione ottima duale y


Script in AMPL – Esempio Script1.run 4/4
Se apriamo il file MCF.sol.txt troviamo le soluzioni ottime

x [*] := Incidenza [*] :=

AB 5 A 0

AC 0 B 2

BC 0 C -1

BE 0 D 0

CD 5 E 4

DB 1 ;

DE 4
;
Cicli in AMPL
In AMPL è possibile iterare una sequenza di istruzioni un numero fissato
di volte

L’istruzione for esegue un blocco di istruzioni AMPL per ciascun


elemento di un insieme di indicizzazione, specificato come di consueto
tra parentesi graffe {}

Utilizzando la concatenazione di stringhe (usando l’operatore &) e


l’istruzione for possiamo risolvere più problemi scrivendo un unico
script AMPL
Cicli in AMPL – Esempio Script2.run 1/3
Consideriamo un semplice script AMPL che

1. carichi il modello del problema del flusso di costo minimo in una


rete di flusso (MCF.mod)

2. carichi i dati relativi a un’istanza del problema (MCF.dat)

3. selezioni il solutore CPLEX

4. risolva l’istanza di problema caricata

5. salvi la soluzione primale in uno specifico file (MCF.sol.txt)

6. salvi la soluzione duale nello stesso file della soluzione primale

7. ripeta i passi 1. – 6. per il problema del cammino minimo da s a t

8. ripeta i passi 1. – 6. per il problema del massimo flusso da s a t


Cicli in AMPL – Esempio Script2.run 2/3
Creiamo un file Script2.run e scriviamo la sequenza di istruzioni AMPL
relative al flusso di operazioni definito tenendo conto che i tre problemi
hanno un modello comune (MCF.mod) e che è sufficiente cambiare nomi
dei file .dat dove leggere i valori dei parametri e dei file .sol.txt dove
memorizzare la soluzione

Per fare ciò definiamo un insieme CASI che ha come membri i nomi
delle tre istanze di problema
• MCF per l’istanza di problema di flusso di costo minimo
• SP per l’istanza di problema del cammino di costo minimo da s a t
• MF.min per l’istanza di problema del massimo flusso da s a t dove il
coefficiente di costo in funzione obiettivo è cambiato di segno; in tal
modo possiamo utilizzare il file MCF.mod poiché max xts = – min - xts
Cicli in AMPL – Esempio Script2.run 3/3
Possiamo quindi caricare un unico file MCF.mod e poi iterare sugli
elementi dell’insieme CASI senza ripetere il passo 1.
Anche la selezione del solutore (passo 3.) può essere fatta una sola volta
ll file Script2.run contiene le seguenti istruzioni
model MCF.mod;
set CASI := {"MCF","SP","MF.min"};
option solver cplex;
for {j in CASI}
{
reset data;
data ( j & ".dat");
solve;
display x > ( j & ".sol.txt");
display Incidenza > (j & ".sol.txt");
}
Conclusione

In questa attività abbiamo visto istruzioni AMPL per la gestione di lettura e scrittura
dei valori di insiemi, parametri, variabili e altre entità definibili e gestibili in AMPL, sia
da riga di comando che da/a file

Nella prossima attività vedremo alcune operazioni sulle stringhe e come strutturare
un blocco di istruzioni in una funzione in AMPL
Ricerca Operativa 2

Lezione 34 di 48
AMPL
Approfondimento
Approfondimento su manuale
Scaricare il manuale AMPL (AMPL Reference Manual) al link

https://ampl.com/BOOK/CHAPTERS/24-refman.pdf

Leggere le A.15, A.16 e A.17

In caso di difficoltà nel reperire il manuale, inviare un messaggio tramite sistema


di messaggistica al docente
Ricerca Operativa 2

Lezione 34 di 48
AMPL
Esercizi proposti
Esercizio proposto
Si consideri un insieme A a tre dimensioni con elementi (1,a,B), (1,c,M), (2,g,M),
(4,l,V) e (9,z,B)

Dichiarare l’insieme proiezione B di A sulla prima e terza dimensione e verificarne


gli elementi in AMPL
Esercizio proposto
Dichiarare e definire con l’istruzione read i parametri M =3 e N = 2 e la matrice
seguente

1 6
𝐴𝐴 = (7 4)
9 3
Esercizio proposto
Dato il grafo G(N,A) in figura e le componenti del vettore w di costi
definito sull’insieme A riportate in figura determinare la soluzione
ottima per il problema del cammino di costo minimo (Shortest Path –
SP) dal nodo s = A al nodo t = G e scriverla sul file camminoAG.txt

4 E 3 G
B
7
3 6
2
4

7 C
A 1 F
2
5 5
D
Ricerca Operativa 2

Lezione 35 di 48
AMPL
Elementi di programmazione
Introduzione

In questa lezione vedremo altri esempi di programmi in AMPL per implementare


algoritmi di soluzione di problemi di Programmazione Matematica

Tra i diversi algoritmi, ne vedremo uno che impiega un metodo generale di soluzione
di problemi di Programmazione Lineare noto con il nome di Metodo del Simplesso
dinamico, cui viene dedicata un’attività specifica
Taglio di capacità minima in un grafo orientato
Sia G(N,A) un grafo orientato connesso e consideriamo il vettore c di
capacità definito sull’insieme A degli archi del grafo G(N,A)
c= { 4, 2, 3, 7, 4, 5, 1 }
A= {AC, BA, BC, CD, DB, DE, EB}
B
2 1

A 3 4 E

4 5
7
C D

Vogliamo determina il taglio (W,N\W) di capacità minima sul grafo


orientato G(N,A) rispetto al vettore c di capacità
Taglio di capacità minima – Metodo di soluzione 1/3
Sappiamo risolvere il problema di determinare il taglio di capacità
minima s-t con s e t nodi “speciali” in N e nella rete di flusso
In tal caso, aggiungiamo l’arco ts (e quindi una colonna alla matrice M)
di capacità infinita.
c = {4, 2, 3, 7, 4, 5, 1 , ∞}
A ={AC, BA, BC, CD, DB, DE, EB, EA} B
2 1

A 3 4 E

4 5
7
C D

Taglio di capacità minima – Metodo di soluzione 2/3
Il taglio (W,N\W) di capacità minima è il taglio di capacità minima s-t
per ogni possibile scelta dei nodi s e t in N

Se determiniamo il taglio di capacità minima per ogni possibile coppia


(s,t) con s≠t in N e selezioniamo quello tra loro che ha capacità minima
avremo determinato il taglio (W,N\W) di capacità minima

Risolviamo quindi tanti problemi di taglio s-t di capacità minima per


ogni possibile scelta di s e t
Teoria della
dualità

IDEA Risolviamo una sequenza di problemi di massimo flusso


modificando il grafo per cambiare i nodi s e t a ogni iterazione
Taglio di capacità minima – Metodo di soluzione 3/3

2 B 1 s = A, t = E

3 4
A E
5 s = A, t = D
4
7 B 1
C D 2
∞ 3 4
A E
5
s = A, t = C 4
B 1 7
2 C D
3 4 ∞
A E
5
4
7
∞ C D s = …, t = …
………….
Taglio di capacità minima – Sequenza di problemi MF 1/3
Definiamo quindi una sequenza di problemi di massimo flusso (MF)
dove ogni problema della sequenza è caratterizzata da una diversa
coppia (s,t)

Facciamo variare s e t in N e inseriamo nella sequenza un problema di


massimo flusso da s a t

Tutti i problemi della sequenza hanno

• uguale struttura del problema (modello MF.mod → modello MCF.mod)

• diversi parametri del problema

IDEA Capiamo cosa cambia nei parametri tra un problema e un


altro della sequenza
Taglio di capacità minima – Sequenza di problemi MF 2/3
Tutti i problemi della sequenza hanno diversi parametri del problema
Il vettore w dei costi definito sull’insieme A degli archi del grafo
G(N,A) non cambia: l’ultima componente è sempre a 1,
qualsiasi siano s e t
w= { 0, 0, 0, 0, 0, 0, 0 , 1 }
A= {AB, AC, BC, BE, CD, DB, DE, ts}
Il vettore d di domande definito sull’insieme N dei nodi del
grafo G(N,A) non cambia
d = {0, 0, 0, 0, 0}
N = {A, B, C, D, E}

Il vettore c di capacità definito sull’insieme A degli archi del


grafo G(N,A) non cambia l’ultima componente è sempre a
infinito, qualsiasi siano s e t
c = {4, 2, 3, 7, 4, 5, 1 , ∞}
A ={AC, BA, BC, CD, DB, DE, EB, ts}
Taglio di capacità minima – Sequenza di problemi MF 3/3
Tutti i problemi della sequenza hanno diversi parametri del problema

La matrice M di incidenza cambia: la colonna relativa all’arco ts


varia in funzione di s e t
–1 1 0 0 0 0 0 1
0 – 1 –1 0 1 0 1 0
M= 1 0 1 –1 0 0 0 0
0 0 0 1 – 1 –1 0 0
0 0 0 0 0 1 –1 –1
La colonna ts ha un 1 in corrispondenza di s (in questo caso A) e
un -1 in corrispondenza di t (in questo caso E)
Quando cambiano s e t cambiano le posizioni in cui l’ultima
colonna della matrice M ha gli unici due coefficienti non nulli (1
nella riga relativa a s, -1 in quella relativa a t)
Taglio di capacità minima – Algoritmo di soluzione 1/2
L’algoritmo di soluzione proposto in AMPL per il problema è il seguente

1. caricare il modello del problema del flusso di costo minimo in una


rete di flusso (MCF.mod)

2. caricare i dati relativi alla prima istanza della una sequenza di


problemi di massimo flusso (MF.dat)

3. porre valore_minimo := ∞
4. selezionare il solutore CPLEX
Taglio di capacità minima – Algoritmo di soluzione 2/2
5. Per ogni coppia (s,t) di nodi con s≠t

a) Modificare l’ultima colonna della matrice M inserendo 1 nella riga


relativa al nodo s e -1 in quella relativa al nodo t

b) Risolvere l’istanza corrente del problema di massimo flusso

c) Salvare la soluzione duale relativa al problema del taglio s-t di


capacità minima

d) Se il valore C del taglio s-t di capacità minimo è minore di


valore_minimo allora porre valore_minimo := C;

6. Restituire valore_minimo
Implementazione in AMPL
Realizziamo due script AMPL

• taglio_minimo.run dichiara i parametri del problema di flusso di


costo minimo (MCF.mod) e definisce il problema, assegna i valori
iniziali ai parametri, fa variare i parametri s e t modificando il grafo
(attraverso lo script modifica_grafo.run) e risolvendo il problema di
massimo flusso (esegue i passi 1. – 6. con l’esclusione del 5.a)

• modifica_grafo.run modifica l’ultima colonna della matrice M


(esegue il passo 5.a)
MCF_modf.mod
param N;
param A;

param domanda {1..N};


param capacita {1..A};
param costo {1..A};
param M {1..N, 1..A};

var x {j in 1..A} >= 0, <= capacita[j];

maximize Costo_Totale: sum {j in 1..A} costo[j] * x[j];

subject to Incidenza {i in 1..N}:


sum {j in 1..A} M[i,j] * x[j] = domanda[i];
MCF_modf.dat 1/2
data;

param N := 5 ;
param A := 8;

param domanda := 1 0 2 0 3 0 4 0 5 0 ;

param: capacita costo :=


1 4 0
2 2 0
3 3 0
4 7 0
5 4 0
6 5 0
7 1 0
8 Infinity 1 ;
MCF_modf.dat 2/2
# file MF_modf.dat – continua

param M :
1 2 3 4 5 6 7 8 :=
1 -1 1 0 0 0 0 0 1
2 0 -1 -1 0 1 0 1 0
3 1 0 1 -1 0 0 0 0
4 0 0 0 1 -1 -1 0 0
5 0 0 0 0 0 1 -1 -1;
Script taglio_minimo.run 1/3
model MF_modf.mod;
data MF_modf.dat;

param ind_s default 0;


param ind_t default 0;
param valore_minimo default Infinity;

param valore_taglio_minimo { 1..N, 1..N} default 0;


param taglio_minimo {1..N, 1..N, 1..N} default 0;

option solver cplex;


Script taglio_minimo.run 2/3
for {s in 1..N, t in 1..N}
{
if( s != t )
then
{
commands modifica_grafo.run;
solve;
let valore_taglio_minimo[s,t] := Costo_Totale;
for { k in 1..N }
let taglio_minimo[s,t,k] := Incidenza[k];
if( Costo_Totale < valore_minimo )
then
{
let valore_minimo := Costo_Totale;
let ind_s := s;
let ind_t := t;
}
Script taglio_minimo.run 3/3

display s > TCM.sol.txt;


display t > TCM.sol.txt;
display Costo_Totale > TCM.sol.txt;
display Incidenza > TCM.sol.txt;

}
}

display ind_s > TCM.sol.txt;


display ind_t > TCM.sol.txt;
display valore_minimo > TCM.sol.txt;
Script modifica_grafo.run
# script modifica_grafo.run - script per modificare
# la matrice di incidenza del grafo in funzione dei
# nodi s e t in N

for { k in 1..N }
let M[k,A] := 0;
colonna ts
let M[s,A] := 1; inseriamo -1
let M[t,A] := -1; nella riga t
–1 1 0 0 0 0 0 1
e 1 nella riga s
0 – 1 –1 0 1 0 1 0
M= 1 0 1 –1 0 0 0 0
0 0 0 1 – 1 –1 0 0
0 0 0 0 0 1 –1 –1

A (numero degli archi)


Esecuzione
Eseguiamo lo script taglio_minimo.run

ampl: commands taglio_minimo.run;


Nel file TCM.sol.txt sono riportati, al variare di s e t in N:
- capacità del taglio st di capacità minima
- vettore di incidenza dell’insieme S di nodi separabili dal taglio st
Alla fine del file, viene riportata la coppia st in corrispondenza della
quale abbiamo il taglio di capacità minima e la capacità del taglio.

ind_s = 5

ind_t = 1

valore_minimo = 1
Esecuzione
La soluzione ottima, corrispondente al taglio 5-1 di capacità 1, è
rappresentata in figura

2
2 1

1 3 4 5

4 5
7
3 4
Conclusione

In questa attività abbiamo visto istruzioni AMPL per la gestione di lettura e scrittura
dei valori di insiemi, parametri, variabili e altre entità definibili e gestibili in AMPL, sia
da riga di comando che da/a file

Nella prossima attività vedremo alcune operazioni sulle stringhe e come strutturare
un blocco di istruzioni in una funzione in AMPL
Ricerca Operativa 2

Lezione 35 di 48
AMPL
Simplesso dinamico
Introduzione

In questa attività illustreremo un metodo generale di soluzione tra i più utilizzati in


Programmazione Lineare per la soluzione di problemi di grandi dimensioni, nonché
in Programmazione Lineare Intera per la soluzione del rilassamento lineare relativa a
una formulazione del problema

Ne vedremo quindi un’implementazione diretta in AMPL che possa essere adottata


per la soluzione di un generico problema di PL
Metodo del simplesso dinamico – Introduzione 1/2
Come visto nella lezione 12, la soluzione del rilassamento lineare di un problema
di PL01 con insieme delle soluzioni 𝑆𝑆 e vettore dei costi c ∈ ℝ𝑛𝑛 è uno dei
principali strumenti per dimostrare l’ottimalità di una soluzione intera 𝑥𝑥 ∗ ∈ 𝑆𝑆

Data una formulazione lineare 𝑃𝑃 del problema di PL01 (𝑆𝑆, 𝑐𝑐 ) è ragionevole


chiedersi di quali informazioni abbiamo veramente bisogno per risolvere il
problema
𝑚𝑚𝑚𝑚𝑚𝑚{𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑃𝑃}
Metodo del simplesso dinamico – Introduzione 2/2
Dal corso di Ricerca Operativa, sappiamo che data una rappresentazione esterna
del poliedro 𝑃𝑃, vale a dire una matrice 𝐴𝐴 e un vettore dei termini noti 𝑏𝑏 tali che
𝑃𝑃 = 𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝐴𝐴𝐴𝐴 ≤ 𝑏𝑏

possiamo applicare il Metodo del Simplesso per determinare la soluzione ottima


del problema.

Ma è necessario conoscere una rappresentazione esterna completa per poter


applicare il Metodo del Simplesso?
Metodo del simplesso dinamico
Ci sono poliedri descritti da un enorme numero di vincoli lineari

In teoria, è sempre possibile applicare il Metodo del Simplesso per risolvere tali
problemi

In pratica, se il numero di vincoli supera la capacità di memoria del calcolatore, è


impossibile pensare di risolvere il problema nella sua rappresentazione esterna

Il Metodo del simplesso dinamico utilizza in modo implicito i vincoli della


rappresentazione esterna
𝑃𝑃 = 𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝐴𝐴𝐴𝐴 ≥ 𝑏𝑏

ll metodo verifica l’ammissibilità delle soluzioni senza utilizzare tutti i vincoli


contemporaneamente ed esplicitamente come nel Metodo del Simplesso
Oracolo di separazione 1/2
Il Metodo del simplesso dinamico acquisisce le informazioni sulla
struttura del poliedro 𝑃𝑃 non da una esplicita rappresentazione in termini
di disequazioni 𝐴𝐴𝐴𝐴 ≥ 𝑏𝑏 bensì da una sua rappresentazione implicita
realizzata per mezzo di un oracolo di separazione

Dato un vettore x� ∈ ℝ𝑛𝑛 un oracolo di separazione

1. fornisce una disequazione 𝑎𝑎𝑇𝑇 𝑥𝑥 ≥ 𝑎𝑎0 appartenente al sistema 𝐴𝐴𝑥𝑥 ≥ 𝑏𝑏


tale che 𝑎𝑎𝑇𝑇 x� < 𝑎𝑎0

2. conclude che tutte le disequazioni 𝐴𝐴𝑥𝑥 ≥ 𝑏𝑏 sono soddisfatte da x�

Nel caso 1. il vincolo violato dalla soluzione corrente viene aggiunto

Nel caso 2. la soluzione x� è ottima e il metodo termina


Oracolo di separazione 2/2
Geometricamente, l’oracolo di separazione costruisce un iperpiano che
separi i vettori appartenenti al poliedro 𝑃𝑃 dal punto x� ∈ ℝ𝑛𝑛 , qualora x� ∉ 𝑃𝑃

Se tale iperpiano non esiste, allora x� ∈ 𝑃𝑃

L’oracolo di separazione viene generalmente realizzato da un algoritmo,


detto algoritmo di separazione

x� ∉ 𝑃𝑃 ⇒ 𝑎𝑎𝑇𝑇 x� < 𝑎𝑎0


oracolo di
x� ∈ ℝ𝑛𝑛
separazione
x� ∈ 𝑃𝑃
Metodo del simplesso dinamico – Diagramma di flusso

Definizione del
D0 d0
problema “core”
A b
D=D0 ; d=d0

min cTx Q= ∅
x∈ Q = Dx<d, Metodo del
(P⊆ Q) 1n > x > 0n Simplesso P= ∅
x* ottima (in Q)
Nuova D e nuovo d
x*∉P Oracolo di
x* ∈ P
aiT bi aiTx>bi Separazione
di P x* ottima
Conclusione

In questa attività abbiamo visto il metodo del simplesso dinamico per la soluzione di
problemi di Programmazione Lineare

Nella prossima lezione vedremo un esempio di istruzioni AMPL per


l’implementazione del metodo
Ricerca Operativa 2

Lezione 35 di 48
Simplesso dinamico
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 35 di 48
AMPL
Approfondimento
Approfondimento su testo
Studiare la sezione 4.2.3 del libro di testo

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 35 di 48
AMPL
Domande aperte
Definire il ruolo e il funzionamento dell’oracolo di separazione nel metodo del
simplesso dinamico
Descrivere il metodo del simplesso dinamico
Illustrare il diagramma di flusso del metodo del simplesso dinamico
Ricerca Operativa 2

Lezione 36 di 48
AMPL
Implementazione del simplesso dinamico
Introduzione

In questa lezione vedremo altri esempi di programmi in AMPL per implementare


algoritmi di soluzione di problemi di Programmazione Matematica

In particolare, ci concentreremo sul metodo del simplesso dinamico che è stato


introdotto e approfondito nella lezione precedente
Metodo del simplesso dinamico in AMPL 1/2

In questo corso vedremo un’implementazione del metodo del simplesso


dinamico che preveda un oracolo di separazione molto semplice
Data una soluzione, l’oracolo di separazione verifica semplicemente che
tutti i vincoli della rappresentazione esterna del problema siano
soddisfatti
Questo tipo di algoritmo di separazione è anche detto separazione per
look-up perché di fatto è sufficiente scandire la lista dei vincoli per
verificare se siano tutti soddisfatti o restituire il primo violato
Per implementare il metodo del Simplesso Dinamico in AMPL dobbiamo
prevedere una struttura dati che ci consenta di definire, iterazione per
iterazione, quali vincoli del sistema Ax<b si trovano nel sottoproblema
corrente
Metodo del simplesso dinamico in AMPL 2/2

Dichiariamo nel file .mod


- un parametro M che indichi il numero di vincoli
- un parametro z che indichi il numero di vincoli presenti nel
sottoproblema corrente
- un vettore di parametri I che indichi gli indici dei vincoli presenti nel
sottoproblema corrente

Nel file .dat definiamo i coefficienti e i termini noti di tutti i vincoli.


Modificando opportunamente i parametri z e I definiamo di volta in
volta il sottoproblema definendo solamente i vincoli con indici in I.
Metodo del simplesso dinamico – Richiami
Per risolvere un generico problema di PL con poliedro

P ={x∈ Rn: Ax<b, x > 0n}


l’oracolo di separazione più semplice che possiamo immaginare è quello
che verifica che la soluzione x* ottima (in Q) in input verifichi tutti i
vincoli del sistema Ax<b (separazione per look-up)

Oracolo di x* ∈ P
x*∈ Rn
Separazione di P
verifica A x*< b x* ∉ P
ai x > bi
Metodo del simplesso dinamico in AMPL

Realizziamo due script:


- oracolo.run che trova, se esiste, un vincolo violato, aggiungendolo a I
- main.run che dichiara i parametri e definisce il problema, assegna i
valori iniziali ai parametri, risolve il sottoproblema corrente e invoca
l’oracolo.
Metodo del simplesso dinamico in AMPL

Realizziamo due script:

- oracolo.run che trova, se esiste, un vincolo violato, aggiungendolo a I


oppure conclude che la soluzione corrente è ottima

- main.run che dichiara i parametri e definisce il problema, assegna i


valori iniziali ai parametri, risolve il sottoproblema corrente e invoca
l’oracolo come visto nel diagramma di flusso del metodo del simplesso
dinamico visto nella lezione precedente
MCF.mod
param N;
param A;

param domanda {1..N};


param capacita {1..A};
param costo {1..A};
param M {1..N, 1..A};

var x {j in 1..A} >= 0, <= capacita[j];

maximize Costo_Totale: sum {j in 1..A} costo[j] * x[j];

subject to Incidenza {i in 1..N}:


sum {j in 1..A} M[i,j] * x[j] = domanda[i];
MCF.dat 2/2
# file MF_modf.dat – continua

param M :
1 2 3 4 5 6 7 8 :=
1 -1 1 0 0 0 0 0 1
2 0 -1 -1 0 1 0 1 0
3 1 0 1 -1 0 0 0 0
4 0 0 0 1 -1 -1 0 0
5 0 0 0 0 0 1 -1 -1;
MCF.dat
data;

param N := 5 ;
param A := 8;

param domanda := 1 0 2 0 3 0 4 0 5 0 ;

param: capacita costo :=


1 4 0
2 2 0
3 3 0
4 7 0
5 4 0
6 5 0
7 1 0
8 Infinity 1 ;
Script taglio_minimo.run 1/3
model MF_modf.mod;
data MF_modf.dat;

param ind_s default 0;


param ind_t default 0;
param valore_minimo default Infinity;

param valore_taglio_minimo { 1..N, 1..N} default 0;


param taglio_minimo {1..N, 1..N, 1..N} default 0;

option solver cplex;


Script taglio_minimo.run 2/3
for {s in 1..N, t in 1..N}
{
if( s != t )
then
{
commands modifica_grafo.run;
solve;
let valore_taglio_minimo[s,t] := Costo_Totale;
for { k in 1..N }
let taglio_minimo[s,t,k] := Incidenza[k];
if( Costo_Totale < valore_minimo )
then
{
let valore_minimo := Costo_Totale;
let ind_s := s;
let ind_t := t;
}
Script taglio_minimo.run 3/3

display s > TCM.sol.txt;


display t > TCM.sol.txt;
display Costo_Totale > TCM.sol.txt;
display Incidenza > TCM.sol.txt;

}
}

display ind_s > TCM.sol.txt;


display ind_t > TCM.sol.txt;
display valore_minimo > TCM.sol.txt;
Script modifica_grafo.run
# script modifica_grafo.run - script per modificare
# la matrice di incidenza del grafo in funzione dei
# nodi s e t in N

for { k in 1..N }
let M[k,A] := 0;
colonna ts
let M[s,A] := 1; inseriamo -1
let M[t,A] := -1; nella riga t
–1 1 0 0 0 0 0 1
e 1 nella riga s
0 – 1 –1 0 1 0 1 0
M= 1 0 1 –1 0 0 0 0
0 0 0 1 – 1 –1 0 0
0 0 0 0 0 1 –1 –1

A (numero degli archi)


Esecuzione
Eseguiamo lo script taglio_minimo.run

ampl: commands taglio_minimo.run;


Nel file TCM.sol.txt sono riportati, al variare di s e t in N:
- capacità del taglio st di capacità minima
- vettore di incidenza dell’insieme S di nodi separabili dal taglio st
Alla fine del file, viene riportata la coppia st in corrispondenza della
quale abbiamo il taglio di capacità minima e la capacità del taglio.

ind_s = 5

ind_t = 1

valore_minimo = 1
Esecuzione
La soluzione ottima, corrispondente al taglio 5-1 di capacità 1, è
rappresentata in figura

2
2 1

1 3 4 5

4 5
7
3 4
Conclusione

In questa attività abbiamo visto istruzioni AMPL per la gestione di lettura e scrittura
dei valori di insiemi, parametri, variabili e altre entità definibili e gestibili in AMPL, sia
da riga di comando che da/a file

Nella prossima attività vedremo alcune operazioni sulle stringhe e come strutturare
un blocco di istruzioni in una funzione in AMPL
Ricerca Operativa 2

Lezione 36 di 48
AMPL
Implementazione del simplesso dinamico
Metodo del simplesso dinamico in AMPL

Realizziamo due script:

- oracolo.run che trova, se esiste, un vincolo violato, aggiungendolo a I


oppure conclude che la soluzione corrente è ottima

- main.run che dichiara i parametri e definisce il problema, assegna i


valori iniziali ai parametri, risolve il sottoproblema corrente e invoca
l’oracolo come visto nel diagramma di flusso del metodo del simplesso
dinamico visto nella lezione precedente

Scriviamo i file .mod e .dat che ci aiutino a gestire il problema


Test.mod
param N;
param M;

param z;
param I {1..M};

param c {1..N};
param d {1..M};
param D {1..M, 1..N};

var x {j in 1..N} >= 0;

minimize Funzione_Obiettivo: sum {j in 1..N} c[j] * x[j];

subject to Insieme_Vincoli {i in 1..z}:


sum {j in 1..N} D[I[i],j] * x[j] >= d[I[i]];
Test.dat
data;

param N := 10;
param M := 100;

param c := 1 1 2 4 3 5 4 3 5 2 6 2 7 5 8 0 9 7 10 0 ;

/* segue definizione dei vettori di parametri D e d relativi


a 100 vincoli in 10 variabili */
Script main.run 1/2
# script main.run - script per risolvere un problema
# di PL con il metodo del Simplesso Dinamico

model test.mod;
data test.dat;
param nv;
let z := 10;
let {i in 1..z} I[i] := i;
option solver cplex;
Script main.run 2/2
repeat
{
solve;

commands oracolo.run;

display Funzione_Obiettivo > sol.txt;


display x > sol.txt;
display I > sol.txt;
}
until nv = 0;

display Funzione_Obiettivo;
display x;
Script oracolo.run
# script oracolo.run - script per l'oracolo di
# separazione per look-up

let nv := 0;

for {i in 1..M}
{

if( sum {j in 1..N} D[i,j] * x[j] >= d[i] )


then continue;
else {
let z := z + 1;
let I[z] := i;
let nv := 1;
break; }

}
Esecuzione
Eseguiamo lo script main.run

ampl: commands main.run;


Nel file sol.txt sono riportati per le diverse iterazioni:
- il valore della soluzione
- la soluzione
- il vettore di indici dei vincoli nel sottoproblema corrente

A monitor viene stampata la soluzione ottima: ottenuta risolvendo un


problema di PL con 10 variabili e 15 vincoli (anzichè 100):

Funzione_Obiettivo = 10

x [*] := 1 2 2 0 3 0 4 0 5 0 6 4 7 0 8 3 9 0 10 2
Conclusione

In questa attività abbiamo visto una semplice implementazione del metodo del
simplesso dinamico in AMPL

Per quanto la separazione sia effettuata per look-up, tale implementazione ci


consente si risolvere problemi con centinaia di vincoli senza considerarli
esplicitamente tutti nel metodo del simplesso
Ricerca Operativa 2

Lezione 36 di 48
AMPL
Implementazione del simplesso dinamico
Webinar
La lezione sarà argomento del webinar della durata di un’ora tenuto dalla docente
nelle seguenti date per l’anno accademico in corso:

- Mercoledì 10 aprile ore 11:30

- Mercoledì 22 maggio ore 11:30

- Mercoledì 10 luglio ore 11:30

Contattare la docente via sistema di messaggistica per prenotarsi per il webinar.


La prenotazione è obbligatoria e va effettuata entro la settimana precedente
quella del webinar
Ricerca Operativa 2

Lezione 36 di 48
AMPL
Esercizio proposto
Esercizio proposto
Si consideri il seguente problema di Programmazione Lineare di minimizzazione
con 28 vincoli e 6 variabili e lo si risolva con il Metodo del simplesso dinamico in
AMPL

Vettore dei costi

c=[5 6 1 7 3 6]

Vettore dei termini noti


b =[60 20 10 15 8 0 20 20 8 10 15 10 40 40 35 10 15 35 15 15 70 30 15 15 25 50
25 15 60 20 15 10 60 20 10 15 8 0 20 20 8 10 15 10 40 40 35 10 35 20 ]
60 20 0 15 0 15
Esercizio proposto 8 0 20 20 30 30
0 10 15 10 15 20
40 0 35 10 1 25
Matrice dei coefficienti 15 35 15 15 9 60
0 30 15 15 10 10
A: 25 0 25 15 10 15
20 20 15 10 0 0
10 20 10 0 20 10
0 20 0 60 15 15
20 30 10 20 10 60
30 8 60 15 20 10
8 0 7 30 10 20
9 10 20 10 30 8
0 15 60 60 15 0
20 20 8 8 30 30
8 10 0 0 20 15
35 10 15 40 25 1
15 15 15 15 15 9
15 15 0 0 10 10
25 15 25 25 15 10
15 10 20 20 0 0
10 0 10 10 10 20
0 8 0 0 8 15
10 20 20 20 15 10
8 15 15 30 10 20
7 30 8 8 20 10
20 10 9 9 8 15
Ricerca Operativa 2

Lezione 36 di 48
AMPL
Esercizio proposto
Esercizio proposto
Si consideri il seguente problema della dieta

Data una dieta che stabilisce le quantità giornaliere minime da assumere in calorie (2200
cal), proteine (50 gr) e calcio (750 mg), occorre determinare quale sia il minimo costo della
spesa giornaliera che permetta di soddisfare i fabbisogni minimi

Tenendo come riferimento 5 alimenti e i rispettivi apporti in termini di calorie, proteine e


calcio, la massima quantità ammessa per giorno nonché il costo in euro

Pane Uova Latte Carne Biscotti


Calorie 100 175 150 250 350
Proteine 3 20 10 15 3
Calcio 2 50 270 75 20
Costo 1 1.5 1.8 20 18
Quantità massima 3 2 4 1 2
Esercizio proposto
Identificare variabili, vincoli e funzione obiettivo del problema

Formularlo in AMPL e risolverlo


Ricerca Operativa 2

Lezione 38 di 48
Pianificazione degli investimenti
Introduzione
Introduzione

In questa parte del corso introduciamo il classico problema della


Pianificazione degli Investimenti

Il modello di Programmazione Intera che presenteremo in questo corso


è stato ampiamente usato per la risoluzione del problema ed è noto
come modello di Capital Budgeting

Tale modello fu introdotto nel 1957 da due importanti economisti e


ancora oggi viene ampiamente usato in ambito finanziario e aziendale
per risolvere problemi di pianificazione finanziaria
Capital budgeting – Dati del problema 1/3

Si considerino i seguenti dati distintivi del problema

• Un insieme 𝐼𝐼 = {1,2, … , 𝑛𝑛} di possibili investimenti

• Un indice di redditività 𝑐𝑐𝑖𝑖 relativo a ciascun investimento 𝑖𝑖 ∈ 𝐼𝐼

• Un orizzonte temporale 𝑇𝑇 = {1,2, … , 𝑡𝑡}

• Un budget 𝑏𝑏𝑗𝑗 disponibile per ogni periodo 𝑗𝑗 ∈ 𝑇𝑇 = {1,2, … , 𝑡𝑡}

• Un vettore dei flussi di cassa 𝑎𝑎𝑖𝑖 = (𝑎𝑎𝑖𝑖1 , … . , 𝑎𝑎𝑖𝑖𝑖𝑖 ) dell’investimento 𝑖𝑖 ∈ 𝐼𝐼


sull’orizzonte temporale 𝑇𝑇 = {1,2, … , 𝑡𝑡}

I flussi di cassa possono essere positivi (in caso di ritorno


dell’investimento) o negativi (in caso di finanziamento
dell’investimento)
Capital budgeting – Dati del problema 2/3

Dato un sottoinsieme di investimenti 𝐹𝐹 ⊆ 𝐼𝐼 definiamo redditività totale


dell’insieme 𝐹𝐹 la somma degli indici di redditività 𝑐𝑐𝑖𝑖 degli investimenti
𝑖𝑖 ∈ 𝐹𝐹
𝑐𝑐 𝐹𝐹 ≔ � 𝑐𝑐𝑖𝑖
𝑖𝑖∈𝐹𝐹

Un sottoinsieme di investimenti 𝐹𝐹 ⊆ 𝐼𝐼 si definisce ammissibile per il


problema capital budgeting se per ogni periodo dell’orizzonte temporale
𝑇𝑇 = {1,2, … , 𝑡𝑡} l’ammontare dei flussi di cassa degli investimenti in 𝐹𝐹
rispetta il vincolo di budget

� 𝑎𝑎𝑖𝑖𝑖𝑖 ≤ 𝑏𝑏𝑗𝑗 ∀ 𝑗𝑗 ∈ 𝑇𝑇 = {1,2, … , 𝑡𝑡}


𝑖𝑖∈𝐹𝐹
Capital budgeting – Dati del problema 3/3
𝑏𝑏1 𝑏𝑏2 𝑏𝑏3 𝑏𝑏4 𝑏𝑏5
Per essere ammissibile, un sottoinsieme

𝑎𝑎31 di investimenti 𝐹𝐹 ⊆ 𝐼𝐼 deve soddisfare


𝑎𝑎33 𝑎𝑎34
𝑎𝑎32 𝑎𝑎35 tanti vincoli (lineari) quanti sono i
periodi dell’orizzonte temporale 𝑇𝑇 =
𝑎𝑎21 {1,2, … , 𝑡𝑡}
𝑎𝑎22
𝑎𝑎24
𝑎𝑎23 𝑎𝑎25 𝑎𝑎11 + 𝑎𝑎21 + 𝑎𝑎31 ≤ 𝑏𝑏1
𝑎𝑎12 + 𝑎𝑎22 + 𝑎𝑎32 ≤ 𝑏𝑏2

𝑎𝑎11 𝑎𝑎13 𝑎𝑎13 + 𝑎𝑎23 + 𝑎𝑎33 ≤ 𝑏𝑏3


𝑎𝑎15 𝑎𝑎14 + 𝑎𝑎24 + 𝑎𝑎34 ≤ 𝑏𝑏4
𝑎𝑎12 𝑎𝑎14
𝑎𝑎15 + 𝑎𝑎25 + 𝑎𝑎35 ≤ 𝑏𝑏5
1 2 3 4 5
Capital budgeting – Definizione

Dati

• Un insieme 𝐼𝐼 = {1,2, … , 𝑛𝑛} di possibili investimenti

• Un indice di redditività 𝑐𝑐𝑖𝑖 relativo a ciascun investimento 𝑖𝑖 ∈ 𝐼𝐼

• Un orizzonte temporale 𝑇𝑇 = {1,2, … , 𝑡𝑡}

• Un budget 𝑏𝑏𝑗𝑗 disponibile per ogni periodo 𝑗𝑗 ∈ 𝑇𝑇 = {1,2, … , 𝑡𝑡}

• Un vettore dei flussi di cassa 𝑎𝑎𝑖𝑖 = (𝑎𝑎𝑖𝑖1 , … . , 𝑎𝑎𝑖𝑖𝑖𝑖 ) dell’investimento 𝑖𝑖 ∈ 𝐼𝐼


sull’orizzonte temporale 𝑇𝑇 = {1,2, … , 𝑡𝑡}

determinare l’insieme di investimenti 𝐹𝐹 ∗ ⊆ 𝐼𝐼 ammissibile di redditività


totale massima
Capital budgeting – Indici di redditività e flussi di cassa

Nel presente corso assumeremo che indici di redditività e flussi di cassa


siano attualizzati, onde poter essere confrontabili tra loro e rendere
quindi le diverse soluzioni ammissibili confrontabili

Per gli indici di redditività, vedremo nell’approfondimento proposto che


possiamo far riferimento a tre principali indicatori

• Tasso interno di rendimento (Internal rate of return IRR)

• Valore attuale netto (Net-present-value NPV)

• Punto di break-even (Criterio Payback PBK)


Capital budgeting – Insieme delle soluzioni ammissibili

Consideriamo un generico sottoinsieme 𝐹𝐹 ⊆ 𝐼𝐼

Definiamo il vettore di incidenza 𝑥𝑥 del sottoinsieme 𝐹𝐹 ⊆ 𝐼𝐼

1 𝑠𝑠𝑠𝑠 𝑖𝑖 ∈ 𝐹𝐹
𝑥𝑥𝑖𝑖 = � 𝑖𝑖 = 1, … , 𝑛𝑛
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎

Possiamo definire implicitamente l’insieme delle soluzioni ammissibili


del problema di capital budgeting come
𝑆𝑆 = {𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝐹𝐹 𝑑𝑑𝑑𝑑 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎}
Il problema può quindi essere scritto come problema di PL01
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑆𝑆
Capital budgeting – Formulazione naturale 1/2

Possiamo definire esplicitare l’insieme delle soluzioni ammissibili del


problema di capital budgeting richiamando i vincoli che legano tra loro
gli investimenti attivati

𝑆𝑆 = {𝑥𝑥 ∈ 0,1 𝑛𝑛 : � 𝑎𝑎𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏𝑗𝑗 𝑗𝑗 ∈ 𝑇𝑇 = 1,2, … , 𝑡𝑡}


𝑖𝑖∈𝐼𝐼
Detti 𝐴𝐴 ∈ ℝ𝑡𝑡×𝑛𝑛 la matrice avente per colonne i vettori dei flussi di cassa
𝑎𝑎𝑖𝑖 relativi agli investimenti 𝑖𝑖 ∈ 𝐼𝐼 e 𝑏𝑏 ∈ ℝ𝑡𝑡 il vettore dei budget disponibili
nei periodi 1, … , 𝑡𝑡 possiamo scrivere l’equivalenza di problemi

max 𝑐𝑐 𝑇𝑇 𝑥𝑥
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏
𝑥𝑥 ∈ 𝑆𝑆
𝑥𝑥 ∈ 0,1 𝑛𝑛
Capital budgeting – Formulazione naturale 2/2

La formulazione naturale può essere ottenuta rimuovendo i vincoli di


interezza sulle componenti del vettore 𝑥𝑥

max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏
0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛

Sostituiamo i vincoli di interezza con i vincoli che ciascuna componente


del vettore 𝑥𝑥 sia compresa tra 0 e 1

Come vedremo, non è l’unica formulazione disponibile per il problema,


né la migliore, ma è quella direttamente ricavabile dalla descrizione del
problema
Conclusione

In questa lezione abbiamo introdotto il problema della pianificazione finanziaria come


problema di capital budgeting

A partire dai dati del problema abbiamo visto come ricavare la formulazione naturale
del problema

Nelle prossime attività vedremo come determinare una formulazione migliore e come
risolvere il problema utilizzando uno dei metodi generali di soluzione visti durante il
corso
Ricerca Operativa 2

Lezione 38 di 48
Pianificazione degli investimenti
Knapsack a coefficienti non negativi
Introduzione

La formulazione naturale del problema di pianificazione degli


investimenti presentata in questa lezione è suscettibile di ulteriori
integrazioni per poter riflettere ulteriori vincoli tra gli investimenti

In questa attività inizieremo a vedere una formulazione alternativa, che


risulterà molto utile nel definire efficienti strategie di soluzione per il
problema
Capital budgeting – Vincoli di knapsack 1/2

Nella formulazione naturale del problema di capital budgeting compaiono


𝑡𝑡 vincoli lineari, uno per ogni periodo dell’orizzonte temporale 𝑇𝑇 =
1,2, … , 𝑡𝑡
� 𝑎𝑎𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏𝑗𝑗 𝑗𝑗 ∈ 𝑇𝑇 = 1,2, … , 𝑡𝑡
𝑖𝑖∈𝐼𝐼

È facile verificare che ciascuno di tali vincoli definisce un singolo


problema di knapsack binario (si faccia riferimento alla lezione 14 per
l’introduzione al problema)

𝐾𝐾𝑃𝑃𝑗𝑗 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: � 𝑎𝑎𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏𝑗𝑗 , 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛


= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆𝑗𝑗 }
𝑖𝑖∈𝐼𝐼
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
formulazione
(RL) 𝑎𝑎𝑗𝑗𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏𝑗𝑗 naturale
0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 knapsack binario
Capital budgeting – Vincoli di knapsack 2/2

Dal momento che una soluzione è ammissibile se rispetta tutti i vincoli


di budget per ogni periodo dell’orizzonte temporale, possiamo
concludere che l’insieme 𝑆𝑆 delle soluzioni ammissibili del problema di
capital budgeting è l’intersezione degli insiemi 𝑆𝑆𝑗𝑗 delle soluzioni
ammissibili dei problemi di knapsack binario 𝐾𝐾𝐾𝐾𝑗𝑗

𝑆𝑆 = � 𝑆𝑆𝑗𝑗 𝑆𝑆𝑗𝑗 = {𝑥𝑥: ∑𝑖𝑖∈𝐼𝐼 𝑎𝑎𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏𝑗𝑗 , 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 } ∩ 0,1 𝑛𝑛 = 𝑃𝑃𝑗𝑗 ∩ 0,1 𝑛𝑛

𝑗𝑗∈𝑇𝑇

𝑆𝑆 = � 𝑆𝑆𝑗𝑗 = �(𝑃𝑃𝑗𝑗 ∩ 0,1 𝑛𝑛 ) = (� 𝑃𝑃𝑗𝑗 ) ∩ 0,1 𝑛𝑛

𝑗𝑗∈𝑇𝑇 𝑗𝑗∈𝑇𝑇 𝑗𝑗∈𝑇𝑇 formulazione naturale


capital budgeting
𝑃𝑃 = � 𝑃𝑃𝑗𝑗 intersezione delle
formulazioni naturali
𝑗𝑗∈𝑇𝑇
knapsack binario
Knapsack binario – Formulazione alternativa 1/4

Consideriamo un singolo problema di knapsack binario 𝐾𝐾𝐾𝐾𝑗𝑗

Per semplicità di scrittura, rimuoviamo il pedice 𝑗𝑗 -esimo e


concentriamoci sulla struttura del singolo vincolo di knapsack

𝐾𝐾𝐾𝐾 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛


= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}

Ogni knapsack ha esattamente 𝑛𝑛 componenti 𝑎𝑎1 , … , 𝑎𝑎𝑛𝑛 . Distinguiamo tali


componenti in non negative (𝑎𝑎𝑖𝑖 ≥ 0) e negative (𝑎𝑎𝑖𝑖 < 0)

• Insieme delle componenti non negative 𝐼𝐼+ = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 ≥ 0}

• Insieme delle componenti negative 𝐼𝐼− = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 < 0}


Knapsack binario – Formulazione alternativa 2/4

Facciamo una trasformazione di variabili: le variabili con indice in 𝐼𝐼+


rimangono invariate, mentre quelle con indice in 𝐼𝐼− vengono cambiate di
segno. Poniamo
• 𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+
• 𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−
Sostituiamo quindi le nuove variabili nel vincolo di knapsack

𝐾𝐾𝐾𝐾 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛

= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥 : ∑𝑖𝑖∈𝐼𝐼 𝑎𝑎𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 }

= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥 : ∑𝑖𝑖∈𝐼𝐼+ 𝑎𝑎𝑖𝑖 𝑥𝑥𝑖𝑖 + ∑𝑖𝑖∈𝐼𝐼− 𝑎𝑎𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 }

= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥 : � 𝑎𝑎𝑖𝑖 𝑧𝑧𝑖𝑖 + � 𝑎𝑎𝑖𝑖 (1 − 𝑧𝑧𝑖𝑖 ) ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 }


𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
Knapsack binario – Formulazione alternativa 3/4
𝐾𝐾𝐾𝐾 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛

= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥 : � 𝑎𝑎𝑖𝑖 𝑧𝑧𝑖𝑖 + � 𝑎𝑎𝑖𝑖 (1 − 𝑧𝑧𝑖𝑖 ) ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 }


𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥 : � 𝑎𝑎𝑖𝑖 𝑧𝑧𝑖𝑖 + � −𝑎𝑎𝑖𝑖 𝑧𝑧𝑖𝑖 ≤ 𝑏𝑏 − � 𝑎𝑎𝑖𝑖 , 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 }


𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼− 𝑖𝑖∈𝐼𝐼−

Operiamo ora la seguente sostituzione di coefficienti


• 𝑎𝑎�𝑖𝑖 = 𝑎𝑎𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+
• 𝑎𝑎�𝑖𝑖 = −𝑎𝑎𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−
• 𝑏𝑏� = 𝑏𝑏 − ∑𝑖𝑖∈𝐼𝐼− 𝑎𝑎𝑖𝑖
Riscriviamo il vincolo di knapsack a coefficienti tutti non negativi

𝐾𝐾𝐾𝐾 ≔ {max 𝑐𝑐 𝑇𝑇 𝑥𝑥 : � 𝑎𝑎�𝑖𝑖 𝑧𝑧𝑖𝑖 + � 𝑎𝑎�𝑖𝑖 𝑧𝑧𝑖𝑖 ≤ 𝑏𝑏�, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 }
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
Capital budgeting – Formulazione alternativa 4/4

Consideriamo i due insiemi delle soluzioni 𝑆𝑆 e 𝑆𝑆̅ del problema di


knapsack 𝐾𝐾𝐾𝐾 e del problema di knapsack 𝐾𝐾𝐾𝐾 a coefficienti non negativi

𝐾𝐾𝐾𝐾 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛


= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}

𝐾𝐾𝐾𝐾 ≔ {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎�𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏�, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 } = {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆̅}

I due problemi sono equivalenti, in quanto hanno stessa funzione


obiettivo e per ogni soluzione di uno possiamo ricavare una soluzione
dell’altro attraverso la trasformazione lineare
• 𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+ Corrispondenza 1
a1
• 𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−
Conclusione

In questa attività abbiamo visto come l’insieme delle soluzioni del problema di capital
budgeting sia l’intersezione degli insiemi delle soluzioni di tanti problemi di knapsack
quanti sono i periodi considerati nell’orizzonte temporale della pianificazione

Abbiamo inoltre visto come trasformare un vincolo di knapsack a coefficienti


qualsiasi in un vincolo di knapsack equivalente a coefficienti non negativi

Nella prossima lezione vedremo come definire un importante concetto per definire la
formulazione alternativa del problema di knapsack binario: il concetto di cover
Ricerca Operativa 2

Lezione 38 di 48
Pianificazione degli investimenti
Introduzione
Audiolezione
• Ascolta il commento audio alla lezione
Ricerca Operativa 2

Lezione 38 di 48
Pianificazione degli investimenti
Approfondimento
Approfondimento su testo
Studiare la sezione 5.1, 5.1.1 e 5.1.2 del libro di testo

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 38 di 48
Pianificazione degli investimenti
Domande aperte
Illustrare il problema di pianificazione degli investimenti nella sua forma più
generale
Illustrare la formulazione naturale del problema di pianificazione degli investimenti
Illustrare la formulazione cover del problema di pianificazione degli investimenti
Ricerca Operativa 2

Lezione 39 di 48
Pianificazione degli investimenti
Formulazione cover
Introduzione

In questa lezione introdurremo la formulazione cover del problema di


knapsack binario

Sfrutteremo la formulazione alternativa del problema basata su vincolo


di knapsack a coefficienti non negativi

Nella prossima lezione vedremo un oracolo di separazione per


determinare una disequazione della formulazione cover violata dalla
soluzione corrente per il problema
Knapsack binario – Cover

Ripartiamo dalla formulazione alternativa del problema di knapsack


binario a coefficienti non negativi

𝐾𝐾𝐾𝐾 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛


= {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}

𝐾𝐾𝐾𝐾 ≔ {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎�𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏�, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 } = {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆̅}

Si definisce cover 𝐶𝐶 ⊆ 𝐼𝐼 un sottoinsieme di indici tali che la somma delle


rispettive componenti in 𝑎𝑎� superi il budget 𝑏𝑏�

𝐶𝐶 ⊆ 𝐼𝐼 cover ⟺ � 𝑎𝑎�𝑖𝑖 > 𝑏𝑏�


𝑖𝑖∈𝐶𝐶
Knapsack binario – Cover e soluzioni 1/3

Se un sottoinsieme 𝑇𝑇 ⊆ 𝐼𝐼 non è un cover, allora necessariamente

𝑇𝑇 ⊆ 𝐼𝐼 non cover ⟺ � 𝑎𝑎�𝑖𝑖 ≤ 𝑏𝑏�


𝑖𝑖∈𝑇𝑇

Consideriamo il vettore di incidenza di un sottoinsieme 𝑇𝑇 ⊆ 𝐼𝐼 che non sia


un cover

1 𝑠𝑠𝑠𝑠 𝑖𝑖 ∈ 𝑇𝑇
𝑧𝑧𝑖𝑖 = � 𝑖𝑖 = 1, … , 𝑛𝑛
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎

Dalla definizione abbiamo che

� 𝑎𝑎�𝑖𝑖 𝑧𝑧𝑖𝑖 = � 𝑎𝑎�𝑖𝑖 ≤ 𝑏𝑏�


𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝑇𝑇

𝑧𝑧𝑖𝑖 è soluzione del problema di knapsack binario


Knapsack binario – Cover e soluzioni 2/3

Quindi un qualsiasi sottoinsieme 𝑇𝑇 ⊆ 𝐼𝐼 o è un cover o non è cover

Un qualsiasi sottoinsieme 𝑇𝑇 ⊆ 𝐼𝐼 non è un cover se e solo se è soluzione


ammissibile del problema di knapsack binario

Dato un vincolo di knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎�, 𝑏𝑏�) in 𝐼𝐼 = {1, … , 𝑛𝑛} componenti, l’insieme


di tutti i suoi cover e di tutti i non cover rappresenta tutti i possibili
sottoinsiemi di 𝐼𝐼

{𝐶𝐶 cover} ∪ {𝑇𝑇 soluzione in S� } = 2𝐼𝐼


con 2𝐼𝐼 insieme delle parti di 𝐼𝐼 (insieme di tutti i possibili sottoinsiemi di
𝐼𝐼)
Knapsack binario – Cover e soluzioni 3/3

Il sottoinsieme 𝑇𝑇 ⊆ 𝐼𝐼 non è cover se e solo se è soluzione del problema di


knapsack binario

D’altra parte, se 𝑇𝑇 contiene un cover, è un cover e quindi non è soluzione

𝑇𝑇 è soluzione del problema di knapsack binario se e solo se non


contiene un cover 𝐶𝐶 ⊆ 𝐼𝐼
Supponiamo di conoscere tutti i cover 𝐶𝐶 del problema di knapsack
binario 𝐾𝐾𝐾𝐾(𝑎𝑎�, 𝑏𝑏�)

𝑇𝑇 non contiene un cover 𝐶𝐶 di 𝐾𝐾𝐾𝐾 se la sua intersezione con 𝐶𝐶 non


è un cover
𝑇𝑇 non contiene un cover 𝐶𝐶 di 𝐾𝐾𝐾𝐾 se la sua intersezione con 𝐶𝐶 ha
meno di |𝐶𝐶| elementi per ogni cover 𝐶𝐶 di 𝐾𝐾𝐾𝐾
Knapsack binario – Caratterizzazione delle soluzioni 1/2

Il sottoinsieme 𝑇𝑇 ⊆ 𝐼𝐼 è soluzione del problema di knapsack binario se e


solo se la sua intersezione con 𝐶𝐶 ha meno di |𝐶𝐶| elementi per ogni cover
𝐶𝐶 del problema di knapsack binario 𝐾𝐾𝐾𝐾(𝑎𝑎�, 𝑏𝑏�)

𝑇𝑇 soluzione in S� ⟺ 𝑇𝑇 ∩ 𝐶𝐶 ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 cover 𝐾𝐾𝐾𝐾(𝑎𝑎�, 𝑏𝑏�)

l’insieme di tutti i cover di 𝐾𝐾𝐾𝐾(𝑎𝑎�, 𝑏𝑏�) associati al


Indichiamo con 𝐶𝐶𝑎𝑎�,𝑏𝑏�
knapsack binaio a coefficienti non negativi 𝐾𝐾𝐾𝐾(𝑎𝑎�, 𝑏𝑏�)

𝐶𝐶𝑎𝑎�,𝑏𝑏� = {𝐶𝐶 ⊆ 𝐼𝐼: � 𝑎𝑎�𝑖𝑖 > 𝑏𝑏�}


𝑖𝑖∈𝐶𝐶

𝑇𝑇 soluzione in S� ⟺ 𝑇𝑇 ∩ 𝐶𝐶 ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎�,𝑏𝑏�


Knapsack binario – Caratterizzazione delle soluzioni 2/2

Ribaltiamo la condizione appena determinata

𝑇𝑇 soluzione in S� ⟺ 𝑇𝑇 ∩ 𝐶𝐶 ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎�,𝑏𝑏�


nelle variabili 𝑧𝑧 e poi nelle variabili originali 𝑥𝑥 del problema di knapsack

Sia 𝑧𝑧 ∈ 0,1 𝑛𝑛 il vettore di incidenza di una soluzione 𝑇𝑇 ∈ 𝑆𝑆̅

𝑇𝑇 soluzione in S� ⟺ 𝑇𝑇 ∩ 𝐶𝐶 ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎�,𝑏𝑏�


𝑇𝑇 ∩ 𝐶𝐶 = ∑𝑖𝑖∈𝐶𝐶 𝑧𝑧𝑖𝑖
⟺ ∑𝑖𝑖∈𝐶𝐶 𝑧𝑧𝑖𝑖 ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎�,𝑏𝑏�

𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 𝑖𝑖 ∈ 𝐼𝐼+ ⟺ ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑧𝑧𝑖𝑖 + ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼− 𝑧𝑧𝑖𝑖 ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎�,𝑏𝑏�


𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 𝑖𝑖 ∈ 𝐼𝐼− ⟺ ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑥𝑥𝑖𝑖 + ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼− (1 − 𝑥𝑥𝑖𝑖 ) ≤ 𝐶𝐶 − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏
⟺ ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑥𝑥𝑖𝑖 − ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼− 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 − |𝐶𝐶 ∩ 𝐼𝐼− | − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏
Knapsack binario – Formulazione cover

Per il problema di knapsack binario conosciamo la formulazione naturale


𝑃𝑃𝑜𝑜 (vista nelle precedente lezione)
𝐾𝐾𝐾𝐾 ≔ max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛 , 𝑥𝑥 ∈ 0,1 𝑛𝑛 = {max 𝑐𝑐 𝑇𝑇 𝑥𝑥: 𝑥𝑥 ∈ 𝑆𝑆}

𝑃𝑃𝑜𝑜 ≔ 𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛


In questa lezione introduciamo la cosiddetta formulazione cover 𝑃𝑃𝐶𝐶 del
problema di knapsack binario. Sia 𝐶𝐶𝑎𝑎,𝑏𝑏 l’insieme di tutti i cover associati
al knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)

𝑃𝑃𝐶𝐶 ≔ 𝑥𝑥 ∈ ℝ𝑛𝑛 : � 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 − |𝐶𝐶 ∩ 𝐼𝐼− | − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏


𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶∩𝐼𝐼−
Capital budgeting – Formulazione cover 1/2

Per il problema di capital budgeting abbiamo visto nella lezione


precedente che la formulazione naturale è l’intersezione delle
formulazioni naturali relative a tutti i vincoli di knapsack che compaiono
nel problema

𝑃𝑃𝑜𝑜 ≔ 𝑥𝑥 ∈ ℝ𝑛𝑛 : 𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏, 0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛


𝑗𝑗
Detta 𝑃𝑃𝐶𝐶 la formulazione cover dell’𝑗𝑗-esimo vincolo di knapsack binario
𝐾𝐾𝐾𝐾(𝑎𝑎𝑗𝑗 , 𝑏𝑏𝑗𝑗 ) e indicati con 𝐶𝐶𝑎𝑎𝑗𝑗 ,𝑏𝑏𝑗𝑗 l’insieme di tutti i cover di 𝐾𝐾𝐾𝐾(𝑎𝑎𝑗𝑗 , 𝑏𝑏𝑗𝑗 ) ,
possiamo definire la formulazione cover del problema di capital
budgeting come intersezione delle formulazioni cover relative a tutti i
vincoli di knapsack che compaiono nel problema
𝑗𝑗
𝑃𝑃𝐶𝐶 ≔ � 𝑃𝑃𝐶𝐶 = 𝑥𝑥 ∈ ℝ𝑛𝑛 : � 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 − 𝐶𝐶 ∩ 𝐼𝐼− − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎𝑗𝑗 ,𝑏𝑏𝑗𝑗 , 𝑗𝑗 ∈ 𝑇𝑇
𝑗𝑗∈𝑇𝑇 𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶∩𝐼𝐼−
Capital budgeting – Formulazione cover 2/2

È importante sapere che la formulazione cover è migliore della


formulazione naturale del problema di capital budgeting
𝑃𝑃𝐶𝐶 ⊂ 𝑃𝑃𝑜𝑜

Inoltre le disequazioni cover appartengono alla formulazione ottima del


problema di capital budgeting 𝑃𝑃∗ = 𝑐𝑐𝑐𝑐𝑐𝑐𝑐𝑐(𝑆𝑆) e quindi definiscono delle
facce per il problema
Conclusione

In questa lezione abbiamo introdotto la formulazione cover del problema di knapsack


binario e abbiamo visto come derivare la formulazione cover per il problema di
capital budgeting

Nella prossima lezione vedremo come è possibile determinare un oracolo di


separazione che, data una soluzione del problema di knapsack binario, restituisca
una disequazione cover violata dalla soluzione corrente oppure permetta di
concludere che la soluzione corrente sia ottima per il problema
Ricerca Operativa 2

Lezione 39 di 48
Pianificazione degli investimenti
Formulazione cover – Esempio
Introduzione

In questa lezione determiniamo la formulazione cover di un problema di


knapsack binario in 4 variabili

Come prima cosa trasformeremo il vincolo di knapsack in un vincolo a


coefficienti non negativi

Quindi deriveremo in maniera esaustiva tutti i cover del problema per


determinarne la formulazione cover alternativa a quella naturale
Knapsack binario – Esempio 1/5

Consideriamo il seguente vincolo di knapsack

2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2

L’insieme degli indici è 𝐼𝐼 = {1,2,3,4}. Come prima cosa, trasformiamo il


vincolo in un vincolo a coefficienti non negativi

Determiniamo gli insiemi di indici dei coefficienti non negativi e dei


coefficienti negativi
𝐼𝐼+ = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 ≥ 0} = {1,2,3}
𝐼𝐼− = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 < 0} = {4}
Operiamo la trasformazione lineare di variabili
• 𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+
• 𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−
Knapsack binario – Esempio 2/5

Riscriviamo il vincolo di knapsack nelle nuove variabili

2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 − 4(1 − 𝑧𝑧4 ) ≤ 2

2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 + 4𝑧𝑧4 ≤ 6

A questo punto consideriamo tutti i 24 sottoinsiemi 𝐶𝐶 ⊆ 𝐼𝐼

Ognuno di tali sottoinsiemi o è un cover o è una soluzione del problema

È facile verificare che i cover del vincolo di knapsack sono


𝐶𝐶1 = 1,2,3,4 𝐶𝐶2 = 1,2,3 𝐶𝐶3 = 2,3,4 𝐶𝐶4 = 1,3,4 𝐶𝐶5 = 1,2,4
𝐶𝐶6 = 1,3 𝐶𝐶7 = 2,3 𝐶𝐶8 = 3,4
Tutti gli altri sottoinsiemi in 2𝐼𝐼 sono soluzione:
𝑇𝑇1 = 1,2 𝑇𝑇2 = 2,4 𝑇𝑇3 = 1,4 𝑇𝑇4 = 1 𝑇𝑇5 = 2 𝑇𝑇6 = 3 𝑇𝑇7 = 4 𝑇𝑇8 = ∅
Knapsack binario – Esempio 3/5
La formulazione naturale del problema di knapsack binario è ovviamente

𝑃𝑃0 = {𝑥𝑥 ∈ ℝ4 : 2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2, 04 ≤ 𝑥𝑥 ≤ 14 }


Ricaviamo la formulazione cover in base ai cover determinati
𝐶𝐶1 = 1,2,3,4 𝐶𝐶2 = 1,2,3 𝐶𝐶3 = 2,3,4 𝐶𝐶4 = 1,3,4 𝐶𝐶5 = 1,2,4
𝐶𝐶6 = 1,3 𝐶𝐶7 = 2,3 𝐶𝐶8 = 3,4

Per ognuno consideriamo un vincolo nella forma

� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 + |𝐶𝐶 ∩ 𝐼𝐼− | − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏


𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶∩𝐼𝐼−

Ricordando che
𝐼𝐼+ = {1,2,3}
𝐼𝐼− = {4}
Knapsack binario – Esempio 4/5
Ricaviamo per ogni 𝐶𝐶𝑘𝑘 la relativa disequazione cover
𝐶𝐶1 = 1,2,3,4 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 − 𝑥𝑥4 ≤ 2
𝐶𝐶2 = 1,2,3 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝐶𝐶3 = 2,3,4 𝑥𝑥2 + 𝑥𝑥3 − 𝑥𝑥4 ≤ 1
𝐶𝐶4 = 1,3,4 𝑥𝑥1 + 𝑥𝑥3 − 𝑥𝑥4 ≤ 1
𝐶𝐶5 = 1,2,4 𝑥𝑥1 + 𝑥𝑥2 − 𝑥𝑥4 ≤ 1
𝐶𝐶6 = 1,3 𝑥𝑥1 + 𝑥𝑥3 ≤ 1
𝐶𝐶7 = 2,3 𝑥𝑥2 + 𝑥𝑥3 ≤ 1
𝐶𝐶8 = 3,4 𝑥𝑥3 − 𝑥𝑥4 ≤ 0
Knapsack binario – Esempio 5/5
Possiamo quindi scrivere la formulazione cover del problema di knapsack
binario considerato
𝑃𝑃𝐶𝐶 = {𝑥𝑥 ∈ ℝ4 : 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 − 𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝑥𝑥2 + 𝑥𝑥3 − 𝑥𝑥4 ≤ 1
𝑥𝑥1 + 𝑥𝑥3 − 𝑥𝑥4 ≤ 1
𝑥𝑥1 + 𝑥𝑥2 − 𝑥𝑥4 ≤ 1
𝑥𝑥1 + 𝑥𝑥3 ≤ 1
𝑥𝑥2 + 𝑥𝑥3 ≤ 1
𝑥𝑥3 − 𝑥𝑥4 ≤ 0
04 ≤ 𝑥𝑥 ≤ 14 }
Conclusione

In questa attività abbiamo visto come calcolare esplicitamente la formulazione cover


di un dato problema di knapsack binario

Si noti che la procedura di enumerazione dei singoli vincoli cover sia stata esaustiva

Nella prossima lezione vedremo che in realtà non è necessario conoscere tutti i
vincoli della formulazione cover di un problema di knapsack per poterlo risolvere

Se abbiamo a disposizione un oracolo di separazione per il problema sarà sufficiente


applicare il metodo del simplesso dinamico alla formulazione cover del problema per
poter risolvere il problema in maniera efficiente
Ricerca Operativa 2

Lezione 39 di 48
Pianificazione degli investimenti
Approfondimento
Approfondimento su testo
Studiare la sezione 5.2 e 5.2.1 del libro di testo

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 39 di 48
Pianificazione degli investimenti
Esercizi proposti
Determinare la formulazione cover del seguente problema di knapsack binario

4𝑥𝑥1 + 3𝑥𝑥2 + 4𝑥𝑥3 ≤ 7


Determinare la formulazione cover del seguente problema di knapsack binario

2𝑥𝑥1 + 2𝑥𝑥2 + 3𝑥𝑥3 − 4𝑥𝑥4 ≤ 2


Ricerca Operativa 2

Lezione 40 di 48
Pianificazione degli investimenti
Separazione cover
Introduzione

In questa lezione introdurremo l’oracolo di separazione per la


formulazione cover del problema di knapsack binario

Sfrutteremo la formulazione alternativa del problema basata su vincolo


di knapsack a coefficienti non negativi

Nella prossima lezione vedremo alcuni esempi di applicazione del


metodo
Knapsack binario – Formulazione cover – Richiami

Dato un problema di knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)


max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑛𝑛
𝑥𝑥 ∈ 0,1

La formulazione cover 𝑃𝑃𝐶𝐶 del problema di knapsack binario viene scritta


in funzione dell’insieme 𝐶𝐶𝑎𝑎,𝑏𝑏 di tutti i cover associati al knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)

𝑃𝑃𝐶𝐶 ≔ 𝑥𝑥 ∈ ℝ𝑛𝑛 : � 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 − |𝐶𝐶 ∩ 𝐼𝐼− | − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏


𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶∩𝐼𝐼−

Ogni disequazione della formulazione 𝑃𝑃𝐶𝐶 corrisponde a un cover


associato al knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)
Metodo del simplesso dinamico – Richiami 1/2
È facile verificare che la formulazione cover 𝑃𝑃𝐶𝐶 si compone di un numero molto
elevato di disequazioni lineari nelle 𝑛𝑛 variabili del problema

Come abbiamo visto nella lezione 35, in teoria è sempre possibile applicare il
Metodo del Simplesso per risolvere il problema
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑃𝑃𝐶𝐶

In pratica, se il numero di vincoli supera la capacità di memoria del calcolatore, è


impossibile pensare di risolvere il problema nella sua rappresentazione esterna

Per non parlare del fatto che dobbiamo essere in grado di enumerare tutti i cover
del problema di knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)

Nel seguito assumeremo che i 𝑎𝑎 e 𝑏𝑏 siano interi


Metodo del simplesso dinamico – Richiami 2/2
Il Metodo del simplesso dinamico utilizza in modo implicito i vincoli della
rappresentazione esterna 𝑃𝑃𝐶𝐶 e ci permette di risolvere il problema
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑃𝑃𝐶𝐶

senza verificare simultaneamente tutti i vincoli di 𝑃𝑃𝐶𝐶

Tutto quel che occorre per poter applicare il metodo del simplesso dinamico è la
definizione dell’oracolo di separazione

𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶 ⇒ 𝑎𝑎𝑇𝑇 𝑥𝑥̅ < 𝑎𝑎0


oracolo di
𝑥𝑥̅ ∈ ℝ𝑛𝑛
separazione
𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶
Knapsack binario – Separazione cover 1/2

Per poter applicare il metodo del simplesso dinamico al un problema di


knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑎𝑎𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏
𝑛𝑛
𝑥𝑥 ∈ 0,1

Occorre definire l’oracolo di separazione delle disequazioni cover 𝐶𝐶𝑎𝑎,𝑏𝑏

Dato un vettore 𝑥𝑥̅ ∈ ℝ𝑛𝑛 un oracolo di separazione

1. fornisce una disequazione cover violata da 𝑥𝑥̅ , vale a dire un cover


𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏 tale che ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑥𝑥�𝑖𝑖 − ∑𝑖𝑖∈𝐶𝐶∩𝐼𝐼− 𝑥𝑥�𝑖𝑖 > 𝐶𝐶 − |𝐶𝐶 ∩ 𝐼𝐼− | − 1

2. conclude che tutte le disequazioni in 𝐶𝐶𝑎𝑎,𝑏𝑏 sono soddisfatte da x�


Knapsack binario – Separazione cover 2/2

Ridefiniamo lo schema generale particolarizzandolo al problema di


separazione delle disequazioni cover del problema di knapsack 𝐾𝐾𝐾𝐾(𝑎𝑎, 𝑏𝑏)

oracolo di 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶 ⇒


𝑥𝑥̅ ∈ ℝ𝑛𝑛
separazione � 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 − |𝐶𝐶 ∩ 𝐼𝐼− | − 1
𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶∩𝐼𝐼−
• 𝑧𝑧�𝑖𝑖 = 𝑥𝑥�𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝐼𝐼+
• 𝑧𝑧�𝑖𝑖 = 1 − 𝑥𝑥�𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝐼𝐼−

� 𝑧𝑧𝑖𝑖 > 𝐶𝐶 − 1 per 𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


𝑖𝑖∈𝐶𝐶

Internamente, la logica dell’oracolo di separazione lavora nello spazio


trasformato (𝑥𝑥 ⇒ 𝑧𝑧) ma il vincolo che restituisce è nelle variabili originali
Knapsack binario – Condizioni di cover violato 1/4

L’obiettivo è determinare un cover 𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏 violato dalla soluzione


corrente 𝑥𝑥̅ ∈ ℝ𝑛𝑛

Come prima cosa, data la soluzione corrente 𝑥𝑥̅ ∈ ℝ𝑛𝑛 effettuiamo il


cambiamento di variabili 𝑥𝑥 ⇒ 𝑧𝑧 e lo applichiamo al vettore 𝑥𝑥̅ ∈ ℝ𝑛𝑛 (di cui
tutte le componenti sono note)
• 𝑧𝑧�𝑖𝑖 = 𝑥𝑥�𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝐼𝐼+
• 𝑧𝑧�𝑖𝑖 = 1 − 𝑥𝑥�𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝐼𝐼−
Vogliamo determinare (se esiste) un cover 𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏 tale che

� 𝑧𝑧�𝑖𝑖 > 𝐶𝐶 − 1
𝑖𝑖∈𝐶𝐶

Si veda la lezione 39 per i necessari richiami


Knapsack binario – Condizioni di cover violato 2/4
Determinare un cover 𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏 violato dalla soluzione corrente 𝑥𝑥̅ ∈ ℝ𝑛𝑛
significa determinare il suo vettore di incidenza
𝑛𝑛
Definiamo dunque il vettore di incidenza 𝑢𝑢 ∈ 0,1 tale che

1 𝑠𝑠𝑠𝑠 𝑖𝑖 ∈ 𝐶𝐶
𝑢𝑢𝑖𝑖 = � 𝑖𝑖 = 1, … , 𝑛𝑛
0 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎

Ricordando che 𝐼𝐼 = {1, … , 𝑛𝑛} è l’insieme degli indici delle variabili 𝑥𝑥 per la
definizione delle vettore di incidenza 𝑢𝑢 ∈ 0,1 𝑛𝑛 possiamo scrivere
• ∑𝑖𝑖∈𝐶𝐶 𝑧𝑧�𝑖𝑖 = ∑𝑖𝑖∈𝐼𝐼 𝑢𝑢𝑖𝑖 𝑧𝑧�𝑖𝑖
• 𝐶𝐶 = ∑𝑖𝑖∈𝐼𝐼 𝑢𝑢𝑖𝑖
Quindi il cover 𝐶𝐶 è violato se e solo se
� 𝑧𝑧�𝑖𝑖 > 𝐶𝐶 − 1 ⟺ � 𝑢𝑢𝑖𝑖 𝑧𝑧�𝑖𝑖 > � 𝑢𝑢𝑖𝑖 − 1
𝑖𝑖∈𝐶𝐶 𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝐼𝐼
Knapsack binario – Condizioni di cover violato 3/4
Quindi il cover 𝐶𝐶 è violato se e solo se

� 𝑧𝑧�𝑖𝑖 > 𝐶𝐶 − 1 ⟺ � 𝑢𝑢𝑖𝑖 𝑧𝑧�𝑖𝑖 > � 𝑢𝑢𝑖𝑖 − 1


𝑖𝑖∈𝐶𝐶 𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝐼𝐼

⟺ � 𝑢𝑢𝑖𝑖 (𝑧𝑧�𝑖𝑖 − 1) > −1 (1)


𝑖𝑖∈𝐼𝐼
Dalla formulazione naturale del knapsack (𝑎𝑎 𝑇𝑇 𝑥𝑥 ≤ 𝑏𝑏) un cover 𝐶𝐶 è tale se
� 𝑎𝑎�𝑖𝑖 > 𝑏𝑏�
𝑖𝑖∈𝐶𝐶

Dal momento che 𝑎𝑎�𝑖𝑖 e 𝑏𝑏� sono interi per ipotesi, abbiamo che il cover 𝐶𝐶 è
violato se e solo se
� 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 > 𝑏𝑏� ⟺ � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1 (2)
𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝐼𝐼
Knapsack binario – Condizioni di cover violato 4/4
Consideriamo le condizioni (1) e (2) simultaneamente

Un sottoinsieme 𝐶𝐶 ⊆ 𝐼𝐼 è un cover se e solo se

� 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼

𝐶𝐶 ⊆ 𝐼𝐼 è un cover violato dalla soluzione 𝑧𝑧̅ se e solo se

� 𝑢𝑢𝑖𝑖 (𝑧𝑧�𝑖𝑖 − 1) > −1


𝑖𝑖∈𝐼𝐼

Abbiamo determinato due condizioni che deve necessariamente


soddisfare il vettore 𝑢𝑢 ∈ 0,1 𝑛𝑛 affinché sia il vettore di incidenza di un
cover violato 𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏
Conclusione

In questa lezione abbiamo introdotto le condizioni necessarie e sufficienti affinché un


vettore a n componenti in {0,1} sia il vettore di incidenza di un cover violato da una
soluzione data

Vedremo quindi un algoritmo per determinare tale vettore di incidenza mentre nella
prossima lezione vedremo alcuni esempi di applicazione del metodo proposto
Ricerca Operativa 2

Lezione 40 di 48
Pianificazione degli investimenti
Separazione cover approssimata
Knapsack binario – Condizioni di cover violato
Un vettore 𝑢𝑢 ∈ 0,1 𝑛𝑛 è vettore di incidenza di un cover 𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎,𝑏𝑏 violato
dalla soluzione corrente 𝑧𝑧̅ se e solo se

� 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼

� 𝑢𝑢𝑖𝑖 (𝑧𝑧�𝑖𝑖 − 1) > −1


𝑖𝑖∈𝐼𝐼

Come determinare il vettore 𝑢𝑢 ∈ 0,1 𝑛𝑛 ?

I coefficienti 𝑎𝑎�, 𝑏𝑏� e 𝑧𝑧̅ sono noti: l’oracolo di separazione deve


determinare, se esiste, un vettore 𝑢𝑢 ∈ 0,1 𝑛𝑛 che soddisfi le due condizioni
Knapsack binario – Oracolo di separazione 1/4

Possiamo riscrivere il sistema di disequazioni nelle incognite 𝑢𝑢 che deve


risolvere l’oracolo di separazione come problema (SK) di PL01

� 𝑢𝑢𝑖𝑖 (𝑧𝑧�𝑖𝑖 − 1) > −1 max �(𝑧𝑧�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖


𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝐼𝐼

� 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1 � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝐼𝐼
𝑛𝑛 𝑛𝑛
𝑢𝑢 ∈ 0,1 𝑢𝑢 ∈ 0,1

max �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖


𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(SK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1 𝑥𝑥�𝑖𝑖 = 𝑧𝑧�𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝐼𝐼+


𝑖𝑖∈𝐼𝐼
𝑛𝑛
𝑥𝑥�𝑖𝑖 = 1 − 𝑧𝑧�𝑖𝑖 per ogni 𝑖𝑖 ∈ 𝐼𝐼−
𝑢𝑢 ∈ 0,1
Knapsack binario – Oracolo di separazione 2/4
Consideriamo attentamente il problema d(SK) i PL01 nelle incognite 𝑢𝑢
max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(SK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼
𝑛𝑛
𝑢𝑢 ∈ 0,1
Sia 𝑢𝑢 ∗ la soluzione ottima di (SK) rispetto a una soluzione corrente 𝑥𝑥̅ . Se
𝑐𝑐 𝑢𝑢∗ dovesse risultare non maggiore di −1, vale a dire se
𝑧𝑧 𝑢𝑢∗ ≤ −1
essendo per definizione 𝑢𝑢 ∗ ottima allora
𝑧𝑧 𝑢𝑢 ≤ 𝑧𝑧 𝑢𝑢∗ ∀ 𝑢𝑢 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑖𝑖𝑖𝑖 𝑆𝑆𝑆𝑆 ⇒ 𝑧𝑧 𝑢𝑢 ≤ −1 ∀ 𝑢𝑢 𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠𝑠 𝑖𝑖𝑖𝑖 (𝑆𝑆𝑆𝑆)

Non esiste un cover violato dalla soluzione corrente 𝑥𝑥̅


Knapsack binario – Oracolo di separazione 3/4
Consideriamo attentamente il problema (SK) i PL01 nelle incognite 𝑢𝑢
max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(SK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼
𝑛𝑛
𝑢𝑢 ∈ 0,1
Se invece 𝑐𝑐 𝑢𝑢∗ dovesse risultare maggiore di −1, vale a dire se
𝑧𝑧 𝑢𝑢∗ > −1
allora 𝑢𝑢∗ è il vettore di incidenza di un cover 𝐶𝐶 ∗ violato dalla soluzione
corrente 𝑥𝑥̅ e possiamo restituire la disequazione corrispondente

� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 ∗ − |𝐶𝐶 ∗ ∩ 𝐼𝐼− | − 1 La disequazione è sicuramente


𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼−
violata dalla soluzione corrente 𝑥𝑥̅
Knapsack binario – Oracolo di separazione 4/4
Riassumento la procedura di separazione delle disequazioni cover del
problema di knapsack è schematizzata nella seguente figura

oracolo di
separazione
𝑥𝑥̅ ∈ ℝ𝑛𝑛 max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
disequazione cover
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
violata da 𝑥𝑥̅
(SK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1
𝑖𝑖∈𝐼𝐼
� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 ∗ − |𝐶𝐶 ∗ ∩ 𝐼𝐼− | − 1
𝑛𝑛 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼−
𝑢𝑢 ∈ 0,1
𝑧𝑧 𝑢𝑢∗ > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶

𝑧𝑧 𝑢𝑢∗ ≤ −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


Knapsack binario – Oracolo di separazione approssimato 1/2
Nella versione attuale, l’oracolo di separazione prevede la soluzione di
un problema di PL01 con un vincolo

Supponiamo di rimuovere i vincoli di interezza delle variabili e di


sostituirli con i vincoli di box

max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖 max 𝑐𝑐′ 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼− 𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(SK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1 (RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼 𝑖𝑖∈𝐼𝐼
𝑢𝑢 ∈ 0,1 𝑛𝑛 0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛

Sia 𝑢𝑢0 la soluzione ottima del rilassamento lineare (RK)


Knapsack binario – Oracolo di separazione approssimato 2/2
Il rilassamento lineare (RK) del problema (SK) fornisce

• un upper bound 𝑐𝑐′(𝑢𝑢0 ) per la soluzione ottima del problema (SK)

• un lower bound 𝑢𝑢+ ∈ 0,1 𝑛𝑛 ottenuto arrotondando a 1 le componenti


frazionarie della soluzione 𝑢𝑢0 e lasciando a 1 o a 0 le altre

con la proprietà che


𝑐𝑐(𝑢𝑢+ ) ≤ 𝑐𝑐 𝑢𝑢 ∗ ≤ 𝑐𝑐′(𝑢𝑢0 )
• se 𝑐𝑐 ′ 𝑢𝑢0 ≤ −1 allora 𝑐𝑐 𝑢𝑢 ∗ ≤ −1 e possiamo concludere che 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶

• altrimenti se 𝑐𝑐(𝑢𝑢+ ) > −1 abbiamo determinato un cover violato da 𝑥𝑥̅

• altrimenti dobbiamo risolvere il problema (SK) in maniera esatta

È il caso in cui 𝑐𝑐 𝑢𝑢+ ≤ −1 < 𝑐𝑐 ′ 𝑢𝑢0


Knapsack binario – Diagramma di flusso

Definizione del
D0 d0
problema “core”
A b
D=D0 ; d=d0

min cTx Q= ∅
Metodo del
x∈ Q = Dx<d,
Simplesso 𝑃𝑃𝐶𝐶 = ∅
(𝑃𝑃𝐶𝐶 ⊆ Q) 1n > x > 0n
x* ottima (in Q)
Nuova D e nuovo d
x*∉𝑃𝑃𝐶𝐶 Oracolo di
x*∈ 𝑃𝑃𝐶𝐶
aiT bi aiTx>bi Separazione
di 𝑃𝑃𝐶𝐶 (SK) x* ottima
Conclusione

In questa lezione abbiamo introdotto un possibile algoritmo di separazione delle


disequazioni cover della formulazione vista nella lezione precedente per il problema
di knapsack binario

Nella prossima attività generalizzeremo tale algoritmo di separazione al problema di


capital budgeting e vedremo alcuni esempi di soluzione per concludere questa parte
del corso dedicata al problema della pianificazione degli investimenti
Ricerca Operativa 2

Lezione 40 di 48
Pianificazione degli investimenti
Approfondimento
Approfondimento su testo
Studiare la sezione 5.2.2 e 5.2.3 del libro di testo

Il libro di testo “Modelli e algoritmi della ricerca operativa” è reso disponibile per
consultazione telematica dal docente.

Per informazioni sull’accesso, inviare un messaggio tramite sistema di


messaggistica.
Ricerca Operativa 2

Lezione 40 di 48
Pianificazione degli investimenti
Esercizio proposto
Formulare in AMPL il seguente problema di knapsack binario

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 3𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}

Risolvere il problema con il solutore CPLEX in AMPL

Formulare il rilassamento lineare della formulazione naturale del problema e


risolverlo calcolando la differenza (gap) tra soluzione ottima intera e soluzione del
rilassamento lineare
Ricerca Operativa 2

Lezione 41 di 48
Pianificazione degli investimenti
Separazione cover – Esempio (parte 1)
Introduzione

In questa lezione applichiamo l’algoritmo di separazione visto per la


formulazione cover di un problema di knapsack binario in 4 variabili

Per la risoluzione del rilassamento lineare adotteremo la tecnica esatta


dell’ordinamento delle variabili per rapporto costo ingombro vista per il
problema di knapsack nella lezione 22

Per determinare una disequazione cover violata, utilizzeremo l’algoritmo


di separazione approssimato visto nella lezione 40

Nella prossima lezione vedremo come impiegare quanto visto finora per
la soluzione di un problema di pianificazione degli investimenti
Knapsack binario – Esempio

Consideriamo il seguente problema di knapsack binario in quattro


variabili

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}

Vogliamo risolvere il problema senza usare il metodo branch and bound


(visto nella lezione 14) bensì risolvendo il problema con la formulazione
cover, diversa come abbiamo visto da quella naturale
𝑃𝑃0 = {𝑥𝑥 ∈ ℝ4 : 2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2, 04 ≤ 𝑥𝑥 ≤ 14 }

Identifichiamo l’insieme degli indici 𝐼𝐼 = {1,2,3,4}


Knapsack binario – Trasformazione di variabili 1/2
Come prima cosa, trasformiamo il vincolo in un vincolo a coefficienti non
negativi come visto nella lezione 39

Determiniamo gli insiemi di indici dei coefficienti non negativi e dei


coefficienti negativi
𝐼𝐼+ = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 ≥ 0} = {1,2,3}
𝐼𝐼− = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 < 0} = {4}

Operiamo la trasformazione lineare


di variabili

• 𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+

• 𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−


Knapsack binario – Trasformazione di variabili 2/2
Applichiamo la sostituzione

• alla funzione obiettivo max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4

max 3𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 + 6(1 − 𝑧𝑧4 )

6 + max 3𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 − 6𝑧𝑧4

• al vincolo di knapsack 2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2

2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 − 4(1 − 𝑧𝑧4 ) ≤ 2

2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 + 4𝑧𝑧4 ≤ 6


Knapsack binario – Rilassamento lineare
Rilassiamo i vincoli di interezza delle variabili 𝑧𝑧1 , 𝑧𝑧2 , 𝑧𝑧3 , 𝑧𝑧4 ∈ {0,1}
sostituendoli con i vincoli di bound 𝑧𝑧1 , 𝑧𝑧2 , 𝑧𝑧3 , 𝑧𝑧4 ∈ [0,1] e otteniamo il
rilassamento lineare (RL) della formulazione naturale del knapsack
binario
6 + max 3𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 − 6𝑧𝑧4

2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 + 4𝑧𝑧4 ≤ 6

𝑧𝑧1 , 𝑧𝑧2 , 𝑧𝑧3 , 𝑧𝑧4 ∈ {0,1}

6 + max 3𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 − 6𝑧𝑧4

(RL) 2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 + 4𝑧𝑧4 ≤ 6


0 ≤ 𝑧𝑧1 , 𝑧𝑧2 , 𝑧𝑧3 , 𝑧𝑧4 ≤ 1
Knapsack binario – Soluzione ottima del rilassamento lineare 1/3
Applichiamo al problema (RL) il metodo di soluzione del rilassamento
lineare (RL) visto per il problema di knapsack binario nella lezione 14

6 + max 3𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 − 6𝑧𝑧4


(RL) 2𝑧𝑧1 + 2𝑧𝑧2 + 5𝑧𝑧3 + 4𝑧𝑧4 ≤ 6
0 ≤ 𝑧𝑧1 , 𝑧𝑧2 , 𝑧𝑧3 , 𝑧𝑧4 ≤ 1

1. Ordinare gli indici delle variabili {1, . . , 𝑛𝑛} in ordine decrescente di rapporto
costo/ingombro
𝑐𝑐𝑖𝑖1 𝑐𝑐𝑖𝑖2 𝑐𝑐𝑖𝑖𝑛𝑛
{𝑖𝑖1 , . . , 𝑖𝑖𝑛𝑛 }: ≥ ≥⋯≥
𝑎𝑎𝑖𝑖1 𝑎𝑎𝑖𝑖2 𝑎𝑎𝑖𝑖𝑛𝑛
3 3
Otteniamo i rapporti costo/ingombro { , 1,1, − } relativi all’ordinamento
2 2
𝑖𝑖1 , 𝑖𝑖2 , 𝑖𝑖3 , 𝑖𝑖4 = {1,2,3,4}
Knapsack binario – Soluzione ottima del rilassamento lineare 2/3

2. Determinare l’indice 𝑖𝑖ℎ ∈ {1, . . , 𝑛𝑛} tale che


ℎ−1

� 𝑎𝑎𝑖𝑖𝑗𝑗 ≥ 𝑏𝑏
𝑗𝑗=1
𝑖𝑖3 = 3

� 𝑎𝑎𝑖𝑖𝑗𝑗 < 𝑏𝑏
𝑗𝑗=1

3. Porre
1 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 < 𝑖𝑖ℎ
ℎ−1
1 2
𝑥𝑥𝑖𝑖∗𝑘𝑘 = � (𝑏𝑏 − � 𝑎𝑎𝑖𝑖𝑗𝑗 ) 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 = 𝑖𝑖ℎ 𝑧𝑧1∗ , 𝑧𝑧2∗ , 𝑧𝑧3∗ , 𝑧𝑧4∗ = {1,1, , 0}
𝑎𝑎𝑖𝑖𝑗𝑗 5
𝑗𝑗=1
0 𝑠𝑠𝑠𝑠 𝑖𝑖𝑘𝑘 > 𝑖𝑖ℎ
Knapsack binario – Soluzione ottima del rilassamento lineare 3/3

4. Calcolare il limite superiore


𝑛𝑛

𝑈𝑈𝐵𝐵 = 𝑐𝑐 𝑇𝑇 𝑧𝑧 ∗ = � 𝑐𝑐𝑖𝑖 𝑧𝑧𝑖𝑖∗ 𝑐𝑐 𝑇𝑇 𝑧𝑧 ∗ = 13


𝑖𝑖=1
2
𝑥𝑥1∗ , 𝑥𝑥2∗ , 𝑥𝑥3∗ , 𝑥𝑥4∗ = {1,1, , 1} nelle variabili originali 𝑥𝑥 ∈ ℝ4
5

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4

(RL) 2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2 𝑐𝑐 𝑇𝑇 𝑥𝑥 ∗ = 13


0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Knapsack binario – Oracolo di separazione approssimato 1/6
A questo punto, per verificare che la soluzione 𝑥𝑥 ∗ del rilassamento
lineare (RL) appartenga o meno alla formulazione cover 𝑃𝑃𝐶𝐶 (lezione 39)
possiamo alternativamente

• scrivere la formulazione cover 𝑃𝑃𝐶𝐶 del problema e verificare che 𝑥𝑥 ∗


soddisfi tutti i vincoli

• applicare l’oracolo di separazione visto nella lezione precedente

Possiamo applicare
l’oracolo di separazione
approssimato
Knapsack binario – Oracolo di separazione approssimato 2/6
Applichiamo dunque l’oracolo di separazione approssimato secondo lo
schema seguente

oracolo di separazione
approssimato
𝑥𝑥̅ ∈ ℝ𝑛𝑛 max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
disequazione cover
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
violata da 𝑥𝑥̅
(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1
𝑖𝑖∈𝐼𝐼
� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 ∗ − |𝐶𝐶 ∗ ∩ 𝐼𝐼− | − 1
𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼−
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛
𝑐𝑐(𝑢𝑢+ ) > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶

𝑐𝑐 ′ 𝑢𝑢0 ≤ −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


𝑐𝑐 𝑢𝑢+ ≤ −1 < 𝑐𝑐 ′ 𝑢𝑢0 oracolo di separazione esatto
Knapsack binario – Oracolo di separazione approssimato 3/6
Andiamo a sostituire nello schema dell’oracolo di separazione
approssimato la soluzione 𝑥𝑥̅ = 𝑥𝑥 ∗ e i coefficienti 𝑎𝑎� e 𝑏𝑏�
oracolo di separazione
approssimato
2
𝑥𝑥̅ = {1,1, , 1} 3
5 max 𝑐𝑐 𝑢𝑢 = − 𝑢𝑢3 − 𝑢𝑢4
5

(RK) 2𝑢𝑢1 + 2𝑢𝑢2 + 5𝑢𝑢3 + 4𝑢𝑢4 ≥ 7

04 ≤ 𝑢𝑢 ≤ 14

3
min 𝑢𝑢 + 𝑢𝑢4 Applichiamo al problema
5 3
2𝑢𝑢1 + 2𝑢𝑢2 + 5𝑢𝑢3 + 4𝑢𝑢4 ≥ 7 (RK) il metodo di soluzione
04 ≤ 𝑢𝑢 ≤ 14 esatto visto nella lezione 14
Knapsack binario – Oracolo di separazione approssimato 4/6
1. Ordinare gli indici delle variabili {1,2,3,4} in ordine crescente di rapporto
costo/ingombro
𝑐𝑐̅𝑖𝑖1 𝑐𝑐̅𝑖𝑖2 𝑐𝑐̅𝑖𝑖3 𝑐𝑐̅𝑖𝑖4
{𝑖𝑖1 , 𝑖𝑖2 , 𝑖𝑖3 , 𝑖𝑖4 }: ≤ ≤ ≤
𝑎𝑎�𝑖𝑖1 𝑎𝑎�𝑖𝑖2 𝑎𝑎�𝑖𝑖3 𝑎𝑎�𝑖𝑖4
3 1
Otteniamo i rapporti costo/ingombro {0,0, , } relativi all’ordinamento
25 4
𝑖𝑖1 , 𝑖𝑖2 , 𝑖𝑖3 , 𝑖𝑖4 = {1,2,3,4}
2. Determinare l’indice 𝑖𝑖ℎ ∈ {1,2,3,4} tale che
ℎ−1

� 𝑎𝑎�𝑖𝑖𝑗𝑗 ≤ 𝑏𝑏� 3
𝑗𝑗=1 min 𝑢𝑢3 + 𝑢𝑢4
𝑖𝑖3 = 3 5

2𝑢𝑢1 + 2𝑢𝑢2 + 5𝑢𝑢3 + 4𝑢𝑢4 ≥ 7
� 𝑎𝑎�𝑖𝑖𝑗𝑗 > 𝑏𝑏�
04 ≤ 𝑢𝑢 ≤ 14
𝑗𝑗=1
Knapsack binario – Oracolo di separazione approssimato 5/6
3. Porre

1 ℎ−1
1
𝑢𝑢𝑖𝑖𝑘𝑘 = � (𝑏𝑏� − � 𝑎𝑎�𝑖𝑖𝑗𝑗 )
∗ 3
𝑎𝑎𝑖𝑖𝑗𝑗 𝑢𝑢1∗ , 𝑢𝑢3∗ , 𝑢𝑢2∗ , 𝑢𝑢4∗ = {1,1, , 0}
𝑗𝑗=1 5
0

4. Calcolare il limite superiore


𝑛𝑛
9
𝑇𝑇 ∗
𝑈𝑈𝐵𝐵 = 𝑐𝑐 𝑢𝑢 = � 𝑐𝑐𝑖𝑖 𝑢𝑢𝑖𝑖∗ 𝑐𝑐 𝑢𝑢0 = −
25
𝑖𝑖=1
3
Calcolare una soluzione ammissibile intera 𝑐𝑐 𝑢𝑢+ = −
5
3
𝑢𝑢1∗ , 𝑢𝑢2∗ , 𝑢𝑢3∗ , 𝑢𝑢4∗ = {1,1, , 0} 𝑢𝑢+ = {1,1,1,0}
5
Knapsack binario – Oracolo di separazione approssimato 6/6
2
Abbiamo che 𝑐𝑐 𝑢𝑢+ > −1, quindi 𝑥𝑥̅ = 1,1, , 1 ∉ 𝑃𝑃𝐶𝐶 e possiamo determinare
5
il cover violato da 𝑥𝑥̅ e scrivere la relativa disequazione cover violata

oracolo di separazione disequazione cover


1 approssimato violata da 𝑥𝑥̅
𝑥𝑥̅ = {1,1, , 1}
2 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼 𝑢𝑢1∗ , 𝑢𝑢3∗ , 𝑢𝑢2∗ , 𝑢𝑢4∗ = {1,1,1,0}
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛 cover violato da 𝑥𝑥̅
𝐶𝐶 ∗ = {1,2,3}

𝑐𝑐(𝑢𝑢+ ) > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶


Knapsack binario – Formulazione rafforzata

Possiamo quindi scrivere la formulazione del problema aggiungendo alla


formulazione naturale 𝑃𝑃0 la disequazione cover violata dalla soluzione del
rilassamento lineare

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
Si noti che la disequazione cover introdotta appartiene alla formulazione
cover del problema (si veda lezione 39, Formulazione cover - Esempio,
cover 𝐶𝐶2 di 𝑃𝑃𝐶𝐶 )
Conclusione

In questa attività abbiamo visto un esempio di applicazione dell’algoritmo di


separazione approssimata dei cover applicato alla soluzione del rilassamento lineare
del problema di knapsack (formulazione naturale)

Nella prossima attività vedremo come questo permette di rafforzare la formulazione


naturale in termini di upper bound per il problema e, quindi, se applicare nuovamente
l’oracolo di separazione alla soluzione ottima del rilassamento lineare ottenuto come
formulazione 𝑃𝑃1 intersezione della formulazione naturale 𝑃𝑃𝑜𝑜 e delle soluzione che non
violato la disequazione cover violata dalla soluzione 𝑥𝑥̅ della formulazione naturale 𝑃𝑃𝑜𝑜

𝑃𝑃1 = 𝑃𝑃0 ∩ {𝑥𝑥 ∈ ℝ4 : 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2}


Ricerca Operativa 2

Lezione 41 di 48
Pianificazione degli investimenti
Rilassamento cover – Formulazione AMPL
Introduzione

In questa attività riprendiamo l’esempio visto in precedenza e risolviamo il


rilassamento lineare ottenuto come formulazione 𝑃𝑃1 intersezione della formulazione
naturale 𝑃𝑃𝑜𝑜 e delle soluzioni che non violato la disequazione cover violata dalla
soluzione 𝑥𝑥̅ della formulazione naturale 𝑃𝑃𝑜𝑜

𝑃𝑃1 = 𝑃𝑃0 ∩ {𝑥𝑥 ∈ ℝ4 : 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2}

Procederemo quindi con l’applicazione dell’oracolo di separazione alla soluzione


ottima rispetto alla formulazione 𝑃𝑃1 esattamente come visto nella precedente attività
Knapsack binario – Formulazione rafforzata

Abbiamo visto che aggiungendo la disequazione cover violata dalla


soluzione 𝑥𝑥̅ del rilassamento lineare del problema di knapsack alla
formulazione naturale 𝑃𝑃0 otteniamo la nuova formulazione

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑃𝑃1
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}

Per le proprietà dell’oracolo di separazione, sappiamo che la soluzione 𝑥𝑥̅


del rilassamento lineare del problema di knapsack non è ammissibile per
𝑃𝑃1
Formulazione rafforzata – Rilassamento lineare
Rilassiamo i vincoli di interezza delle variabili 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
sostituendoli con i vincoli di bound𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ [0,1] e otteniamo il nuovo
rilassamento lineare (RL) del problema

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Formulazione rafforzata – Soluzione ottima del rilassamento
Dal momento che il rilassamento lineare ha due vincoli, non
possiamo applicare il metodo di soluzione del rilassamento
lineare visto per il problema di knapsack binario nella lezione 14
e adottato nell’esempio precedente
Formuliamo quindi il problema in AMPL e richiamiamo un solutore
di Programmazione Lineare (e.g., Cplex) per risolvere il problema

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Formulazione rafforzata – Formulazione in AMPL
Modelliamo il problema tramite AMPL creando due file:
• file cover.mod contenente le dichiarazioni relative alla struttura
del modello (vale a dire i parametri che descrivono il vincolo di
knapsack e le disequazioni cover della formulazione cover e
funzione obiettivo, le variabili, i vincoli e la funzione obiettivo)

• file cover.dat contenente i valori dei coefficienti del modello


(vale a dire gli elementi i valori dei parametri che descrivono il
vincolo di knapsack e le disequazioni cover della formulazione
cover e funzione obiettivo)
Formulazione rafforzata – Dichiarazione in AMPL 1/2
Dichiariamo nel file cover.mod tutti gli elementi che definiscono
la struttura del modello della formulazione cover del knapsack

• la dichiarazione dei parametri che descrivono il vincolo di


knapsack e i vincoli della formulazione cover:
• il numero N di variabili
• il numero C di vincoli della formulazione
• il vettore c dei coefficienti in funzione obiettivo
• il vettore b dei termini noti
• la matrice A dei coefficienti dei vincoli
Formulazione rafforzata – Dichiarazione in AMPL 2/2

Dichiariamo nel file cover.mod tutti gli elementi che definiscono


la struttura del modello della formulazione cover del knapsack
• la dichiarazione delle variabili: parametro a una dimensione x
a N componenti con le restrizioni 0|N| ≤ x ≤ 1|N|

• la struttura e la definizione della funzione obiettivo cTx

• la struttura e la descrizione dei vincoli: A x ≤ b


cover.mod – Dichiarazione dei parametri
Compiliamo il file cover.mod con
• la dichiarazione dei parametri che descrivono il vincolo di
knapsack e i vincoli della formulazione cover
• i parametri N e C relativi al numero di variabili e di vincoli
della formulazione
param N; (N)
param C; (C)
• i parametri a una dimensione (b, c) e a due dimensioni
(A) relativi a coefficienti e termini noti:
param A {1..C, 1..N}; (A)
param b {1..C}; (b)
param c {1..N}; (c)
cover.mod – Dichiarazione delle variabili
• la dichiarazione delle variabili x non negative e soggette a
vincoli di bound attraverso la parola chiave var seguita dal
nome identificativo della variabile (x) e da un insieme di
indicizzazione ({1..N} nel nostro caso perché il vettore x
delle variabili ha N componenti) e dall’attributo (>= 0 e <= 1
per i vincoli di bound)

var x {1..N} >= 0, <= 1;

0|N| ≤ x ≤ 1|N|
cover.mod – Dichiarazione della funzione obiettivo
• la struttura e definizione della fuzione obiettivo cTx attraverso
la parola chiave maximize in quanto problema di
massimizzazione, seguita dall’etichetta identificativa della
funzione obiettivo (Redditiva) e dall’operatore : seguito dalla
definizione della funzione obiettivo, che possiamo definire con
l’operatore di sommatoria sum seguito da un insieme di
indicizzazione della sommatoria ({i in 1..N}) e dalle
componenti della sommatoria (c[i] * x[i])

maximize Redditiva :
sum {i in 1..N} c[i] * x[i];
cover.mod – Dichiarazione dei vincoli
• la struttura e la descrizione dei vincoli A x ≤ b attraverso la
parola chiave subject to seguita dall’etichetta identificativa del
vincolo (Knapsack) eventualmente seguita da un insieme di
indicizzazione dei vincoli ({j in 1..C} (tanti vincoli quanti sono
i vincoli della formulazione cover, o un loro sottoinsieme se
adottiamo l’oracolo di separazione) e dall’operatore : seguito
dalla definizione dei vincoli, che possiamo definire con
l’operatore di sommatoria sum seguito da un insieme di
indicizzazione della sommatoria ({i in 1..N}) e dalle
componenti della sommatoria (A[j,i] * x[i]) e con l’operatore
di disuguaglianza <= seguito dal termine noto (b[j])
subject to Knapsack {j in 1..C}:
sum {i in 1..N} A[j,i] * x[i] <= b[j];
Formulazione rafforzata – Definizione in AMPL
Definiamo nel file cover.dat i valori dei coefficienti del modello
della formulazione cover, vale a dire i valori numerici dei
parametri, per l’istanza considerata

-N=2
-C=2 max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4
- c = {3,2,5,6} 2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
- b = {2,2}
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
-A= 2 2 5 −4 0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
1 1 1 0
Avvio dell’interprete AMPL
L’interprete AMPL è contenuto nel pacchetto d’installazione
scaricato come pacchetto compresso
Facendo doppio click sul file eseguibile AMPL.exe si apre la shell
AMPL
Ogni riga di comando della shell AMPL inizia con
ampl: _
Il trattino indica che l’interprete è in attesa di istruzioni
Alternativamente possiamo richiamare AMPL.exe dalla finestra
che compare facendo doppio click sul file sw.exe
sw: _
dando l’istruzione ampl
Acquisizione dei file cover.mod e cover.dat
L’interprete AMPL è pronto per acquisire le dichiarazioni
(cover.mod) e le definizioni (cover.dat) del problema in esempio
L’istruzione model seguita dal nome del file contenente le
dichiarazioni serve per acquisire la struttura del modello
ampl: model cover.mod;
L’istruzione data seguita dal nome del file contenente le
definizioni serve per acquisire i dati del modello
ampl: data cover.dat;
Soluzione di un’istanza della formulazione cover
A questo punto è stato caricato
1. il modello di Programmazione Lineare della formulazione cover
max cTx
Ax≤b
0|N| ≤ x ≤ 1|N|
2. i dati relativi a un’istanza del problema

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Scelta del solutore
Nel pacchetto d’installazione sono contenuti diversi file eseguibili
relativi a solutori che possiamo invocare per risolvere i diversi
tipi di problemi di Programmazione Matematica (si veda la
lezione 25)
Per risolvere il problema cover scegliamo come solutore CPLEX
Per indicare all’interprete AMPL di utilizzare CPLEX come
solutore, utilizziamo l’istruzione option seguita dal parametro di
cui vogliamo cambiare il valore (in questo caso, il solutore quindi
il parametro è solver) seguito dal nuovo valore del parametro
(in questo caso cplex)
ampl: option solver cplex;
Invocazione del solutore 1/2
Una volta caricati modello e valori dei coefficienti e selezionato
un opportuno solutore, per invocare l’impiego del solutore per
risolvere l’istanza di problema corrente è scrivere istruzione
solve
ampl: solve;
Una volta portata a termine l’istruzione, il compilatore visualizza
le informazioni di log restituite dal solutore per l’invocazione
precedente
In questo caso, otteniamo
CPLEX 12.8.0.0: optimal solution; objective 13
1 dual simplex iterations (0 in phase I)
Invocazione del solutore 2/2
CPLEX 12.8.0.0: optimal solution; objective 13
1 dual simplex iterations (0 in phase I))
È stata impiegata la versione 12.8 di CPLEX (CPLEX 12.8.0.0,
quella disponibile nel pacchetto d’installazione, in caso di rilascio
di nuova versione va scaricato il nuovo pacchetto o aggiornato il
file eseguibile e il file di licenza rilasciato da IBM)
È stata determinata la soluzione ottima (optimal solution) e
viene visualizzato il valore della funzione obiettivo (13) in
corrispondenza della soluzione ottima (non visualizzato)
Vengono quindi visualizzati i dettagli sul numero di iterazioni del
metodo utilizzato dal solutore, in questo caso il metodo del
simplesso duale
Visualizzazione della soluzione ottima
Una volta risolto il problema, se è stata determinata la soluzione
ottima (come in questo caso), il valore delle variabili
corrispondenti alla soluzione ottima possono essere visualizzati
tramite l’istruzione display seguita dal nome della o delle
variabili che vogliamo visualizzare (in questo caso il vettore di
variabili x)
ampl: display x;
x [*] :=
1 1
2 0 c(x*) = 3 x 1 + 2 x 0 + 5 x 0.8 + 6 x 1 = 13

3 0.8
4 1
Knapsack binario – Qualità dell’upper bound
Il valore ottimo della formulazione 𝑃𝑃1 è 13. Questo valore sappiamo
rappresentare un upper bound del problema di knapsack

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
La formulazione 𝑃𝑃1 è ottenuta come intersezione della formulazione
naturale 𝑃𝑃𝑜𝑜 e delle soluzioni che non violato la disequazione cover violata
dalla soluzione 𝑥𝑥̅ della formulazione naturale 𝑃𝑃𝑜𝑜

𝑃𝑃1 = 𝑃𝑃0 ∩ {𝑥𝑥 ∈ ℝ4 : 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2}


Quindi 𝑃𝑃1 ⊂ 𝑃𝑃0 e quindi, come ci aspettavamo, il valore dell’upper bound
fornito da 𝑃𝑃1 (13) è inferiore al valore dell’upper bound fornito da 𝑃𝑃0 (15)
Knapsack binario – Oracolo di separazione
A questo punto, per verificare che la soluzione 𝑥𝑥 ∗ = 𝑥𝑥1∗ , 𝑥𝑥3∗ , 𝑥𝑥2∗ , 𝑥𝑥4∗ =
4
{1,0, , 1}del rilassamento lineare appartenga o meno alla formulazione
5
cover 𝑃𝑃𝐶𝐶 (lezione 39) possiamo alternativamente

• scrivere la formulazione cover 𝑃𝑃𝐶𝐶 del problema e verificare che 𝑥𝑥 ∗


soddisfi tutti i vincoli

• applicare l’oracolo di separazione visto nella lezione precedente

Possiamo applicare
l’oracolo di separazione
approssimato
Conclusione

In questa attività abbiamo visto come formulare e risolvere in AMPL la formulazione


naturale 𝑃𝑃0 del problema di knapsack rafforzata con una disequazione cover
(𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2) della formulazione cover 𝑃𝑃𝐶𝐶

𝑃𝑃1 = 𝑃𝑃0 ∩ {𝑥𝑥 ∈ ℝ4 : 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2}

Nella prossima attività vedremo un altro esempio di applicazione dell’oracolo di


separazione per la formulazione cover del problema di knapsack binario
Ricerca Operativa 2

Lezione 41 di 48
Pianificazione degli investimenti
Separazione cover – Esempio (parte 2)
Introduzione

In questa lezione applichiamo l’algoritmo di separazione approssimato


visto nella lezione 40 per la formulazione cover di un problema di
knapsack binario in 4 variabili di cui abbiamo risolto la formulazione
rafforzata

Nella prossima lezione vedremo come impiegare quanto visto finora per
la soluzione di un problema di pianificazione degli investimenti
Knapsack binario – Esempio

Consideriamo il seguente problema di knapsack binario in quattro


variabili
max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4
2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
1
Abbiamo visto come la soluzione 𝑥𝑥̅ = {1, , 1,1} di valore 15 del
2
rilassamento lineare (𝑃𝑃0 ) violi una disequazione cover (𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2)
della formulazione cover 𝑃𝑃𝐶𝐶

Aggiunta tale disequazione, si ottiene una formulazione rafforzata che


fornisce un upper bound migliore, di valore 13 in corrispondenza della
4
soluzione 𝑥𝑥̅ 1 = {1,0, , 1}
5
Knapsack binario – Oracolo di separazione approssimato 1/6
Per verificare che la soluzione 𝑥𝑥̅ 1 della formulazione 𝑃𝑃1 appartenga o
meno alla formulazione cover 𝑃𝑃𝐶𝐶 (lezione 39) possiamo alternativamente

• scrivere la formulazione cover 𝑃𝑃𝐶𝐶 del problema e verificare che


𝑥𝑥̅ 1 soddisfi tutti i vincoli

• applicare l’oracolo di separazione visto nella lezione precedente alla


soluzione 𝑥𝑥̅ 1
Possiamo applicare
l’oracolo di separazione
approssimato
Knapsack binario – Oracolo di separazione approssimato 2/6
Applichiamo dunque l’oracolo di separazione approssimato

oracolo di separazione
approssimato
𝑥𝑥̅ 1 ∈ ℝ𝑛𝑛 max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥̅𝑖𝑖1 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥̅𝑖𝑖1 𝑢𝑢𝑖𝑖
disequazione cover
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
violata da 𝑥𝑥̅
(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1
𝑖𝑖∈𝐼𝐼
� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 ∗ − |𝐶𝐶 ∗ ∩ 𝐼𝐼− | − 1
𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼−
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛
𝑐𝑐(𝑢𝑢+ ) > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶

𝑐𝑐 ′ 𝑢𝑢0 ≤ −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


𝑐𝑐 𝑢𝑢+ ≤ −1 < 𝑐𝑐 ′ 𝑢𝑢0 oracolo di separazione esatto
Knapsack binario – Oracolo di separazione approssimato 3/6
Andiamo a sostituire nello schema dell’oracolo di separazione
approssimato la soluzione 𝑥𝑥̅ = 𝑥𝑥̅ 1 e i coefficienti 𝑎𝑎� e 𝑏𝑏�
oracolo di separazione
approssimato
4
1
𝑥𝑥̅ = {1,0, , 1} 1
5 max 𝑐𝑐 𝑢𝑢 = −𝑢𝑢2 − 𝑢𝑢3 − 𝑢𝑢4
5

(RK) 2𝑢𝑢1 + 2𝑢𝑢2 + 5𝑢𝑢3 + 4𝑢𝑢4 ≥ 7

04 ≤ 𝑢𝑢 ≤ 14

1
min 𝑢𝑢2 + 𝑢𝑢3 + 𝑢𝑢4 Applichiamo al problema
5
2𝑢𝑢1 + 2𝑢𝑢2 + 5𝑢𝑢3 + 4𝑢𝑢4 ≥ 7 (RK) il metodo di soluzione
04 ≤ 𝑢𝑢 ≤ 14 esatto visto nella lezione 14
Knapsack binario – Oracolo di separazione approssimato 4/6
1. Ordinare gli indici delle variabili {1,2,3,4} in ordine crescente di rapporto
costo/ingombro
𝑐𝑐̅𝑖𝑖1 𝑐𝑐̅𝑖𝑖2 𝑐𝑐̅𝑖𝑖3 𝑐𝑐̅𝑖𝑖4
{𝑖𝑖1 , 𝑖𝑖2 , 𝑖𝑖3 , 𝑖𝑖4 }: ≤ ≤ ≤
𝑎𝑎�𝑖𝑖1 𝑎𝑎�𝑖𝑖2 𝑎𝑎�𝑖𝑖3 𝑎𝑎�𝑖𝑖4
1 1 1
Otteniamo i rapporti costo/ingombro {0, , , } relativi all’ordinamento
25 4 2
𝑖𝑖1 , 𝑖𝑖2 , 𝑖𝑖3 , 𝑖𝑖4 = {1,3,4,2}
2. Determinare l’indice 𝑖𝑖ℎ ∈ {1,2,3,4} tale che
ℎ−1

� 𝑎𝑎�𝑖𝑖𝑗𝑗 ≤ 𝑏𝑏�
𝑗𝑗=1 𝑖𝑖3 = 4

� 𝑎𝑎�𝑖𝑖𝑗𝑗 > 𝑏𝑏�


𝑗𝑗=1
Knapsack binario – Oracolo di separazione approssimato 5/6
3. Porre

1 ℎ−1
1
𝑢𝑢𝑖𝑖𝑘𝑘 = � (𝑏𝑏� − � 𝑎𝑎�𝑖𝑖𝑗𝑗 )
∗ 𝑢𝑢1∗ , 𝑢𝑢2∗ , 𝑢𝑢3∗ , 𝑢𝑢4∗ = {1,0,1,0}
𝑎𝑎𝑖𝑖𝑗𝑗
𝑗𝑗=1
0
La soluzione del rilassamento 0
𝑢𝑢 = 𝑢𝑢+
ha tutte componenti intere
4. Calcolare il limite superiore
𝑛𝑛
1
𝑇𝑇 ∗
𝑈𝑈𝐵𝐵 = 𝑐𝑐 𝑢𝑢 = � 𝑐𝑐𝑖𝑖 𝑢𝑢𝑖𝑖∗ 𝑐𝑐 𝑢𝑢∗ = −
5
𝑖𝑖=1
1
𝑐𝑐′ 𝑢𝑢0 = 𝑐𝑐 𝑢𝑢+ = −
5
Knapsack binario – Oracolo di separazione approssimato 6/6
4
Abbiamo che 𝑐𝑐 𝑢𝑢∗ > −1, quindi 𝑥𝑥̅ = 1,0, , 1 ∉ 𝑃𝑃𝐶𝐶 e possiamo determinare
5
il cover violato da 𝑥𝑥̅ e scrivere la relativa disequazione cover violata

oracolo di separazione disequazione cover


4 approssimato violata da 𝑥𝑥̅
𝑥𝑥̅ = {1,0, , 1}
5 𝑥𝑥1 + 𝑥𝑥3 ≤ 1
max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑢𝑢1∗ , 𝑢𝑢3∗ , 𝑢𝑢2∗ , 𝑢𝑢4∗ = {1,0,1,0}
𝑖𝑖∈𝐼𝐼
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛 cover violato da 𝑥𝑥̅
𝐶𝐶 ∗ = {1,3}

𝑐𝑐(𝑢𝑢∗ ) > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶


Knapsack binario – Formulazione rafforzata

Possiamo quindi scrivere la formulazione del problema aggiungendo alla


formulazione 𝑃𝑃1 la disequazione cover violata dalla soluzione del
rilassamento lineare
max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4
2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝑥𝑥1 + 𝑥𝑥3 ≤ 1
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
Anche in questo caso, la disequazione cover introdotta appartiene alla
formulazione cover del problema (si veda lezione 39, Formulazione cover
- Esempio, cover 𝐶𝐶6 di 𝑃𝑃𝐶𝐶 )
Formulazione rafforzata – Rilassamento lineare
Rilassiamo i vincoli di interezza delle variabili 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
sostituendoli con i vincoli di bound 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ [0,1] e otteniamo il nuovo
rilassamento lineare (RL) del problema

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝑥𝑥1 + 𝑥𝑥3 ≤ 1
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Formulazione rafforzata – Soluzione ottima del rilassamento
Come visto nell’attività precedente, possiamo formulare il
problema in AMPL e richiamare un solutore di Programmazione
Lineare (e.g., Cplex) per risolverlo
Possiamo impiegare lo stesso file cover.mod contenente le
dichiarazioni relative alla struttura del modello (vale a dire i
parametri che descrivono il vincolo di knapsack e le disequazioni
cover della formulazione cover e funzione obiettivo, le variabili, i
vincoli e la funzione obiettivo)
Dovremo invece modificare il file cover.dat contenente i valori dei
coefficienti del modello (vale a dire gli elementi i valori dei
parametri che descrivono il vincolo di knapsack e le disequazioni
cover della formulazione cover e funzione obiettivo)
Formulazione rafforzata – Definizione in AMPL
Definiamo nel file cover.dat i valori dei coefficienti del modello
della formulazione cover, vale a dire i valori numerici dei
parametri, per l’istanza considerata

-N=2
-C=3 max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4
- c = {3,2,5,6} 2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
- b = {2,2,1}
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
-A= 2 2 5 −4 𝑥𝑥1 + 𝑥𝑥3 ≤ 1
1 1 1 0
1 0 1 0 0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Soluzione di un’istanza della formulazione cover
A questo punto è stato caricato
1. il modello di Programmazione Lineare della formulazione cover
max cTx
Ax≤b
0|N| ≤ x ≤ 1|N|
2. i dati relativi a un’istanza del problema
max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4
2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥3 ≤ 2
𝑥𝑥1 + 𝑥𝑥3 ≤ 1
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Invocazione del solutore 1/2
Una volta caricati modello e valori dei coefficienti e selezionato
un opportuno solutore, per invocare l’impiego del solutore per
risolvere l’istanza di problema corrente è scrivere istruzione
solve
ampl: solve;
Una volta portata a termine l’istruzione, il compilatore visualizza
le informazioni di log restituite dal solutore per l’invocazione
precedente
In questo caso, otteniamo
CPLEX 12.8.0.0: optimal solution; objective 12.33333333
3 dual simplex iterations (0 in phase I)
Invocazione del solutore 2/2
CPLEX 12.8.0.0: optimal solution; objective 12.33333333
3 dual simplex iterations (0 in phase I)
È stata impiegata la versione 12.8 di CPLEX (CPLEX 12.8.0.0,
quella disponibile nel pacchetto d’installazione, in caso di rilascio
di nuova versione va scaricato il nuovo pacchetto o aggiornato il
file eseguibile e il file di licenza rilasciato da IBM)
È stata determinata la soluzione ottima (optimal solution) e
viene visualizzato il valore della funzione obiettivo (12.33) in
corrispondenza della soluzione ottima (non visualizzato)
Vengono quindi visualizzati i dettagli sul numero di iterazioni del
metodo utilizzato dal solutore, in questo caso il metodo del
simplesso duale
Visualizzazione della soluzione ottima
Una volta risolto il problema, se è stata determinata la soluzione
ottima (come in questo caso), il valore delle variabili
corrispondenti alla soluzione ottima possono essere visualizzati
tramite l’istruzione display seguita dal nome della o delle
variabili che vogliamo visualizzare (in questo caso il vettore di
variabili x)
ampl: display x;
x [*] :=
1 0.333
2 0 c(x*) = 3 x 0.33 + 2 x 1 + 5 x 0.667 + 6 x 1 = 12.333

3 0.667
4 1
Knapsack binario – Qualità dell’upper bound
Il valore ottimo della formulazione 𝑃𝑃2 è 12.333. Questo valore sappiamo
rappresentare un upper bound del problema di knapsack

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
La formulazione 𝑃𝑃2 è ottenuta come intersezione della formulazione 𝑃𝑃1 e
delle soluzioni che non violato la disequazione cover violata dalla
soluzione 𝑥𝑥̅ della formulazione 𝑃𝑃1

𝑃𝑃2 = 𝑃𝑃1 ∩ {𝑥𝑥 ∈ ℝ4 : 𝑥𝑥1 + 𝑥𝑥3 ≤ 1}


Quindi𝑃𝑃2 ⊂ 𝑃𝑃1 ⊂ 𝑃𝑃0 e il valore dell’upper bound fornito da 𝑃𝑃2 (12.333) è
inferiore ai valori dell’upper bound forniti da 𝑃𝑃1 (13) e da 𝑃𝑃0 (15)
Conclusione

In questa attività abbiamo visto un altro esempio di applicazione dell’algoritmo di


separazione approssimata dei cover applicato alla soluzione del rilassamento lineare
del problema di knapsack rafforzato tramite un’altra disequazione cover

Nella prossima lezione vedremo come impiegare l’oracolo di separazione della


formulazione cover del knapsack binario al caso della pianificazione degli
investimenti
Ricerca Operativa 2

Lezione 41 di 48
Pianificazione degli investimenti
Esercizio proposto
Sia dato il seguente problema di knapsack binario

max 3𝑥𝑥1 + 2𝑥𝑥2 + 5𝑥𝑥3 + 6𝑥𝑥4


2𝑥𝑥1 + 2𝑥𝑥2 + 3𝑥𝑥3 − 4𝑥𝑥4 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}

Sia data la soluzione del rilassamento lineare

1
𝑥𝑥̅ = {1, , 1,1}
2

Verificare che la soluzione appartenga alla formulazione cover applicando


l’oracolo di separazione approssimato
Ricerca Operativa 2

Lezione 42 di 48
Pianificazione degli investimenti
Separazione cover
Introduzione

In questa lezione applichiamo l’algoritmo di separazione visto per la


formulazione cover di un problema di knapsack binario al problema di
pianificazione degli investimenti introdotto nella lezione 38

Dopo alcuni richiami alla formulazione naturale del problema, vedremo


come sia possibile applicare l’algoritmo di separazione (sia esatto che
approssimato) al problema di pianificazione degli investimenti

Concluderemo la lezione con un esempio e alcuni esercizi


Capital budgeting – Richiami

Dati

• Un insieme 𝐼𝐼 = {1,2, … , 𝑛𝑛} di possibili investimenti

• Un indice di redditività 𝑐𝑐𝑖𝑖 relativo a ciascun investimento 𝑖𝑖 ∈ 𝐼𝐼

• Un orizzonte temporale 𝑇𝑇 = {1,2, … , 𝑡𝑡}

• Un budget 𝑏𝑏𝑗𝑗 disponibile per ogni periodo 𝑗𝑗 ∈ 𝑇𝑇 = {1,2, … , 𝑡𝑡}

• Un vettore dei flussi di cassa 𝑎𝑎𝑖𝑖 = (𝑎𝑎𝑖𝑖1 , … . , 𝑎𝑎𝑖𝑖𝑖𝑖 ) dell’investimento 𝑖𝑖 ∈ 𝐼𝐼


sull’orizzonte temporale 𝑇𝑇 = {1,2, … , 𝑡𝑡}

il problema di pianificazione degli investimenti (capital budgeting)


consiste nel determinare l’insieme di investimenti 𝐹𝐹 ∗ ⊆ 𝐼𝐼 ammissibile di
redditività totale massima
Capital budgeting – Formulazione naturale 1/2

Possiamo definire implicitamente l’insieme delle soluzioni ammissibili


del problema di capital budgeting come
𝑆𝑆 = {𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣 𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑𝑑 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖 𝐹𝐹 𝑑𝑑𝑑𝑑 𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝𝑝 𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎𝑎}
Il problema può quindi essere scritto come problema di PL01
max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝑥𝑥 ∈ 𝑆𝑆

Possiamo definire esplicitare l’insieme delle soluzioni ammissibili del


problema di capital budgeting richiamando i vincoli che legano tra loro
gli investimenti attivati
𝑆𝑆 = {𝑥𝑥 ∈ 0,1 𝑛𝑛 : � 𝑎𝑎𝑖𝑖𝑖𝑖 𝑥𝑥𝑖𝑖 ≤ 𝑏𝑏𝑗𝑗 }
𝑖𝑖∈𝐼𝐼
Capital budgeting – Formulazione naturale 2/2

Detti 𝐴𝐴 ∈ ℝ𝑡𝑡×𝑛𝑛 la matrice avente per colonne i vettori dei flussi di cassa
𝑎𝑎𝑖𝑖 relativi agli investimenti 𝑖𝑖 ∈ 𝐼𝐼 e 𝑏𝑏 ∈ ℝ𝑡𝑡 il vettore dei budget disponibili
nei periodi 1, … , 𝑡𝑡 possiamo scrivere la formulazione naturale del
problema di capital budgeting come segue

max 𝑐𝑐 𝑇𝑇 𝑥𝑥
𝐴𝐴𝑥𝑥 ≤ 𝑏𝑏
0𝑛𝑛 ≤ 𝑥𝑥 ≤ 1𝑛𝑛

Come abbiamo visto nella lezione 38, la formulazione naturale del


problema di capital budgeting è l’intersezione delle formulazioni naturali
di 𝑡𝑡 problemi di knapsack binario
Capital budgeting – Formulazione cover
𝑗𝑗
Come abbiamo visto nella lezione 38, detta 𝑃𝑃𝐶𝐶 la formulazione cover
del 𝑗𝑗 -esimo vincolo di knapsack binario 𝐾𝐾𝐾𝐾(𝑎𝑎𝑗𝑗 , 𝑏𝑏𝑗𝑗 ) e indicati con
𝐶𝐶𝑎𝑎𝑗𝑗,𝑏𝑏𝑗𝑗 l’insieme di tutti i cover di 𝐾𝐾𝐾𝐾(𝑎𝑎𝑗𝑗 , 𝑏𝑏𝑗𝑗 ) , possiamo definire la
formulazione cover del problema di capital budgeting come intersezione
delle formulazioni cover relative a tutti i vincoli di knapsack che
compaiono nel problema

𝑗𝑗
𝑃𝑃𝐶𝐶 ≔ � 𝑃𝑃𝐶𝐶 = 𝑥𝑥 ∈ ℝ𝑛𝑛 : � 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 − 𝐶𝐶 ∩ 𝐼𝐼− − 1 ∀𝐶𝐶 ∈ 𝐶𝐶𝑎𝑎𝑗𝑗,𝑏𝑏𝑗𝑗 , 𝑗𝑗 ∈ 𝑇𝑇
𝑗𝑗∈𝑇𝑇 𝑖𝑖∈𝐶𝐶∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶∩𝐼𝐼−
Capital budgeting – Metodo di soluzione 1/2

Per risolvere un problema di capital budgeting, applichiamo il metodo


del simplesso dinamico a partire dal rilassamento lineare relativo alla
formulazione naturale

Se la soluzione del rilassamento lineare è a componenti intere, allora è


anche soluzione ottima del problema

Altrimenti, applichiamo l’oracolo di separazione visto per la formulazione


cover di un problema di knapsack a ogni vincolo di knapsack binario del
problema di capital budgeting (preso individualmente)

In tal modo, rafforziamo a ogni iterazione la formulazione del problema


tagliando via la soluzione del rilassamento precedente fino a convergere
alla soluzione ottima del problema
Capital budgeting – Metodo di soluzione 2/2
Problema “core”
(form. naturale) D0 d0
A b
D=D0 ; d=d0 Disequazioni
cover

min cTx Q= ∅
Metodo del
x∈ Q = Dx<d,
Simplesso 𝑃𝑃𝐶𝐶 = ∅
(𝑃𝑃𝐶𝐶 ⊆ Q) 1n > x > 0n
x* ottima (in Q)
Nuova D e nuovo d
x*∉𝑃𝑃𝐶𝐶 Oracolo di
x*∈ 𝑃𝑃𝐶𝐶
aiT bi aiTx>bi Separazione
𝑗𝑗
di 𝑃𝑃𝐶𝐶 (𝑗𝑗 = 1, . . , 𝑡𝑡) x* ottima
Conclusione

In questa attività abbiamo visto come estendere il metodo del simplesso dinamico
definito per i problemi di knapsack binario al problema di capital budgeting

Abbiamo sfruttato il fatto che un problema di capital budgeting è intersezione di


problemi di knapsack binario (uno per ogni per ogni periodo 𝑗𝑗 ∈ 𝑇𝑇 = {1,2, … , 𝑡𝑡})

Nella prossima attività vedremo un esempio di applicazione prima di concludere


questa parte del corso con alcune domande ed esercizi proposti
Ricerca Operativa 2

Lezione 42 di 48
Pianificazione degli investimenti
Esempio di soluzione
Introduzione

In questa attività vedremo l’applicazione dell’algoritmo di separazione


visto per la formulazione cover di un problema di knapsack binario a un
problema di capital budgeting

Utilizzeremo quindi l’algoritmo del simplesso dinamico per la soluzione


del problema di capital budgeting
Capital budgeting – Esempio

Consideriamo il seguente problema di capital budgeting caratterizzato da

• Un insieme 𝐼𝐼 = 1,2,3,4,5 di 𝑛𝑛 = 5 possibili investimenti


𝑇𝑇
• Un indice di redditività 𝑐𝑐 = 3,7,3,5,7 relativo a ciascun investimento
in 𝐼𝐼 = 1,2,3,4,5

• Un orizzonte temporale 𝑇𝑇 = 1,2 di 𝑡𝑡 = 2 periodi


𝑇𝑇
• Un budget 𝑏𝑏 = 5,5 disponibile per ogni periodo in 𝑇𝑇 = 1,2

• Due vettori dei flussi di cassa 𝑎𝑎1 = (2, −3, −4,3,5) e 𝑎𝑎2 = (1,4, −3,3,4)
dell’investimento in 𝐼𝐼 = 1,2,3,4,5 sull’orizzonte temporale 𝑇𝑇 = {1,2}
Capital budgeting – Formulazione naturale

La formulazione naturale del problema è

max 3𝑥𝑥1 + 7𝑥𝑥2 + 3𝑥𝑥3 + 5𝑥𝑥4 + 7𝑥𝑥5


2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5
𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
Intersezione delle formulazioni naturali dei due vincoli di knapsack
binario

𝐾𝐾𝐾𝐾 𝑎𝑎1 , 𝑏𝑏1 = 𝑥𝑥 ∈ 0,1 5 : 2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5


𝐾𝐾𝐾𝐾 𝑎𝑎2 , 𝑏𝑏2 = {𝑥𝑥 ∈ 0,1 5 : 𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5}
Capital budgeting – Rilassamento lineare

Risolviamo il rilassamento lineare della formulazione naturale

max 3𝑥𝑥1 + 7𝑥𝑥2 + 3𝑥𝑥3 + 5𝑥𝑥4 + 7𝑥𝑥5


2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5
𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Si lascia per esercizio la formulazione in AMPL del problema e la verifica
che la soluzione ottima del rilassamento lineare vale 18.25 e ha
componenti 𝑇𝑇
3
𝑥𝑥̅ = 1, 1,1,0,
4
Capital budgeting – Oracolo di separazione

Per verificare che la soluzione 𝑥𝑥 ∗ appartenga alla formulazione cover del


problema, verifichiamo che appartenga alle formulazioni cover di
ciascuno dei vincoli di knapsack binario che compongono il problema,
vale a dire 𝐾𝐾𝐾𝐾 𝑎𝑎1 , 𝑏𝑏1 e 𝐾𝐾𝐾𝐾 𝑎𝑎2 , 𝑏𝑏2 , effettuando la trasformazione delle
variabili con coefficiente negativo un vincolo alla volta
Capital budgeting – Oracolo di separazione (vincolo 1)

Per verificare che la soluzione 𝑥𝑥 ∗ appartenga alla formulazione cover del


problema, verifichiamo che appartenga alla formulazione cover del
primo vincolo di knapsack binario 𝐾𝐾𝐾𝐾 𝑎𝑎1 , 𝑏𝑏1

max 3𝑥𝑥1 + 7𝑥𝑥2 + 3𝑥𝑥3 + 5𝑥𝑥4 + 7𝑥𝑥5


2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5
𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Knapsack binario 1 – Trasformazione di variabili
Come prima cosa, trasformiamo il vincolo in un vincolo a coefficienti non
negativi come visto nella lezione 39

2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5

Determiniamo gli insiemi di indici dei coefficienti non negativi e dei


coefficienti negativi
2𝑧𝑧1 − 3 1 − 𝑧𝑧2 − 4 1 − 𝑧𝑧3 + 3𝑧𝑧4 + 5𝑧𝑧5 ≤ 5
𝐼𝐼+ = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 ≥ 0} = {1,4,5}
𝐼𝐼− = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 < 0} = {2,3} 2𝑧𝑧1 + 3𝑧𝑧2 + 4𝑧𝑧3 + 3𝑧𝑧4 + 5𝑧𝑧5 ≤ 12
Operiamo la trasformazione di variabili

• 𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+

• 𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−


Knapsack binario 1 – Oracolo di separazione approssimato 1/4
A questo punto, per verificare che la soluzione 𝑥𝑥 ∗ del rilassamento
lineare (RL) appartenga o meno alla formulazione cover 𝑃𝑃𝐶𝐶 (lezione 39)
possiamo alternativamente

• scrivere la formulazione cover 𝑃𝑃𝐶𝐶 del problema e verificare che 𝑥𝑥 ∗


soddisfi tutti i vincoli

• applicare l’oracolo di separazione visto nella lezione precedente

Possiamo applicare
l’oracolo di separazione
approssimato
Knapsack binario 1 – Oracolo di separazione approssimato 2/4
Applichiamo dunque l’oracolo di separazione approssimato secondo lo
schema seguente

oracolo di separazione
approssimato
𝑥𝑥̅ ∈ ℝ𝑛𝑛 max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
disequazione cover
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
violata da 𝑥𝑥̅
(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1
𝑖𝑖∈𝐼𝐼
� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 ∗ − |𝐶𝐶 ∗ ∩ 𝐼𝐼− | − 1
𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼−
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛
𝑐𝑐(𝑢𝑢+ ) > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶

𝑐𝑐 ′ 𝑢𝑢0 ≤ −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


𝑐𝑐 𝑢𝑢+ ≤ −1 < 𝑐𝑐 ′ 𝑢𝑢0 oracolo di separazione esatto
Knapsack binario 1 – Oracolo di separazione approssimato 3/4
Andiamo a sostituire nello schema dell’oracolo di separazione
approssimato la soluzione 𝑥𝑥̅ = 𝑥𝑥 ∗ e i coefficienti 𝑎𝑎� e 𝑏𝑏�

oracolo di separazione approssimato


𝑇𝑇
3 1
𝑥𝑥̅ = 1, , 1,0,1 max 𝑐𝑐 𝑢𝑢 = −𝑢𝑢2 − 𝑢𝑢3 − 𝑢𝑢4 − 𝑢𝑢5
4 4

(RK) 2𝑢𝑢1 + 3𝑢𝑢2 + 4𝑢𝑢3 + 3𝑢𝑢4 + 5𝑧𝑧5 ≥ 13

05 ≤ 𝑢𝑢 ≤ 15

1 Si lascia per esercizio


min 𝑢𝑢2 + 𝑢𝑢3 + 𝑢𝑢4 + 𝑢𝑢5
4 l’applicazione del metodo di
2𝑢𝑢1 + 3𝑢𝑢2 + 4𝑢𝑢3 + 3𝑢𝑢4 + 5𝑧𝑧5 ≥ 13
soluzione esatto visto nella
05 ≤ 𝑢𝑢 ≤ 15 lezione 14
Knapsack binario 1 – Oracolo di separazione approssimato 4/4
23
Si trova che 𝑐𝑐 𝑢𝑢0 = − ≤ −1, quindi 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶
12

oracolo di separazione
approssimato
𝑥𝑥̅ max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛

𝑐𝑐(𝑢𝑢0 ) ≤ −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


Capital budgeting – Oracolo di separazione (vincolo 2)

Per verificare che la soluzione 𝑥𝑥 ∗ appartenga alla formulazione cover del


problema, verifichiamo che appartenga alla formulazione cover del
secondo vincolo di knapsack binario 𝐾𝐾𝐾𝐾 𝑎𝑎1 , 𝑏𝑏1

max 3𝑥𝑥1 + 7𝑥𝑥2 + 3𝑥𝑥3 + 5𝑥𝑥4 + 7𝑥𝑥5


2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5
𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ≤ 1
Knapsack binario 2 – Trasformazione di variabili
Come prima cosa, trasformiamo il vincolo in un vincolo a coefficienti non
negativi come visto nella lezione 39

𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5

Determiniamo gli insiemi di indici dei coefficienti non negativi e dei


coefficienti negativi
𝑧𝑧1 + 4𝑧𝑧2 − 3 1 − 𝑧𝑧3 + 3𝑧𝑧4 + 4𝑧𝑧5 ≤ 5
𝐼𝐼+ = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 ≥ 0} = {1,2,4,5}
𝐼𝐼− = {𝑖𝑖 ∈ 𝐼𝐼: 𝑎𝑎𝑖𝑖 < 0} = {3} 𝑧𝑧1 + 4𝑧𝑧2 + 3𝑧𝑧3 + 3𝑧𝑧4 + 4𝑧𝑧5 ≤ 8
Operiamo la trasformazione di variabili

• 𝑧𝑧𝑖𝑖 = 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼+

• 𝑧𝑧𝑖𝑖 = 1 − 𝑥𝑥𝑖𝑖 per ogni indice 𝑖𝑖 ∈ 𝐼𝐼−


Knapsack binario 2 – Oracolo di separazione approssimato 1/4
A questo punto, per verificare che la soluzione 𝑥𝑥 ∗ del rilassamento
lineare (RL) appartenga o meno alla formulazione cover 𝑃𝑃𝐶𝐶 (lezione 39)
possiamo alternativamente

• scrivere la formulazione cover 𝑃𝑃𝐶𝐶 del problema e verificare che 𝑥𝑥 ∗


soddisfi tutti i vincoli

• applicare l’oracolo di separazione visto nella lezione precedente

Possiamo applicare
l’oracolo di separazione
approssimato
Knapsack binario 2 – Oracolo di separazione approssimato 2/4
Applichiamo dunque l’oracolo di separazione approssimato secondo lo
schema seguente

oracolo di separazione
approssimato
𝑥𝑥̅ ∈ ℝ𝑛𝑛 max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖
disequazione cover
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−
violata da 𝑥𝑥̅
(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1
𝑖𝑖∈𝐼𝐼
� 𝑥𝑥𝑖𝑖 − � 𝑥𝑥𝑖𝑖 ≤ 𝐶𝐶 ∗ − |𝐶𝐶 ∗ ∩ 𝐼𝐼− | − 1
𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼+ 𝑖𝑖∈𝐶𝐶 ∗ ∩𝐼𝐼−
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛
𝑐𝑐(𝑢𝑢+ ) > −1 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶

𝑐𝑐 ′ 𝑢𝑢0 ≤ −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


𝑐𝑐 𝑢𝑢+ ≤ −1 < 𝑐𝑐 ′ 𝑢𝑢0 oracolo di separazione esatto
Knapsack binario 2 – Oracolo di separazione approssimato 3/4
Andiamo a sostituire nello schema dell’oracolo di separazione
approssimato la soluzione 𝑥𝑥̅ = 𝑥𝑥 ∗ e i coefficienti 𝑎𝑎� e 𝑏𝑏�

oracolo di separazione approssimato


𝑇𝑇
3 1
𝑥𝑥̅ = 1,1,1,0, max 𝑐𝑐 𝑢𝑢 = −𝑢𝑢3 − 𝑢𝑢4 − 𝑢𝑢5
4 4

(RK) 𝑢𝑢1 + 4𝑢𝑢2 + 3𝑢𝑢3 + 3𝑢𝑢4 + 4𝑧𝑧5 ≥ 9

05 ≤ 𝑢𝑢 ≤ 15

1 Si lascia per esercizio


min 𝑢𝑢3 + 𝑢𝑢4 + 𝑢𝑢5
4 l’applicazione del metodo di
𝑢𝑢1 + 4𝑢𝑢2 + 3𝑢𝑢3 + 3𝑢𝑢4 + 4𝑧𝑧5 ≥ 9 soluzione esatto visto nella
04 ≤ 𝑢𝑢 ≤ 15 lezione 14
Knapsack binario 2 – Oracolo di separazione approssimato 4/4
1
Si trova che 𝑐𝑐 𝑢𝑢0 = 𝑐𝑐 𝑢𝑢+ = − > −1, quindi 𝑥𝑥̅ ∉ 𝑃𝑃𝐶𝐶
4

oracolo di separazione disequazione cover


approssimato violata da 𝑥𝑥̅
𝑥𝑥̅ max 𝑐𝑐 𝑢𝑢 = �(𝑥𝑥�𝑖𝑖 − 1)𝑢𝑢𝑖𝑖 − � 𝑥𝑥�𝑖𝑖 𝑢𝑢𝑖𝑖 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥5 ≤ 2
𝑖𝑖∈𝐼𝐼+ 𝑖𝑖∈𝐼𝐼−

(RK) � 𝑎𝑎�𝑖𝑖 𝑢𝑢𝑖𝑖 ≥ 𝑏𝑏� + 1


𝑖𝑖∈𝐼𝐼 𝑢𝑢1∗ , 𝑢𝑢2∗ , 𝑢𝑢3∗ , 𝑢𝑢4∗ , 𝑢𝑢5∗ = {1,1,0,01}
0𝑛𝑛 ≤ 𝑢𝑢 ≤ 1𝑛𝑛 cover violato da 𝑥𝑥̅
𝐶𝐶 ∗ = {1,2,3}

𝑐𝑐(𝑢𝑢∗ ) > −1 𝑥𝑥̅ ∈ 𝑃𝑃𝐶𝐶


Capital budgeting – Formulazione rafforzata

Possiamo quindi scrivere la formulazione 𝑃𝑃1 del problema aggiungendo


alla formulazione naturale 𝑃𝑃0 la disequazione cover 𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥5 ≤ 2 violata
dalla soluzione del rilassamento lineare

max 3𝑥𝑥1 + 7𝑥𝑥2 + 3𝑥𝑥3 + 5𝑥𝑥4 + 7𝑥𝑥5


2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5
𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥5 ≤ 2
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 , 𝑥𝑥5 ∈ {0,1}
Capital budgeting – Soluzione del nuovo rilassamento lineare

Se risolviamo il rilassamento lineare relativo alla nuova formulazione 𝑃𝑃1

max 3𝑥𝑥1 + 7𝑥𝑥2 + 3𝑥𝑥3 + 5𝑥𝑥4 + 7𝑥𝑥5


2𝑥𝑥1 − 3𝑥𝑥2 − 4𝑥𝑥3 + 3𝑥𝑥4 + 5𝑥𝑥5 ≤ 5
𝑥𝑥1 + 4𝑥𝑥2 − 3𝑥𝑥3 + 3𝑥𝑥4 + 4𝑥𝑥5 ≤ 5
𝑥𝑥1 + 𝑥𝑥2 + 𝑥𝑥5 ≤ 2
0 ≤ 𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 , 𝑥𝑥5 ≤ 1

otteniamo la soluzione ottima del rilassamento lineare vale 18 e ha


componenti
𝑇𝑇
𝑥𝑥̅ = 1, 1,1,1,0
Capital budgeting – Conclusione

Dal momento che la soluzione del rilassamento è a componenti intere,


𝑇𝑇
𝑥𝑥̅ = 1, 1,1,1,0 è soluzione ottima del problema di capital budgeting
originale

Infatti, la soluzione appartiene sia alla formulazione cover di 𝐾𝐾𝐾𝐾 𝑎𝑎1 , 𝑏𝑏1
che di 𝐾𝐾𝐾𝐾 𝑎𝑎2 , 𝑏𝑏2 dunque appartiene alla formulazione cover del problema
di capital budgeting
Ricerca Operativa 2

Lezione 42 di 48
Pianificazione degli investimenti
Domande aperte
Illustrare l’oracolo di separazione per la formulazione cover del problema di
knapsack binario
Spiegare le differenze tra l’oracolo di separazione esatto e quello approssimato
per la formulazione cover del problema di knapsack binario
Illustrare l’oracolo di separazione per la formulazione cover del problema di capital
budgeting
Ricerca Operativa 2

Lezione 42 di 48
Pianificazione degli investimenti
Esercizio proposto
Risolvere il seguente problema di capital budgeting

max 2𝑥𝑥1 + 7𝑥𝑥2 + 𝑥𝑥3 + 3𝑥𝑥4


2𝑥𝑥1 − 3𝑥𝑥2 + 4𝑥𝑥3 + 2𝑥𝑥4 ≤ 4
3𝑥𝑥1 + 4𝑥𝑥2 − 2𝑥𝑥3 + 𝑥𝑥4 ≤ 3
𝑥𝑥1 , 𝑥𝑥2 , 𝑥𝑥3 , 𝑥𝑥4 ∈ {0,1}
Ricerca Operativa 2

Lezione 48 di 48
Chiusura del corso
Conclusioni generali del corso

Nell’ambito del presente corso abbiamo affrontato


metodi generali di soluzione di problemi di
Programmazione Lineare e di Programmazione Lineare
{0,1}
Per alcuni problemi di PL01 abbiamo visto anche
metodi euristici di soluzione, più rapidi ma meno
affidabili nel determinare soluzioni di buona qualità
Ci siamo quindi concentrati su alcune classi di problemi
decisionali di particolare interesse pratico
Sintesi 1/2

I principali argomenti del corso sono stati:


1. Pianificazione di sistemi complessi e distribuiti
2. Clustering dei dati
3. Linguaggio AMPL
4. Pianificazione degli investimenti
Sintesi 2/2

In tutti i principali «capitoli» del corso sono stati


sono stati analizzati e messi in pratica metodi
generali di soluzione che permettono di
risolvere classi di problemi non visti nel dettaglio
durante il corso (e.g., metodo del simplesso
dinamico)
Modalità di svolgimento

• Le sessioni di attività sono state organizzate in


maniera tale da essere auto contenute ma possono
richiedere di tornare alle sessioni precedenti per
richiamare alcuni concetti
• Il materiale didattico prevede principalmente audio
lezioni, slide, testi a supporto ed esercizi proposti
• Per qualsiasi dubbio in merito al materiale fornito o
richiesta di ulteriore materiale, rivolgersi al docente
Modalità d’esame

• Le modalità d’esame sono quelle previste per tutti gli


insegnamenti del corso di laurea
• L’esame prevede una prova scritta e/o una prova
orale
– La prova scritta comprende 19 risposte multiple (1 punto
massimo ciascuna) e 3 risposte aperte (4 punti massimo
ciascuna) per un totale di 31 punti
– La prova orale (possibile nelle sedi di Roma e Novedrate)
comprende domande aperte ed esercizi su tutte le parti
del corso
Ricerca Operativa 1

Lezione 48 di 48
Riferimenti docente e bibliografia
Riferimenti del docente

Ing. Silvia Canale


E-mail silvia.canale@uniecampus.it
Messaggistica Sistema di ateneo
Ricevimento ufficio virtuale giovedì 9:00 – 10:00
Ricevimento telefonico tramite piattaforma
martedì 12:00 – 13:00
Prerequisiti

Il corso richiede una conoscenza di base di


Ricerca Operativa (Programmazione Lineare,
Dualità, elementi di Programmazione Lineare
Intera e di teoria dei grafi), teoria degli insiemi,
logica, analisi matematica, geometria analitica e
algebra lineare.
Per approfondire eventuali argomenti non
trattati in corsi di base, rivolgersi al docente
Testi di riferimento

TITOLO
Modelli e Algoritmi della Ricerca Operativa
2a edizione, nuova edizione 2004
AUTORI
Antonio Sassano
Collana
Scienze e tecnologie informatiche
Argomenti
Matematica, statistica, ricerca operativa, analisi dei sistemi
EDITORE
Franco Angeli
Testi di riferimento

TITOLO
Data Clustering

AUTORI
Silvia Canale

Collana
Dispense per il corso di Algoritmi di classificazione e reti neurali,
Dipartimento di Informatica e Sistemistica, Università degli Studi di
Roma «La Sapienza» A.A. 2005-2006

Argomenti
Matematica, statistica, ricerca operativa, analisi dei dati
Ricerca Operativa 1

Lezione 48 di 48
Programma del corso
Programma del corso

1. Pianificazione di sistemi complessi e


distribuiti
• Problema della localizzazione degli impianti
• Grafo di localizzazione
• Formulazione come problema di
Programmazione Lineare Intera
• Algoritmi euristici
Programma del corso

2. Clustering dei dati


• Analisi dei dati e apprendimento automatico
• Definizione dei problemi di clustering
partizionale
• Problema di Partizione in Clique dei nodi di un
grafo
• Formulazione matematica e approcci di
soluzione esatti ed euristici

Potrebbero piacerti anche