Constraint Programming

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Constraint Programming"

Transcript

1 4 Constraint Programming introduzione Vittorio Maniezzo Università di Bologna 1 Ringraziamenti Questi lucidi derivano anche da adattamenti personali di materiale prodotto (fornitomi o reso scaricabile) da: R. Bartak, B. Hnich, M. Milano, B. Moa, M. Trick, R. Salvagnin e da wikipedia. Vittorio Maniezzo Università di Bologna 2 1

2 Soddisfacimento di vincoli Un problema di soddisfacimento di vincoli (Constraint Satisfaction Problem CSP) può essere definito come CSP = <X, D, C>, dove: X è un insieme di variabili, X = {x 1, x 2,, x n } D è un dominio (spesso discreto) per ogni variabile, D = {D 1, D 2,, D n } C è un insieme di vincoli su queste variabili: vincolo: una relazione tra variabili che definisce un sottoinsieme del prodotto cartesiano dei domini D 1 xd 2 x...xd n (in pratica però un vincolo viene espresso in altri modi equivalenti, molto più compatti, come funzioni o disuguaglianze). Soluzione di un problema CSP: un assegnamento di valori alle variabili consistente con i vincoli Soddisfacibilità: una collezione di vincoli è soddisfacibile (consistente) se esiste (almeno) una soluzione Vittorio Maniezzo Università di Bologna 3 Esempio: map coloring Trovare un assegnamento di colori alle variabili consistente con i vincoli variabili x 1, x 2,x 3, x 4, x 5, x 6 : zone domini D 1, D 2,D 3, D 4, D 5, D 6 = [giallo, rosso, verde, viola, blu] vincoli : near(i, j) x i x j Vittorio Maniezzo Università di Bologna 4 2

3 Constraint graph Un problema di soddisfacimento di vincoli si può rappresentare con un grafo detto constraint graph: Variabili nodi Vincoli (iper)-archi [giallo, rosso, verde, blu, viola] x 1 [giallo, rosso, verde, blu, viola] x 2 x 3 [giallo, rosso, verde, blu, viola] [giallo, rosso, verde, blu, viola] x 4 x 5 x 6 [giallo, rosso, verde, blu, viola] [giallo, rosso, verde, blu, viola] Soluzione ammissibile: x 1 = giallo x 2 = rosso x 3 = verde x 4 = blu x 5 = viola x 6 = giallo Vittorio Maniezzo Università di Bologna 5 Ottimizzazione con vincoli Un problema di ottimizzazione con vincoli (Constraint Optimization Problem COP) è definito come: COP = <X, D, C, f> E un CSP con una funzione obiettivo: f(x 1, x 2,, x n ) Soluzione di un problema COP: un assegnamento di valori alle variabili compatibile con i vincoli del problema che ottimizza (minimizza / massimizza) la funzione obiettivo Vittorio Maniezzo Università di Bologna 6 3

4 Esempio: Map Coloring Trovare un assegnamento di colori alle zone tale che due zone adiacenti sono colorate con colori diversi, e minimizzando il numero di colori usati: variabili x 1, x 2,x 3, x 4, x 5, x 6 : zone domini D 1, D 2,D 3, D 4, D 5, D 6 = [giallo, rosso, verde, viola, blu] vincoli : near(i, j) x i x j Anche questo problema può essere rappresentato sullo stesso grafo dei vincoli usato nella versione di soddisfacibilità. Vittorio Maniezzo Università di Bologna 7 Prolog e CSP Il prolog può essere utilizzato per risolvere problemi CSP / COP. E strutturalmente in grado di rappresentare i vincoli. Nella soluzione si definiranno: Constraint store collezione dei vincoli del problema Meccanismo di propagazione dei vincoli meccanismo di inferenza che genera nuovi vincoli a partire da quelli dati Vittorio Maniezzo Università di Bologna 8 4

5 Esempio Map Coloring Constraint store vincoli unari: i [1,5], x i {giallo, rosso, verde, viola, blu} vincoli binari: i,j [1,5], near(i, j) x i x j Propagazione dei vincoli Modifica del constraint store (nuovo vincolo) (near(i, j) x i x j ) Ʌ near(1,2) implica x 1 x 2 Modifica del constraint store (riduzione di un dominio) (x 1 = rosso) Ʌ (x 1 x 2 ) Ʌ (x 2 {giallo, rosso, verde, viola, blu} ) implica x 2 {giallo, verde, viola, blu} Vittorio Maniezzo Università di Bologna 9 Constraint Logic Programming Paradigma di programmazione, estensione della Programmazione Logica [Jaffar e Lassez, 1998] è uno schema per produrre nuovi linguaggi durante la risoluzione, alcuni elementi speciali detti vincoli (constraint) non vengono risolti, ma vengono accumulati in un area di memoria esterna (constraint store) ed elaborati da un risolutore esterno (constraint solver). Esistono diversi risolutori, basati su tecnologie diverse. Ciascuno di questi dà luogo ad un linguaggio della classe CLP: CLP(FD): sui domini finiti, basato su consistenza CLP(R): sui reali, basato sul simplesso CLP(Bool): sui booleani, basato su BDD CLP(Q): sui razionali. Vittorio Maniezzo Università di Bologna 17 5

