agente explorador do mundo wumpus by ana cristina, ioram e leonardo

24
Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

Upload: internet

Post on 17-Apr-2015

113 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

Agente Explorador do MundoWumpus

By Ana Cristina, Ioram e Leonardo

Page 2: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 2

Roteiro

Apresentação do ambiente do jogo Modelagem do jogo usando agentes O mundo do wumpus em Prolog Conclusões

Page 3: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 3

Ambiente do Jogo

1

2

3

4

1 2 3 4

?

Page 4: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 4

Modelagem do Jogo usando Agentes

ambiente

Base de conhecimento

sensoresagente

efetuadores

ações

percepções

objetivos

inferência

Prolog

Page 5: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 5

Conclusões

Prolog realmente é fácil recursividade (loops) “cut” redundâncias no modelo

Page 6: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 6

Page 7: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 7

Page 8: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 8

AmbientewumpusP:-

dynamic(xmonstro/2),dynamic(xouro/2),dynamic(xbrisa/2),dynamic(xcheiro/2),dynamic(xbrilho/2),dynamic(xburaco/2),

wdcreate( wumpus, `Mundo WUMPUS`, ...... ),

wccreate( (wumpus,1), button, `&Inicia`, ..... ), ......

wccreate( (wumpus,2000), grafix , ``, 200, 450, 500, 200,Gstyle ),

window_handler(wumpus, wumpus_handler ), show_dialog( wumpus).

Page 9: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 9

wumpus_handler( wumpus, msg_close, Data, close ).

wumpus_handler( (wumpus,1), msg_button, _, _) :- doGeral, doBrisa,doCheiro, doBrilho, doTirar, doNaosegura, doNaovisitada,doDesenhar, vai.

wumpus_handler( (wumpus,2), msg_button, _,_) :- write(entrou3), nl,continuaX.

........wumpus_handler( (wumpus,141), msg_button, _,_) :-

((xburaco(1,4),!,undoBuraco(1,4));(doBuraco(1,4))).wumpus_handler( (wumpus,142), msg_button, _,_) :-

((xmonstro(1,4),!,undoMonstro(1,4));(doMonstro(1,4))).wumpus_handler( (wumpus,143), msg_button, _,_) :-

((xouro(1,4),!,undoOuro(1,4));(doOuro(1,4)))......

doBuraco(X,Y):- assert(xburaco(X,Y)),!, X1 is X * 100, Y1 is Y * 10,K is X1 + Y1,wgfx((wumpus,K), [brsh(0,0,0,0),rect(0,0,25,30)]).

undoBuraco(X,Y):- retract(xburaco(X,Y)),!,X1 is X * 100, Y1 is Y * 10,K is X1 + Y1, wgfx((wumpus,K),brsh(255,255,255,0),rect(0,0,25,30)]).

Ambiente

Page 10: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 10

doLimpa:- forall(xburaco(X,Y), retract(xburaco(X,Y))), forall(xmonstro(X,Y), retract(xmonstro(X,Y))), forall(xouro(X,Y), retract(xouro(X,Y))).

doGeral:- forall(monstrovivo(X), retract(monstrovivo(X))),forall(agente(S,X,Y), retract(agente(S,X,Y))),forall(brisa(X,Y), retract(brisa(X,Y))),forall(cheiro(X,Y), retract(cheiro(X,Y))),.....assert(monstrovivo(true)),assert(pegueiouro(false)),assert(passo(false)),!.

doBrisa:- brisaX(X,Y), assert(xbrisa(X,Y)),fail.doBrisa.

brisaX(X,Y):- xburaco(X0,Y ),X is X0 - 1.brisaX(X,Y):- xburaco(X0,Y ),X is X0 + 1.brisaX(X,Y):- xburaco(X ,Y0),Y is Y0 - 1.brisaX(X,Y):- xburaco(X ,Y0),Y is Y0 + 1.

Ambiente

Page 11: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 11

Base de conhecimento

