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