6 Es., CLP(FD) Esistono diversi linguaggi CLP(FD): CHIP, SICStus, ECLiPSe, B-Prolog, La sintassi è simile ma non identica, ciascuno ha caratteristiche distintive In generale si hanno Un metodo per definire il dominio delle variabili, es. ECLIPSE: X:: [1..10, ] SICStus: X in (1..10) \/ (13..15) MiniZinc: var 0..n-1: X Una sintassi che contraddistingue i vincoli dagli altri predicati (ECLIPSE e SICStus usano il #): #> #>= #< #<= #= ## sono vincoli, MiniZinc la parola chiave constraint. Vittorio Maniezzo Università di Bologna 18 Programmazione logica a vincoli In un sistema CLP i domini sono definiti e interpretati già nel linguaggio. Es. CLP(R): dominio dei numeri reali, vincolo X > e 7.2 sono numeri reali, non generici simboli > è la relazione d ordine sui reali, non un generico predicato o un test + è la somma sui reali e non un generico funtore Questo permette di esprimere e trattare relazioni sul dominio come vincoli CLP(R): X > Y + 5 Vittorio Maniezzo Università di Bologna 19 6

7 Consistenza Un insieme di vincoli è consistente (soddisfacibile) se ammette almeno una soluzione Risolutori completi sono in grado di decidere se un insieme di vincoli è soddisfacibile (Es. risolutori sui reali) Risolutori incompleti sono in grado di individuare alcune forme di inconsistenza, ma non di decidere se un insieme di vincoli è soddisfacibile. (Es., risolutori su domini finiti) L inconsistenza è identificata quando il dominio di una variabile diventa vuoto. Vittorio Maniezzo Università di Bologna 20 Consistenza Inconsistenza: dominio di una variabile vuoto, non esistono valori che possono essere assegnati alla variabile Se una variabile ha dominio vuoto, sicuramente l insieme di vincoli è insoddisfacibile Se l insieme di vincoli è insoddisfacibile non è detto che una variabile abbia dominio vuoto. Se riuscissimo a trovare tutti i valori inconsistenti e a rimuoverli dal dominio delle variabili, avremmo un risolutore completo. Il problema di trovare tutti i valori inconsistenti ha la stessa complessità del problema originale. Vittorio Maniezzo Università di Bologna 21 7

8 Consistenza Nell analisi della consistenza si fa spesso riferimento ad una rappresentazione su grafo del problema CSP. Nel modello: Si rappresentano esplicitamente solo vincoli unari e binari nodi = variabili archi = vincoli A>5 Si identificano: node consistency (NC) arc consistency (AC) path consistency (PC) (strong) k-consistency A B B A B=C A<C C Vittorio Maniezzo Università di Bologna 22 Metodi di soluzione: inferenza e ricerca I principi di base per la risoluzione di CSP si dividono in due categorie: inferenza e ricerca. Inferenza: porta alla luce informazioni nascoste, che permettono di dedurre vincoli validi solo impliciti nella formulazione di partenza. Questi nuovi vincoli possono rivelare che alcune regioni dello spazio delle soluzioni non contengono soluzioni ammissibili e quindi possono migliorare le prestazioni di un algoritmo di ricerca. Ricerca: la risoluzione di un CSP non avviene mediante ricerca esaustiva. Non si generano tutte le possibili soluzioni e poi si controlla quali siano ammissibili (schema banale chiamato generate-and-test, GT). GT è inaccettabile, il numero di soluzioni da testare è esponenziale. Si usano tecniche che migliorano GT. Vittorio Maniezzo Università di Bologna 23 8

9 Inferenza Tecnica di inferenza: propagazione dei vincoli (constraint propagation). Rimuove dal dominio delle variabili i valori che non possono essere utilizzati in una soluzione ammissibile. Esempio: problema con variabili x1 e x2, entrambe con valori interi in {1,, 10} e con il vincolo x1 - x2 > 5. La propagazione può rimuovere i valori 5 e 6 dai domini di entrambe le variabili. Quasi tutte le tecniche di propagazione non sono metodi di inferenza completi, non riescono a rimuovere tutti i valori inutili, e pertanto non possono essere usate da sole per risolvere un CSP. Lo schema generale consiste quindi nell utilizzare un algoritmo di ricerca efficiente, effettuando la propagazione dei vincoli ad ogni nodo dell'albero decisionale. L'applicazione di tecniche di propagazione può ridurre drasticamente la dimensione dell'albero di ricerca. Vittorio Maniezzo Università di Bologna 24 Ricerca: Backtracking Miglioramento di GT: ricerca basata su backtracking (BT, è la stessa dei B&B). Un assegnamento parziale viene esteso scegliendo dei valori per le variabili fino a che non si raggiunge la soluzione o un conflitto (la soluzione parziale corrente non può più essere estesa). Se conflitto, l'ultimo assegnamento viene annullato e se ne prova un altro. Questo viene fatto un modo sistematico, in modo da enumerare (implicitamente) tutte le possibili soluzioni. L'algoritmo BT è un miglioramento di GT in quanto controlla ad ogni assegnamento che i vincoli possano essere soddisfatti, senza aspettare di avere un assegnamento completo per controllare. La ricerca BT viene spesso rappresentata mediante un albero di ricerca, dove ad ogni nodo è associata una soluzione parziale. La complessità nel caso peggiore è comunque esponenziale. Vittorio Maniezzo Università di Bologna 25 9

10 GT e BT: Esempio (senza propagazione) Problema: var 1..2: X,Y,Z constraint X = Y, X!= Z, Y > Z generate & test backtracking X Y Z test fail fail fail fail fail fail passed X Y Z test fail 2 fail 2 fail 2 1 fail 2 1 passed Vittorio Maniezzo Università di Bologna 26 BT: svantaggi L'algoritmo standard BT ha comunque i seguenti svantaggi: thrashing, può generare ripetutamente assegnamenti parziali da scartare per uno stesso motivo lavoro ridondante, assegnamenti di variabili che risultano incompatibili non vengono memorizzati un conflitto viene individuato solo quanto capita, e non prima Nel corso degli anni sono state proposte varie migliorie dell'algoritmo BT per mitigare tali svantaggi, molte basate su tecniche di inferenza Vittorio Maniezzo Università di Bologna 27 10

11 Inconsistenze Ricerca sistematica (GT o BT) => inefficiente Consistenza sola => incompleta (insufficiente) Si utilizza una combinazione dei due approcci Metodi: look back (recupero dalle incosistenze) look ahead (prevenzione delle incosistenze) look back look ahead Direzione dell esplorazione Vittorio Maniezzo Università di Bologna 28 Look Back Solitamente implementato con backtracking intelligente, in cui si verifica la consistenza fra le variabili istanziate. Due approcci principali: backjumping backtrack sulla variabile che causa il conflitto salta qui backchecking and backmarking evita dei controlli ripetuti sui vincoli ricordando il livello in cui ogni valore è entrato in conflitto conflitto a b b b conflitto Vittorio Maniezzo Università di Bologna 29 11

12 Look Ahead Si cerca di prevenire conflitti futuri attraverso dei controlli di consistenza fra valori ammissibili per variabili ancora non istanziate. forward checking (FC) AC nella neighbourhood locale partial look ahead (PLA) DAC (full) look ahead (LA) Arc Consistency Path Consistency Variabili istanziate Ordine etichettatura Vittorio Maniezzo Università di Bologna 30 Look Ahead: Esempio Problema: var 1..2: X,Y,Z constraint X = Y, X Z, Y > Z generate & test - 7 passi backtracking - 5 passi propagation - 2 passi X Y Z azione risultato 1 labelling {1} {} propagation fail 2 labelling {2} {1} propagation soluzione Vittorio Maniezzo Università di Bologna 31 12

13 Ricerca: branching La propagazione in generale non è completa. Dopo la propagazione: Trovo una soluzione stop Fallimento backtrack i domini contengono alcuni valori search ricerca: divide il problema in sotto-problemi (branching) e risolve ciascuno di essi indipendentemente i sottoproblemi devono essere una partizione del problema originale Obiettivo: mantenere lo spazio di ricerca il più piccolo possibile Vittorio Maniezzo Università di Bologna 32 Ricerca: branching Strategie di Branching definiscono il modo di partizionare il problema P in sottoproblemi più facili P1, P2,, Pn. Per ogni sottoproblema si applica di nuovo la propagazione. Possono essere rimossi nuovi rami grazie alle nuove informazioni derivate dal Branching In programmazione logica a vincoli la tecnica più popolare di branching è detta labeling Labeling: seleziona una variabile seleziona un valore nel suo dominio assegna il valore alla variabile L ordine in cui le variabili e i valori vengono scelti (la strategia di ricerca) non influenza la correttezza dell algoritmo ma ne influenza pesantemente l efficienza. Vittorio Maniezzo Università di Bologna 33 13

14 Esempio completo Map Coloring Modello MiniZinc enum V1={red,green,yellow,blue,pink}, enum V2={red,green,yellow,blue,pink}, enum V3={red,green,yellow,blue,pink}, enum V4={red,green,yellow,blue,pink}, enum V5={red,green,yellow,blue,pink}, constraint V1!=V2, V1!=V3, V1!=V4, V1!=V5, V2!=V3,V2!=V4, V2!=V5, V3!=V4, V4!=V5, solve satisfy. Separazione tra Modello del problema Strategia per risolverlo Variabili e domini ricerca vincoli Vittorio Maniezzo Università di Bologna 34 Programmazione logica a vincoli La consistenza e la propagazione sono implementate nel risolutore Es.: CLP(R): X > Y + 5, Y = 3 passo di inferenza: X > 8 consistenza: specializzata su R vincoli: sia in input che in output CLP(R): var int A,B constraint A > B + 5.? p(x,y), Y = 3. yes X > 8, Y = 3 Vittorio Maniezzo Università di Bologna 35 14

15 Macchina CLP: passi fondamentali Principali competenze della macchina CLP: Risoluzione (resolution, r) selezione di un elemento unificazione: aggiunta di vincoli al constraint store Vincoli (constraining c) selezione di un vincolo aggiunta del vincolo al constraint store Propagazione (infer, i) trasformazione del constraint store Consistenza (satisfiability, s) verifica della soddisfacibilità del constraint store Vittorio Maniezzo Università di Bologna 36 CP: risoluzione Consistenza: L insieme dei vincoli è soddisfacibile? Esiste una soluzione? Propagazione di vincoli: meccanismo di inferenza Rimuove dai domini valori inconsistenti Inferisce nuovi vincoli Ricerca: strategie di branching Selezione di una variabile Selezione del valore Vittorio Maniezzo Università di Bologna 38 15

16 Proprietà di consistenza node consistency una rete è node consistent se in ogni dominio di ogni nodo ogni valore è consistente con i vincoli unari che coinvolgono la variabile arc consistency una rete è arc consistent se per ogni vincolo binario (arco) che connette due variabili V i e V j, per ogni valore nel dominio di V i esiste un valore nel dominio di V j consistente con il vincolo. V1 [1..10] V2 [1..10] V1 < 7 V1 > V2 Non Node consistent Non Arc consistent unario binario V1 [2..6] V2 [1..5] V1 < 7 V1 > V2 Node consistent Arc consistent Vittorio Maniezzo Università di Bologna 39 Limiti di AC In problemi reali, il controllo dell Arc-Consistency è troppo costoso. Se si controlla un vincolo c(x,y), per ogni valore in dom(x) cerco un valore consistente in dom(y) si hanno circa d 2 confronti ad ogni controllo, se d è la cardinalità dei domini. Ci si accorge di un fallimento solo quando un dominio è vuoto. Operativamente, ci si ferma appena si trova un valore consistente e si ragiona per intervalli, invece di verificare tutti gli elementi del dominio Vittorio Maniezzo Università di Bologna 40 16

17 Limiti di AC Domini vuoti => nessuna soluzione (OK) Cardinalità di ogni dominio è 1 => soluzione (OK) Ma se: var 1..2: X,Y,Z constraint X Y, X Z, Y Z 1 2 X Y 1 2 Z 1 2 Vittorio Maniezzo Università di Bologna 41 Path Consistency (PC) Si verifica la consistenza lungo un path nel grafo dei vincoli Spesso si cerca solo su path di lunghezza 2 Vantaggi e svantaggi + individua più inconsistenze che AC - complessità V 2 V V4 3 V 5 V 0 V 1??? Casi particolari: PC diretta, PC ristretta, Vittorio Maniezzo Università di Bologna 42 17

18 Bound consistency Un vincolo c(x,y) è bound consistente se per ogni valore ammissibile in X esiste un valore ammissibile in Y che può soddisfarlo, e viceversa x {min(x),max(x)} y dom(y) t.c. c(x,y) è soddisfatto (e viceversa) Comodo per vincoli come <, >, Non serve controllare tutti gli elementi del dominio, ma bastano gli estremi Si ricontrolla il vincolo c(x,y) solo se vengono eliminati gli estremi del dominio di X o Y Esempio: 4x + 3y - 2z = 10 Domini: Dx = Dy = Dz = {0, 1,..., 9} Garantire la BC porta a definire: Dx = {0, 1,..., 7}, Dy = Dz = {0, 1,..., 9} Vittorio Maniezzo Università di Bologna 43 Filtering e propagazione filtering: forma di inferenza che permette di identificare e rimuovere dai domini i valori inconsistenti propagazione: meccanismo secondo cui l aggiornamento (riduzione) dei domini permette ad altri vincoli di fare filtering Es.: var 1..10: X,Y,Z, constraint X>Y, Y>Z Singolarmente il vincolo X > Y fa filtering X [2..10], Y [1..9] Singolarmente il vincolo Y > Z fa filtering Y [2..9], Z [1..8] Per ridurre completamente il problema (eliminando tutti i valori inconsistenti) la propagazione avrebbe complessità esponenziale. Rimozione di 1 da Y attiva una propagazione X [3..10], Y [2..9] Vittorio Maniezzo Università di Bologna 44 18

19 Filtering e propagazione Ogni tipo di vincolo richiede un proprio algoritmo di filtering per eliminare valori incosistenti dai domini. La comunicazione fra i diversi algoritmi di filtering avviene indirettamente attraverso i domini delle variabili, innescando catene di filtraggi successivi (propagazioni). La propagazione è garantita avere termine. Il risultato finale è lo stesso, indipendentemente dall ordine in cui sono stati considerati i vincoli (ma la velocità con cui lo si raggiunge no) Vittorio Maniezzo Università di Bologna 45 Filtering: vincoli matematici Esempio 1: var 1..10:X; var 5..15:Y; X>Y Arc-consistency: per ogni valore x della variabile X, se non esiste un valore per Y compatibile con x, allora x viene cancellato dal dominio di X e viceversa var 6..10:X; var 5..9:Y dopo il filtering Esempio 2: var 1..10:X; var 5..15:Y; X=Y var 5..10:X, var 5..10:Y dopo il filtering Esempio 3: var 1..10:X; var 5..15:Y, X Y Nessun filtering Vittorio Maniezzo Università di Bologna 46 19

20 Propagazione di vincoli In generale ogni variabile è coinvolta in molti vincoli. Ogni cambiamento nel dominio della variabile si può propagare ad altri valori dai domini delle altre variabili. Esempio: X [1..5], Y [1..5], Z [1..5] X = Y + 1 Y = Z + 1 X = Z 1 Primo controllo di X = Y + 1 porta a X [2..5], Y [1..4], Z [1..5] Secondo controllo di Y = Z + 1 porta a X [2..5], Y [2..4], Z [1..3] Il dominio di Y è cambiato, controllo di X = Y + 1 porta a X [3..5], Y [2..4], Z [1..3] Vittorio Maniezzo Università di Bologna 47 Propagazione di vincoli Controllo di Z = X - 1 porta a X [], Y [2..4], Z [1..3] (fail) L ordine nel quali i vincoli sono considerati (sospesi/risvegliati) non influenza il risultato ma può influenzare le prestazioni computazionali Vittorio Maniezzo Università di Bologna 48 20

21 Vincoli globali Un vincolo globale (n-ario, simbolico) descrive una relazione che coinvolge un numero non fisso di variabili. Es: il vincolo alldifferent(x 1,, x n ) è soddisfatto solo se i valori assegnati alle variabili x 1,, x n sono tutti diversi tra loro. Un vincolo globale è spesso semanticamente ridondante: può essere espresso tramite un insieme di vincoli più semplici (ad es., alldifferent(x 1,, x n ) può essere espresso mediante xi xj per ogni i j), ma permette di scrivere dei pattern di vincoli di particolare interesse pratico in modo chiaro e compatto e semplifica molto la modellazione. Inoltre molti vincoli globali forniscono al risolutore una visione più accurata della struttura del problema e possono migliorarne drasticamente l'efficienza, permettendo propagazioni che non sono altrimenti possibili. Vittorio Maniezzo Università di Bologna 49 Vincoli globali Vincoli matematici (binari): =, >, <,,, Propagazione vincoli binari: arc-consistency Vincoli globali: hanno associato un proprio metodo di propagazione, permettono formulazioni concise Es.: alldifferent([x1,...xm]) tutte le variabili devono avere valori differenti element(n,[x1,...xm],value) l ennesimo elemento della lista deve avere valore uguale a Value cumulative([s1,...sm], [D1,...Dn], [R1,...Rn], L) usato per vincoli di capacità vincoli disgiuntivi (o questo o quello, xor) Vittorio Maniezzo Università di Bologna 50 21

22 Vincoli globali (vincoli simbolici) Ogni vincolo ha associato il proprio algoritmo di filtering, realizzato con tecniche prodotte in un qualunque contesto utilizzabile (ricerca operativa, intelligenza artificiale, teoria dei grafi, teoria dei linguaggi di programmazione, automi) La propagazione del vincolo termina quando la rete raggiunge uno stato in cui non si possono cancellare più valori dal domino di nessuna variabile (quiescenza). La propagazione è incrementale lungo ogni ramo dell albero di ricerca Vittorio Maniezzo Università di Bologna 51 Vincoli globali: consistenza Per vincoli n-ari (es: X+Y=Z), non c è più l interpretazione come grafo. Generalized Arc Consistency (GAC) (o Hyper Arc- Consistency): un vincolo c(x 1, x 2,, x n ) è arc consistente in senso generalizzato se: per ogni variabile x i (i=1..n) per ogni assegnamento delle rimanenti n-1 variabili x 1 =v 1,, x i 1 = v i 1, x i+1 = v i+1,, x n = v n esiste un valore del dominio di x i che rende il vincolo vero v dom(x i ) t.c. c(v 1,, v i 1,v, v i+1, v n ) è vero (soddisfatto). Spesso controllare la GAC è troppo costoso; per vincoli n-ari, si cerca di sfruttare la struttura e la semantica dei vincoli stessi Vittorio Maniezzo Università di Bologna 52 22

23 Vincoli globali Alcuni dei vincoli globali più comuni: element. Siano y e z variabili e c un array di variabili, cioè c = [x 1,, x n ]. Il vincolo e soddisfatto se z = x y. alldifferent. Siano x 1,, x n variabili. Il vincolo e soddisfatto se tali variabili assumono valori tutti diversi tra loro. gcc. (global cardinality constraint) è una generalizzazione di alldifferent in cui si richiede che ogni valore v i di un insieme dato sia assegnato almeno l i volte e al più u i volte. regular. è soddisfatto se la stringa d 1,, d n formata dai valori assegnati alle variabili (x 1,, x n ) viene accettata da un automa a stati finiti M, in altre parole la stringa appartiene al linguaggio regolare L(M) accettato da M. Vittorio Maniezzo Università di Bologna 53 Vincoli globali: alldifferent alldifferent([x1,...xn]) vero se tutte le variabili assumono valori diversi Equivalente all insieme di vincoli binari alldifferent([x1,...xn]) X1 X2, X1 X3,, Xn-1 Xn Operazionalmente permette una propagazione più forte. Esempio: X1 [1,2,3],X2 [1,2,3],X3 [1,2,3],X4 [1,2,3,4], Arc consistency: non rimuove alcun valore L'algoritmo di filtering per alldifferent rimuove da X4 i valori 1,2,3. Vittorio Maniezzo Università di Bologna 54 23

24 Vincoli globali: alldifferent alldifferent si usa in tantissime applicazioni, esempio: Partial Latin Square: colorare ogni riga e colonna con 10 colori in modo che su ogni riga e colonna ci siano tutti colori diversi Facile se la griglia è vuota ma non se parzialmente piena (35%-45% percentuale critica) E' un problema che appare come sottoprobelma in molte applicazioni (scheduling, timetabling, routing in fibre ottiche, ecc ) Modello del problema: alcune variabili già assegnate, altre hanno come dominio tutti i colori. Poi per ogni riga i=1..n: alldifferent([xi1,xi2,.xin]) per ogni colonna j=1..n: alldifferent([x1j,x2j,.xnj]) Vittorio Maniezzo Università di Bologna 55 Alldifferent: algoritmo di filtering Es., alldifferent(x1,x2,x3,x4,x5,x6) con xi [1:.7] Si rappresenta il problema su un grafo bipartito x1 x2 x3 x4 x5 x soluzione sse matching che copre tutte le variabili x1 x2 x3 x4 x5 x Vittorio Maniezzo Università di Bologna 56 24

25 Alldifferent: esempio Problema: alldifferent(x 1, x 2, x 3 ) 2x 1 + x 2 6 x 2 x 3 x 1, x 2, x 3 {1,2,3} GT avrebbe generato tutte le 27 possibili soluzioni, BT senza propagazione avrebbe impiegato più di 20 nodi, BT con propagazione dei vincoli solo 5 nodi. Vittorio Maniezzo Università di Bologna 57 Vincoli globali: Global Cardinality Constraint (GCC, aka distribute) gcc(var,val,lb,ub) Var sono variabili, Val valori LB e UB sono il minimo e massimo numero di occorrenze per ogni valore in Val assegnato a Var La nozione di consistenza si basa su un algoritmo di flusso massimo su una oppotuna rete N(C) gcc su k variabili si può verificare con un algoritmo di max flow da s a t di valore k Vittorio Maniezzo Università di Bologna 58 25

26 Vincoli globali: distribute (aka gcc) distribute([c1,..., cm],[v1,..., vm],[x1,...,xn]), Richiede che c[i] sia il numero di occorrenze di v[i] nell'array x, limitate fra l[i] e u[i]. Filtering basato su un flusso in rete, soluzione sse flusso ammissibile. Calcola un flusso massimo Costruisci il grafo dei residui Trovane le componenti fortemente connesse Togli gli archi a flusso nullo fra le componenti Garantita GAC Vittorio Maniezzo Università di Bologna S [1,1] x1 xi xn [0,1] v1 v2 vj vm [l1,u1] [lm,um] T Vincoli globali: cumulative cumulative([s1,...sn], [D1,...Dn], [R1,...Rn], L) S1,...Sm sono istanti di inizio di attività (variabili con dominio) D1,...Dn sono durate (variabili con dominio) R1,...Rn sono richieste di risorse (variabili con dominio) L è il limite di capacità delle risorse (fisso o variabile nel tempo) Dato l intervallo [min,max] dove min = min i {S i }, max = max{s i +D i } - 1, il vincolo cumulative assicura che max j:sj i S j R i L Es.: cumulative([1,2,4],[4,2,3],[1,2,2],3) Vittorio Maniezzo Università di Bologna 60 26

27 Vincoli globali: vincoli disgiuntivi Supponiamo di avere due lezioni che devono essere tenute dallo stesso docente. Abbiamo gli istanti di inizio delle lezioni: L1Start e L2Start e la loro durata Duration1 e Duration2. Le due lezioni non possono sovrapporsi: L1Start + Duration1 L2Start OR L2Start + Duration2 L1Start Due problemi indipendenti, uno per ogni parte della disgiunzione. Numero esponenziale di problemi al crescere delle disgiunzioni: n disgiunzioni 2 n problemi Appare spesso in problemi reali inducendo alta complessità Varie soluzioni proposte: cumulative meta-vincoli disgiunzione costruttiva operatore di cardinalità Vittorio Maniezzo Università di Bologna 61 Vincoli globali: meta vincoli Anche meta-constraint o Vincoli Reificati (implementano vincoli disgiuntivi) A ogni vincolo (matematico, del tipo >, <, <=,!=, ) viene associata una variabile booleana B. Se B=1 il vincolo è verificato e viceversa, se B=0 il vincolo non è verificato e viceversa. Con i vincoli si possono modellare le disgiunzioni come segue: var {0,1}: B1; var {0,1}: B2; constraint (L1Start+Duration1 <= L2Start)!= B1; constraint (L2Start+Duration2 <= L1Start)!= B2; constraint B1 + B2 = 1; Vittorio Maniezzo Università di Bologna 62 27

28 Vincoli globali: Path Dato un grafo diretto G=(V,A) con V = n, si associa ad ogni nodo i una variabile Xi il cui dominio contiene i possibili next nel cammino, il path constraint X0 D0,X1 D1,...,Xk Dk path([x0,x1,,xk]) È vero se e solo se l assegnamento di valori (la def. dei next) alle variabili X0,X1,,Xk definisce un cammino semplice che coinvolge tutti i nodi 0,,k. Il vincolo path può essere generalizzato in un multi-path path([x0,x1,,xk], NumberOfPaths) Vittorio Maniezzo Università di Bologna 63 Classificazione vincoli Sulla base della struttura del grafo: global constraint catalog Nicolas Beldiceanu Sulla base della semantica: Jean-Charles Règin (articolo su web) Solution based (table constraint) Counting constraints (alldifferent, permutation, gcc) Balancing constraints (balance, deviation, spread) Combination based constraints (max-sat, and or) Sequencing constraints (among, sequence) Distance constraints (inter-distance, sum-inequality) Geometric constraints (diff-n) Summation based constraints (subset-sum, knapsack) Packing constraints (nvalue, bin-packing) Graph based constraints (cycle, path, tree, wst) Order based constraints (lexicolex, sort) Vittorio Maniezzo Università di Bologna 64 28

29 Vincoli ridondanti La propagazione in generale non è completa: alcuni valori inconsistenti possono essere lasciati nei domini I vincoli ridondanti possono essere utili per ridurre lo spazio di ricerca anche se introducono un overhead (c è un tradeoff). Un vincolo ridondante C è un vincolo che è implicato da altri vincoli {C1 Ck}, ma il risolutore non identifica questa implicazione a causa della sua incompletezza [x,y] 0..10, X >= y, Y <= 10-x Nessuna propagazione (entrambi i vincoli già AC). Se aggiungo il vincolo (logicamente ridondante) Y<=5 ho propagazione Vittorio Maniezzo Università di Bologna 65 Vincoli ridondanti Esempio: Sequenza magica Dato un insieme di n+1 variabili X0,,Xn. Ogni Xi deve rispettare i seguenti vincoli : 0 compare X0 volte in soluzione 1 compare X1 volte n appare Xn volte. vncolo occurrences(v,l,n) (fd_global) impone che V compaia N volte nella lista L magic_sequence([x0,,xn]): X0,,Xn [0..n], occurrences(0,[x0,,xn], X0), occurrences(1,[x0,,xn], X1),..., occurrences(n,[x0,,xn], Xn),... Vittorio Maniezzo Università di Bologna 66 29

30 Vincoli ridondanti Vincolo ridondante: la somma di tutte le variabili moltiplicate per il loro valore è uguale al numero di celle nella sequenza. Quindi, le variabili soddisfano il vincolo: X1+ 2*X2 + + N*Xn = N + 1 magic_sequence([x0,,xn]): X0,,Xn [0..n], occurrences(0,[x0,,xn], X0), occurrences(1,[x0,,xn], X1),..., occurrences(n,[x0,,xn], Xn), X1+ 2*X2 + + N*Xn = N + 1 VINCOLI RIDONDANTI PC vecchiotto: P4 2Ghz, N=23 senza vincolo ridondante 5.88s con vincolo ridondante 0.55s Vittorio Maniezzo Università di Bologna 67 Ottimizzazione In molte applicazioni non siamo interessati a soluzioni ammissibili, ma nella soluzione ottima rispetto a un certo criterio. Enumerazione inefficiente trova tutte le soluzioni ammissibili scegli la migliore I linguaggi di programmazione a vincoli in generale implementano anche un qualche Branch and Bound ogni volta che viene trovata una soluzione di costo C*, viene imposto un vincolo sulla parte rimanente dello spazio di ricerca. Il vincolo afferma che soluzioni successive (il cui costo stimato è C) devono essere migliori della migliore soluzione trovata finora. C < C* Vittorio Maniezzo Università di Bologna 68 30

31 Branch & Bound Il vincolo aggiunto fa normalmente poca propagazione. Si usa una variabile Z che rappresenta la funzione obiettivo e la si lega alle variabili decisionali, esempio somma di costi Se il legame tra Z e tali variabili è forte, la propagazione elimina molti rami dall albero, altrimenti, cercare una soluzione ottima è molto difficile Esempi Per lo scheduling funziona bene (min la lunghezza dello schedule) Per le somme di costi meno bene Per la minimizzazione dei tempi di setup, non funziona affatto. Vittorio Maniezzo Università di Bologna 69 Vincoli globali di ottimizzazione Molti vincoli globali che rappresentano problemi risolubili in tempo polinomiale possono essere estesi con una variabile costo cost_alldiff(x, Cost, H) vero se e solo se le variabili in X sono tutte diverse e la somma dei loro costi è minore di H. Consistenza e filtering basati su un algoritmo di flusso cost_gcc(x,val,lb,ub,cost, H) vero se e solo se il valore Val compare X un numero di volte compreso tra LB e UB e la somma dei costi delle var in X è minore di H. Consistenza e filtering basati su un algoritmo di flusso Per problemi non polinomiali, si aggiunge all algoritmo di filtering tradizionale un componente di ottimizzazione che implementa un rilassamento del vincolo e fornisce: Lower bound (soluzione ottima del rilassamento) funzione gradiente che calcola il costo var = valore Vittorio Maniezzo Università di Bologna 70 31

32 Problemi sovra-vincolati Alcuni problemi nella vita reale non hanno soluzione: sono sovra-vincolati CLP in questo caso dà come risposta semplicemente no', questo in applicazioni reali non è sufficiente Uno dei metodi per trattarli comunque è quello di usare vincoli soft (che possono essere rilassati): cerchiamo di massimizzare i vincoli soft che sono soddisfatti Es. Orario delle lezioni: cerco di soddisfare le richieste degli insegnanti Mat > 10, Fisica < 14, Con vincoli Soft: Mat > 10 <=> B1, Fisica < 14 <=> B2, sumlist([b1,b2, ],Sum), F = -Sum, minimize(labeling( ),F). Vittorio Maniezzo Università di Bologna 71 Soft constraints Esistono vincoli globali soft, es.: softalldiff softgcc softregular Permettono un livello di violazione: Variable-based: minimo numero di variabili che devono cambiare valore affinché il vincolo sia soddisfatto Decomposition-based: se un vincolo globale C si può decomporre in una serie di vincoli binari CDEC allora la violazione è il numero di vincoli binari violati Vittorio Maniezzo Università di Bologna 72 32

33 MiniZinc 1.6: Global Constraints alldifferent (all_different) alldifferent_except_0 all_disjoint all_equal among at_least (atleast) at_most (atmost) at_most1 (atmost1) bin_packing bin_packing_capa bin_packing_load circuit count_eq (count) count_geq count_gt count_leq count_lt count_neq cumulative cumulative lex2 decreasing link_set_to_booleans diffn maximum disjoint member distribute minimum element nvalue exactly partition_set global_cardinality range global_cardinality_closed regular global_cardinality_low_up roots global_cardinality_low_up_ sliding_sum closed sort increasing strict_lex2 int_set_channel subcircuit inverse sum_pred (sum) inverse_set table lex_greater value_precede lex_greatereq value_precede_chain lex_less lex_lesseq Vittorio Maniezzo Università di Bologna 73 Vincoli globali MiniZinc 1.6 alldifferent(array[int] of var int: x) Constrains the array of objects x to be all different. Also available by the name all_different. alldifferent_except_0(array[int] of var int: x) Constrains the elements of the array x to be all different except those elements that are assigned the value 0. all_disjoint(array[int] of var set of int: x) Ensures that every pair of sets in the array x is disjoint. all_equal(array[int] of var int: x) Constrains the array of objects x to have the same value. Vittorio Maniezzo Università di Bologna 74 33

34 Vincoli globali MiniZinc 1.6 among (var int: n, array[int] of var int: x, set of int: v) Requires exactly n variables in x to take one of the values in v. at_least (int: n, array[int] of var int: x, int: v) Requires at least n variables in x to take the value v. Also available by the name atleast. at_most (int: n, array[int] of var int: x, int: v) Requires at most n variables in x to take the value v. Also available by the name atmost. at_most1 (array[int] of var set of int: s) Requires that each pair of sets in s overlap in at most one element. Also available by the name atmost1. Vittorio Maniezzo Università di Bologna 75 Vincoli globali MiniZinc 1.6 bin_packing (int: c, array[int] of var int: bin, array[int] of int: w) Requires that each item i be put into bin bin[i] such that the sum of the weights of each item, w[i], in each bin does not exceed the capacity c. bin_packing_capa(array[int] of int: c, array[int] of var int: bin, array[int] of int:w) Requires that each item i be put into bin bin[i] such that the sum of the weights of each item, w[i], in each bin b does not exceed the capacity c[b]. bin_backing_load(array[int] of var int: l, array[int] of var int: bin, array[int] of int: w) Requires that each item i be put into bin bin[i] such that the sum of the weights of each item, w[i], in each bin b is equal to the load l[b]. Vittorio Maniezzo Università di Bologna 76 34

35 Vincoli globali MiniZinc 1.6 circuit [array[int] of var int: x) Constraints the elements of x to define a circuit where x[i] = j mean that j is the successor of i. cumulative (array[int] of var int: s, array[int] of var int: d, array[int] of var int: r, var int: b) Requires that a set of tasks given by start times s, durations d, and resource requirements r, never require more than a global resource bound b at any one time. Aborts if s, d, and r do not have identical index sets. Aborts if a duration or resource requirement is negative. Vittorio Maniezzo Università di Bologna 77 Vincoli globali MiniZinc 1.6 count_eq (array[int] of var int: x, var int: y, var int: c) Constrains c to be the number of occurrences of y in x. Also available by the name count. count_geq (array[int] of var int: x, var int: y, var int: c) Constrains c to greater than or equal to the number of occurrences of y in x. count_gt (array[int] of var int: x, var int: y, var int: c) Constrains c to strictly greater than the number of occurrences of y in x. count_leq (array[int] of var int: x, var int: y, var int: c) Constrains c to less than or equal to the number of occurrences of y in x. count_lt (array[int] of var int: x, var int: y, var int: c) Constrains c to strictly less than the number of occurrences of y in x. count_neq (array[int] of var int: x, var int: y, var int: c) Constrains c to not be the number of occurrences of y in x. Vittorio Maniezzo Università di Bologna 78 35

36 Vincoli globali MiniZinc 1.6 decreasing(array[int] of var bool: x) Requires that the array x is in (non-strictly) decreasing order. diffn (array[int] of var int: x, array[int] of var int: y, array[int] of var int: dx, array[int] of var int: dy) Constrains rectangles, given by their origins x,y and sizes dx,dy, to be non-overlapping. disjoint (var set of int: s, var set of int: t) Requires that sets s and t do not intersect. distribute (array[int] of var int: card, array[int] of var int: value, array[int] of var int: base) Requires that card[i] is the number of occurrences of value[i] in base. Vittorio Maniezzo Università di Bologna 79 Vincoli globali MiniZinc 1.6 element (var int: i, array[int] of var bool: x, var bool: y) The same as x[i] = y. That is, y is the ith element of the array x. exactly (int: n, array[int] of var int: x, int: v) Requires exactly n variables in x to take the value v. Vittorio Maniezzo Università di Bologna 80 36

37 Vincoli globali MiniZinc 1.6 global_cardinality (array[int] of var int: x, array[int] of int: cover, array[int] of var int: counts) Requires that the number of occurrences of cover[i] in x is counts[i]. global_cardinality_closed (array[int] of var int: x, array[int] of int: cover, array[int] of var int: counts) Requires that the number of occurrences of cover[i] in x is counts[i]. The elements of x must take their values from cover. global_cardinality_low_up (array[int] of var int: x, array[int] of int: cover, array[int] of int: lb, array[int] of int: ub) Requires that for all i, the value cover[i] appears at least lb[i] and at most ub[i] times in the array x. global_cardinality_low_up_closed (array[int] of var int: x, array[int] of int: cover, array[int] of int: lb, array[int] of int: ub) Requires that for all i, the value cover[i] appears at least lb[i] and at most ub[i] times in the array x. The elements of x must take their values from cover. Vittorio Maniezzo Università di Bologna 81 Vincoli globali MiniZinc 1.6 increasing(array[int] of var bool: x) Requires that the array x is in (non-strictly) increasing order. int_set_channel(array[int] of var int: x, array[int] of var set of int: y) Requires that x[i] = j if and only if i y[j]. inverse(array[int] of var int: f, array[int] of var int: invf) Constrains two arrays to represent inverse functions of each other. All the values in each array must be within the index set of the other array. inverse_set(array[int] of var set of int: f, array[int] of var set of int: invf) Constrains the two arrays f and invf so that a j f[i] if and only if i invf[j]. All the values in each array's sets must be within the index set of the other array. Vittorio Maniezzo Università di Bologna 82 37

38 Vincoli globali MiniZinc 1.6 lex_greater(array[int] of var bool: x, array[int] of var bool: y) Requires that the array x is strictly lexicographically greater than array y. Compares them from first to last element, regardless of indices. lex_greatereq(array[int] of var bool: x, array[int] of var bool: y) Requires that the array x is lexicographically greater than or equal to array y. Compares them from first to last element, regardless of indices. lex_less(array[int] of var bool: x, array[int] of var bool: y) Requires that the array x is strictly lexicographically less than array y. Compares them from first to last element, regardless of indices. lex_lesseq(array[int] of var bool: x, array[int] of var bool: y) Requires that the array x is lexicographically less than or equal to array y. Compares them from first to last element, regardless of indices. lex2(array[int, int] of var int: x) Require adjacent rows and adjacent columns in the the array x to be lexicographically ordered. Vittorio Maniezzo Università di Bologna 83 Vincoli globali MiniZinc 1.6 link_set_to_booleans(var set of int: s, array[int] of var bool: b) The array of booleans b is the characteristic representation of the set s. Aborts if the index set of b is not a superset of the possible values of s. maximum(var int: m, array[int] of var int: x) Constrains m to be the maximum of the values in x. (The array x must have at least one element.) member(array[int] of var bool: x, var bool: y) Requires that y occurs in the array or set x. minimum(var float: m, array[int] of var float: x) Constrains m to be the minimum of the values in x. (The array x must have at least one element.) Vittorio Maniezzo Università di Bologna 84 38

39 Vincoli globali MiniZinc 1.6 nvalue(var int: n, array[int] of var int: x) Requires that the number of distinct values in x is n. partition_set(array[int] of var set of int: s, set of int: universe) Partitions universe into disjoint sets. range(array[int] of var int: x, var set of int: s, var set of int: t) Requires that the image of function x (represented as an array) on set of values s is t. regular(array[int] of var int: x, int: Q, int: S, array[int,int] of int: d, int: q0, set of int: F) The sequence of values in array x (which must all be in the range 1..S) is accepted by the DFA of Q states with input 1..S and transition function d (which maps 1..Q, 1..S to 0..Q) and initial state q0 (which must be in 1..Q) and accepting states F (which all must be in 1..Q). Vittorio Maniezzo Università di Bologna 85 Vincoli globali MiniZinc 1.6 roots(array[int] of var int: x, var set of int: s, var set of int: t) Requires that x[i] t for all i s. sliding_sum(int: low, int: up, int: seq, array[int] of var int: vs) Requires that in each subsequence vs[i],..., vs[i + seq - 1] the sum of the values belongs to the interval [low, up]. sort(array[int] of var int: x, array[int] of var int: y) Requires that the multiset of values in x is the same as the multiset of values in y but y is in sorted order. strict_lex2(array[int, int] of var int: x) Require adjacent rows and adjacent columns in the the array x to be lexicographically ordered. subcircuit(array[int] of var int: x) Constrains the elements of x to define a subcircuit where x[i] = j means that j is the successor of i and x[i] = i means that i is not in the circuit. Vittorio Maniezzo Università di Bologna 86 39

40 Vincoli globali MiniZinc 1.6 sum_pred(var int: i, array[int] of set of int: sets, array[int] of int: c, var int: s) Requires that the sum of c[i1]...c[in] equals s, where i1..in are the elements of the ith set in sets. This constraint is usually named sum, but using that would conflict with the MiniZinc built-in function of the same name. table(array[int] of var bool: x, array[int, int] of bool: t) Represents the constraint x t where we consider each row in t to be a tuple and t as a set of tuples. value_precede(int: s, int: t, array[int] of var int: x) Requires that s precede t in the array x. Vittorio Maniezzo Università di Bologna 87 Applicazioni della CP Molte applicazioni pratiche. Alcune aree principali: Problemi di assegnamento Allocazioni stand negli aeroporti Allocazioni ormeggi alle navi Assegnamento personale Turni delle infermiere Equipaggi ai voli Gestione e configurazione di reti Progetto del cablaggio di una rete Localizzazione delle base station in reti wireless Biologia molecolare Sequenziazione DNA Progetto di circuiti digitali e analogici Vittorio Maniezzo Università di Bologna 88 40

41 Applicazioni della CP L area applicativa di maggior successo è lo scheduling Pianificazione della produzione (InSol Ltd.) Pianificazione delle perforazioni (Saga Petroleum) Pianificazione dei trattamenti forestali Pianficazione delle produzione di jet (Dassault Aviation) Vittorio Maniezzo Università di Bologna 89 Scheduling Affrontato con programmazione a vincoli su domini finiti Strettamente correlato ad altre applicazioni: Scheduling Timetabling Allocazione di risorse Routing Packing Cutting Caratteristiche della programmazione a vincoli che ha reso interessante il suo approccio allo scheduling: flessibilità generalità codifica facile Il problema è NP-completo e già molto studiato nelle comunità di Ricerca Operativa e di Intelligenza Artificiale Vittorio Maniezzo Università di Bologna 90 41

42 risorsa Scheduling: il problema Lo Scheduling riguarda l assegnamento di risorse limitate (macchine, denaro, personale) ad attività (fasi di progetto, servizi, lezioni) sull asse temporale Vincoli restrizioni temporali ordine tra attività due dates - release dates capacità delle risorse tipi diversi di risorse risorse consumabili e rinnovabili Criterio di ottimizzazione makespan (durata del piano) bilanciamento delle risorse ritardo sui tempi di consegna costo dell assegnamento delle risorse Vittorio Maniezzo Università di Bologna 91 Scheduling: attività Variabili decisionali : Istante iniziale delle attività Istante finale delle attività / durata (se multimodale) Risorse utilizzate (se multimodale) Attività alternative Tipi di attività intervallo: non può essere interrotta interrompibile: può essere interrotta da break preemptive: può essere interrotta da altre attività Tipi di risorse: R Unarie max 3 Non rinnovabili 2 4 Rinnovabili Vittorio Maniezzo Università di Bologna tempo 42

43 Scheduling: esempio 6 attività: ogni attività descritta da un predicato task(name,duration,listofprecedingtasks,machine). task(j1,3,[],m1). task(j2,8,[],m1). task(j3,8,[j4,j5],m1). task(j4,6,[],m2). task(j5,3,[j1],m2). task(j6,4,[j1],m2). Le macchine m1 e m2 sono unarie (capacità 1). Richiesto End: massimo tempo di fine schedule. Vittorio Maniezzo Università di Bologna 93 Scheduling: esempio schedule(data, End, TaksList):- maketaskvariables(data,end,tasklist), precedence(data, TaskList), machines(data, TaskList), minimize(labeltasks(tasklist),end). maketaskvariables([],_,[]). maketaskvariables([task(n,d,_,_) T],End,[Start Var]):- Start::[0..End-D], maketaskvariables(t,end,var). precedence([task(n,_,prec,_) T], [Start Var]):- select_preceding_tasks(prec,t,var,precvars,precdurations), impose_constraints(start,precvars,precdurations), precedence(t,var). impose_constraints(_,[],[]). impose_constraints(start,[var Other],[Dur OtherDur]):- Var + Dur <= Start impose_constraints(start,other,otherdur). Vittorio Maniezzo Università di Bologna 94 43

44 Scheduling: esempio machines(data, TaskList):- tasks_sharing_resource(data,tasklist,sameresource,durations), impose_cumulative(sameresource,durations,use). impose_cumulative([],[],_). impose_cumulative([listsameres LSR],[Dur D],[Use U]):- cumulative(listsameres,dur,use,1), impose_cumulative(lsr,d,u). cumulative([start1,start2,start3],[3,8,8],[1,1,1],1) cumulative([start4,start5,start6],[6,3,4],[1,1,1],1) labeltasks([]). labeltasks([task Other]):- indomain(task), labeltasks(other). Vittorio Maniezzo Università di Bologna 95 Scheduling: ottimizzazione minimize: predicato per trovare la soluzione ottima (Branch &Bound) Consideriamo la minimizzazione del makespan: uso una euristica che selezione sempre l attività che può essere assegnata per prima. Nel caso, pospone attività per risolvere conflitti di risorsa. labeltasks([]). labeltasks(tasklist):- find_min_start(tasklist,first,minstart,others), label_earliest(tasklist,first,minstart,others,postponed). label_earliest(tasklist,first,min,others):- % schedule the task First = Min, labeltasks(others). label_earliest(tasklist,first,min,others):- % delay the task First Min, labeltasks(tasklist). Vittorio Maniezzo Università di Bologna 96 44

45 Routing: il problema Il routing è il problema di definire i percorsi di un insieme di veicoli che partano e terminino dallo stesso deposito e che visitino una e una sola volta tutti i clienti di un insieme dato. Vincoli (alcuni) restrizioni temporali: finestre temporali durata massima di un viaggio capacità del veicolo domanda dei clienti Criteri di ottimizzazione (alcuni) numero di veicoli costo dei viaggi tempo dei viaggi Componente di base: Travelling Salesman Problem (TSP) e varianti con finestre temporali. Vittorio Maniezzo Università di Bologna 97 TSP: il problema Sono date: n località (casa del commesso viaggiatore e di n-1 clienti). [d ij ] matrice di distanze, definisce le distanze (in Km, tempo, ) fra ogni coppia di località. Il TSP richiede di determinare il ciclo più corto che parte dalla casa, visita tutti i clienti una sola volta e torna a casa. Versioni simmetrica e asimmetrica, con finestre temporali (TSPTW) e senza, prize collecting, con costi cumulati, Vittorio Maniezzo Università di Bologna 98 45

46 TSP: un modello CP Variabili next associate a ogni nodo. Il dominio di ogni variabile next contiene i possibili nodi da visitare dopo next. n nodi n + 1 variabili Nexti (il deposito viene duplicato) Per ogni i: Nexti i path([next0, Nextn]) alldifferent([next0, Nextn]) ridondante Costo c ij se Nexti = j Si possono anche aggiungere variabili ridondanti Prev che indicano il predecessore del nodo. Vittorio Maniezzo Università di Bologna 99 TSP: codice tsp(data,next,costs): remove_arcs_to_self(next), path(next), alldifferent(next), create_objective(next,costs,z), minimize(labelling(next),z). path: vincolo globale che assicura che non ci siano sottocicli in soluzione. create_objective: crea variabili Costs, e impone un vincolo element tra le variabili Next e Costs. Inoltre, crea una variabile Z che quantifica la funzione obiettivo come somma di costi. Vittorio Maniezzo Università di Bologna

PROBLEMI DI VINCOLI CSP (Constraint satisfaction problems),, X ik. ) che specificano quali valori delle variabili sono compatibili tra loro,

