Complessita` computazionale e algoritmi euristici

Contenuto e scopo presentazione
Premesse:
I problemi di PL, o che possono essere “ricondotti” ad essere tali, sono
risolvibili in modo “efficiente” in funzione delle loro “dimensioni” sia dal
punto di vista teorico, e.g., con il metodo dell’elissoide, sia dal punto di vista
pratico con il Simplesso e, più raramente, con l’algoritmo del punto interno.
Il Simplesso però in casi “sfortunati”, e.g., cubo di Klee–Minty, esegue un
numero “molto elevato” di iterazioni.
Si pongono quindi le seguenti domande:
– esistono altre classi di problemi per cui possono essere fatti ragionamenti
“simili”?
– si possono definire in modo formale i concetti espressi tra apici?
Teoria della complessità
Concetti fondamentali
Raffaele Pesenti
Raffaele Pesenti
Contenuto e scopo presentazione
2
Oggetto della teoria della complessità
Contenuto:
• vengono introdotti i concetti fondamentali riguardanti la teoria della
complessità
L’oggetto della teoria della complessità è stabilire se un problema sia facile o
difficile
La difficoltà di un problema è una caratteristica generale e non associata a
particolari istanze del problema stesso
Scopo:
• dato un problema fornire dei criteri che permettano di stabilire se esista la
speranza di realizzare un algoritmo che permetta con tempi di calcolo
ragionevoli di determinare la soluzione ottima, oppure se convenga utilizzare
metodi approssimati o euristiche.
Raffaele Pesenti
3
Raffaele Pesenti
4
Problemi e Istanze
Esempio
• Problema P: domanda la cui risposta dipende dal valore assunto da un
insieme di parametri e variabili.
P è definito tramite la descrizione dei parametri e la descrizione delle
proprietà di cui deve godere la risposta (soluzione) cercata.
Una possibilità è fornire:
– l’insieme delle soluzioni ammissibili F
– una funzione obiettivo c che permette di valutare il costo/profitto
associato ad ogni soluzione.
• Esempio
Dato un grafo G=(V,E), esiste un percorso hamiltoniano di lunghezza <K?
Struttura del problema = grafo G
Struttura della soluzione = percorso hamiltoniano
Parametri = i particolari nodi, archi ed i pesi degli archi
c:F→ℜ
• Istanza di un problema P : particolare domanda che si ottiene fissando i
valori di tutti i parametri di P
Raffaele Pesenti
5
Raffaele Pesenti
Problemi
6
Difficoltà di un problema
• Problemi di decisione
Risposta SI/NO
(es., ∃ un ciclo hamiltoniano di lunghezza <K?)
• Problemi di ricerca
Trovare una soluzione (una prova della risposta “SI”)
(es., trovare un ciclo hamiltoniano di lunghezza <K)
• Problemi di enumerazione
Trovare tutte le soluzioni
(es., trovare tutti i cicli hamiltoniani di lunghezza <K)
Facilità di un problema
Esiste un algoritmo di
soluzione efficiente
Difficoltà di un problema
Non esiste un algoritmo
di soluzione efficiente
Stabilire la difficoltà di un problema
misurare l’efficienza del (migliore) algoritmo risolutore
Misurare l’efficienza di un algoritmo
determinare la complessità computazionale dell’algoritmo
• Algoritmo
Metodo per passi successivi per risolvere un problema
Raffaele Pesenti
7
Raffaele Pesenti
8
Algoritmo
Efficienza di un algoritmo
Efficienza di un algoritmo
• Algoritmo:
sequenza di istruzioni non ambigue che a partire da dei dati di input produce
dei risultati soddisfacenti date proprietà.
Tempo richiesto per
trovare la soluzione
• Algoritmo (definizione formale):
ciò che riesce ad eseguire una macchina di Turing
Quantità di memoria
richiesta per i dati del
problema
{
Dimensione dell’istanza del problema
(Numero di variabili, vincoli, grandezza dei dati)
Quantità di informazioni necessarie per codificare un’istanza
Raffaele Pesenti
9
Raffaele Pesenti
Codifica di un’istanza di un problema
Codifica di un’istanza di un problema
Codifica:
metodologia utilizzata per descrivere un’istanza di un problema, è
caratterizzata da un alfabeto di simboli e da espressioni significative.
Esempio: Un problema di PL
Codificare i dati (n+mn+m coeff.)
ci, i=1,...n; aij, i=1,...,n, j=1,...,m; bj, j=1,...m
Codifica “ragionevole”:
utilizza almeno 2 simboli
non introduce dati irrilevanti né richiede una generazione esponenziale di dati
Sistema binario (codifica di un numero x):
k+1 bit, con k≤ log2 x ≤k+1 più 1 bit per il segno
Numeri a precisione finita:
interi e razionali come rapporto tra interi
Dimensione di un’istanza di un problema:
lunghezza della stringa di simboli necessaria a descrivere l’istanza
(teoricamente tale lunghezza dovrebbe essere la minima, praticamente basta
che sia “ragionevole”)
Raffaele Pesenti
10
11
Raffaele Pesenti
12
Codifica di un’istanza di un problema
Codifica di un’istanza di un problema
Esempio: Codifica decimale (ragionevole)
1 cifra (0-9) ⇒ 10 numeri
10 (2 cifre) ⇒ 100 numeri
10×10=100 (3 cifre) ⇒ 1000 numeri
100×10=1000 (4 cifre) ⇒ 10000 numeri
⇒
mentre il numero di numeri cresce di fattori 10
il numero di cifre cresce come il logaritmo
Esempio: Codifica unaria (non ragionevole)
1 cifra (1) ⇒ 1 numeri
10 decimale (10 cifre) ⇒ 10 numeri
100 decimale (100 cifre) ⇒ 100 numeri
1000 decimale (1000 cifre) ⇒ 1000 numeri
⇒
mentre il numero di simboli cresce di fattori 10
il numero di cifre cresce linearmente
Raffaele Pesenti
Esempio: Generazione esponenziale di dati
Problema di decisione difficile:
dato un grafo determinare se esiste un ciclo hamiltoniano di lunghezza <K.
Problema di decisione semplice:
dati n numeri trovare se esiste un numero <K (sorting)
Con una codifica non ragionevole (codificare il grafo e tutti i suoi cicli) si
potrebbe trasformare il problema difficile del ciclo hamiltoniano nel problema
semplice del sorting.
La codifica non è ragionevole perché in essa è contenuta la generazione delle
soluzioni del problema.
13
Raffaele Pesenti
Tempo di soluzione
Efficienza di un algoritmo
Funzione di complessità nel tempo
Tempo richiesto per risolvere un’istanza del
problema codificata ragionevolmente
Il tempo di calcolo della soluzione è definito in maniera indipendente dalle caratteristiche
del particolare calcolatore utilizzato (più formalmente bisognerebbe fare riferimento ad
una macchina standard, e.g., macchina di Turing, Random Access Machine (RAM)).
Tempo di soluzione:
numero delle operazioni elementari (addizioni, moltiplicazioni, confronti,
scrittura/lettura registri ) necessarie all’algoritmo per risolvere un’istanza di una
dimensione data.
Raffaele Pesenti
14
15
Funzione di complessità nel tempo:
f(n), dove n è la dimensione di un’istanza, è la funzione che restituisce il
massimo numero di operazioni elementari necessarie ad un algoritmo per
risolvere le istanze di dimensione n di un problema.
• La funzione di complessità nel tempo è determinata per mezzo della worst case
analysis.
• Un modo alternativo di valutare la complessità è l’analisi statistica (più
complicato).
Raffaele Pesenti
16
Funzione di complessità nel tempo
Algoritmi
Algoritmo polinomiale
Un algoritmo è di tipo polinomiale se ha una funzione di complessità nel tempo
che è O(np) per un certo p fissato.
Occorre conoscere solo il comportamento asintotico (n→∞) della funzione
di complessità nel tempo, ossia l’ordine di f(n)
Ordine:
La funzione f(n) è di ordine g(n), indicato come O(g(n)), se ∃ n’ ed una
costante c tali che
f(n) ≤ c⋅g(n) per n ≥ n’
Esempio: un polinomio p(n) =Σi=1..r cini è O(nr)
Algoritmo esponenziale
Un algoritmo è di tipo esponenziale se non ha una funzione di complessità nel
tempo di tipo polinomiale.
Ordine esponenziale
Una funzione f(n) è di ordine esponenziale se non è limitata da alcun polinomio,
ossia, dati n2 ≥ n1, c1, c2>0 e d1, d2>1,
c1 d 1n1 ≤ f ( n ) ≤ c 2 d 2n 2
Raffaele Pesenti
17
Raffaele Pesenti
18
Classe P
Classe P
Esempio:tre algoritmi su un calcolatore che esegue una operazione in 10-6s
Classe P
Appartengono alla classe P tutti i problemi di decisione che possono essere
risolti da algoritmi di tipo polinomiale (Polynomial time algorithm).
n
10
30
60
n 2 10 − 4 s 9 ⋅10 − 4 s 3.6 ⋅10 −3 s
O(f(k))
n 5 0.1s
24.3s
13m
2 n 10 −3 s 17.9m
366c
polinomiale
esponenziale
Legenda: s=secondi, m=minuti, c=secoli
Commento:
I problemi in P sono ben risolti poiché per essi esiste un algoritmo efficiente di
soluzione. Per questo i problemi in P vengono anche detti trattabili.
Raffaele Pesenti
19
La complessità computazionale non dipende dalla velocità del calcolatore utilizzato.
Esempio: un calcolatore 1000 volte più veloce (10-9s) potrebbe eseguire le seguenti
operazioni in più per i tre algoritmi
10 − 6
10 − 9
Raffaele Pesenti
n2
n5
k
k
31 . 62 ⋅ k
3 . 98 ⋅ k
2n
k
10 + k
20
Classe P
Esempi di problemi in P
Esempio:
Sono noti algoritmi polinomiali per determinare il minimo albero ricoprente in un
grafo:
l’algoritmo di Kruskal è O(nlogn),
l’algoritmo di Prim è O(n2)
Programmazione Lineare Continua
Matching
Cammino Minimo e tutti i problemi riconducibili a quello di Flusso a Costo
Minimo
Sistemi equazioni lineari
Il problema (di decisione) dello shortest spanning tree: “dato un grafo stabilire se
esiste un albero ricoprente di lunghezza <K” è in P
Raffaele Pesenti
21
Raffaele Pesenti
Classe NP
Classe NP
Classe NP
Appartengono alla classe NP tutti i problemi di decisione per cui, essendo nota
una soluzione, è possibile verificare in tempo polinomiale se una data risposta è
ammissibile (Non deterministic Polynomial time algorithm).
La codifica di una soluzione è detta certificato di ammissibilità.
Commento:
Esistono problemi non in NP (tipicamente quelli enumerativi) e problemi per
cui non esiste modo di verificare la correttezza di una soluzione data.
Raffaele Pesenti
22
23
Esempio:
Problema:
Dato il grafo G, esiste un circuito hamiltoniano di lunghezza <K?
Risposta:
Si
Certificato di ammissibilità:
Una sequenza di nodi del grafo
Verifica:
Seguire la sequenza dei nodi verificando che corrisponde ad un circuito
hamiltoniano di lunghezza <K (polinomiale)
Raffaele Pesenti
24
Classe NP
Classe NP
I problemi NP sono quelli che sono risolvibili da un algoritmo di tipo polinomiale
non deterministico (Non deterministic Polynomial time algorithm).
Esempi di problemi di decisione:
Algoritmo NP :
Guessing stage)
Checking stage)
Un oracolo “indovina” la soluzione (non deterministico)
Verifica in tempo polinomiale della soluzione
(ovviamente nella realtà non esistono tali algoritmi)
Teorema: P⊆NP
NP
Minimum spanning tree: è P e NP
PL (determinare se esiste una soluzione >K): è NP e dal 1979 è stato provato che
è P (algoritmo dell’ellissoide)
Ciclo hamiltoniano di lunghezza <K: è NP ma non è stato provato che sia in P
P
Congettura: P≠NP
Raffaele Pesenti
25
26
Problema complementare
Problema complementare
Problemi complementari (co-problemi):
In un problema decisionale π, le cui soluzioni x in F devono soddisfare una data
proprietà P, i.e., x∈F se e solo se P(x) =VERO, si deve rispondere alla domanda
∃ x t.c.P(x) =VERO?
nel problema complementare co-π si deve rispondere alla domanda “negata”,
ovvero se è falsa l’affermazione precedente
¬∃ x t.c.P(x) =VERO? ⇒ ∀ x t.c.P(x) =FALSO?
Esempio:
Il problema complementare del ciclo hamiltoniano di lunghezza<K:
“Dato il grafo G, è vero che non esistono cicli hamiltoniani di lunghezza <K?”
Raffaele Pesenti
Raffaele Pesenti
27
Commenti:
• Dimostrare la correttezza della soluzione di un problema complementare è, in
generale, più complesso che dimostrare la correttezza della soluzione di un
problema decisionale.
Per il problema
π: esiste un cigno nero?
può essere estremamente difficile o impossibile trovare una risposta
affermativa, ma se si riesce è banale convincere della correttezza della
risposta, basta mostrare il cigno nero che si è trovato (il problema è in NP)
Per co-problema
co-π: non esiste un cigno nero? ⇒ tutti i cigni non sono neri?
può essere banale trovare un cigno che non è nero, ma potrebbe essere
estremamente difficile convincere della verità della risposta positiva. Come
certificato di ammissibilità bisognerebbe probabilmente mostrare tutti i cigni
viventi, vissuti e che vivranno (il co-problema non sembra appartenere a NP).
Raffaele Pesenti
28
Problema complementare
Problema complementare
Commenti(cont.):
• Esistono però problemi in cui è facile dimostrare la correttezza sia del
problema che del co-problema. Questa situazione si verifica quando è
possibile determinare (non solo verificare come nel caso precedente) una
soluzione per il problema decisionale, o negarne l’esistenza, in tempo
polinomiale. Esempio:
π: esiste un percorso tra Palermo e Catania minore di 100 Km?
co-π: tutti i percorsi tra Palermo e Catania sono non minori di 100 Km?
Per rispondere a questi problemi, essendo π∈P, si cerca in tempo polinomiale
una soluzione di π (e.g., il percorso minimo), se questa esiste la risposta a π
è SI e a co-π è NO, altrimenti, se non esiste soluzione per π, la risposta a π è
NO e a co-π è SI.
Si può (determinare e) quindi verificare la correttezza della risposta a co-π in
tempo polinomiale, in questo caso co-π∈ΝP.
Raffaele Pesenti
29
Commenti(cont.):
• Il ragionamento precedente non si può (o meglio, non sembra potersi)
applicare al caso dei cigni e dei percorsi hamiltoniani in quanto non è
(sembra essere) possibile determinare una soluzione del problema decisionale
o negarne l’esistenza in tempi polinomiali (in pratica non esiste un algoritmo
polinomiale che, e.g., determini il cigno più scuro o il percorso hamiltoniano
minimo)
Raffaele Pesenti
Problemi Co-NP
I problemi co-P, complementari dei problemi in P, sono ancora in P.
Non tutti i problemi co-NP, complementari dei problemi in NP, sembrano essere
in NP.
Congettura
Teorema
P=co-P ⇒ P⊆NP ∩ co-NP, non noto se P=NP ∩ co-NP
NP
P
NP≠co-NP
Problemi più difficili
Problemi più difficili
Si definiscono come problemi più difficili di una classe quei problemi
appartenenti alla classe che risultano almeno difficili quanto ogni altro
co-NP
Esempio:
Se il certificato di ammissibilità per il problema complementare del ciclo
hamiltoniano è la lista di tutti i possibili cicli hamiltoniani (come attualmente
appare) allora...
per un grafo completo con m nodi il certificato ha dimensione pari a m!
⇒ esponenziale quindi non verificabile in tempo polinomiale
Raffaele Pesenti
30
31
Se si riuscisse a risolvere efficientemente uno dei problemi più difficili allora si
potrebbero risolvere efficientemente anche tutti gli altri problemi della classe
Raffaele Pesenti
32
Trasformazioni e riduzioni
Trasformazioni e riduzioni
Trasformazione polinomiale
E’ un algoritmo che, data un’istanza I di un problema π, produce in tempo
polinomiale un’istanza I’ di un problema π’ in modo tale che, se la risposta è
“SI” per I, allora la risposta è “SI” anche per I’
Riduzione polinomiale
E’ un algoritmo che, data un’istanza I di un problema π, usa una subroutine
per risolvere un’istanza I’ di un problema π’ in modo tale che l’algoritmo
sarebbe polinomiale se la procedura fosse di ordine O(1), i.e., fosse eseguita
in un tempo indipendente dalla dimensione di I’, e se i parametri da passare
alla subroutine sono calcolati in tempo polinomiale.
Proprietà:
– Le trasformazioni e le riduzioni polinomiali sono transitive
– Dati π e π’, con π ∝π’,
• se π’ ∈P ⇒ π ∈P
• se π ∈ΝP-C ⇒ π’ ∈ΝP-C
La trasformazione polinomiale di π a π’ (π ridotto a π’)
π ∝π’
Raffaele Pesenti
33
Raffaele Pesenti
Esempio
Esempio
Dati
• Problema dello zaino KP(U,s,c,B,K)
Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un
volume s(u)∈N, e un peso c(u)∈N, e dati due interi positivi B,K∈N .
Soluzione: un sottoinsieme U’⊆U tale che il volume occupato sia non
maggiore di B, i.e., Σu∈ U’ s(u) ≤ B e il peso totale degli elementi scelti sia
non minore di K, i.e., Σu∈ U’ c(u) ≥ K.
• Problema di somma di sottoinsiemi SS(V,a,D)
Istanza: dato un insieme finito V, dove |V|=2n e dove ogni v∈V è
caratterizzato da un volume a(v)∈N, e dato un intero positivo D∈N .
Dimostrazione
si deve realizzare un algoritmo che per risolvere un SS(V,a,D) esegue un numero
polinomiali di chiamate alla subroutine di soluzione di KP(U,s,c,B,K).
Sia risolvi_KP(U,s,c,B,K) la procedura che restituisce un sottoinsieme U’
soluzione di KP(U,s,c,B,K) se U’ esiste, allora la procedura risolvi_SS(V,v,D)
risulta essere:
risolvi_SS(V,a,D)
U←V
for each u∈U c(u)←a(u)|V|+ 1
for each u∈U s(u)←a(u)|V|+ 1
B←D|V|+|V|/2
K←D|V|+|V|/2
return risolvi_KP(U,s,c,B,K)
Soluzione: un sottoinsieme V’⊆V, dove |V’|=n, tale che Σv∈ V’ a(u) = D.
allora ...
Problema di somma di sottoinsiemi ∝ Problema dello zaino
Raffaele Pesenti
34
35
Raffaele Pesenti
36
Esempio
Esempio
Dimostrazione (cont.)
(correttezza) L’istruzione s(u)←a(u)|V|+ 1 impone che ogni u abbia volume che
superi di uno un multiplo di |V|. Analoga considerazione per c(u)←a(u)|V|+ 1.
Le istruzioni B←D|V|+|V|/2,K←D|V|+|V|/2 hanno come conseguenza che
risolvendo KP(U,s,c,B,K) si cerchi un sottoinsieme U’ t.c.
Σu∈ U’ s(u) ≤ B ⇒
Σu∈ U’ c(u) ≥ K ⇒
|V| Σu∈ U’ a(u) + |U’| ≤ D|V|+|V|/2
|V| Σu∈ U’ a(u) + |U’| ≥ D|V|+|V|/2
quindi, se tale sotto insieme U’ esiste allora
Dimostrazione (cont.)
(complessità) La prima istruzione dell’algoritmo richiede 2n operazioni elementari poiché
si devono elencare tutti gli elementi di V, analogamente la seconda e la terza istruzione
richiedono 6n operazioni elementari (un for su 2n elementi di 3 operazioni). La quarta e
la quinta istruzione richiedono 4 operazioni, i.e., un tempo indipendente dalla dimensione
dell’istanza. La sesta istruzione è per ipotesi O(1).
Di conseguenza la complessità dell’algoritmo è O(n) = O(max{2n,6n,4, O(1)}) .
D|V|+|V|/2 ≤ |V| Σu∈ U’ a(u) + |U’| ≤ D|V|+|V|/2
da cui dividendo per |V|
Σu∈ U’ a(u) = D
+ 1/2 - |U’|/|V|.
poiché v(u) è intero e |U’|/|V| ≤ 1 l’ultima condizione impone
Σu∈ U’ a(u) = D e 1/2 - |U’|/|V| =0 ⇒ |U’|=|V|/2.
quindi, se esiste U’, i suoi elementi soddisfano le condizioni del problema SS.
Raffaele Pesenti
37
Raffaele Pesenti
Trasformazioni e riduzioni
NP-completezza
Commenti:
– In parole povere π può essere ridotto a π’se i suoi dati possono essere
“manipolati” (in tempo polinomiale) in modo che la soluzione del
problema π possa essere ottenuta risolvendo uno o comunque “pochi” (in
numero polinomiale) problemi π’
– Le trasformazioni e le riduzioni polinomiali permettono di definire se il
problema π’ è almeno altrettanto difficile di π
– L’ideale è riuscire a trasformare tutti i problemi in un unico di forma
standard che si riesca a risolvere in modo efficiente o almeno accettabile.
Un problema spesso preso come riferimento è la programmazione lineare
intera (che però non è risolvibile in modo efficiente)
Raffaele Pesenti
38
39
Classe NP-C (NP-Completi)
Appartengono alla classe NP-C tutti i problemi di decisione della classe NP che
sono almeno difficili quanto ogni altro problema in NP, i.e.,
il problema π è NP-C se ∀π’∈NP, è possibile π’∝π
Commento:
I problemi NP-C sono quelli a cui possono essere ridotti con una trasformazione
polinomiale tutti i problemi in NP
Raffaele Pesenti
40
Il problema della soddisfacilità (SAT)
NP-completezza
SAT Problem:
Data un’espressione booleana in forma congiuntiva normale in n variabili, x1,...,
xn, e loro complementi, dire se l’espressione è soddisfacibile
Commenti:
Se fosse possibile risolvere efficientemente un π ∈NP-C allora tutti i problemi
NP sarebbero stati risolti efficientemente.
Per dimostrare P=NP basterebbe provare che un solo problema NP-C è P
Forma congiuntiva normale:
un AND di OR:
K
y1i ∨ ...∨ yhi
∧(
i=1
)
con
y ji ∈{x1,...,xn , x1,...,xn }
dove le espressioni in parentesi sono clausole di cardinalità h
Esempio:
Data l’espressione
NP
NP-C
P
E = (x1 ∨ x2 ∨ x4 ) ∧ (x1 ∨ x2 ) ∧ ( x4 ) ∧ (x1 ∨ x3 ∨ x4 ) ∧ (x2 ∨ x3 ∨ x4 )
co-NP
dire se esiste un’assegnazione VERO-FALSO alle variabili per cui E=VERO.
Raffaele Pesenti
41
42
Appartenenza di altri problemi a NP-C
Il problema della soddisfacilità (SAT)
Appartenenza di altri problemi a NP-C:
Per dimostrare che π∈NP è incluso in NP-C, per transitività è sufficiente
dimostrare che un π‘∈NP-C (ad esempio, SAT) si riduce ad esso, π’∝π.
Teorema di Cook (1971)
Il problema SAT è NP-C se h≥ 3
Esempio:
Il problema dello zaino è in NP-C, infatti si dimostra che
SAT∝KP
quindi poiché ∀π∈NP è t.c.
π∝SAT
e
SAT∝KP
allora
π∝SAT∝KP ⇒ π∝KP
Commenti:
SAT è stato il primo problema NP di cui è stata dimostrata l’appartenenza
ad NP-C
Raffaele Pesenti
Raffaele Pesenti
43
Raffaele Pesenti
44
Primi problemi NP-completi
Vertex Cover
Hamiltonian Circuit
on a Digraph
Problemi di decisione e problemi di ottimizzazione
Hamiltonian Circuit
Feedback Arc Set
Clique
Set Packing
Set Cover
Feedback Node Set
SAT
Partitioning
Clique Cover
01LP
Knapsack
Le definizioni della teoria della complessità fanno riferimento a problemi di
decisione.
Quanto detto si può estendere ai problemi di ottimizzazione
un algoritmo che risolve un problema di decisione può essere utilizzato
all’interno di un algoritmo di tipo polinomiale per risolvere il corrispondente
problema di ottimizzazione.
Max-Cut
Sequencing
3-Dimensional
Matching
3-SAT
Chromatic
Number
Exact Cover
Steiner Tree
Hitting Set
Vedere “A compendium of NP optimization problems” di P. Crescenzi e V. Kann
Raffaele Pesenti
Raffaele Pesenti
45
Problemi di decisione e problemi di ottimizzazione
46
Problemi di decisione e problemi di ottimizzazione
Esempio (cont.):
Esempio:
Sia S l’algoritmo per risolvere CH(k).
L’algoritmo per risolvere TSP può essere costituito dalla seguente procedura
dicotomica:
Problema di decisione (CH(k))
Dato il grafo G, esiste un circuito hamiltoniano di lunghezza <K?
1.
Problema di ottimizzazione (TSP)
Determinare il ciclo hamiltoniano di G di lunghezza minima.
2.
3.
4.
Siano A e B la minima e massima lunghezza degli archi di G ed m il numero di
nodi di G.
Allora m⋅A≤ lunghezza circuto hamiltoniano ≤ m⋅B
Porre k= m(B+A)/2
Usare S per risolvere CH(k).
Porre ∆ = ∆ /2.
Se la risposta di S è si, porre k=k - ∆ altrimenti k=k +∆ ed andare a 2.
Poiché i coefficienti sono interi, al più ci saranno (log(m(B-A))+1 iterazioni.
Raffaele Pesenti
47
Raffaele Pesenti
48
Problemi NP-hard
Problemi NP-hard
Problemi NP-hard:
Un problema π è NP-hard se esiste un problema NP-C che può essere ridotto ad
esso. Il problema π non appartiene necessariamente ai problemi NP, può anche
essere un problema non decisionale, ma, e.g., di ottimizzazione.
Commenti:
Sono NP-hard problemi (anche non NP) almeno difficili quanto ogni problema NP-C.
Se π∈NP-hard per alcune delle sue istanze (le più grandi) non potrà essere trovata la
soluzione ottima in un tempo accettabile per mezzo di algoritmi esatti (enumerazione
esplicita o implicita).
NP-hard
In generale è possibile determinare soluzioni accettabili per π∈NP-hard per mezzo di
algoritmi approssimati (soluzioni sub-ottime)
algoritmi euristici
NP-C
Raffaele Pesenti
49
Problemi NP-C (NP-hard) in senso debole/forte
50
Problemi NP-C (NP-hard) in senso debole
Algoritmo pseudopolinomiale:
algoritmo che risolve un problema NP-C (o NP-hard) in un tempo che sia
polinomiale nella lunghezza dell’input quando i coefficienti sono codificati in
maniera “unaria”.
Problemi NP-C (NP-hard) in senso debole:
problemi in NP-C (NP-hard) che possono essere risolti da algoritmi
pseudopolinomiali
Esempio:
il problema di somma di sottoinsiemi è NP-C infatti si dimostra SAT ∝ KP ∝ SS.
Gli algoritmi più veloci per la soluzione di un istanza SS(V,v,D) hanno
complessità O(Dn), dove 2n=|V|. Tali algoritmi sono esponenziali, dato che il
numero D codificato in binario ha lunghezza logD:O(Dn) = O(2logDn).
Se si fosse accettata però una codifica unaria gli algoritmi considerati
risulterebbero polinomiali.
Nei casi pratici se D è “piccolo” o cresce “lentamente”, e.g., D <100 n, con la
dimensione del problema gli algoritmi pseudopolinomiali hanno tempi di
esecuzione “accettabili”.
Problemi NP-C (NP-hard) in senso forte:
problemi in NP-C (NP-hard) che non siano pseudopolinomiali
Raffaele Pesenti
Raffaele Pesenti
51
Raffaele Pesenti
52
Problemi P-easy
Soluzioni approssimate e algoritmi euristici
Problemi P-easy:
Un problema π è P-easy se esiste un problema in P a cui può essere ridotto. Il
problema π non appartiene necessariamente ai problemi NP, può anche
essere un problema non decisionale, ma, e.g., di ottimizzazione.
I problemi P-easy sono risolvibili polinomialmente richiamando un numero
di volte polinomiale la subroutine che risolve un problema in P.
Raffaele Pesenti
53
Trovare la soluzione ottima di problemi di ottimizzazione NP-hard può
risultare in pratica troppo oneroso, inoltre dato che i parametri del modello
considerato possono essere affetti da errori tale sforzo potrebbe essere anche
poco rilevante.
Nei casi pratici possono essere anche accettate delle soluzioni “buone” che,
sperabilmente, non siano lontane dall’ottimo.
Algoritmo euristico:
algoritmo che risolve un problema di ottimizzazione, utilizzando in genere
regole di buon senso, e fornisce una soluzione ammissibile ma non
necessariamente ottima.
Raffaele Pesenti
Errori
Algoritmi approssimati
Quando è possibile (non sempre lo è) è opportuno dare una stima per eccesso
dell’errore compiuto accettando la soluzione di un algoritmo euristico
rispetto a quella ottima
Errori:
dato un problema (F,c; max), detti zopt= {max c(x) : x∈F} il valore della
soluzione ottima e zA il valore fornito dall’algoritmo euristico A si definiscono
EA= zopt - zA
– errore assoluto:
– errore relativo:
RA= (zopt - zA)/zopt
Raffaele Pesenti
54
55
Algoritmo ε-approssimato:
algoritmo che garantisce un errore relativo non maggiore di ε > 0:
Ra ≤ ε
Schema di approssimazione:
algoritmo che garantisce Ra ≤ ε per qualunque ε > 0
– schema di approssimazione polinomiale: schema di approssimazione con
complessità polinomiale nelle dimensioni dell’istanza
– schema di approssimazione pienamente polinomiale: schema di
approssimazione con complessità polinomiale nelle dimensioni
dell’istanza e in 1/ε
Raffaele Pesenti
56
Algoritmi approssimati
Esempio
Commenti:
• Quando esistono conviene applicare algoritmi approssimati, per i quali è
calcolabile, per definizione, un limite massimo dell’errore compiuto, rispetto
a degli algoritmi euristici basati sul buonsenso, ma per cui non si può fornire
un limite massimo dell’errore.
• La classe dei problemi di ottimizzazione in NP-hard per cui esista un
algoritmo approssimato viene detta APX, la classe dei problemi per cui esiste
uno schema polinomiale viene detta PTAS, la classe dei problemi per cui
esiste uno schema pienamente polinomiale è detta FPTAS:
FPTAS ⊆ PTAS ⊆ APX
se P≠NP le inclusioni sono strette. In particolare i problemi NP-C in senso
forte non sono in FPTAS. Viceversa non è noto se tutti gli NP-C in senso
debole sono in FPTAS.
• Per alcuni problemi non sono noti algoritmi approssimati, per altri il migliore
algoritmo approssimato ha valori di ε grandi (maggiori di 0.5).
Raffaele Pesenti
57
Problema dello zaino KP(U,s,c,B, max)
Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un
volume s(u)∈N e da un valore c(u)∈N, e dato un intero positivo B∈N .
Soluzione: un sottoinsieme U’⊆U tale che il volume occupato sia non
maggiore di B, i.e., Σu∈ U’ s(u) ≤ B
Obiettivo: il peso totale degli elementi scelti sia massimo, i.e., maxΣu∈ U’ c(u)
Algoritmo euristico:
• sia n=|U|, si ordinano per densità decrescente c(u)/s(u) gli elementi in U in
O(nlogn) operazioni;
• si assegnano a U’ i primi m elementi più densi t.c. Σi=1...m s(ui) ≤ B in O(n)
operazioni: za = Σi=1...m c(ui)
Raffaele Pesenti
Esempio
Esempio
Proprietà:
• L’algoritmo euristico è polinomiale: O(nlogn)
• zopt è limitato superiormente
zopt ≤ Σi=1...m c(ui) + (B - Σi=1...m s(ui)) c(um+1)/s(um+1),
il valore del r.h.s. della disequazione è infatti ciò che si otterrebbe riempiendo lo
spazio disponibile B con gli m elementi di densità massima e frazionando
l’(m+1)mo elemento, che è troppo grande per essere incluso completamente
• Errore assoluto:
EA ≤ zopt - zA= (B - Σi=1...m s(ui)) c(um+1)/s(um+1),
• Errore relativo:
RA ≤ (zopt - zA)/zopt ≤ (zopt - zA)/zA =
=(B - Σi=1...m s(ui)) c(um+1)/s(um+1)/Σi=1...m c(ui)
Raffaele Pesenti
58
59
Commenti:
• Per problemi di massimo generalmente 0<RA<1, mentre per problemi di
minimo RA può anche non essere limitato superiormente.
• L’errore relativo RA dell’algoritmo euristico può essere limitato superiormente
solo da 1. Infatti siano dati
– U={u1, u2}
– v(u1) = 1, v(u2) = B
– c(u1) = 1, c(u2) = B-1
allora
– zopt = B-1
– zA = 1
– RA = (B-1-1)/(B-1) = (B-2)/(B-1) < 1
qualunque limite inferiore a 1 può essere violato scegliendo B
sufficientemente grande.
Raffaele Pesenti
60
Metaeuristiche
Tipi di euristiche
Affinché una euristica sia efficace deve sfruttare le caratteristiche strutturali
del problema che deve risolvere, per questo motivo non esiste una euristica
generale.
Esistono però degli approcci generali a cui si può fare riferimento per
sviluppare euristiche specifiche. Tali approcci vengono detti metaeuristiche.
Euristiche costruttive
costruiscono una soluzione del problema
Euristiche di miglioramento
iterativamente a partire da una soluzione del problema cercano di
determinarne una migliore nell’intorno di quella data
Esempi:
metaeuristica costruttive:
– greedy
– di disaggregazione
– lagrangiane
metaeuristica migliorativa:
– ricerca locale
• simulated annealing
• tabù search
Commenti:
in genere le soluzioni fornite dalle euristiche costruttive e quelle utilizzate
dalle euristiche di miglioramento sono soluzioni ammissibili. Per certi
problemi risulta anche estremamente complesso determinare una prima
soluzione ammissibile, allora può convenire rilassare lagrangianamente
alcuni vincoli, i.e., determinare una prima soluzione che soddisfi almeno
parte dei vincoli e penalizzare il fatto che altri vincoli non siano rispettati.
Quindi iterativamente a partire dalla soluzione (non ammissibile ottenuta)
cercano di determinarne una nuova soluzione, nell’intorno di quella data,
che rispetti maggiormente i vincoli
Raffaele Pesenti
61
Raffaele Pesenti
Metaeuristica greedy
62
Euristiche greedy
Metaeuristica greedy
1. inizializzazione:
Si ordinano gli elementi e1, e2,..., em che concorrono a comporre una soluzione in modo non
decrescente(c1≤c2≤... ≤cm) rispetto ai loro costi (oppure in modo non crescente rispetto ai
profitti o comunque in modo monotono rispetto ad una funzione euristica di valutazione).
Si pone F0=∅,
//insieme degli elementi che compongono la soluzione
2. iterazione:
while non si è costruita completamente una soluzione {
si sceglie ek,
Esempi:
• problema dello zaino KP(U,s,c,B, max): si ordinano gli oggetti per densità
decrescente c(u)/s(u) e a partire dal primo si prova ad inserire gli oggetti
nello zaino lasciando in esso quelli che vi possono essere contenuti, e.g.,
max zRL= 12x1 +36 x2 +42 x3 +16 x4 + 25x5
3x1 + 10x2+ 14x3 + 6x4 + 10 x5 ≤ 23
xi ∈{0,1}
(oggetti già ordinati) soluzione greedy x= [1,1,0,1,0]
if Fk-1∪{ek} non viola i vincoli dati Fk=Fk-1∪{ek},
else Fk=Fk-1
}
return
Raffaele Pesenti
/Fk è l’insieme degli elementi che costituiscono la soluzione
63
Raffaele Pesenti
64
Euristiche greedy
Euristiche greedy
Esempi (cont.):
• problema del commesso viaggiatore TSP(G(V,E), c,s,min): euristica detta del
nodo più prossimo (nearest neighbor), si parte da un nodo di riferimento
(tipicamente il magazzino centrale oppure un estremo del arco meno costoso)
ed ad ogni passo si raggiunge al nodo più vicino non ancora visitato.
Esempio (supponendo distanze euclidee):
Esempi (cont.):
Problema di scheduling 1/ri/ΣCi(U,p,r, min): si eseguono immediatamente le
operazioni disponibili, se più operazioni sono disponibili si sceglie secondo
shortest processing time first.
Esempio con tre operazioni:
– J1: ri = 0, pi=10
– J2: r2 = 1, p2=1
– J3: r3 = 4, pi=2
ΣC =10+11+13=34
clienti
Commenti:
non funziona molto bene:
i primi archi sono brevi, gli ultimi molto lunghi
magazzino:
però gli archi molto lunghi sono pochi:
nodo iniziale
può essere una buona base da migliorare
semplice da implementare
soluzioni mediamente del 25% superiori al minimo effettivo
troppo lento per più di 10.000 nodi
Raffaele Pesenti
i
J1
0
65
J2 J3
10 11 13
Raffaele Pesenti
66
Metaeuristiche di disaggregazione
Metaeuristiche di disaggregazione
Commenti:
Metaeuristica disaggregazione
• l’aspetto critico di questo tipo di euristiche è come scomporre il problema
originale in sottoproblemi;
1. inizializzazione:
si decompone il problema originale in sottoproblemi, fissandone una
gerarchia
• purtroppo non esistono regole precise di disaggregazione, ma si devono
comunque scegliere:
2. iterazione:
– sottoproblemi più abbordabili di quello originale, anche se non troppo
semplici (vedi in seguito le considerazioni sulle euristiche lagrangiane)
si determinala la soluzione del/i problema/i gerarchicamente più importante
– sottoproblemi la cui soluzione, una volta imposta ai successivi, non renda
inammissibili questi ultimi
si risolve un sottoproblema alla volta, a partire dal più importante, senza
rimettere in discussione le scelte effettuate per ottenere le soluzioni dei
sottoproblemi precedenti;
Raffaele Pesenti
• queste metaeuristiche sono ad esempio spesso utilizzate per i problemi di
scheduling. Si decide nell’ordine sull’assegnazione delle operazioni alle
macchine, quindi si sequenziano le macchine ed infine si schedula.
67
Raffaele Pesenti
68
Metaeuristiche basate sul rilassamento lagrangiano
Rilassamento lagrangiano
Rilassamento lagrangiano:
nel rilassamento lagrangiano il problema originale P viene formulato come ILP e quindi
semplificato imponendo la soddisfazione di un insieme di vincoli come obiettivo (invece
che come vincolo). In particolare si pesano i vincoli, utilizzando pesi non negativi in caso
di vincoli di disuguaglianza, come nell’esempio seguente.
Esempio:
Dato il seguente problema di zaino bidimensionale:
max z = 25x1 + 20x2 + 15x3 + 12x4 + 10x5
10x1 + 8x2 + 10x3 + 5x4 + 4x5 ≤ 22
7x1 + 5x2 + 5x3 + 3x4 + 7x5 ≤ 14
xi∈{0,1}
e il peso 0.3 per il secondo vincolo, si risolve
max zRLag (0.3)= 25x1 + 20x2 + 15x3 + 12x4 + 10x5 + 0.3(14 - (7x1 + 5x2 + 5x3 + 3x4 + 7x5))
10x1 + 8x2 + 10x3 + 5x4 + 4x5 ≤ 22
xi∈{0,1}
Commenti:
• se la soluzione ottima x* del rilassamento lagrangiano è ammissibile per il
problema P non è detto che x* sia anche ottima per P, poiché le due funzioni
obiettivo non coincidono
• il valore della soluzione ottima zRLag(π ) del problema lagrangiano dipende dai
valori dei pesi π assegnati ai vari vincoli. In ogni caso
zRLag(π ) ≥ z*
la scelta dei pesi ottima π∗ è quella per cui zRLag(π∗) = min{zRLag(π ), π ≥ 0}.
• il problema di determinare i pesi ottimi π∗ è detto problema lagrangiano duale
poiché vale il seguente teorema di dualità debole
min{zRLag(π ), π ≥ 0} ≥ max {z= cx, Ax ≤ b, x ∈ Zn}
• la soluzione zRLag(π ) di un rilassamento lagrangiano è quindi un bound sulla
soluzione ottima z* di P e può essere utilizzata per valutare la qualità di
eventuali soluzioni di P ottenute attraverso euristiche costruttive.
Raffaele Pesenti
69
Raffaele Pesenti
Rilassamento lagrangiano
Relazioni fra i rilassamenti
Altri rilassamenti:
• oltre il lagrangiano possono essere usati altri tipi di rilassamento (eliminazione,
surrogato, decomposizione), ma il rilassamento lagrangiano è il più usato
perché è più facile da trattare matematicamente
Relazioni di dominanza tra i rilassamenti:
• esistono le seguenti relazioni di dominanza tra le soluzioni dei diversi
rilassamenti
z* ≤ zRS(πS*), zRD(πD*) ≤ zRLag(πLag*) ≤ zRE, zRL
• nessuna relazione generale esiste tra zRS(πS*) e zRD(πD*) e tra zRE e zRL
• zRLag(πLag*) = zRL quando il poliedro definito dai vincoli non spostati
all’obiettivo è un poliedro intero
Raffaele Pesenti
70
Difficoltà:
• scelta dei vincoli da rilassare
• calcolo i pesi ottimi
• deduzione di una buona soluzione ammissibile per il problema originale a
partire da quella ottenuta tramite il rilassamento lagrangiano.
71
Raffaele Pesenti
72
Rilassamento lagrangiano
Rilassamento lagrangiano
Scelta i vincoli da rilassare:
• i vincoli che vengono rilassati devono rendere il problema più facile
dell’originale, ma non troppo facile altrimenti i risultati forniti possono
ottenersi più banalmente attraverso il rilassamento continuo. Di solito il
rilassamento lagrangiano viene applicato quando il banale arrotondamento
dei risultati ottenuti tramite rilassamento continuo fallisce;
• di solito ci si riconduce a problemi che, benché NP-hard, siano risolti, almeno
in modo approssimato, con relativa velocità, e.g., zaino, oppure ci si
riconduce a problemi P-easy per cui esistano algoritmi molto più efficienti
del simplesso, e.g., albero ricoprente e varianti;
• non esiste comunque una regola generale nella scelta dei vincoli, per lo stesso
problema può convenire tentare diverse alternative;
• si può usare il rilassamento lagrangiano anche quando il problema ha
dimensioni tali che anche il rilassamento continuo richiederebbe comunque
un tempo eccessivo di soluzione rispetto a quello di un opportuno problema
lagrangiano duale.
Raffaele Pesenti
73
Calcolo i pesi ottimi:
• in generale non è ovvia la scelta ottima dei pesi e viene determinata per
iterazioni successive aumentando i pesi dei vincoli che risultano violati dalla
soluzione ottenuta col rilassamento corrente e diminuendo i pesi dei vincoli
rispettati;
• esiste una procedura generale di aggiornamento dei pesi, detta metodo del
subgradiente, che permette di convergere ai valori ottimi;
• per problemi specifici sono sviluppati metodi da aggiornamento dei pesi ad
hoc. Tali metodologie sono però difficilmente generalizzabili.
Raffaele Pesenti
Rilassamento lagrangiano
Rilassamento lagrangiano
Metodo del subgradiente (continua):
• in pratica si usa spesso
Metodo del subgradiente:
• ad ogni iterazione k i pesi vengono aggiornati come segue
tk= λk(zRLag(πk ) – z*)/|| (b – Axk)||2
πk +1= max{0, πk – tk (b – Axk)}
dove il massimo è eseguito componente per componente, Ax ≤b è l’insieme dei
vincoli rilassati, xk è la soluzione determinata al passo corrente e tk è un
opportuno stepsize;
• condizioni sufficienti di convergenza dei pesi all’ottimo sono
tk→0 ,
Σk tk→∞
per
74
con z* è un lower bound (se problema di massimizzazione) della soluzione ottima
del problema originale e 0< λk ≤2. Il valore λk è posto inizialmente uguale a 2 e
viene progressivamente dimezzato se la soluzione del problema lagrangiano non
migliora entro un dato numero di passi. Anche il valore z* può essere aggiornato se
nelle iterazioni si determinano delle soluzioni ammissibili per il problema originale;
• se si giunge a zRLag(πLag*) = z* si è certi di essere all’ottimo, purtroppo questo non
sempre accade;
k→∞;
• il metodo viene comunque fatto terminare dopo un dato numero di iterazioni.
Raffaele Pesenti
75
Raffaele Pesenti
76
Rilassamento lagrangiano
Metaeuristica di ricerca locale
Deduzione di una buona soluzione ammissibile:
dato un problema P, con soluzioni ammissibili F, e la soluzione ottima (o sua
approssimazione) xLag del problema duale lagrangiano associato, in generale:
• xLag ∉ F e non esiste un criterio universale per determinare una buona soluzione
in F a partire da xLag;
• nelle ipotesi che F ⊆{0,1}n, che 0 ∈ F e che x ∈F implica ∀y t.c. y ≤ x , y ∈ F,
allora a partire da xLag si può dedurre una soluzione in F modificando
iterativamente in modo greedy da 1 a 0 i valori di alcune componenti di xLag;
• i costi ridotti calcolati nel problema duale lagrangiano possono guidare la tale
procedura greedy, in quanto sono una stima dei costi/profitti marginali, i.e.,
della diminuzione del valore assunto dalla funzione obiettivo quando avviene
una variazione unitaria delle corrispondenti componenti della soluzione ottima;
• ragionamento complementare si può fare nelle ipotesi opposte, i.e., 1 ∈ F e che
x ∈F implica ∀y t.c. y ≥ x , y ∈ F, che per esempio valgono nel caso del set
covering problem.
Raffaele Pesenti
77
Metaeuristica RicercaLocale
1. inizializzazione:
si genera una soluzione iniziale ammissibile x0
2. iterazione:
do {
xk+1 = f(xk)
} while xk+1 ≠ xk
x* =
//dove f(xk) è una funzione che data una soluzione ammissibile
//ne genera una nuova ammissibile non peggiore
//esce dal loop quando la condizione è falsa
xk
return(x*)
//x* è un ottimo locale
Raffaele Pesenti
78
Metaeuristica di ricerca locale
Metaeuristica di ricerca locale
Commenti:
• il simplesso è un algoritmo di ricerca locale, data la linearità dei problemi a cui si
applica l’ottimo locale a cui giunge è anche ottimo globale;
• in generale si determina solo un ottimo locale, se, come spesso avviene nei problemi
combinatori, vi sono molti ottimi locali, applicando semplicemente una ricerca locale
è molto probabile che venga determinato un ottimo locale lontano dall’ottimo globale;
• la funzione f(xk) deve determinare la soluzione successiva rapidamente, quindi in
genere si limita a valutare le soluzioni ammissibili appartenenti all’intorno della
soluzione corrente xk;
• un intorno di x è una funzione che dato x restituisce un insieme di soluzioni
ammissibili I(x) t.c.
– x ∈ I(x) i.e., x appartiene al proprio intorno
– ∀x, y ∈ S, ∃{x0, ..., xr} t.c. x= x0, y= xr, e xs∈ I(xs-1) s=1,...,r
i.e., è possibile andare da x a y passando per punti che appartengono uno
all’intorno dell’altro.
Commenti:
• f(xk) restituisce la prima soluzione migliore che si riesce a determinare. Infatti non
conviene esplorare tutto I(xk) per determinare la migliore soluzione dell’intorno, tale
ricerca, dovendo essere iterata più volte, potrebbe essere troppo gravosa e
sperimentalmente non risulta nemmeno conveniente in termini della qualità di x*
ottenuta. Ovviamente nelle iterazioni finali però l’esplorazione di tutto l’intorno sarà
comunque necessario;
• conviene esprimere la complessità di un algoritmo di ricerca locale in termini
dell’onere computazionale necessario per valutare la funzione f(xk) ad ogni iterazione,
infatti nel caso peggiore il numero di iterazioni è comunque esponenziale (vedi, e.g., il
simplesso);
• maggiore è la dimensione dell’intorno maggiore è la probabilità di giungere ad una
soluzione x* di buona qualità, cresce però l’onere computazionale. Infatti l’onere
computazionale necessario per valutare la funzione f(xk) è ovviamente funzione delle
“dimensioni” di I(xk) e cresce in modo esponenziale (specialmente quando la
determinazione di xk+1 avviene per enumerazione). Al limite, infatti, l’intorno può
comprendere tutte le soluzioni ammissibili. Bisogna quindi cercare un punto di
equilibrio tra qualità della soluzione e tempi di calcolo.
Raffaele Pesenti
79
Raffaele Pesenti
80
Metaeuristica di ricerca locale
Commenti:
• in generale non conviene particolarmente partire da una soluzione x0 buona prima di
applicare un euristica di ricerca locale, è infatti probabile di rimanere rapidamente
bloccati in un minimo locale;
• conviene iterare più volte l’euristica a partire da soluzioni possibilmente molto diverse
e scegliere quindi il migliore degli ottimi locali ottenuti;
• è comunque sempre opportuno, dopo avere ottenuto una soluzione ammissibile
attraverso un’euristica costruttiva, applicare un’euristica di ricerca locale per
verificare se la soluzione ottenuta non può essere banalmente migliorata;
• a volte prima di applicare una euristica di ricerca locale conviene rilassare
lagrangianamente alcuni vincoli del problema, limitandosi a penalizzare il mancato
rispetto di alcune condizioni piuttosto che ad imporre le stesse. In questo modo risulta
più semplice determinare una sequenza di soluzioni ammissibili per il problema
rilassato mentre si cerca di giungere a una soluzione che soddisfi tutti i vincoli
originari scegliendo ad ogni passo le soluzioni che localmente minimizzano la
violazione dei vincoli. Questo approccio viene applicato quando, e.g., nel set
partioning, già determinare l’esistenza di una soluzione ammissibile è NP-completo.
Raffaele Pesenti
81
Ricerca locale
Esempi:
problema del commesso viaggiatore TSP(G(V,E), c,s,min): euristica detta 2–
opt. Concetto base: ad ogni passo si eliminano due rami, si ricongiungono i
due semicircuiti.
Algoritmo 2-opt:
si parte da un circuito hamiltoniano,
si eseguono tutti gli scambi 2–opt
(fra tutte le coppie di rami del circuito)
che riducono la lunghezza.
Efficacia: 8% più del minimo in media
Raffaele Pesenti
82
archi da rimuovere
2-opt
Circuito iniziale
archi da rimuovere
Circuito passo 1
Semicircuiti
nuovi archi
Circuito passo 1
Circuito passo 2
nuovi archi
notare l’inversione del verso di
percorrenza di un semicircuito
Raffaele Pesenti
83
Raffaele Pesenti
84
archi da rimuovere
Ricerca locale
Esempi (cont.):
problema del commesso viaggiatore TSP(G(V,E), c,s,min): euristica detta 3–
opt. Concetto base: ad ogni passo si eliminano tre rami, si ricongiungono i tre
semicircuiti.Efficacia: 4% più del minimo in media.
Si generalizza a k-opt.
archi da rimuovere
Circuito passo 2
nuovi archi
Circuito iniziale
Circuito passo 3
ecc..
Nuovo circuito
Raffaele Pesenti
85
Ricerca locale
Scheduling iniziale
0
Scheduling dopo scambio J1 con J2
J2
J1
0 1 2
Raffaele Pesenti
86
Altre strategie di esplorazione dell’intorno
Esempi (cont.):
Problema di scheduling 1/ri/ΣCi(U,p,r, min): ad ogni passo si scambiano di
posto deu operazioni (anche non necessariamente adiacenti)
J1
Raffaele Pesenti
ΣCi =10+11+13=34
J2 J3
10 11 13
J3
ΣCi =2+12+14=28
• Utilizzando una funzione f(xk) che determina una soluzione successiva non
peggiore (o addirittura che determina la soluzione successiva ottima tra
quelle appartenenti all’intorno) in generale si rimane intrappolati in un ottimo
locale.
• Può allora convenire usare una funzione g(xk) che a volte determina una
soluzione successiva peggiore della precedente nella speranza di ‘saltare’
fuori dall’ottimo locale. Su questa filosofia si basano, ad esempio, due
metaeuristiche di ricerca locale:
– tabu search
– simulated annealing
12 14
87
Raffaele Pesenti
88
Metaeuristica tabù search
Metaeuristica tabù search
Metaeuristica TabuSearch
1. inizializzazione:
si genera una soluzione iniziale ammissibile x0, si pone TabuList = nil, k = 0;
2. iterazione:
do {
Tabu search:
la tabu search è una metaeuristica di ricerca locale che permette passi in cui
avvengono dei peggioramenti con criteri deterministici.
Si definiscono dei criteri di accettazione della soluzione generata a soglia
basati non necessariamente solo sul valore della funzione obiettivo.
[y1, y2, ..., yn] =g(xk)
y = h((y1, y2, ..., yn), TabuList,
Poiché si accettano anche soluzioni che inducono peggioramenti della
funzione obiettivo, per evitare di ritornare su soluzioni già visitate, ad ogni
passo viene aggiornata una lista di operazioni vietate (tabù) che
riporterebbero su soluzioni già visitate.
Raffaele Pesenti
else { xk+1 = y; cambiamento = TRUE, aggiorna(TabuList) }
k= k+1
} while (cambiamento and k < M) //rimane nel loop se si è verificato un cambiamento di
//soluzione e se non si è superato un limite massimo di mosse
return
//viene restituita la migliore soluzione xk ottenuta
89
Raffaele Pesenti
90
Metaeuristica tabù search
function h((y1, y2, ..., yn), TabuList, xk)
1. inizializzazione:
z* = ∞, i* = 0, y0= nil;
2. iterazione:
for (i = 1; i <= n; i++) {
if ((yi not in TabuList) or (f(yi) == TRUE) //valuta se yi non è tabù o soddisfa delle “aspirazioni”
if (cyi < z*) {z* = cyi, i* = i}
//valuta se yi è migliore della soluzione yi* corrente
}
Raffaele Pesenti
//seleziona la migliore alternativa se esiste
if (y = nil) {cambiamento = FALSE}
Metaeuristica tabù search
return (yi*)
//genera un insieme di nuove soluzioni alternative
xk)
//viene restituita la migliore soluzione yi* ottenuta
91
Commenti:
• Sono ovviamente critiche per algoritmi tabù search la definizione delle
funzioni:
– g(xk) che determina un insieme di nuove soluzioni nell’intorno di xk, nei
metodi più semplici tale insieme è generato in modo casuale, nei metodi
più complessi tenendo conto delle statistiche delle soluzioni già visitate e
delle caratteristiche strutturali del problema;
– h((y1, y2, ..., yn), TabuList, xk) che ad ogni iterazione deve determinare la
nuova migliore soluzione;
– f(y) che descrive i criteri di aspirazione ovvero l’insieme di quelle
condizioni che permettono di violare i tabù;
• nello pseudocodice presentato per semplicità concettuale le funzioni g(.) e
h(.) sono presentate separatamente ma in molti algoritmi sono fuse assieme;
• la tabù search viene applicata con discreto successo anche quando alcuni dei
vincoli del problema originale vengono rilassati lagrangianamente. In questo
caso i criteri di aspirazione possono prevedere la soddisfazione dei vincoli.
Raffaele Pesenti
92
Metaeuristica tabù search
Tabù search
Commenti (continuazione):
• la TabuList ha una lunghezza massima prefissata (o anche definibile
dinamicamente), una volta raggiunto il limite massimo di mosse tabù (in
generale non più di una decina) un nuovo tabù può essere immesso nella lista
solo dopo averne eliminato uno già presente;
• gli algoritmi più avanzati tengono contemporaneamente conto di più
TabuList contemporaneamente. Possono convivere liste che che descrivono
una memoria a breve termine e liste che descrivono una memoria a lungo
termine (che cioè impediscono la generazione di determinate soluzioni per un
più lungo periodo). La memoria a breve termine favorisce una ricerca
intensiva di un intorno di soluzioni, la memoria a lungo termine la
diversificazione delle soluzioni generate, in questo caso le TabuList possono
essere usate anche dalla funzione g(xk). Possono anche convivere liste che
tengono conto di aspetti diversi del problema (e.g., in un problema di
scheduling l’assegnazione e la sequenziazione delle operazioni);
• definire i criteri di aggiornamento delle TabuList è un altro degli aspetti
critici delle euristiche tabù search.
Esempio*:
Problema - minimo albero ricoprente con vincoli aggiuntivi (side constraints):
data la rete in figura determinare l’albero ricoprente minimo che soddisfi le
seguenti condizioni aggiuntive:
– solo uno tra gli archi a, b, f può essere presente
– l’arco a può essere presente solo se è presente anche l’arco c
Raffaele Pesenti
Raffaele Pesenti
93
a6
c 18
b9
d2
e0
g 12
f8
*tratto dal lavoro di Glover (vedi bibliografia)
Approccio basato su tabù search
• la scelta dell’intorno è basata su scambio di archi
• il tabù impedisce di scambiare gli due
ultimi archi inseriti
• il criterio di aspirazione permette di violare il
tabù se si ottiene una soluzione migliore di quella
correntemente ottima
• i vincoli possono essere violati pagando una
penalità di 50 per ogni violazione
94
Tabù search
Tabù search
archi dell’albero
a6
b9
d2
e0
g 12
f8
a6
d2
f8
Raffaele Pesenti
c 18
b9
arco escluso dall’albero
tramite scambio
a6
archi tabù dell’albero
d2
passo 0: soluzione generata con algoritmo di Prim
trascurando i vincoli.
Soluzione correntemente ottima,
ma non ammissibile z = 116
c 18
e0
g 12
b9
passo 1: scambio di a con c.
Ottimo locale.
Soluzione correntemente ottima,
z = 28
d2
f8
95
e0
g 12
f8
a6
Raffaele Pesenti
c 18
b9
c 18
e0
g 12
passo 2: scambio di f con g.
Scambio che induce un peggioramento,
inevitabile data l’ottimalità locale
della soluzione
al passo precedente, z = 32
passo 3: scambio di c con b.
Scambio che viola un tabù, ma che viene
effettuato in quanto induce una soluzione
migliore di quella correntemente ottima.
Nuova soluzione correntemente ottima,
z = 23.
La soluzione corrente è l’ottimo assoluto.
96
Metaeuristica simulated annealing
Metaeuristica simulated annealing
Metaeuristica SimulatedAnnealing
Simulated annealing:
• la simulated annealing è un algoritmo per la soluzione di problemi
combinatori NP-hard basato sulla metafora della annichilazione dei metalli:
si raggiunge uno stato di minima energia non troppo velocemente in modo da
evitare che si raggiunga una struttura cristallina finale di energia non minima;
• la simulated annealing è una metaeuristica di ricerca locale che permette
passi in cui avvengono dei peggioramenti con probabilità che decresce nel
tempo;
• il tasso di decremento è detto cooling schedule.
Raffaele Pesenti
97
1. inizializzazione:
si genera una soluzione iniziale ammissibile x0 ed una temperatura iniziale T0
2. iterazione:
do {
cambiamento = FALSE
for (i = 0,( i < N) && (cambiamento = FALSE), i++) {
y =g(xk)
∆ = cy - cxk
//valutazione della soluzione y generata
if (∆ <0) {xk+1 = y; cambiamento = TRUE}
else (con probabilità exp(-∆ /T k)){ xk+1 = y; cambiamento = TRUE}
}
Tk+1 = h(Tk)
} while cambiamento
//esce dal loop quando la condizione è falsa
return
//viene restituita la migliore soluzione xk ottenuta
Raffaele Pesenti
Metaeuristica simulated annealing
Metaeuristica simulated annealing
Commenti:
• la funzione g(xk) determina una nuova soluzione ammissibile nell’intorno di
x k;
• la funzione h(Tk) definisce la politica di raffreddamento cooling schedule ;
• se g(xk) sceglie con probabilità uniforme un qualunque elemento dell’intorno
di xk, se Tk→0 , se tutte le soluzioni sono raggiungibili a partire da qualunque
zltra soluzione e se o gli intorni hanno tutti la stessa grandezza o la
probabilità di scegliere y dato xk è uguale a quella di scegliere xk dato y,
allora quando k→∞ la soluzione più probabile a cui converge l’algoritmo è
quella ottima.
• la difficoltà risiede nel fatto che l’algoritmo converge tanto più lentamente
quanto più Tk tende a 0, d’altra parte se Tk non tende a 0, la soluzione ottima
non è la più probabile. E’ quindi critica la scelta del cooling schedulem,
l’algoritmo converge all’ottimo in probabilità solo in tempi esponenziali.
• di solito risultano buoni compromessi h(Tk) = 1/log(k) oppure h(Tk) = aTk
con 0<a<1.
Raffaele Pesenti
98
99
Commenti:
• Sia la simulated annealing che la tabu search appaiono promettenti per la
risoluzione euristica di problemi difficili quali quelli di scheduling le cui
istanze reali attualmente appaiono di dimensione troppo grande per essere
affrontate con gli algoritmi esatti disponibili;
• in generale però la simulated annealing converge lentamente ed è applicata
solo quando altre euristiche falliscono.
Raffaele Pesenti
100
Altre Metaeuristiche
Bibliografia
Algoritmi genetici, Ant colonies, ...
gli algoritmi basati su fenomeni naturali quali la selezione naturale,
l’organizzazione di colonie di formiche, ecc... hanno ottenuto qualche
successo su problemi specifici, ma non sembrano in generale essere superiori
a quelli basati su tabù search ed in seconda istanza sulla simulated annealing.
Reti neurali
le reti neurali hanno indubbi successi quando applicate a problemi di
riconoscimento o di ottimizzazione e controllo continuo. Viceversa i risultati
ottenuti della loro applicazione al campo dei problemi combinatori sono, allo
stato attuale, non ancora competitivi in termini di onere computazionale e di
qualità con quelli ottenuti con altre tecniche.
Raffaele Pesenti
101
• P. Serafini, Ottimizzazione, Franco Angeli, Milano, I, 2000
• F. Glover, “Tabù Search: a Tutorial”, Interfaces,20:4, 1990, pp. 74-94
• M. L. Fisher, “An Application Oriented Guide to Lagrangian Relaxation”,
Interfaces,15:2, 1985, pp. 10-21
• K. A. Smith, “Neural Networks for Combinatorial Optimization: A Review
of More Than a Decade of Research”, INFORMS Journal on Computing,
11:1, 1999, pp. 15-34.
Raffaele Pesenti
Esercizi
Esercizi
Es. 1)
Es. 2)
Il problema Pn//Cmax di minimizzazione del massimo tra i tempi di
completamento di operazioni indipendenti che possono essere eseguite su n
macchine parallele è NP-hard. Determinare conclusioni possono essere tratte
sulla complessità dei problemi 1//Cmax, n/prec/Cmax, n/chain/Cmax e BP
sapendo che valgono le seguenti relazioni:
1//Cmax ∝ n//Cmax
n//Cmax ∝ n/prec/Cmax
BP ∝ n//Cmax
n//Cmax ∝ BP
n/chain/C ∝ n/prec/Cmax
Indicare, motivando la risposta, a che classe appartiene il problema
corrispondente alla domanda: esiste un cigno bianco?. Indicare anche la
classe del co-problema.
Raffaele Pesenti
102
103
Raffaele Pesenti
104
Esercizi
Esercizi
Es. 3)
Dato il problema:
Problema dello pallet loading PalL(U,l,h,c,L,H, max)
Istanza: dato un insieme finito U, dove ogni (scatola) u∈U è caratterizzato da un
una superficie rettangolare di lati l(u)∈N e h(u)∈N, e da un valore c(u)∈N, e data
una struttura rettangolare (pallet) di lati L ,H∈N.
Soluzione: un sottoinsieme U’⊆U tale che i suoi elementi occupino una
superficie non maggiore di L×H e non avvengano sovrapposizioni.
Obiettivo: il valore totale degli elementi scelti sia massimo, i.e., maxΣu∈ U’ c(u)
Provare che è NP-hard e dedurre le conseguenze operative che questo comporta
sugli imballaggi secondari (scatole) dei prodotti.
Raffaele Pesenti
105
Es. 4)
Una catena di supermercati ha un grosso magazzino da cui rifornisce tutti i
supermercati della città. Ogni sera il magazzino centrale riceve la lista ordini
dei prodotti necessari da ogni supermercato e carica uno o più roll (appositi
carrelli verticali) con i beni richiesti. Per caricare ogni roll (e viceversa per
scaricarlo) si deve risolvere un problema di circuito hamiltoniano, dove i nodi
da visitare sono i punti dove è dislocata la merce richiesta nel magazzino
centrale (e nei supermercati). Trarre delle conclusioni sul modo in cui devono
essere elencati prodotti nella lista ordini e su come devono essere disposti i
prodotti nel magazzino centrale e nei supermercati in modo che il problema
sia facilmente risolvibile.
Raffaele Pesenti
Esercizi
Esercizi
Es. 5)
Dato un insieme di 12 elementi dai seguenti valori
{3,4,4,5,6,6,7,8,9,10,11,13} suddividerlo in due sottoinsiemi di uguale
cardinalità e valore complessivo. Formalizzare i pseudocodice l’algoritmo
utilizzato e determinarne la complessità computazionale.
Es. 6)
Risolvere il problema del punto precedente con il seguente insieme di valori
{38,10,59,89,88,95,1,40,86,13,24,4,3,16,21,1} usando l’algoritmo
sviluppato.
Raffaele Pesenti
106
107
Es. 7)
Dato il problema:
Problema di Bin Packing BP(U,s,B,n)
Istanza: dato un insieme finito U, dove ogni u∈U è caratterizzato da un volume
s(u)∈N, e dato un intero positivo n di contenitori (bin) di volume B∈N .
Soluzione: una partizione di U in sottoinsiemi U(i), per i =1,..., n, tale che il
volume occupato in ogni contenitore i non sia maggiore di B, i.e., Σu∈ U(i) s(u) ≤ B.
Provare che il problema di bin packing è NP-Completo in quanto si può ridurre ad
esso il problema dello della somma dei sottoinsiemi (che rimane in NP-C anche
quando D = Σv∈ V a(u)/2) .
Suggerire delle euristiche di soluzione.
Raffaele Pesenti
108
Esercizi
Esercizi
Es. 8)
Il problema 1//ΣC di minimizzazione del tempo medio di completamento di m
operazioni indipendenti e immediatamente disponibili che devono essere
eseguite su una macchina è in P. In particolare si risolve all’ottimo eseguendo
prima le operazioni di durata minore: politica SPT (shortest processing time
first).
Provare che tale politica è ottima, dimostrando che dato un qualunque
ordinamento con le operazioni schedulate in maniera diversa da SPT se ne può
ottenere uno non peggiore invertendo la posizione di due operazioni
successive.
Il problema 1/ri/ΣC, identico al precedente ma dove ogni operazione non è
disponibile immediatamente ma solo a partire dal tempo ri , è invece NP-hard
Es. 8) (cont.)
Definire un’euristica di ricerca locale (ad ogni passo vengono scambiate di
posizione due operazioni) che risolva il problema 1/ri/ΣC determinando un
minimo locale. Stabilire la complessità computazionale di tale euristica e
indicare una soluzione iniziale da cui conviene partire.
operazione
durata tempo di rilascio
Applicare l’euristica ai seguenti dati:
Raffaele Pesenti
Raffaele Pesenti
109
1
2
3
4
5
6
7
8
9
1
10
Soluzioni ad alcune domande
0
5
40
120
100
150
100
200
60
30
30
110
Soluzioni ad alcune domande
Es. 2)
Su 1//Cmax non si può concludere (in realtà è in P)
Su n/chain/Cmax non si può concludere (in realtà è in NP-hard)
Su n/prec/Cmax e BP si può concludere che sono NP-hard
Es. 3)
Il problema dello zaino si riduce banalmente a quello del pallet loading (basta
porre h(u) = 1, per ogni u). Conviene avere imballaggi che siano
sottomultipli del pallet. Per comprendere l’importanza del problema si veda
sito http://www.federlegno.it/ASSO-PALLET.htm
Es. 4)
la disposizione delle merci in tutti i supermercati deve essere
topologicamente identica e simmetrica a quella del magazzino centrale.
(Domanda aggiuntiva: come si possono inoltre sfruttare al meglio gli spazi
disponibili, senza lasciare vuoti, che costano e colpiscono negativamente la
clientela?).
Raffaele Pesenti
38
10
59
89
88
95
1
40
86
13
24
111
Es. 5)
{4,6,6,7,9,11}, {3,4,5,8,10,13}
Es. 7)
Pensare le euristiche cercando di formalizzare il criterio con cui si carica un
portabagagli di un’automobile quando si hanno tante valige di differente
dimensione.
Raffaele Pesenti
112