agente explorador do mundo wumpus by ana cristina, ioram e leonardo
TRANSCRIPT
Agente Explorador do MundoWumpus
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
© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 3
Ambiente do Jogo
1
2
3
4
1 2 3 4
?
© 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
© 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
© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 6
© Ana, Ioram, Leonardo, 1998 Agente Explorador do Mundo do Wumpus Slide 7
© 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).
© 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
© 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
© 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),
© 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)), ...
© 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));!),!.
© 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).
© 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).
© 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,!.
© 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.
© 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).
© 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),!.
© 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))),!.
© 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)).
© 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))),!.
© 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),!.
© 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)]));(!)),!.