PROBLEMI DI VINCOLI CSP (Constraint satisfaction problems),, X ik. ) che specificano quali valori delle variabili sono compatibili tra loro, PROBLEMI DI VINCOLI CSP (Constraint satisfaction problems) Dato un insieme finito di variabili X, X,, X n D, D,, D n i cui valori appartengono a domini e un insieme di vincoli c(x i, X i,, X ik ) che specificano

Dettagli

PROBLEMI DI VINCOLI CSP (Constraint satisfaction problems) trovare una assegnazione di valori alle variabili che soddisfa i vincoli.

PROBLEMI DI VINCOLI CSP (Constraint satisfaction problems) trovare una assegnazione di valori alle variabili che soddisfa i vincoli. PROBLEMI DI VINCOLI CSP (Constraint satisfaction problems) Dato un insieme finito di variabili X, X,, X n i cui valori appartengono a domini D, D,, D n e un insieme di vincoli c(x i, X i,, X ik ) che specificano

Dettagli

Constraint Satisfaction Problems

Constraint Satisfaction Problems Constraint Satisfaction Problems Corso di Intelligenza Artificiale, a.a. 2017-2018 Prof. Francesco Trovò 19/03/2018 Constraint Satisfaction problem Fino ad ora ogni stato è stato modellizzato come una