base_agente:-dynamic(agente/3),dynamic(ouro/2),dynamic(buraco/2),dynamic(monstro/2),dynamic(brisa/2),dynamic(cheiro/2),dynamic(brilho/2),dynamic(visitada/3),dynamic(naosegura/2),dynamic(naovisitada/2),dynamic(monstrovivo/1),dynamic(pegueiouro/1),dynamic(prioridade/3),

Page 12: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 12

Base de conhecimento

doNaosegura:-assert(naosegura(1,1)), assert(naosegura(1,2)),assert(naosegura(1,3)), assert(naosegura(1,4)),assert(naosegura(2,1)), assert(naosegura(2,2)), ...

doNaovisitada:-assert(naovisitada(1,1)), assert(naovisitada(1,2)),assert(naovisitada(1,3)), assert(naovisitada(1,4)),assert(naovisitada(2,1)), assert(naovisitada(2,2)), ...

Page 13: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 13

Mecanismo de Inferênciasegura(X,Y):- not naosegura(X,Y),!.segura(X,Y):- naoburaco(X,Y), naomonstro(X,Y),

(naosegura(X,Y), retract(naosegura(X,Y));!),!.segura(X,Y):- visitada(X,Y,_), naomonstro(X,Y), naoburaco(X,Y),

retract(naosegura(X,Y)),!.segura(X,Y):- X0 is X - 1, visitada(X0,Y,_), naocheiro(X0,Y),

naobrisa(X0,Y),(naosegura(X,Y),retract(naosegura(X,Y));!),!.

segura(X,Y):- X1 is X + 1, visitada(X1,Y,_), naocheiro(X1,Y), naobrisa(X1,Y),(naosegura(X,Y),retract(naosegura(X,Y));!),!.

segura(X,Y):- Y0 is Y - 1, visitada(X,Y0,_), naocheiro(X,Y0), naobrisa(X,Y0),retract(naosegura(X,Y)),!.

segura(X,Y):- Y1 is Y + 1, visitada(X,Y1,_), naocheiro(X,Y1), naobrisa(X,Y1),(naosegura(X,Y),retract(naosegura(X,Y));!),!.

Page 14: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 14

Mecanismo de Inferência

naocheiro(X,Y):- visitada(X,Y,_), not cheiro(X,Y),!.naobrisa(X,Y):- visitada(X,Y,_), not brisa(X,Y),!.

naoburaco(X,Y):- visitada(X,Y,_), not buraco(X,Y),!, textoNB(X,Y).naoburaco(X,Y):- X0 is X - 1, Y0 is Y - 1, X1 is X + 1, Y1 is Y + 1,

(naobrisa(X0,Y);naobrisa(X1,Y);naobrisa(X,Y0);naobrisa(X,Y1)),!,textoNB(X,Y).

naomonstro(X,Y):- visitada(X,Y,_), not monstro(X,Y),!,textoNW(X,Y).naomonstro(X,Y):- X0 is X - 1, Y0 is Y - 1, X1 is X + 1, Y1 is Y + 1,

(naocheiro(X0,Y);naocheiro(X1,Y);naocheiro(X,Y0);naocheiro(X,Y1)),!,textoNW(X,Y).

Page 15: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 15

Mecanismo de InferênciamonstroX(X,Y):- X1 is X + 1, X2 is X + 2, Y0 is Y - 1, Y1 is Y + 1,

cheiro(X1,Y), naocheiro(X2,Y1), naocheiro(X2,Y0),textoW(X,Y).

monstroX(X,Y):- X1 is X - 1, X2 is X - 2, Y0 is Y - 1, Y1 is Y + 1,cheiro(X1,Y), naocheiro(X2,Y1), naocheiro(X2,Y0),textoW(X,Y).

monstroX(X,Y):- X1 is X + 1, X0 is X - 1, Y1 is Y + 1, Y2 is Y + 2,cheiro(X,Y1), naocheiro(X0,Y2), naocheiro(X1,Y2),textoW(X,Y).

monstroX(X,Y):- X1 is X + 1, X0 is X - 1, Y1 is Y - 1, Y2 is Y - 2,cheiro(X,Y1), naocheiro(X0,Y2), naocheiro(X1,Y2),textoW(X,Y).

