Download - FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002
![Page 1: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/1.jpg)
FMZ 1
Sistemi basati su conoscenzaWumpus World in Prolog
Dott. Fabio Massimo Zanzotto
a.a. 2001-2002
![Page 2: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/2.jpg)
FMZ 2
Wumpus World: Regole del mondo
Scopo del gioco
Dato un mondo quadrato in cui vi sono trappole, wumpus e ori, il minatore, partendo dall’ingresso della grotta deve prendere più ori possibile e tornare a casa senza essere mangiato dal wumpus e senza cadere in una trappola.
![Page 3: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/3.jpg)
FMZ 3
Wumpus World: Regole del mondo
•Il minatore possiede una freccia con cui può ammazzare il wumpus. Quest’ultimo se colpito lancia un urlo che si sente in tutta la grotta.
•Il minatore può andare avanti, girare a sinistra o a destra, tirare la freccia, prendere quello che c’è nella casella e, infine, uscire dalla grotta.
![Page 4: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/4.jpg)
FMZ 4
Wumpus World: Regole del mondo
•Il punteggio viene calcolato come segue:
•viene decrementato di uno ad ogni azione del minatore
•vengono dati 100 punti se il wumpus viene ucciso
•se il minatore viene ucciso perde il suo punteggio
•se il minatore riesce ad uscire dalla grotta, gli vengono assegnati 1000 punti per ogni pezzo d’oro portato a casa.
![Page 5: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/5.jpg)
FMZ 5
Wumpus World: Regole del mondo
•Se il wumpus è in una casella, si avverte la puzza nelle quattro caselle adiacenti (a croce)
•Se c’è una buca in una casella, si avverte la brezza nelle quattro caselle adiacenti (a croce)
•Se c’è l’oro, si avverte luccicare nella stessa casella
![Page 6: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/6.jpg)
FMZ 6
Wumpus World: Environment
Azioni
Percezioni
Ambiente
Fatti
Regole
![Page 7: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/7.jpg)
FMZ 7
Wumpus World: Wumpus, Gold and Pits
wumpus_location(X,Y).wumpus_health(X).
gold(X,Y).pit(X,Y).
{dead,alive}
![Page 8: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/8.jpg)
FMZ 8
Wumpus World: Agente
agent_location(X,Y).agent_orientation(X).agent_in_cave(X).agent_health(X).agent_arrow(X).agent_score(X).
{0,90,180,270}
{yes,no}
{dead,alive}
{0,1}
integer
![Page 9: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/9.jpg)
FMZ 9
Wumpus World: Regole sulla puzza
stench(X,Y):- X1 is X+1,wumpus_location(X1,Y).
…stench(X,Y):-
Y1 is Y+1,wumpus_location(X,Y1). Oppure…
![Page 10: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/10.jpg)
FMZ 10
Wumpus World: Regole sulla puzza
stench(X,Y):- X1 is X+1,X0 is X-1,Y1 is Y+1,Y0 is Y-1,( wumpus_location(X1,Y);
wumpus_location(X0,Y);wumpus_location(X1,Y);wumpus_location(X1,Y)),!.
Dove ; significa or
Similarmente per le breeze…
![Page 11: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/11.jpg)
FMZ 11
Wumpus world:interfaccia agente-environment
execute(Action,Perception).
Actionclimb goforwardturnleftturnrightgrabshoot lancia la freccia
Se l’agente la fa nel punto 1,1, l’effetto è che questo lascia la miniera e prende1000 punti in più per ogni pezzo di oro.
![Page 12: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/12.jpg)
FMZ 12
Wumpus world:interfaccia agente-environment
execute(Action,Perception).
[Stench,Breeze,Glitter,Bump,Scream]
{yes,no}
![Page 13: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/13.jpg)
FMZ 13
Wumpus world:effetto di execute goforward
execute(goforward,[Stench,Breeze,Glitter,Bump,no]):-decrement_score, goforward(Bump),update_agent_health,stench(Stench),breeze(Breeze),glitter(Glitter).
Verifica se l’agente èandato in bocca alwumpus o in una trappola.
![Page 14: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/14.jpg)
FMZ 14
Wumpus world:effetto di execute goforward (2)
stench(yes):-stench(X,Y),agent_position(X,Y).
stench(no).
glitter(yes):-gold(X,Y),agent_position(X,Y).
glitter(no).
![Page 15: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/15.jpg)
FMZ 15
Wumpus world:inizializzazione del mondo
initialize_world(random) :-…all_squares(4,AllSqrs),
gold_probability(PG), place_objects(gold,PG,AllSqrs), at_least_one_gold(4), del([1,1],AllSqrs,AllSqrs1), pit_probability(PP), place_objects(pit,PP,AllSqrs1), random_member([WX,WY],AllSqrs1), addto_ww_init_state(wumpus_location(WX,WY)), addto_ww_init_state(wumpus_health(alive)).
oro
pits
wumpus
![Page 16: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/16.jpg)
FMZ 16
Wumpus world:place objects
place_objects(_,_,[]). place_objects(Object,P,[Square|Squares]) :- maybe(P), % succeeds with probability P !, Fact =.. [Object|Square], addto_ww_init_state(Fact), place_objects(Object,P,Squares). place_objects(Object,P,[_|Squares]) :- place_objects(Object,P,Squares).
Vediamo la:
![Page 17: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/17.jpg)
FMZ 17
Prolog: univ
=.. è detto univ
?- padrone(cane,mario) =.. [A,B,C].A = padrone,B = cane,C = mario.
?- Fact =.. [pit,1,2].Fact = pit(1,2).
![Page 18: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/18.jpg)
FMZ 18
Agenti e gestione della concorrenza
E
An
A1
A2
an
pn
a2
a1
p1
p2
E(ai,pi)
Come simuliamo la concorrenza:-round robin
![Page 19: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/19.jpg)
FMZ 19
Wumpus World: 1 agente ciclo principale
run_agent_trial(NumAction,Percept,Time):-…,run_agent(Percept,Action),…,execute(Action,Percept1),…,!,run_agent_trial(NumAction1,Percept1,Time1).
![Page 20: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/20.jpg)
FMZ 20
Wumpus World: esercizio
• Data il modello del wumpus world fornito, costruire un agente che totalizzi un gran numero di punti definendo:– init_agent– run_agent(Percepts,Actions)
![Page 21: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/21.jpg)
FMZ 21
Wumpus World: simple reflex agent
init_agent.run_agent([S,B,yes,Bu,Scr],grab). run_agent([S,B,G,yes,Scr],turnleft).run_agent([yes,B,G,Bu,Scr],turnleft).
…run_agent(_,climb).
![Page 22: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/22.jpg)
FMZ 22
Wumpus World: random agent
init_agent.run_agent(_,Action):-
random_member(Action,[ climb,goforward,turnleft,turnright,grab,shoot]).
![Page 23: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/23.jpg)
FMZ 23
Gestione dinamica dei fatti e delle regole
• E’ possibile definire delle regole (o fatti) dinamiche– Fatti (o regole) che possono scomparire da S e,
quindi, diventare falsi durante la computazione
![Page 24: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/24.jpg)
FMZ 24
Gestione dinamica dei fatti e delle regole
• Aggiungere il fatto Fatto in memoriaassert(Fatto).
• Eliminare il fatto Fatto dalla memoriaretract(Fatto).
• I predicati modificabili durante la computazione debbono essere dichiarati dinamici.
:- dynamic Predicato/Arità.
![Page 25: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/25.jpg)
FMZ 25
Un agente un po’ più scaltro
• Agente pollicino– Si muove casualmente fino a che non ha trovato
l’oro.– Quando trova l’oro, riesce a tornare indietro
per un percorso già visitato e quindi riesce ad uscire indenne dalla grotta
![Page 26: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/26.jpg)
FMZ 26
Agente con base di conoscenza
run_pollicino(Percept,Action) :-
tell_kb(Percept),
!,
ask_KB(Action),
!,
tell_kb_action(Action).
![Page 27: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/27.jpg)
FMZ 27
Visione dell’agente sul mondo (KB dell’agente)
:- dynamic(posizione_attuale/2).
:- dynamic(posizione_visitata/2).
:- dynamic(ultima_mossa/1).
:- dynamic(salute_wumpus/1).
:- dynamic(orientamento/1).
:- dynamic(arieggiato/2).
:- dynamic(puzzolente/2).
:- dynamic(oro/2).
:- dynamic(sono_contento/1).
![Page 28: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/28.jpg)
FMZ 28
Aggiornamento della KB
tell_kb([Puzza,Aria,Luccichio,Urto,Urlo]):-
urto(Urto),
puzza(Puzza),
aria(Aria),
luccichio(Luccichio),
urlo(Urlo).
![Page 29: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/29.jpg)
FMZ 29
Aggiornamento della KB
urto(yes).
urto(no):-ultima_mossa(goforward),orientamento(0),aggiorna_posizione(2,1).
urto(no):-ultima_mossa(goforward),orientamento(1),aggiorna_posizione(1,2).
……
![Page 30: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/30.jpg)
FMZ 30
Aggiornamento della KB
aggiorna_posizione(X,Y):-
posizione_attuale(Z,K),
Z1 is Z + X - 1,
K1 is K + Y - 1,
retract(posizione_attuale(Z,K)),
assert(posizione_visitata(Z,K)),
assert(posizione_attuale(Z1,K1)).
![Page 31: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/31.jpg)
FMZ 31
Aggiornamento della KB
puzza(no).puzza(yes):-
posizione_attuale(I,J),\+ puzzolente(I,J),assert(puzzolente(I,J)).
puzza(yes).
aria(no).aria(yes):-
posizione_attuale(I,J),\+arieggiato(I,J),assert(arieggiato(I,J)).
aria(yes).
![Page 32: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/32.jpg)
FMZ 32
Richiesta della nuova azione dal KB
ask_KB(grab):-sono_contento(no),posizione_attuale(I,J),oro(I,J),retractall(sono_contento(_)),assert(sono_contento(si)),write('Sono contento!!!!'),nl.
ask_KB(climb):-sono_contento(si),posizione_attuale(1,1).
![Page 33: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002](https://reader036.vdocuments.site/reader036/viewer/2022062516/5542eb65497959361e8cfd8c/html5/thumbnails/33.jpg)
FMZ 33
Nuova azione dal KB
ask_KB(goforward):-
sono_contento(si),
posizione_attuale(I,J),
orientamento(2),
I1 is I - 1,
posizione_visitata(I1,J).
……
ask_KB(turnleft):-
sono_contento(si).