Dettagli

Ci concentriamo su Programmazione a vincoli su domini finiti

Ci concentriamo su Programmazione a vincoli su domini finiti APPLICAZIONI Ci concentriamo su Programmazione a vincoli su domini finiti Applicazioni: Scheduling - Timetabling - Allocazione di risorse Routing Packing - Cutting ottimizzazione Grafica - Visione Le aste

Dettagli

Problemi di Ottimizzazione

Problemi di Ottimizzazione Problemi di Ottimizzazione Obiettivo: misura della qualità di una soluzione. Vincoli: condizioni che devono essere soddisfatte per ottenere una soluzione ammissibile. Problema di Ottimizzazione: determina

Dettagli

Problemi di soddisfacimento di vincoli. Maria Simi a.a. 2015/2016

Problemi di soddisfacimento di vincoli. Maria Simi a.a. 2015/2016 Problemi di soddisfacimento di vincoli Maria Simi a.a. 2015/2016 Problemi di soddisfacimento di vincoli (CSP) Sono problemi con una struttura particolare, per cui conviene pensare ad algoritmi specializzati

Dettagli

3.4 Metodo di Branch and Bound

3.4 Metodo di Branch and Bound 3.4 Metodo di Branch and Bound Consideriamo un generico problema di Ottimizzazione Discreta dove X è la regione ammissibile. (P ) z = max{c(x) : x X} Metodologia generale di enumerazione implicita (Land

Dettagli

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Scopo: Stimare l onere computazionale per risolvere problemi di ottimizzazione e di altra natura

Dettagli

Teoria della Complessità Computazionale

Teoria della Complessità Computazionale Teoria della Complessità Computazionale Daniele Vigo D.E.I.S. - Università di Bologna dvigo@deis.unibo.it Rev. 1.3, 11/00 rev. 1.3 - Novembre 2000 Teoria della Complessità Studia la difficoltà dei problemi

Dettagli

Richiami di Teoria dei Grafi. Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena

Richiami di Teoria dei Grafi. Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena Richiami di Teoria dei Grafi Paolo Detti Dipartimento di Ingegneria dell Informazione Università di Siena Teoria dei grafi La Teoria dei Grafi costituisce, al pari della Programmazione Matematica, un corpo

Dettagli

Partizioni intere. =! i# P. Es: Dato {38, 17, 52, 61, 21, 88, 25} possiamo rispondere positivamente al quesito poiché

Partizioni intere. =! i# P. Es: Dato {38, 17, 52, 61, 21, 88, 25} possiamo rispondere positivamente al quesito poiché Partizioni intere PARTIZIONAMENTO: Dato un insieme di n interi non negativi rappresentati in binario, trovare un sottoinsieme P! {1,2,..., n } tale che! i"p a i =! i# P a i Es: Dato {38, 17, 52, 61, 21,

Dettagli

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

2 OTTIMIZZAZIONE SU GRAFI. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 2 OTTIMIZZAZIONE SU GRAFI E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Molti problemi decisionali possono essere formulati utilizzando il linguaggio della teoria dei grafi. Esempi: - problemi di

Dettagli

3.2 Rilassamenti lineari/combinatori e bounds

3.2 Rilassamenti lineari/combinatori e bounds 3.2 Rilassamenti lineari/combinatori e bounds Consideriamo un problema di Ottimizzazione Discreta min{f(x) : x X} e sia z il valore di una soluzione ottima x X. Metodi di risoluzione spesso generano una

Dettagli

NP completezza. Problemi astratti

NP completezza. Problemi astratti NP completezza Vittorio Maniezzo - Università di Bologna Problemi astratti Un problema è un entità astratta (es. il TSP). Una istanzadel problema è un suo caso particolare in cui vengono specificati tutti

Dettagli

SCHEDULING - TIMETABLING - ALLOCAZIONE DI RISORSE APPLICAZIONI. SCHEDULING: Attività. SCHEDULING: definizione del problema

SCHEDULING - TIMETABLING - ALLOCAZIONE DI RISORSE APPLICAZIONI. SCHEDULING: Attività. SCHEDULING: definizione del problema APPLICAZIONI Ci concentriamo su Programmazione a vincoli su domini finiti SCHEDULING - TIMETABLING - ALLOCAZIONE DI RISORSE Tre applicazioni con vincoli e caratteristiche comuni: ci concentriamo sullo

Dettagli

5.1 Metodo Branch and Bound

5.1 Metodo Branch and Bound 5. Metodo Branch and Bound Si consideri il problema min{ c(x) : x X } Idea: Ricondurre la risoluzione di un problema difficile a quella di sottoproblemi più semplici effettuando una partizione (ricorsiva)

Dettagli

NP completezza. Vittorio Maniezzo - Università di Bologna

NP completezza. Vittorio Maniezzo - Università di Bologna NP completezza Vittorio Maniezzo - Università di Bologna Problemi astratti Un problema è un entità astratta (es. il TSP). Una istanzadel problema è un suo caso particolare in cui vengono specificati tutti

Dettagli

Sintesi Sequenziale Sincrona Sintesi Comportamentale di reti Sequenziali Sincrone

Sintesi Sequenziale Sincrona Sintesi Comportamentale di reti Sequenziali Sincrone Sintesi Sequenziale Sincrona Sintesi Comportamentale di reti Sequenziali Sincrone Il problema dell assegnamento degli stati versione del 9/1/03 Sintesi: Assegnamento degli stati La riduzione del numero

Dettagli

Algoritmi esatti. La teoria ci dice che per problemi difficili (come il

Algoritmi esatti. La teoria ci dice che per problemi difficili (come il p. 1/4 Algoritmi esatti La teoria ci dice che per problemi difficili (come il KNAPSACK o, ancora di più, il TSP ) i tempi di risoluzione delle istanze, calcolati tramite analisi worst-case, tendono a crescere

Dettagli

Certificati dei problemi in NP

Certificati dei problemi in NP Certificati dei problemi in NP La stringa y viene in genere denominata un certificato Un Certificato è una informazione ausiliaria che può essere utilizzata per verificare in tempo polinomiale nella dimensione

Dettagli

N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST

N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST La soluzione è rappresentata da una permutazione della lista: [1,2,3,4,5,6,7,8] La permutazione è una soluzione se le posizioni di ogni regina

Dettagli

METODI DELLA RICERCA OPERATIVA

METODI DELLA RICERCA OPERATIVA Università degli Studi di Cagliari FACOLTA' DI INGEGNERIA CORSO DI METODI DELLA RICERCA OPERATIVA Dott.ing. Massimo Di Francesco (mdifrance@unica.it) i i Dott.ing. Maria Ilaria Lunesu (ilaria.lunesu@unica.it)

Dettagli

Algoritmi Euristici. Molti problemi reali richiedono soluzioni algoritmiche

Algoritmi Euristici. Molti problemi reali richiedono soluzioni algoritmiche 9 Algoritmi Euristici introduzione Vittorio Maniezzo Università di Bologna 1 Molti problemi reali richiedono soluzioni algoritmiche I camion devono essere instradati VRP, NP-hard I depositi o i punti di

Dettagli

Sistemi con vincoli. Docente: Francesca Rossi.

Sistemi con vincoli. Docente: Francesca Rossi. E-mail: frossi@math.unipd.it Scopo del corso Dare le nozioni di base della programmazione con vincoli Come rappresentare un problema reale con un insieme di vincoli Tecniche principali per risolverlo Approccio

Dettagli

Tail,PermTail), delete1(head,permlist. PermList,PermTail).

Tail,PermTail), delete1(head,permlist. PermList,PermTail). N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST La soluzione è rappresentata da una permutazione della lista: [1,2,3,4,5,6,7,8] La permutazione è una soluzione se le posizioni di ogni regina

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Automi e Linguaggi Formali Problemi intrattabili, classi P e NP A.A. 2014-2015 Alessandro Sperduti sperduti@math.unipd.it Problemi intrattabili Ci occuperemo solo di problemi decidibili, cioè ricorsivi.

Dettagli

Massimo flusso e matching

Massimo flusso e matching Capitolo Massimo flusso e matching. Problema del massimo matching. Nel problema del massimo matching è dato un grafo non orientato G(V, A); un matching in G è un insieme di archi M A tale che nessuna coppia

Dettagli

Problemi, istanze, soluzioni

Problemi, istanze, soluzioni lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un

Dettagli

Domini arc-consistenticonsistenti

Domini arc-consistenticonsistenti ECLiPSe ECLiPSe è un linguaggio CLP basato su Prolog che incorpora varie librerie, che forniscono dei risolutori specifici fd sui domini finiti conjunto sugli insiemi eplex reali, vincoli lineari Inoltre,

Dettagli

Tail,PermTail), delete1(head,permlist. PermList,PermTail).