monstroX(X,Y):- X1 is X + 1, Y0 is Y - 1,cheiro(X,Y0), cheiro(X1,Y), naocheiro(X1,Y0), textoW(X,Y).

monstroX(X,Y):- X0 is X - 1, Y1 is Y + 1,cheiro(X0,Y), cheiro(X,Y1),naocheiro(X0,Y1), textoW(X,Y).

monstroX(X,Y):- X0 is X - 1, Y0 is Y - 1,cheiro(X,Y0), cheiro(X0,Y), naocheiro(X0,Y0), textoW(X,Y).

monstroX(X,Y):- X1 is X + 1, Y1 is Y + 1,cheiro(X,Y1), cheiro(X1,Y),naocheiro(X1,Y1), textoW(X,Y).

Page 16: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 16

Mecanismo de Inferência

inferir(S,X,Y,NextX,NextY):-forall(prioridade(I,J,L), retract(prioridade(I,J,L))),inferirX(S,X,Y), next(NextX, NextY),(visitada(NextX,NextY,Z),retract(visitada(NextX,NextY,Z)),Z1 is Z + 1, assert(visitada(NextX,NextY,Z1));(!)),!.

inferir(S,X,Y,NextX,NextY):- NextX is 0, NextY is 0,!.

Page 17: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 17

Mecanismo de Inferência

inferirX(S,X,Y):- NextX is X - 1, NextX > 0, NextY is Y,segura(NextX,NextY),naovisitada(NextX,NextY),assert(prioridade(NextX,NextY,0)), fail.

inferirX(S,X,Y):- NextX is X + 1, NextX < 5, NextY is Y,segura(NextX,NextY),naovisitada(NextX,NextY),assert(prioridade(NextX,NextY,0)), fail.

inferirX(S,X,Y):- NextX is X, NextY is Y - 1, NextY > 0,segura(NextX,NextY),naovisitada(NextX,NextY),assert(prioridade(NextX,NextY,0)), fail.

inferirX(S,X,Y):- NextX is X, NextY is Y + 1, NextY < 5,segura(NextX,NextY),naovisitada(NextX,NextY),assert(prioridade(NextX,NextY,0)), fail.

Page 18: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 18

Mecanismo de Inferência

inferirX(S,X,Y):- NextX is X - 1, NextX > 0, NextY is Y,segura(NextX,NextY),visitada(NextX,NextY,Z),assert(prioridade(NextX,NextY,Z)), fail.

inferirX(S,X,Y):- NextX is X + 1, NextX < 5, NextY is Y,segura(NextX,NextY),visitada(NextX,NextY,Z),assert(prioridade(NextX,NextY,Z)), fail.

inferirX(S,X,Y):- NextX is X, NextY is Y - 1, NextY > 0,segura(NextX,NextY),visitada(NextX,NextY,Z),assert(prioridade(NextX,NextY,Z)), fail.

inferirX(S,X,Y):- NextX is X, NextY is Y + 1, NextY < 5,segura(NextX,NextY),visitada(NextX,NextY,Z),assert(prioridade(NextX,NextY,Z)), fail.

inferirX(S,X,Y).

Page 19: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 19

Mecanismo de Inferência

next(X,Y):- prioridade(X,Y,0),!.next(X,Y):- prioridade(X,Y,1),!.next(X,Y):- prioridade(X,Y,2),!.next(X,Y):- prioridade(X,Y,3),!.next(X,Y):- prioridade(X,Y,4),!.next(X,Y):- prioridade(X,Y,5),!.next(X,Y):- prioridade(X,Y,6),!.

Page 20: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 20

Objetivosvai:- assert( agente(1,1,1)), desenha(1,1),assert(ultimo(1,1,1)),verburaco.vaiX(S,X,Y):- doPercebe(X,Y), doTentarMatar(X,Y),

