Strategie per il problem solving

Slides:



Advertisements
Presentazioni simili
Premessa: si assume di aver risolto (correttamente
Advertisements

Algoritmi e Strutture dati Mod B
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Sistemi dinamici discreti e computabilità intrinseca
SPECIFICA INIZIALE DELLE MAPPE FINITE v. 0.0 Gianna Reggio
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
1 Il punto di vista Un sistema è una parte del mondo che una persona o un gruppo di persone, durante un certo intervallo di tempo, sceglie di considerare.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Intelligenza Artificiale Simbolica
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Depth-first search Visita in profondità di un grafo Algoritmo Esempio
Alberi binari di ricerca
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Teoria e Implementazione
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Università degli Studi di Roma Tor Vergata
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Alberi binari Definizione della struttura dati: struct tree { };
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Cammini minimi Algoritmo SPT.Acyclic
Esercizio 4 Data una stringa P di lunghezza m e definita sullalfabeto, scrivere un programma PERL per calcolare la seguente funzione: PREFIX_FUNCTION:
Algoritmi e Strutture Dati (Mod. B)
Algoritmi e Strutture Dati (Mod. B)
Sincronizzazione fra thread
Intelligenza Artificiale
1.Scrivere una funzione per cercare un numero x in una lista circolare di interi. La funzione deve restituire NULL se il numero non esiste. 2.Scrivere.
Lezione 6 Strutture di controllo Il condizionale
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Esecuzione dei programmi Prolog Liste ed operatori aritmetici
Il primo passo: I basilari del Prolog
PARTE PRIMA: Reti Cablate
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 12 Minimo albero ricoprente: Algoritmi di Prim e di Borůvka Algoritmi.
Web Communities and their identificaton
Grafi Rappresentazione mediante liste di adiacenza:
Alberi binari Definizione della struttura dati: struct tree { };
Definire operatori Strutture dati Fabio Massimo Zanzotto (slides di Andrea Turbati)
Linguaggi e Modelli di Programmazione Fabio Massimo Zanzotto.
Ordinamento e Operazioni su Strutture Dati Fabio Massimo Zanzotto.
Recuperare tutte le risposte Gestione di input-output Fabio Massimo Zanzotto (slides di Andrea Turbati)
Percorsi su grafi, Sottoalberi Comuni e Programmazione Dinamica Fabio Massimo Zanzotto.
Cenni di Logica Fabio Massimo Zanzotto. Calcolo proposizionale.
Controllare Tipi Dati Decomporre fatti Controllare il database Fabio Massimo Zanzotto (slides di Andrea Turbati)
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Alberi Alberi radicati : alberi liberi in cui un vertice è stato scelto come radice. Alberi liberi : grafi non orientati connessi e senza cicli. Alberi.
Esecuzione di un Programma [P] Una computazione corrisponde al tentativo di dimostrare, tramite la regola di risoluzione, che una formula (goal) segue.
Sistemi basati su conoscenza Metodi di ricerca informata Prof. M.T. PAZIENZA a.a
Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi (parte 2) Agostino Poggi.
Intelligenza Artificiale Risoluzione di Problemi
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Risoluzione dei Problemi Agostino Poggi Stefano Cagnoni.
Prof. Cerulli – Dott. Carrabs
Master Bioinformatica 2002: Visite di Grafi Algoritmi di visita Scopo: visitare tutti i vertici di un grafo per scoprirne proprietà di vario tipo. Alcune.
Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA
Strutture di controllo
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Logica Lezione 11, Annuncio Non si terrà la lezione di Lunedì 16 Marzo.
Prof.ssa Rossella Petreschi Lezione del 17 /10/2014 del Corso di Algoritmica Lezione n°5.
Transcript della presentazione:

Strategie per il problem solving Fabio Massimo Zanzotto (slides di Andrea Turbati con aggiunte)

Cominciamo con un esempio Spostare Blocchi per arrangiarli secondo un ordine Mosse ammesse: Un blocco può essere spostato solo se è in cima Un blocco può essere spostato per terra Un blocco può essere spostato sopra un altro blocco C B A B A A C A C B A B C B C

Rappresentazione di un problema Un problema può essere rappresentato da un grafo i cui elementi sono gli stati del problema (situazioni in cui ci si trova mentre si cerca di risolvere il problema) e gli archi sono le possibili transizioni/azioni tra uno stato e l’altro La soluzione consiste nel trovare un percorso tra lo stato iniziale e uno degli stati obiettivo (posso essere più di uno)

Esempio: grafo degli stati

Esempio: scrittura in Prolog Stato iniziale: [[c,a,b],[],[]] Obiettivi: [[a,b,c],[],[]] [[], [a,b,c],[]] [[],[], [a,b,c]] Termine della ricerca di una soluzione: goal(Situation):- member([a,b,c], Situation). Inizio: solve([[c,a,b],[],[]], Situation))