Tail,PermTail), delete1(head,permlist. PermList,PermTail). N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST La soluzione è rappresentata da una permutazione della lista: [1,2,3,4,5,6,7,8] La permutazione è una soluzione se le posizioni di ogni regina

Dettagli

PROBLEMI DI SODDISFACIMENTO DI VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI CONSTRAINT GRAPHS. ESEMPIO: Map Coloring

PROBLEMI DI SODDISFACIMENTO DI VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI CONSTRAINT GRAPHS. ESEMPIO: Map Coloring PROGRAMMAZIONE LOGICA A VINCOLI Problemi di soddisfacimento di vincoli: concetti generali Programmazione Logica vantaggi limiti Programmazione Logica a Vincoli dominio e interpretazione controllo modello

Dettagli

Problemi intrattabili

Problemi intrattabili Tempo polinomiale ed esponenziale Una Tm M ha complessita in tempo T(n) se, dato un input w di lunghezza n, M si ferma dopo al massimo T (n) passi. Problemi intrattabili Ci occuperemo solo di problemi

Dettagli

Y1-Y= Y=\=Xdist, =Xdist,

Y1-Y= Y=\=Xdist, =Xdist, N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST La soluzione è rappresentata da una permutazione della lista: [1,2,3,4,5,6,7,8] La permutazione è una soluzione se le posizioni di ogni regina