((brilho(X,Y),

pegaouro(X,Y), voltaX(S,X,Y),!);

(inferir(S,X,Y,NextX,NextY), ((NextX == 0,

wgfx((wumpus,2000),[brsh(1,1,1,0), text(0,40,`NAO ENCONTREI O OURO... AI..`)]), voltaX(S,X,Y),!);

(K is S + 1, assert(agente(K,NextX,NextY)),apaga(X,Y),desenha(NextX,NextY)),retract(ultimo(S,X,Y)),assert(ultimo(K,NextX,NextY))))).

continuaX:- (forall(ultimo(S,X,Y), vaiX(S,X,Y))),!.

Page 21: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 21

Objetivos

voltaX(S,X,Y):- ((S < 2, desenhafim,!); (apaga(X,Y), K is S - 1, agente(K,NextX,NextY), desenha(NextX,NextY),voltaX(K,NextX,NextY),!),!).

pegaouro(X,Y):-wgfx((wumpus,2000),[brsh(1,1,1,0),text(0,20,`Peguei o ouro`)]), retract(pegueiouro(false)),assert(pegueiouro(true)).

Page 22: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 22

Percepções

doPercebe(X,Y):- visitada(X,Y,_),!.doPercebe(X,Y):- assert(visitada(X,Y,1)),retract(naovisitada(X,Y)),

forall(xcheiro(X,Y), (assert(cheiro(X,Y)), textoCheiro(X,Y))),forall(xbrisa(X,Y), (assert(brisa(X,Y)), textoBrisa(X,Y))),forall(xburaco(X,Y), assert(buraco(X,Y))),forall(xouro(X,Y), assert(ouro(X,Y))),forall(xbrilho(X,Y), (assert(brilho(X,Y)), textoBrilho(X,Y))),forall(xmonstro(X,Y), assert(monstro(X,Y))),!.

Page 23: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 23

Ações

doTentarMatar(X,Y):- (monstrovivo(true), doMatar(X,Y)),!.doTentarMatar(X,Y).

doMatar(X,Y):- (monstroX(X,1); monstroX(X,2); monstroX(X,3);monstroX(X,4)), matarmonstro,!.

doMatar(X,Y):- (monstroX(1,Y); monstroX(2,Y); monstroX(3,Y);monstroX(4,Y)),matarmonstro,!.

doMatar(X,Y).

matarmonstro:- grito, retract(monstrovivo(true)),asssert(monstrovivo(false)),forall(xcheiro(X,Y), retract(xcheiro(X,Y))),forall(xmonstro(X,Y), retract(xmonstro(X,Y))),forall(cheiro(X,Y), retract(cheiro(X,Y))),undoMonstro(X,Y), textoNW(X,Y),!.

Page 24: Agente Explorador do Mundo Wumpus By Ana Cristina, Ioram e Leonardo

© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 24

Açõesapaga(X,Y):- X1 is X * 100, Y1 is Y * 10, K is X1 + Y1 + 1000,

wgfx((wumpus,K),[brsh(255,255,255,0),elip(0,18,60,70)]).desenha(X,Y):- X1 is X * 100, Y1 is Y * 10, K is X1 + Y1 + 1000,

wgfx((wumpus,K),[brsh(1,1,1,0),elip(28,35,18,18)]),wgfx((wumpus,K),[brsh(1,1,1,0),elip(28,35,18,67)]),wgfx((wumpus,K),[brsh(1,1,1,0),line(25,40,40,55)]),wgfx((wumpus,K),[brsh(1,1,1,0),line(25,60,40,75)]),wgfx((wumpus,K),[brsh(1,1,1,0),line(25,40,10,55)]),wgfx((wumpus,K),[brsh(1,1,1,0),line(25,60,10,75)]),((monstrovivo(true), wgfx((wumpus,K), [brsh(255,0,0,0),

poly(10,20,25,50,12,22,27,52)]),wgfx((wumpus,K),[brsh(255,0,0,0),elip(15,30,20,50)]));(!)),

((pegueiouro(true),wgfx((wumpus,K), [brsh(0,255,-255,0),rect(30,30,40,50)]));(!)),!.