Transizione di stato Scrivere la s(SituazioneA,SituazioneB) che sia vera se SituazioneA e SituazioneB siano due rappresentazioni del mondo dei blocchi e ci sia una mossa ammessa tra SituazioneA e SituazioneB.

Transizione di stato s([[A|RA],B,C],[RA,[A|B],C]). s([[A|RA],B,C],[RA,B,[A|C]]). …

Transizione di stato Oppure.. s(S,[ST,[T1|S2]|OS]):- del([T1|ST],S,S1), del(S2,S1,OS). del(X,[X|L],L). del(X,[Y|L],[Y|L1]):- del(X,L,L1).

Esercizio Completare l’esempio usando i dati forniti nelle slide precedenti. In Situation della query solve([[c,a,b],[],[]], Situation)) dovrà esserci la lista degli stati che portano dallo stato iniziale a uno degli stati obiettivo

Strategie di ricerca Vediamo ora alcune delle strategie di ricerca maggiormente utilizzate Depth-first search Iterative Deepening Breadth-first search

Depth-first search L’idea che sta alla base di questo tipo di ricerca è la seguente: Per trovare il percorso che rappresenta la soluzione, Sol, dato un nodo N, ed almeno un nodo obiettivo: Se N è la l’obiettivo, allora Sol = [N], altrimenti Se esiste un nodo connesso a N, detto N1, tale che esista una soluzione Sol1 da N1 ad un nodo obiettivo, allora Sol = [N | Sol1]

Depth-first search solve(N,[N]):- solve(N,[N|Sol1]):- goal(N). s(N, N1), solve(N1, Sol1).

Problemi con la Depth-first search La Depth-first search è estremamente semplice da implementare in Prolog, ma soffre di due grosse limitazioni/problemi: In caso di loop nel grafo contenente gli stati del problema potrebbe non terminare mai Non garantisce di trovare il cammino minore, ma, nel caso dovesse terminare, garantisce comunque di trovare una soluzione

Depth-first search (loop) solve2( Node, Solution) :- depthfirst2( [], Node, Solution). depthfirst2( Path, Node, [Node | Path] ) :- goal( Node). depthfirst2( Path, Node, Sol) :- s( Node, Node1), not(member( Node1, Path)), depthfirst2( [Node | Path], Node1, Sol).

Depth-first search (limite profondità) solve3( Node, Solution, Max) :- depthfirst3( Node, Solution, Max). depthfirst3( Node, [Node], _) :- goal( Node). depthfirst3( Node, [Node | Sol], Maxdepth) :- Maxdepth > 0, s( Node, Node1), Max1 is Maxdepth - 1, depthfirst3( Node1, Sol, Max1).

Iterative Deepening La Iterative Deepening è una forma di Depth First search con il limite di profondità eseguita in continuazione aumentando ogni volta la profondità di 1. Permette di trovare la soluzione più corta a differenza della classica Depth First search La Iterative Deepening riesce ad evitare i loop?

Breadth-first search L’idea che sta alla base di questo tipo di ricerca è la seguente: Data una lista di possibili percorsi: Se la testa della prima lista è un obiettivo, allora quel percorso è la soluzione Altrimenti rimuovi il primo percorso dalla lista dei candidati, genera tutti i percorsi che fanno uno step in più del percorso appena eliminato e inseriscili in coda alla lista dei percorsi candidati e analizza il percorso che ora si trova in testa alla lista dei possibili percorsi

Breadth-first search solve4( Start, Solution) :- breadthfirst( [ [Start] ] , Solution). breadthfirst( [ [Node | Path] | _] , [Node | Path] ) :- goal( Node). breadthfirst( [Path | Paths] , Solution) :- extend( Path, NewPaths), append( Paths, NewPaths, Paths1), breadthfirst( Paths1, Solution). extend( [Node | Path], NewPaths) :- bagof( [NewNode, Node | Path], ( s( Node, NewNode), not(member( NewNode, [Node | Path] )) ), NewPaths), !. extend( Path, [] ).

Esercizio Identificare le strategie di ricerca sottostanti: find1(Node, [Node]):- goal(Node). find1(Node, [Node|Path]):- s(Node, Node1), find1(Node1, Path). find2(Node, Path):- append(Path, _, _), find1(Node, Path). find3(Node, Path):- goal(Goal), find3(Node, [Goal], Path]). find3(Node, [Node|Path], [Node|Path]). find3(Node, [Node2|Path2], Path):- s(Node1, Node2), find3(Node, [Node1, Node2|Path2], Path).

Esercizi Implementare la Iterative Deepening Implementare la Depth-first search che eviti i loop e che abbia anche il limite della profondità