Dettagli

APPLICAZIONI SCHEDULING - TIMETABLING - ALLOCAZIONE DI RISORSE. Applicazioni: Routing Packing - Cutting. Grafica - Visione Le aste elettroniche

APPLICAZIONI SCHEDULING - TIMETABLING - ALLOCAZIONE DI RISORSE. Applicazioni: Routing Packing - Cutting. Grafica - Visione Le aste elettroniche APPLICAZIONI Ci concentriamo su Programmazione a vincoli su domini finiti Applicazioni: Scheduling - Timetabling - Allocazione di risorse Routing Packing - Cutting ottimizzazione Grafica - Visione Le aste

Dettagli

Possibile applicazione

Possibile applicazione p. 1/4 Assegnamento Siano dati due insiemi A e B entrambi di cardinalità n. Ad ogni coppia (a i,b j ) A B è associato un valore d ij 0 che misura la "incompatibilità" tra a i e b j, anche interpretabile

Dettagli

Algoritmo Branch and Cut (B&C)

Algoritmo Branch and Cut (B&C) Programmazione Lineare Intera: III Algoritmo Branch and Cut Daniele Vigo DEIS Università di Bologna dvigo@deisuniboit rev.0 aprile 2005 Algoritmo Branch and Cut (B&C) Sviluppato negli anni 90, nasce come

Dettagli

