FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a....

33
FMZ 1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002

Transcript of FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a....

Page 1: FMZ1 Sistemi basati su conoscenza Wumpus World in Prolog Dott. Fabio Massimo Zanzotto a.a. 2001-2002.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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).