Intelligenza Artificiale Elementi 2004 – 2005 Università degli Studi di Milano Bicocca Algoritmi di ricerca Matteo Palmonari [email protected] Outline 1. Problemi come spazio delle soluzioni • Alcuni esempi di problemi • Stati e transizioni • Rappresentazione dello spazio degli stati con grafi • Alberi di ricerca 2. Algoritmo generale di ricerca e ricerca non informata • Algoritmo generale di ricerca • Algoritmi di ricerca non informata: deep-first, breat-first, iterative deepening (IDA). • Accenni a problemi di complessità 3. Euristiche e ricerca informata • Il concetto di euristica • Ricerca best-first: ricerca golosa e A* • IDA* Risolvere problemi... problemi PROBLEM SOLVING Capacità di risolvere problemi Un fattore deve attraversare un fiume portando lupo, capra e cavolo con una barca a due posti. Non possono stare soli lupo con capra o capra con cavoli. Quale sequenza per trasbordare tutti sani e salvi? conosenza simbolica incerta conosenza simbolica abilità linguistica apprendimento I – Problemi come spazio delle soluzioni Outline 1. Problemi come spazio delle soluzioni • Alcuni esempi di problemi • Stati e transizioni • Rappresentazione dello spazio degli stati con grafi • Alberi di ricerca 2. Algoritmo generale di ricerca e ricerca non informata • Algoritmo generale di ricerca • Algoritmi di ricerca non informata: deep-first, breat-first, iterative deepening (IDA). • Accenni a problemi di complessità 3. Euristiche e ricerca informata • Il concetto di euristica • Ricerca best-first: ricerca golosa e A* • IDA* Esempio di soluzione di problemi (1) Un fattore deve attraversare un fiume portando lupo, capra e cavolo con una barca a due posti. Non possono stare soli lupo con capra o capra con cavoli. Quale sequenza per trasbordare tutti sani e salvi? [Bechet de Merizac, Lione 1613] F L Cp Cv F L Cp Cv stato stato Transizione tra i due stati in seguito ad un’azione Rappresentazione: specifica ciò che è vero di una situazione e omette ciò che non è vero (ad esempio, non c’è un ponte più avanti sul fiume). Astrarre caratteristiche rilevanti Esempio di soluzione di problemi (2) Un contenitore parzialmente riempito di acqua contiene un litro di una soluzione alcohol-acqua al 90%. Quanta acqua deve essere aggiunta per diluire la soluzione all’80% di alcohol? (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) A1 + dA = A2 W1 + dW = W2 L1 + dL = L2 A1 + W1 = L1 A2 + W 2 = L2 dA + d W = dL dA = 0 A1 = 0.9 * L1 A2 = 0.8 * L2 L1 = 1 Trovare dW: (a): (10) in (8) (b): (a) + (7) in (1) (c): (b) in (9) A1 = 0.9 A2 = 0.9 L2 = 0.9 (d): (c) e (10) in (3) 0.8 0.9 dL = 0.8 - 1 (e): (d) e (7) in (6) dW = 0.9 - 1 0.8 Rappresentazione: solo (8), (9) e (10) sono esplicite, le altre implicite (leggi di conservazione: conoscenza di senso comune). Ricerca: ci sono altre 21 sequenze di soluzione (da 5 a 7 passi). Non determinismo: gli operatori (di trasformazione delle equazioni) dicono cosa si può fare, non cosa si deve fare e in che ordine. Cammino minimo Qual’è la strada più breve per raggiungere Bucarest partendo da Oradea? • “...a partire da X (Oradea)”: dove mi trovo? • “...per raggiungere Y (Bucarest)”: dove devo andare? stato transizione stato Tipi di problemi principali Di cosa sono a conoscenza? Ho conoscenza del mio stato interno? Ho conoscenza dell’effetto delle mie azioni? Problema a stati singoli: Ho percezione dello stato corrente e di quello prodotto da ogni singola azione Ogni azione da uno stato a un’altro Problemi a stato multiplo: • non ho percezione (certa) dello stato in cui mi trovo. Devo ragionare sull’insieme di stati a cui ogni azione potrebbe condurmi. Ogni azione da un insieme di stati a un insieme di stati • non so con precisione che stato produce ogni azione. Ogni azione da uno stato a un insieme di stati Transizioni su insiemi di stati Problemi di contingenza: Capacità di rilevamento che dipende dalla fase di esecuzione. Ambieti dinamici Problemi ben definiti • Problema un insieme di informazioni • Soluzione = ricerca della soluzione + esecuzione • A noi interessa soprattutto la ricerca di una soluzione: • Input: Problema • Output: Soluzione • Questo output dovrà essere tale da poter essere passato come input nell’eventuale fase di esecuzione. • La definizione del problema è fondamentale perchè la sua soluzione possa essere cercata in modo algoritmico! • Astrazione: estrarre le caratteristiche rilevanti Problemi a stato singolo • Formulazione: individuare gli aspetti rilevanti e il grado di dettaglio • specificare lo spazio degli stati • stato iniziale • stato/i finale/i (esplicito o con test obiettivo) • azioni (transizioni/operatori/mosse) che conducono da uno stato all’altro • specificare il costo di ogni azione • Risoluzione: trovare un cammino dal costo ottimale dallo stato iniziale allo stato finale • Un cammino è una sequenza di azioni • una soluzione è un cammino dallo stato iniziale allo stato finale • il costo cammino è la somma dei costi delle azioni componenti • costo totale = costo della soluzione + costo della ricerca Problemi a stato multiplo Nei problemi a stato multiplo: • Il punto di partenza è un insieme di stati iniziali. • Per ciascuna azione gli operatori specificano un’insieme Y di stati raggiungibili a partire da un insieme X. Gli operatori sono funzioni da insiemi di stati ad altri insiemi. [Y è l’unione degli stati raggiugibili da ciascuno stato elemento di X] • Il cammino collega insiemi di stati In sostanza si tratta di raggiungere una soluzione in condizione di incertezza rispetto allo stato iniziale. Problema a stato singolo FILETTO o TRIS (TIC-TAC-TOE) Spazio degli stati Vi sono: 9 prime mosse 8 risposte a ognuna di esse 7 risposte a ognuna di esse ….. In totale: 9x8x7x…x1= 9! = 362.880 Gioco dell’8 E' più semplice muovere lo 'spazio vuoto'. Quattro possibili mosse: • muovi lo spazio verso l'alto (UP) muovi lo spazio verso il basso (DOWN) • muovi lo spazio a destra (RIGHT) • muovi lo spazio a sinistra (LEFT) UP 1 4 3 7 1 6 5 8 2 Esercizio: GIOCO DELL’8 in prolog (rappresentazione stati e azioni) LEFT DOWN RIGHT 1 2 3 1 4 3 1 4 3 1 4 3 7 4 6 8 7 6 7 8 6 7 6 4 5 8 2 5 8 2 5 6 2 5 8 2 LEFT RIGHT UP DOWN LEFT RIGHT UP DOWN 1 1 3 1 3 3 1 4 3 1 4 3 1 4 3 1 4 3 1 4 3 1 4 3 7 4 6 7 4 6 1 7 6 5 7 6 7 8 6 7 8 6 7 6 3 7 6 2 5 8 2 5 8 2 5 8 2 7 8 2 5 5 2 5 2 2 5 8 2 5 8 2 Risolvere problemi... problemi Rappresentazione del problema “ragionamento”: sfruttare la rappresentazione per trovare la soluzione PROBLEM SOLVING Capacità di risolvere problemi conosenza simbolica incerta conosenza simbolica abilità linguistica apprendimento Definizione dello spazio degli stati Costruzione della ricerca nello spazio degli stati: Albero di ricerca Rappresentazione dello spazio degli stati con grafi Lo spazio del problema è rappresentato da un grafo. Uno spazio degli stati è una quadrupla < N, A, I, F >: N = insieme di nodi (non necessariamente finito) A = insieme di archi (connettono coppie di nodi) I ⊆ N nodi iniziali (I ≠Ø ) F ⊆ N nodi finali (F≠Ø ) • • • • • • I nodi rappresentano gli stati, e gli archi le transizioni del problema Una sequenza di nodi [N1,N2,N3 ....,Nn] in cui ogni N j -1,Nj (1< j ≤ n) è un arco, è detto un cammino di lunghezza n. Se N1=Nn il cammino è detto ciclo dato un nodo Ni, • ogni nodo NJ , con j < i è detto antenato di Ni • ogni nodo NJ , con I < j è detto discendente di Ni • il nodo Ni -1 è detto genitore • il nodo Ni +1 è detto figlio Un nodo Ni è detto radice se non ha genitori è detto foglia se non ha figli Il grafo è detto DAG (Directed Acyclic Graph) se non contiene cicli albero se ogni nodo ha al massimo un genitore Un cammino è detto cammino soluzione se il primo nodo è un nodo iniziale e l'ultimo è un nodo finale Obiettivo della ricerca è trovare attraverso lo spazio degli stati un cammino (o più cammini) soluzione Esempi di grafi D C A B F E G H Alberi di ricerca nello spazio degli stati Processo di ricerca come costruzione di un albero di ricerca n1 n0 n2 p=0 n3 n4 n11 n12 n13 n14 Parametri di struttura: profondità p fattore di ramificazione r nell'esempio : p = 2 , r = 4 Lo spazio di ricerca non è dato (memorizzato) in anticipo, ma si costruisce passo per passo mediante regole p=1 p=2 I nodi degli alberi di ricerca I nodi sono strutture di dati. Un nodo n è una n-upla {s, nGen, o, p, c} • s: stato a cui corrisponde il nodo • nGen: nodo genitore • o: operatore da cui ottenuto n • p: profondità del nodo • c: costo cammino da stato iniziale (Russel Norvig) I nodi non coincidono con gli stati! (Due nodi diversi possono corrispondere a medesimi stati a cui si è arrivati da differenti cammini) Gli stati costituiscono i nodi nello spazio degli stati. I nodi degli alberi sono strutture dati. Lo spazio degli stati non è l’albero di ricerca (l’albero parte sempre da un nodo: ha una radice). La collezione di nodi in attesa di essere espansi è detta frontiera o confine. Rappresentazione dello spazio degli stati: esplicita/implicita Non sempre è possibile rappresentare esaustivamente uno spazio degli stati Rappresentazione esplicita: lo spazio degli stati è rappresentato in una struttura dati (che contiene tutti gli stati e le rispettive transizioni) Ex. Navigazione tra le città Rappresentazione implicita: gli stati sono rappresentati attraverso caratteristiche astratte, e metodi che, dato uno stato, consentono di ottenere uno stato raggiungibile attraverso una transizione Ex. Tris Quando si ha una rappresentazione esplicita la definizione dello spazio degli stati viene per lo più demandata alla costruzione dell’albero di ricerca Missionari e cannibali Esempio: missionari e cannibali Su una sponda di un fiume ci sono tre missionari: Rossi, Rossini e Rossetti, e tre cannibali: Bingo, Bongo e Bango. Si può attraversare il fiume con una barca che porta al più due persone. Se il numero di cannibali supera il numero di missionari presenti su una delle due sponde, i missionari vengono mangiati. Come usare la barca per trasbordare attraverso il fiume tutti i missionari e i cannibali senza rischi? Problema di soddisfacimento di vincoli (CSP) • Stati: valori di un insieme di variabili • Stato iniziale: nessun assegnamento di valori alle variabili • Stato finale: assegnamento di valori a tutte le variabili che soddisfa tutti i vincoli dati • Operatore: assegna a una variabile un valore del suo dominio • Profondità dell’albero = numero n di variabili Metodi di soluzione: • naif: generazione (assegnare valori a tutte le variabili) e prova (verificare se tutti i vincoli sono soddisfatti) in sequenza • migliorativo: generazione e prova sono intrecciati (per ogni assegnamento di valori a una variabile verificare se soddisfa i vincoli) • euristico: si possono applicare le ricerche iterative CSP: criptoaritmetica Esempio: S END+ MORE= MONEY Assegnare una cifra (0-9) a ciascuna lettera in modo che: • cifre distinte corrispondano a lettere distinte • le somme dei numeri ottenuti sostituendo lettere con cifre rispettino i vincoli dell’aritmetica VINCOLI CSP: puzzle logico I coniugi Brillante hanno cinque figli, che tengono fede al loro nome. Alle età di 4,5,6,7 e 8 anni, Rosa e i suoi fratelli mostrano un buon talento ciascuno in un campo diverso da quello degli altri. Determinare l'età e il talento di ognuno dei figli, sapendo che: • • • • • • Uno di loro suona bene il piano Carla ha 4 anni, e non è la Brillante matematica Il mago del computer è di un anno più vecchio di Stefano Il violinista ha 7 anni Giovanna non è quella di 8 anni All'età di 5 anni, Roberto è più giovane del Brillante bravo nel nuoto. VINCOLI Domini: età: {4,5,6,7,8} figlio: {carla, giovanna, roberto,rosa, stefano} talento: {matematica,violino,nuoto,computer,piano) Soluzione: Soluzione: (4,carla,piano),(5,roberto,matematica), (4,carla,piano),(5,roberto,matematica), (6,giovanna,nuoto),(7,stefano,violino),(8,rosa,computer) (6,giovanna,nuoto),(7,stefano,violino),(8,rosa,computer) Un esempio noto di ricerca... n0 n1 n2 n3 SLD-Risoluzione SLD-Risoluzione n11 n12 n13 n14 Spazio degli stati: Quali sono gli stati e quali le transizioni? Stato iniziale e stato obiettivo? Costruzione dell’albero? n4 II – Algoritmo generale di ricerca e ricerca non informata Outline 1. Problemi come spazio delle soluzioni • Alcuni esempi di problemi • Stati e transizioni • Rappresentazione dello spazio degli stati con grafi • Alberi di ricerca 2. Algoritmo generale di ricerca e ricerca non informata • Algoritmo generale di ricerca • Algoritmi di ricerca non informata: deep-first, breat-first, iterative deepening (IDA). • Accenni a problemi di complessità 3. Euristiche e ricerca informata • Il concetto di euristica • Ricerca best-first: ricerca golosa e A* • IDA* Algoritmo generale di ricerca 1. L: lista di nodi da esaminare (inizialmente: i nodi iniziali) 2. Se L vuota, fallimento. Altrimenti, selezionare un nodo n da L. 3. Se n è un nodo finale, terminare restituendo il cammino dal nodo iniziale a n. 4. Altrimenti, cancellare n da L e aggiungere a L tutti i figli di n, ciascuno con il suo cammino dal nodo iniziale. Tornare al passo 2. LE STRATEGIE DI RICERCA DIFFERISCONO NELLA SCELTA DEL NODO DA ESPANDERE E NEL MODO IN CUI I NODI FIGLI SONO AGGIUNTI ALLA FRONTIERA Strategie di ricerca • E' garantito che la ricerca trovi una soluzione (se c’è)? COMPLETEZZA • E’ garantito che la soluzione trovata è ottimale? Soluzione = cammino dal costo minore OTTIMALITA’ • Qual è la complessità in tempo e spazio della ricerca? EFFICIENZA • Si possono sfruttare caratteristiche specifiche del problema per ridurre la complessità? Dipende dalla strategia di ricerca adottata Criteri di valutazione tra strategie Ricerca informata e non informata • Ricerca non informata: l’algoritmo di ricerca procede adottando strategie generali indipendenti dal problema specifico. Quali nodi espando, in che modo? • Deep First, Breadth First, Iterative Deepening • Ricerca informata: si usano informazioni sul problema specifico per indirizzare la ricerca verso la soluzione. • Funzioni euristiche: misura dell’avvicinamento allo stato obiettivo. • Best First, Greedy search, A*, IDA*, etc. Risolvere problemi... problemi Rappresentazione del problema “ragionamento”: sfruttare la rappresentazione per trovare la soluzione PROBLEM SOLVING Capacità di risolvere problemi conosenza simbolica incerta conosenza simbolica abilità linguistica apprendimento Definizione dello spazio degli stati Costruzione della ricerca nello spazio degli stati: Albero di ricerca Ricerca Euristica... Rappresentazione “ragionamento”: sfruttare la del problema rappresentazione per trovare la + soluzione Definizione dello spazio degli stati Costruzione della ricerca nello spazio degli stati: Albero di ricerca Funzione di valutazione euristica Ricerca non informata Ricerca in profondità (depth-first) Lista L gestita come stack: • si seleziona il nodo di testa • si aggiungono i figli generati in testa 1 2 n1 7 n11 n12 n13 n14 3 4 5 6 8 9 n2 10 [n0] p=0 p=1 [n1,n2,n3,n4] [n11,n12,n13,n14,n2,n3,n4] p = 2 m=1 m=4 m=7 n0 12 11 13 14 n3 15 17 16 18 19 n4 20 21 M: numero di nodi da memorizzare M = p (r - 1) + 1 per r fissato: p (r - 1) + 1 = O (rp) Complessità in spazio lineare rispetto alla profondità T: numero di nodi da esaminare se nodo soluzione il più a sinistra: T=p+1 se nodo soluzione il più a destra: T = 1 + r + r 2 + r 3 + ... + ( r p - 1 ) in media, per p grande: T = 1 + r + r 2 + r 3 + ...+ (r p - 1 ) = O (r p ) Complessità in tempo esponenziale rispetto alla profondità Ricerca in ampiezza (breadth-first) Lista L gestita come coda: • • [n0] [n1,n2,n3,n4] [n2,n3,n4,n11,n12,n13,n14] si seleziona il nodo di testa si aggiungono i figli generati in coda 1 n1 2 6 7 8 3 9 n2 p=0 p=1 p=2 n0 4 n3 5 10 11 12 13 14 15 16 17 18 19 n4 20 21 n11 n12 n13 n14 Numero massimo di nodi espansi: 1+ r + r 2 + r 3 + ...+ (r p - 1) = O(r p ) La frontiera è la parte più impegnativa. Complessità in spazio anch'essa esponenziale. (RICERCA IN AMPIEZZA: UN CASO SPEC IALE DI RICERCA A COSTO UNIFORME) Consumo risorse per complessità rp Ipotesi: fattore ramificazione r = 10 1.000 nodi/sec 100 bytes/nodo profondità p 0 2 4 6 8 10 12 14 nodi 1 111 11.111 106 108 1010 1012 1014 tempo 1 msec 0,1 sec 11 sec 18 min 31 ore 128 giorni 35 anni 3500 anni memoria 100 b 11 Kb 1Mb 111 Mb 11 Gb 1 Tb 111 Tb 11.111 Tb Depth-first vs. Breadth-first • Ricerca in profondità e ricerca in ampiezza entrambe esponenziali in tempo, ma: • complessità in spazio: • lineare in profondità • esponenziale in ampiezza • ottenimento della soluzione: • garantita in ampiezza • non garantita in profondità • ottimalità della soluzione: • in ampiezza, la prima soluzione trovata è quella del cammino più corto (ottimale se costo cammino costante) • in profondità non è garantita Scelta della strategia PAROLE CROCIATE (una parola per volta) p=0 .... A G O A M O A V O .... p=1 .... A M O R .... p=2 O 1. 2. 3. Qual è la profondità della soluzione? Qual è il fattore di ramificazione? Preferibile ricerca in profondità o in ampiezza? [preferibile in profondità perchè è fissata (4) e ogni nodo di profondità 4 è soluzione] Riduzione dello spazio di ricerca Utilizzare caratteristiche peculiari del problema per ridurne la complessità riducendo lo spazio di ricerca. Si individuano classi di equivalenza degli stati per simmetria per astrazione .… Riduzione per simmetria FILETTO o TRIS in angolo al centro al centro di un lato 12 x 7! = 60.480 anzicchè 9! = 362.880 Riduzione per astrazione Esempio: missionari e cannibali Su una sponda di un fiume ci sono tre missionari: Rossi, Rossini e Rossetti, e tre cannibali: Bingo, Bongo e Bango. Si può attraversare il fiume con una barca che porta al più due persone. Se il numero di cannibali supera il numero di missionari presenti su una delle due sponde, i missionari vengono mangiati. Come usare la barca per trasbordare attraverso il fiume tutti i missionari e i cannibali senza rischi? ASTRAZIONE: le identità individuali non contano Primo trasbordo: 5 operatori: 1c, 1m, 2c, 2m, 2cm 3M, 3C-0M,0C 3M,2C-0M,1C 3M,1C-0M,2C 2M,2C-1M,1C Controllo di loop Se il grafo (dello spazio degli stati) contiene cicli occorre evitare loop per evitare di generare rami infiniti Si usano 2 liste: • lista aperta: nodi da esaminare • lista chiusa: nodi già esaminati Un nodo selezionato dalla lista aperta viene espanso solo se non compare già nella lista chiusa Ricerca a profondità limitata: Si fissa una soglia massima di profondità pt. Va bene quando è nota la profondità della soluzione ps. Altrimenti: • se pt < ps: soluzione non trovata • se pt > ps: tempo di esecuzione maggiore del necessario In generale: come scegliere pp? Iterative deepening: ID (1) • Provare la ricerca a profondità limitata con tutti i pt finchè soluzione: • si inizia con pt = 0, • si finisce con pt = p: è ottimale! • Simile a ricerca in ampiezza ma non memorizzo tutti i nodi che esploro: riduco la complessità nello spazio. • Espando dei nodi più di una volta. Questo costo aggiuntivo è spesso preferibile alla memorizzazione di tutti i nodi. • I nodi che vengono espansi più volte sono i nodi vicini alla radice • In generale preferito quando grande spazio di ricerca e non si conosce la profondità della soluzione Iterative deepening: ID (2) Soglia di profondità s, incrementata ad ogni iterazione ∀s, ricerca in profondità, ma comportamento in ampiezza; i nodi sono rigenerati e non memorizzati 0. s = 1 (soglia iniziale). 1. L: lista dei nodi iniziali: la radice. 2. Se L è vuota [fallimento] incrementare s e tornare al passo 1. Altrimenti, selezionare un nodo n da L. 3. Se n è un nodo finale, terminare restituendo n e il cammino dal nodo iniziale a n. 4. Altrimenti, cancellare n da L. Se la profondità di n è minore di s, aggiungere a L tutti i figli di n, ciascuno con il suo cammino dal nodo iniziale. Tornare al passo 2. 1, 2, 7 3, 8 9 10 4, 13 11 12 14 15 5,18 16 17 19 20 21 6, 23 22 24 25 26 27 2 p 2 p 1 p Numero di espansioni: ( p +1)1+ ( p ) r + ( p - 1) r + ... + 3r - + 2r - +1r per r fissato e p grande: tempo O (rp) ; spazio O (rp) E' la procedura di ricerca esaustiva asintoticamente ottimale Direzioni di ricerca Due possibili direzioni + loro combinazione: • in avanti (forward chaining, data-driven): dallo stato iniziale (dai dati del problema) generando gli stati intermedi verso lo stato finale (obiettivo) • all'indietro (backward chaining, goal-driven): dall'obiettivo da raggiungere esaminando le condizioni per raggiungerlo (sotto-obiettivi) verso i dati del problema • bidirezionale, alternando le due direzioni Lo spazio di ricerca è lo stesso, differisce il numero di stati effettivamente esaminati Quale direzione preferire dipende dal problema Scelta della direzione di ricerca • All'indietro preferibile se: • l'obiettivo è formulato chiaramente • vi è un gran numero di regole che corrispondono ai dati del problema, generando molte possibili conclusioni • i dati del problema devono essere acquisiti (nella diagnosi, molti test sono possibili) • esempio: dimostrare un teorema • In avanti preferibile se: • vi sono molti dati iniziali • vi sono poche regole • è difficile formulare l'obiettivo • esempio: formulazione chimica • In generale: • conviene passare dall'insieme di stati più piccolo a quello più grande • conviene procedere nella direzione di minore fattore di ramificazione III – Euristiche e ricerca informata Outline 1. Problemi come spazio delle soluzioni • Alcuni esempi di problemi • Stati e transizioni • Rappresentazione dello spazio degli stati con grafi • Alberi di ricerca 2. Algoritmo generale di ricerca e ricerca non informata • Algoritmo generale di ricerca • Algoritmi di ricerca non informata: deep-first, breat-first, iterative deepening (IDA). • Accenni a problemi di complessità 3. Euristiche e ricerca informata • Il concetto di euristica • Ricerca best-first: ricerca golosa e A* • IDA* Valutazione euristica degli stati (Es. 1) Esempio: tris Euristica: valutare per ogni stato il numero di tris potenziali 3 4 4 2 4 3 5 5 4 4 3 Valutazione euristica degli stati (Es. 2) Esempio: gioco dell'8 • Euristica 1: • per ogni stato: n1= quadrati fuori posto [per lo stato (a): n1 = 7] • sottostima la distanza dallo stato finale (b) (con una mossa, al più un quadrato può andare a posto) 6 4 2 8 1 3 5 8 7 1 7 (a) • 2 3 4 4 6 (b) 5 7 2 8 3 1 5 6 (c) Euristica 2: • per ogni stato, n2 = somma delle distanze dalla destinazione di ogni quadrato fuori posto [per lo stato (a): n2 = 3 + 0 +3 + 2 + 1 + 3 + 1 + 4 = 17] • sottostima distanza da stato finale (con una mossa avanza al più un quadrato e al più di un passo) Euristica 2 più accurata di Euristica 1: n2 ≥ n1 Non adeguate a inversione di quadrati (nello stato (c) i quadrati 5 e 6 sono da invertire) Ricerca euristica • Usa informazione specifica del dominio per scegliere quali nodi espandere • Associa allo spazio degli stati una funzione euristica di valutazione che assegna un valore ad ogni stato • Strategia euristica: espandere il nodo più 'promettente' (ritenuto più vicino al nodo finale) 4 Esempio: 2 8 3 1 6 4 7 5 2 2 8 3 1 6 4 1 7 5 7 3 5 8 6 3 2 8 3 4 1 6 4 5 7 5 5 Ricerca in salita (hill climbing) Detta anche metodo del gradiente Seleziona uno stato successivo solo se migliora la condizione attuale secondo l’euristica in uso, fallisce se non c’e’. MEMORIZZA SOLO I NODI APPARTENENTI AL CAMMINO ATTIVO (IN PROFONDITA') 10 9 5 6 3 4 1 8 7 9 Ricerca in salita con euristiche diverse Esempio (MONDO DEI BLOCCHI) D C B A (1) A D C B (2) D C B A (3) C B D A C B (4) A (5) D MOSSE: spostare un blocco libero per volta o sul tavolo o su un altro blocco (1) stato finale (2) stato iniziale (3) stato dopo la prima mossa (2), (4), (5) stati possibili dallo stato (3) Euristica 1 (locale): +1 ∀blocco in posizione corretta -1 ∀blocco in posizione errata (1): +4 (2): 0 (3): +2 (4): 0 (5): 0 Nello stato (3) la ricerca in salita si ferma: (2), (4), (5) non sono migliori di (3) Euristica 2 (globale): +n ∀ blocco sopra n-1 blocchi corretti - n ∀ blocco sopra n-1 blocchi errati (1): +10 (2): -10 (3): -5 (4): -4 (5): -3 Nello stato 3 la ricerca in salita sceglie lo stato (5) che porta verso la soluzione Ricerca in salita: problemi • La ricerca in salita non può procedere quando incontra: Massimo locale: stato migliore di tutti i vicini ma non migliore di altri più lontani • Pianoro: tutti gli stati vicini sono di pari valore • Crinale: vi sono stati vicini di valore migliore ma non raggiungibili con una singola mossa Soluzioni ai limiti della ricerca in salita • Massimo locale: tornare a uno stato precedente e spostarsi in un'altra direzione • Pianoro: saltare in qualche direzione verso una nuova zona (simulated annealing) • Crinale: fare due o più mosse insieme (aggiramento) prima di valutare i prossimi stati (macroregole) • Ma tutte le euristiche sono: • fallibili • difficili da individuare • da verificare sperimentalmente su campioni di prova Ricerca best-first 1. L: lista dei nodi iniziali. 2. Se L è vuota, fallimento. Altrimenti, selezionare da L [un] il nodo n migliore. 3. Se n è un nodo finale, terminare restituendo n ed il cammino dal nodo iniziale a n. 4. Altrimenti, cancellare n da L e aggiungere a L tutti i figli di n, ciascuno con il suo cammino. Tornare al passo 2. IL NODO DA ESPANDERE E' SCELTO TRA I FIGLI DEI NODI ESPANSI IN TUTTI I PASSI PRECEDENTI 1 9 3 2 5 8 6 4 8 7 5 4 Greedy Search (Ricerca Golosa): minimizzare la distanza dall’obiettivo • Funzione di valutazione degli stati h: distanza da obiettivo [h(n) = 0 se n è l’obiettivo]. Distanza stimata da obiettivo. • Simile a Hill-Climbing ma vero e proprio albero: espando sempre i nodi valutati più vicini a obiettivo • Ex. Cammino da Arad a Bucarest: distanza in linea d’aria da obiettivo come funzione di valutazione • Nodi non necessari espansi, (false partenze) e oscillazioni causate da loop • Simile a Deep First... Incompleta e non ottimale, ma se la funzione euristica è buona può essere molto veloce • Trovare una buona h è in generale molto difficile Ricerca Golosa (esempio) Supponiamo di voler andare da Iasi a Fagaras h: distanza in linea d’aria Oscillazione (loop) False partenze Supponiamo di avere un nuovo nodo x... x … la soluzione può non essere ottimale Costo dei cammini Misura della lunghezza di un cammino tra due stati Esempio: problema del commesso viaggiatore Partendo dalla sede visitare n città ciascuna una sola volta, e tornare in sede percorrendo la minima distanza possibile. E' data la distanza tra le diverse città. A 100 75 B 125 125 100 E 75 125 50 C 150 D 300 E 375 A 250 50 B C 275 D E 325 D C 100 D A E 100 E C D E 425 A Per N città vi sono (N - 1) ! cammini B C E Branch and bound: minimizzare il costo cammino Memorizza tutti i cammini e i loro costi, espandendo ad ogni passo il cammino di costo minore rispetto a tutti quelli generati. Algoritmo: 1. Lista L dei cammini dal nodo iniziale 2. • • • • 3. (inizialmente: nodo iniziale, cammino di lunghezza nulla) Finchè L è vuota o si è raggiunto un nodo finale: se il primo cammino in L contiene un nodo finale, termina con successo, altrimenti rimuovi il cammino da L e forma nuovi cammini espandendo di un passo il cammino rimosso calcola il costo dei nuovi cammini e aggiungili in L ordina i cammini in L per costi crescenti dei cammini Altrimenti, termina con fallimento Trova sicuramente il cammino di costo minimale Utile quando esistono più cammini da nodo iniziale a nodo finale Funzione di valutazione totale: ricerca A f(n)=g(n)+h(n) g ( n ) : misura lunghezza effettiva cammino da nodo iniziale a nodo n h ( n ) : stima euristica distanza nodo n da nodo finale f ( n ) : costo totale cammino da nodo iniziale a nodo finale attraverso nodo n a 1 2 8 7 6 3 2 4 1 1 (obiettivo) e 3 7 5 b 3 c 3 8 3 4 6 g(n)=0 5 3 d 4 2 8 3 2 8 3 2 8 3 2 1 1 4 1 8 4 1 4 4 7 6 5 7 6 5 7 6 5 4 g 3 f 2 2 8 3 2 8 3 2 2 3 2 1 4 7 1 4 1 8 4 7 6 5 7 6 5 7 6 5 f(e)=g(e)+ h(e)=2+3=5 g(n)=1 g(n)=2 f(c)=g(c)+ h(c)=1+3=4 AAparità paritàdidistima, stima,scelto sceltonodo nodoccpiù piùvicino vicinoaanodo nodoiniziale iniziale Algoritmo AlgoritmoA: A:best-first best-firstcon confunzione funzionedidivalutazione valutazionetotale totale Funzione di valutazione totale: ricerca A f(n)=g(n)+h(n) g ( n ) : misura lunghezza effettiva cammino da nodo iniziale a nodo n h ( n ) : stima euristica distanza nodo n da nodo finale f ( n ) : costo totale cammino da nodo iniziale a nodo finale attraverso nodo n a 1 2 8 7 6 3 2 4 1 1 (obiettivo) e 7 5 b 3 c 3 8 3 4 6 g(n)=2 5 3 d 4 2 8 3 2 8 3 2 8 3 2 1 1 4 3 1 8 4 1 4 4 7 6 5 7 6 5 7 6 5 4 g 3 f 2 2 8 3 2 8 3 2 2 3 2 1 4 7 1 4 1 8 4 7 6 5 7 6 5 7 6 5 f(e)=g(e)+ h(e)=2+3=5 g(n)=1 g(n)=2 f(c)=g(c)+ h(c)=1+3=4 AAparità paritàdidistima, stima,scelto sceltonodo nodoccpiù piùvicino vicinoaanodo nodoiniziale iniziale Algoritmo AlgoritmoA: A:best-first best-firstcon confunzione funzionedidivalutazione valutazionetotale totale Ricerca A*: h ammissibile Una funzione è ammissibile se non sopravvaluta mai la distanza effettiva all’obiettivo A* è un algoritmo con funzione di valutazione totale dove la funzione euristica h è ammissibile. f*(n)=g*(n)+h*(n) g* ( n ) = costo cammino più corto da nodo iniziale a nodo n h* ( n ) = costo effettivo cammino più corto da nodo n a nodo finale f * ( n ) = costo effettivo cammino ottimale da nodo iniziale a nodo finale attraverso nodo n Funzioni g*, h*, f * non note Usualmente g ( n ) ≥ g, h, f loro approssimazioni g*(n) Algoritmo A* : algoritmo A con funzione f in cui A* è ottimale e completo h(n)≤ h*(n) Ottimalità e completezza Ottimale: I nodi in tutte le frontiere successive hanno un costo f più grande Prima o poi frontiera: cammino reale A* è ottimamente efficiente: non esiste nessun altro algoritmo ottimale che garantisce di espandere un minor numero di nodi di A* Informatività Funzioni a valutazione totale: f(n)=g(n)+h(n) • La ricerca breadth-first è un algoritmo A * con h = 0 e costo cammino costante per ogni arco, cioè f ( n ) = g ( n ) • La ricerca branch and bound è un algoritmo A* con h = 0 e g diverso per ogni arco Sono ammissibili, perchè, essendo h = 0, ∀ n 0 ≤ h* ( n ) Date due euristiche A*: h1 e h2, h2 è più informata di h1 se ∀ n h1 ( n ) ≤ h2 ( n ) Più un'euristica è informata, minore è il numero di nodi da espandere per trovare la soluzione ottimale: E’ sempre meglio utilizzare una funzione euristica più informativa a meno che non sopravvaluti Informatività (2): ex. Il gioco dell’8 2 8 1 Ex. Gioco dell'8 7 3 4 6 5 euristica h1 (numero quadrati fuori posto) euristica h2 (somma spostamenti minimi dei quadrati) Si ha: •0 ≤ h1 ≤ h2 ≤ h* •entrambe ammissibili •entrambe migliori di breadth-first •euristica h2 più informata di euristica h1 Efficacia delle euristiche Confronto tra ID (Iterative Deepening) e A*, media su 100 istanze nel gioco dell’8 Costo della ricerca Fattore di ramificazione effettivo p ID A*(h1) A*(h2) ID A*(h1) A*(h2) 2 4 6 8 10 12 14 10 112 680 6384 47127 364404 3473941 6 13 20 39 93 227 539 6 12 18 25 39 73 113 2.45 2.87 2.73 2.80 2.79 2.78 2.83 1.79 1.48 1.34 1.33 1.38 1.42 1.44 1.79 1.45 1.30 1.24 1.22 1.24 1.23 Euristiche per CSP Effettuare per prima la sostituzione più vincolata. Esempio di criptoaritmetica: la cifra più a sinistra può avere solo valore 0 o 1 Iterative deepening A* (IDA*) (1) Iterative deepening con funzione di valutazione totale ammissibile. LIMITE DI COSTO al posto di limite di profondità 0. s = f(stato iniziale). 1. L: lista dei nodi iniziali. 2. Se L è vuota incrementare s a next_s e tornare al passo 1. Altrimenti, selezionare un nodo n da L. 3. Se n è un nodo finale, terminare restituendo n e il cammino dal nodo iniziale a n. 4. Altrimenti, cancellare n da L. Aggiungere in testa a L ogni figlio n' di n per cui f(n') ≤ s, ciascuno con il suo cammino dal nodo iniziale. Settare next_s come il min(f(n’)) tale che f(n’) > s. Tornare al passo 2. Ricerca completa ed ottimale (euristiche ammissibili) Funzione euristica usata per potare nodi, non per determinare l'ordine di espansione, che rimane in profondità Iterative deepening A* (IDA*) (2) Complessità in spazio esponenziale in p per A*, lineare in p per IDA* Complessità in tempo dipende da euristica Asintoticamente espande lo stesso numero di nodi di A* A* include una funzione di ordinamento: costo aggiuntivo! Minore è il range di valori dell’euristica minore è il numero di espansioni Problemi con domini complessi (ampio range della funzione euristica) Se il valore euristico cambia ad ogni stato: ciascuna frontiera un solo stato in più rispetto a quella precedente! Se A* espande n nodi, IDA* n iterazioni: espande 1+2+3+…+ n nodi Unasoluzione: soluzione:IDA* IDA*εε-ammissibile ammissibile Una Incrementareilillimite limitedidicosto costodidiuna unaquantità quantitàfissata fissataεε Incrementare Siriduce riduceililcosto costodidiricerca, ricerca,ma malalasoluzione soluzionepuò puònon non Si esserepeggiore peggiorerispetto rispettoall’ottimale, all’ottimale,alalpiù piùdidiun unvalore valore essere (masempre semprecompleta) completa) pariaaεε(ma pari Un’altra SMA*:Simplified Memory-Bounded A* Un esempio: la formulazione chimica High-level Prop of “XYZ Low-level Prop of “XYZ Desired High-level Properties Recipe."XYZ" Test obiettivo, euristiche… Desired Low-level Properties ? Done Wanted Recipe satisfying the given goals Scoperta di euristiche Nel gioco dell’8: h1 = n0 tessere fuori posto h2 = distanza di Manhattan (somma delle distanze dalla posizione finale) sono lunghezze di cammino effettive per versioni semplificate con condizioni rilassate. Regola del gioco: Una tessera può muovere dal quadrato A al quadrato B (i) se A è adiacente a B e (ii) se B è vuoto Rilassando (ii) si ottiene h2 Rilassando sia (i) che (ii) si ottiene h1 Nota h2 domina h1 ∀ n: h2 (n) ≥ h1 (n) Se ci sono k euristiche h1 , … , hk nessuna delle quali domina le altre, allora h (n) = max (h1 (n) , … , hk (n)) è dominante ATTENZIONE a costo di esecuzione di funzioni euristiche Minimax Giochi a 2 (MIN e MAX) a mosse alternate e informazione perfetta ESEMPIO: gioco del NIM N fiammiferi, mossa: dividere una fila in due sottofile non vuote e non uguali 1 7 MIN 6-1 MAX MIN MAX 5-1-1 1 0 4-2-1 4-1-1-1 MIN 0 3-1-1-1-1 MAX Ad ogni nodo foglia: 5-2 1 1 4-3 0 1 1 3-2-2 3-2-1-1 0 3-3-1 1 2-2-1-1 2-2-1-1-1 2-1-1-1-1-1 0 1 0 (N=7, MIN muove per primo) valore 0 se vincente per MIN - valore 1 se vincente per MAX Propagazione dei valori a ritroso: ai genitori MAX (MIN), valore massimo (minimo) dei figli (nell'esempio, MAX può vincere per qualunque prima mossa di MIN) In grafi grandi, si danno valori di stima ai nodi n mosse più avanti, si propagano a ritroso, e si usano per selezionare la prossima mossa. Alfa-Beta Procede in profondità, potando rami Valore alfa (con MAX), non decrescente beta (con MIN), non crescente 3 A MAX MIN 3 MAX MIN B 3 2 2 D 3 5 val (D) = max (5,E) BETA ← val (B) = min (3,max (5,E)) = 3 appena trova un figlio di D con valore ≥ val (C) = min (2,F) ALFA ← val (A) = max (3,min (2,F)) = 3 appena trova un figlio di C con valore ≤ C 2 E 2 F 1 ∀E (E potato) BETA, ignora gli altri ∀F (F potato) ALFA, ignora gli altri Si esaminano tutte le possibilità di un giocatore (ramificazione r) e la migliore risposta a ognuna di esse dell'altro giocatore (ramificazione 1). A profondita' p: p/2 nodi con r figli e p/2 nodi con 1 figlio. Numero totale di nodi: 2 r p/2 anzicchè r p 6 4 2 8 1 3 5 8 7 1 7 (a) 2 3 4 4 6 5 (obiettivo) 7 2 8 3 1 5 6 (c)