Introduzione al Column Generation Caso di Studio: il Bin Packing Problem

Introduzione al Column Generation Caso di Studio: il Bin Packing Problem Introduzione al Column Generation Caso di Studio: il Bin Packing Problem November 15, 2014 1 / 26 Introduzione Il column generation è una metodologia che può essere usata per risolvere problemi di ottimizzazione

Dettagli

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI AI CONSTRAINT SOLVING OPERATIONS RESEARCH CONSTRAINT PROGRAMMING LOGIC PROGRAMMING SOFTWARE ENGINEERING 1 PROGRAMMAZIONE LOGICA A VINCOLI Problemi di soddisfacimento di

Dettagli

Algoritmo di Branch & Bound

Algoritmo di Branch & Bound Sapienza Università di Roma - Dipartimento di Ingegneria Informatica, Automatica e Gestionale Algoritmo di Branch & Bound Docente: Renato Bruni bruni@dis.uniroma.it Corso di: Ottimizzazione Combinatoria

Dettagli

6.6 Sequence Alignment

6.6 Sequence Alignment 6.6 Sequence Alignment E capitato anche a voi? Di digitare sul computer una parola in maniera sbagliata (per esempio usando un dizionario sul Web): AGORITNI E sentirsi chiedere: «Forse cercavi ALGORITMI?»

Dettagli

Parte V: Rilassamento Lagrangiano

Parte V: Rilassamento Lagrangiano Parte V: Rilassamento Lagrangiano Tecnica Lagrangiana Consideriamo il seguente problema di Programmazione Lineare Intera: P 1 min c T x L I Ax > b Cx > d x > 0, intera in cui A = matrice m x n C = matrice

Dettagli

Esercizi d'esame su strategie di ricerca, CSP e Giochi. Compiti d'esame 2017 e 2018

Esercizi d'esame su strategie di ricerca, CSP e Giochi. Compiti d'esame 2017 e 2018 Esercizi d'esame su strategie di ricerca, CSP e Giochi Compiti d'esame 2017 e 2018 1 Giugno 2018 Strategia a costo uniforme Si consideri il seguente grafo in cui gli archi sono annotati col costo e si

Dettagli

Intelligenza Artificiale. Logica proposizionale: calcolo automatico

Intelligenza Artificiale. Logica proposizionale: calcolo automatico Intelligenza Artificiale Logica proposizionale: calcolo automatico Marco Piastra Logica formale (Parte 3) - Parte 3 Calcolo automatico Forme normali ed a clausole Risoluzione e refutazione Forward chaining

Dettagli

Prima prova Intermedia di Ricerca Operativa 2 COMPITO A Esercizio 1 (7 punti): LIFO

Prima prova Intermedia di Ricerca Operativa 2 COMPITO A Esercizio 1 (7 punti): LIFO Prima prova Intermedia di Ricerca Operativa 2 COMPITO A 13 novembre 2015 Nome e Cognome Matricola: Esercizio 1 (7 punti): Si consideri il seguente problema di programmazione lineare intera. max 32x 1 +

Dettagli

Metodo di Quine- McCluskey

Metodo di Quine- McCluskey Metodo di Quine- McCluskey Maurizio Palesi Maurizio Palesi 1 Definizioni Date due funzioni f(x 1,x 2,,x n ) e g(x 1,x 2,,x n ) si dice che f copre g (oppure g implica f) e si scrive f g se f(x 1,x 2,,x

Dettagli

PROBLEMI DI SODDISFACIMENTO DI VINCOLI

PROBLEMI DI SODDISFACIMENTO DI VINCOLI PROBLEMI DI SODDISFACIMENTO DI VINCOLI ESERCIZIO Ci sono 5 scatole (S1,...,S5 nell'ordine) che possono contenere numeri da 1 a 5. Si inseriscano i 5 numeri nelle scatole rispettando il vincolo: Si può

Dettagli

Algoritmo dibranch & Bound

Algoritmo dibranch & Bound Sapienza Università di Roma - Dipartimento di Ingegneria Informatica, Automatica e Gestionale Algoritmo dibranch & Bound Docente: Renato Bruni bruni@dis.uniroma.it Corso di: Ottimizzazione Combinatoria

Dettagli

6.5 RNA Secondary Structure. 18 novembre 2014

6.5 RNA Secondary Structure. 18 novembre 2014 6.5 RNA Secondary Structure 18 novembre 2014 Calendario Oggi è la lezione 17/24: ultima lezione su Programmazione dinamica Metodo greedy: 18, 19 Grafi: 20, 21, 22, 23 Reti di flusso: 23, 24 (=mercoledì

Dettagli

TIPOLOGIE ESERCIZI SUI VINCOLI

TIPOLOGIE ESERCIZI SUI VINCOLI TIPOLOGIE ESERCIZI SUI VINCOLI Si hanno due categorie di esercizi: Modellazione + risoluzione Risoluzione data la modellazione sotto forma di variaili e vincoli oppure di grafo Per la risoluzione: Tecniche

Dettagli

ECLiPSe è un linguaggio CLP basato su Prolog che incorpora varie librerie, che forniscono dei risolutori specifici. reali, vincoli lineari

ECLiPSe è un linguaggio CLP basato su Prolog che incorpora varie librerie, che forniscono dei risolutori specifici. reali, vincoli lineari ECLiPSe ECLiPSe è un linguaggio CLP basato su Prolog che incorpora varie librerie, che forniscono dei risolutori specifici fd sui domini finiti conjunto sugli insiemi eplex reali, vincoli lineari Inoltre,

Dettagli

Problemi di localizzazione di servizi (Facility Location Problems)

Problemi di localizzazione di servizi (Facility Location Problems) 9. Problemi di Localizzazione di Servizi 1 Problemi di localizzazione di servizi (Facility Location Problems) Dato un insieme di clienti richiedenti una data domanda di merce e dato un insieme di possibili

Dettagli

Teoria della Complessità Concetti fondamentali

Teoria della Complessità Concetti fondamentali Teoria della Complessità Concetti fondamentali L oggetto della teoria della complessità è stabilire se un problema sia facile o difficile La difficoltà di un problema è una caratteristica generale e non

Dettagli

Problemi intrattabili, classi P e NP. Problemi intrattabili, classi P e NP

Problemi intrattabili, classi P e NP. Problemi intrattabili, classi P e NP roblemi intrattabili Ci occuperemo solo di problemi decidibili, cioe ricorsivi. Tra loro, alcuni sono detti trattabili, se si puo provare che sono risolvibili in tempo polinomiale in modo deterministico.

Dettagli

Algoritmo per A. !(x) Istanza di B

Algoritmo per A. !(x) Istanza di B Riduzioni polinomiali Una funzione f: T*!T* è detta computabile in tempo polinomiale se esiste una macchina di Turing limitata polinomialmente che la computi. Siano L 1 e L 2 " T* due linguaggi. Una funzione

Dettagli

Ricerca Operativa A.A. 2007/ Esercitazione di laboratorio: Branch and Bound.

Ricerca Operativa A.A. 2007/ Esercitazione di laboratorio: Branch and Bound. Ricerca Operativa A.A. 2007/2008 17. Esercitazione di laboratorio: Branch and Bound. Luigi De Giovanni - Ricerca Operativa - 17. Esercitazione di laboratorio: Branch and Bound 17.1 . Luigi De Giovanni

Dettagli

Graphs: Cycles. Tecniche di Programmazione A.A. 2012/2013

Graphs: Cycles. Tecniche di Programmazione A.A. 2012/2013 Graphs: Cycles Tecniche di Programmazione Summary Definitions Algorithms 2 Definitions Graphs: Cycles Cycle A cycle of a graph, sometimes also called a circuit, is a subset of the edge set of that forms

Dettagli

Finite Model Theory / Descriptive Complexity: bin

Finite Model Theory / Descriptive Complexity: bin , CMPSCI 601: Recall From Last Time Lecture 19 Finite Model Theory / Descriptive Compleity: Th: FO L DSPACE Fagin s Th: NP SO. bin is quantifier-free.!#"$&% ('*), 1 Space 0 1 ) % Time $ "$ $ $ "$ $.....

Dettagli

Il metodo dei Piani di Taglio (Cutting Planes Method)

Il metodo dei Piani di Taglio (Cutting Planes Method) Il metodo dei Piani di Taglio (Cutting Planes Method) E un metodo di soluzione dei problemi (IP) di tipo generale. L idea di base: Se la soluzione di (RL) non è intera allora la soluzione ottima intera

Dettagli

i completi l'esecuzione dell'algoritmo di programmazione dinamica per questo problema restituendo il valore ottimo e una soluzione ottima del problema

i completi l'esecuzione dell'algoritmo di programmazione dinamica per questo problema restituendo il valore ottimo e una soluzione ottima del problema Compito di Ricerca Operativa II Esercizio ( punti). ia dato il problema di flusso massimo sulla rete in figura (le capacit a degli archi sono riportate sopra di essi). 0 8 i consideri il seguente flusso

Dettagli

csp & backtracking informatica e laboratorio di programmazione Alberto Ferrari Informatica e Laboratorio di Programmazione

csp & backtracking informatica e laboratorio di programmazione Alberto Ferrari Informatica e Laboratorio di Programmazione csp & backtracking informatica e laboratorio di programmazione Alberto Ferrari Informatica e Laboratorio di Programmazione CSP (Constraint Satisfaction Problem) o CSP = problemi di soddisfacimento di vincoli

Dettagli

Logica proposizionale

Logica proposizionale Logica proposizionale Proposizione: frase compiuta che è sempre o vera o falsa. Connettivi Posti in ordine di precedenza: not, and, or, implica, doppia implicazione Sintassi Le proposizioni sono costituite

Dettagli

Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities

Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities L. De Giovanni M. Di Summa In questa lezione introdurremo una classe di disuguaglianze, dette cover inequalities, che permettono di

Dettagli

Capitolo 3: Ottimizzazione Discreta. E. Amaldi DEI, Politecnico di Milano

Capitolo 3: Ottimizzazione Discreta. E. Amaldi DEI, Politecnico di Milano Capitolo 3: Ottimizzazione Discreta E. Amaldi DEI, Politecnico di Milano 3.1 Modelli di PLI e PLMI Moltissimi problemi decisionali complessi possono essere formulati come problemi di Programmazione Lineare

Dettagli

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015 1 Lunedí 20 Aprile 2015 1 Istituto di Analisi dei Sistemi ed Informatica IASI - CNR Rilassamento di un problema Rilassare un problema di Programmazione Matematica vuol dire trascurare alcuni (tutti i)

Dettagli

Fondamenti di Teoria delle Basi di Dati

Fondamenti di Teoria delle Basi di Dati Fondamenti di Teoria delle Basi di Dati Riccardo Torlone Parte 8: Teoria delle dipendenze Vincoli di integrità Esistono istanze di basi di dati che, pur sintatticamente corrette, non rappresentano informazioni

Dettagli

Parte III: Algoritmo di Branch-and-Bound

Parte III: Algoritmo di Branch-and-Bound Parte III: Algoritmo di Branch-and-Bound Divide et Impera Sia z * max {c T x : x S} (1) un problema di ottimizzazione combinatoria difficile da risolvere. Domanda: E possibile decomporre il problema (1)

Dettagli

1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44;

1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44; 1) Data la seguente istanza di TSP (grafo completo con 5 nodi): c 12 = 52; c 13 = 51; c 14 = 40; c 15 = 53; c 23 = 44; c 24 = 15; c 25 = 12; c 34 = 32; c 35 = 55; c 45 = 24 Si calcoli l ottimo duale (formulazione

Dettagli

PROBLEMA DEL COMMESSO VIAGGIATORE

PROBLEMA DEL COMMESSO VIAGGIATORE PROBLEMA DEL COMMESSO VIAGGIATORE INTRODUZIONE Il problema del commesso viaggiatore (traveling salesman problem :TSP) è un classico problema di ottimizzazione che si pone ogni qual volta, dati un numero

Dettagli

Programmazione Lineare Intera: Piani di Taglio

Programmazione Lineare Intera: Piani di Taglio Programmazione Lineare Intera: Piani di Taglio Andrea Scozzari a.a. 2014-2015 April 22, 2015 Andrea Scozzari (a.a. 2014-2015) Programmazione Lineare Intera: Piani di Taglio April 22, 2015 1 / 23 Programmazione

Dettagli

Risoluzione di un problema

Risoluzione di un problema Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito

Dettagli

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 14 Gennaio 2016 Tempo a disposizione: 2 h Risultato: 32/32 punti

FONDAMENTI DI INTELLIGENZA ARTIFICIALE 14 Gennaio 2016 Tempo a disposizione: 2 h Risultato: 32/32 punti FONDAMENTI DI INTELLIGENZA ARTIFICIALE 14 Gennaio 2016 Tempo a disposizione: 2 h Risultato: 32/32 punti Esercizio 1 (6 punti) Si rappresentino in logica dei predicati del I ordine, le seguenti affermazioni:

Dettagli

FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU) 13 Gennaio 2015 Tempo a disposizione: 2 h Risultato: 32/32 punti

FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU) 13 Gennaio 2015 Tempo a disposizione: 2 h Risultato: 32/32 punti FONDAMENTI DI INTELLIGENZA ARTIFICIALE (8 CFU) 13 Gennaio 2015 Tempo a disposizione: 2 h Risultato: 32/32 punti Esercizio 1 (6 punti) Si esprimano in logica dei predicati del I ordine le seguenti frasi:

Dettagli

Lezioni di Ricerca Operativa

Lezioni di Ricerca Operativa Lezioni di Ricerca Operativa Massimo Paolucci Dipartimento di Informatica, Sistemistica e Telematica (DIST) Università di Genova paolucci@dist.unige.it http://www.dattero.dist.unige.it Anno accademico

Dettagli

Strutture dati e loro organizzazione. Gabriella Trucco

Strutture dati e loro organizzazione. Gabriella Trucco Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi

Dettagli

Teoria della Complessità Computazionale Parte I: Introduzione

Teoria della Complessità Computazionale Parte I: Introduzione Teoria della Complessità Computazionale Parte I: Introduzione Daniele Vigo D.E.I.S. - Università di Bologna dvigo@deis.unibo.it rev. 3.0 - ottobre 2003 Teoria della Complessità Studia la difficoltà dei

Dettagli

e Algoritmi Marco Piastra Intelligenza Artificiale I Soddisfacibilità

e Algoritmi Marco Piastra Intelligenza Artificiale I Soddisfacibilità Intelligenza Artificiale I Soddisfacibilità e Algoritmi Marco Piastra Intelligenza Artificiale I - A.A. 2010- Soddisfacibilità e Semantic Tableau [1] Problemi e decidibilità (automatica) Problema Un problema

Dettagli

Algoritmo basato su cancellazione di cicli

Algoritmo basato su cancellazione di cicli Algoritmo basato su cancellazione di cicli Dato un flusso ammissibile iniziale, si costruisce una sequenza di flussi ammissibili di costo decrescente. Ciascun flusso è ottenuto dal precedente flusso ammissibile

Dettagli

Complessità Computazionale

Complessità Computazionale Complessità Computazionale La teoria della Computabilità cattura la nozione di algoritmo nel senso che per ogni problema sia esso decisionale o di calcolo di funzione stabilisce dei criteri per determinare

Dettagli

Stime dell ottimo - Rilassamenti. PRTLC - Rilassamenti

Stime dell ottimo - Rilassamenti. PRTLC - Rilassamenti Stime dell ottimo - Rilassamenti PRTLC - Rilassamenti Schema delle esercitazioni Come ricavare la soluzione ottima Modelli Solver commerciali Come ricavare una stima dell ottimo: rilassamenti Rilassamento

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Programmazione Matematica: VI Estensioni dell algoritmo del Simplesso

Programmazione Matematica: VI Estensioni dell algoritmo del Simplesso Programmazione Matematica: VI Estensioni dell algoritmo del Simplesso Daniele Vigo D.E.I.S. Università di Bologna dvigo@deis.unibo.it rev. 1.0 Aprile 2004 Algoritmo del Simplesso L algoritmo del Simplesso

Dettagli

PIANIFICAZIONE BASATA SU GRAFI

PIANIFICAZIONE BASATA SU GRAFI PIANIFICAZIONE BASATA SU GRAFI Nel 1995 viene proposto da Blum e Furst CMU un nuovo pianificatore GRAPHPLAN basato sui grafi Durante la pianificazione viene creato un particolare grafo detto Planning Graph

Dettagli

3.3 FORMULAZIONE DEL MODELLO E CONDIZIONI DI

3.3 FORMULAZIONE DEL MODELLO E CONDIZIONI DI 3.3 FORMULAZIONE DEL MODELLO E CONDIZIONI DI ESISTENZA DI UN PUNTO DI OTTIMO VINCOLATO Il problema di ottimizzazione vincolata introdotto nel paragrafo precedente può essere formulato nel modo seguente:

Dettagli

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI. Michela Milano PROBLEMI DI SODDISFACIMENTO DI VINCOLI

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI. Michela Milano PROBLEMI DI SODDISFACIMENTO DI VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI AI CONSTRAINT SOLVING OPERATIONS RESEARCH Michela Milano DEIS - Università di Bologna mmilano@deis deis.unibo.itit http:// ://www-lia.deis.unibo.it

Dettagli

Il problema del commesso viaggiatore e problemi di vehicle routing

Il problema del commesso viaggiatore e problemi di vehicle routing Il problema del commesso viaggiatore e problemi di vehicle routing Laura Galli Dipartimento di Informatica Largo B. Pontecorvo 3, 56127 Pisa laura.galli@unipi.it http://www.di.unipi.it/~galli 2 Dicembre

Dettagli

Aniello Murano Classe dei problemi NP. Nella lezione precedente abbiamo visto alcuni problemi che ammettono soluzione polinomiale

Aniello Murano Classe dei problemi NP. Nella lezione precedente abbiamo visto alcuni problemi che ammettono soluzione polinomiale Aniello Murano Classe dei problemi NP 13 Lezione n. Parole chiave: Classe NP Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Introduzione alla lezione Nella lezione

Dettagli

ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I

ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I Esercizio 1 Dati n oggetti ed un contenitore, ad ogni oggetto j (j = 1,, n) sono associati un peso p j ed un costo c j (con p j e c j interi positivi). Si

Dettagli

ASSEGNAMENTO DELLE OPERAZIONI DI TAGLIO NELLA PRODUZIONE DI CAPI DI ABBIGLIAMENTO

ASSEGNAMENTO DELLE OPERAZIONI DI TAGLIO NELLA PRODUZIONE DI CAPI DI ABBIGLIAMENTO ASSEGNAMENTO DELLE OPERAZIONI DI TAGLIO NELLA PRODUZIONE DI CAPI DI ABBIGLIAMENTO Lo scenario produttivo Una nota azienda produce capi di abbigliamento per l alta moda Ogni capo è costituito da vari pezzi

Dettagli

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI AI CONSTRAINT SOLVING OPERATIONS RESEARCH CONSTRAINT PROGRAMMING LOGIC PROGRAMMING SOFTWARE ENGINEERING 1 PROGRAMMAZIONE LOGICA A VINCOLI Problemi di soddisfacimento di

Dettagli

Tipici tempi di esecuzione. Martedì 7 ottobre 2014

Tipici tempi di esecuzione. Martedì 7 ottobre 2014 Tipici tempi di esecuzione Martedì 7 ottobre 2014 Punto della situazione Abbiamo definito il tempo di esecuzione di un algoritmo Scelto l analisi asintotica Abbiamo definito le notazioni asintotiche che

Dettagli

PROGRAMMAZIONE LOGICA A VINCOLI

PROGRAMMAZIONE LOGICA A VINCOLI PROGRAMMAZIONE LOGICA A VINCOLI Michela Milano DEIS - Università di Bologna mmilano@deis deis.unibo.itit http:// ://www-lia.deis.unibo.it/staff/michelamilano/ PROGRAMMAZIONE LOGICA A VINCOLI AI CONSTRAINT

Dettagli

Ottimizzazione Combinatoria 2 Presentazione

Ottimizzazione Combinatoria 2 Presentazione Ottimizzazione Combinatoria Presentazione ANTONIO SASSANO Università di Roma La Sapienza Dipartimento di Informatica, Automatica e Gestionale «Antonio Ruberti» Roma, Febbraio Prerequisiti (cosa sapete)

Dettagli

Struttura del Corso. Durata

Struttura del Corso. Durata Manuel Iori Dipartimento di Scienze e Metodi dell Ingegneria (DISMI) Università degli studi di Modena e Reggio Emilia Via Amendola 2, Pad. Buccola, 42122 Reggio Emilia web: www.or.unimore.it/iori/iori.htm

Dettagli

LA PROGRAMMAZIONE MATEMATICA (p.m.)

LA PROGRAMMAZIONE MATEMATICA (p.m.) LA PROGRAMMAZIONE MATEMATICA (p.m.) Un problema di programmazione matematica è un problema di ottimizzazione riconducibile alla seguente espressione generale: ricercare i valori delle variabili x 1, x

Dettagli

ESERCIZIO 1 Si faccia riferimento all Allegato A - OPS 2016, problema ricorrente REGOLE E DEDUZIONI, pagina 2.

ESERCIZIO 1 Si faccia riferimento all Allegato A - OPS 2016, problema ricorrente REGOLE E DEDUZIONI, pagina 2. ESERCIZIO 1 Si faccia riferimento all Allegato A - OPS 2016, problema ricorrente REGOLE E DEDUZIONI, pagina 2. Siano date le seguenti regole: regola(1,[a,p,f],g) regola(2,[c,x],n) regola(3,[n,g],w) regola(4,[p,c,x],d)

Dettagli

La Programmazione Dinamica

La Programmazione Dinamica La Programmazione Dinamica Massimo Paolucci (paolucci@dist.unige.it) DIST Università di Genova 21/22 La Programmazione Dinamica 2 E un metodo di soluzione di problemi a stadi Ad ogni stadio corrisponde

Dettagli