Agente Explorador do Mundo
Wumpus
By Ana Cristina, Ioram e Leonardo
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 2
Ambiente do Jogo
4
?
3
2
1
1
© Ana, Ioram, Leonardo, 1998
2
3
4
Agente Explorador do Mundo do Wumpus
Slide 3
Modelagem do Jogo usando
Agentes
Prolog
sensores
agente
percepções
Base de
conhecimento
ambiente
ações
objetivos
inferência
efetuadores
© Ana, Ioram, Leonardo, 1998
Agente Explorador do Mundo do Wumpus
Slide 4
Conclusões




Prolog realmente é fácil
recursividade (loops)
“cut”
redundâncias no modelo
© Ana, Ioram, Leonardo, 1998
Agente Explorador do Mundo do Wumpus
Slide 5
© Ana, Ioram, Leonardo, 1998
Agente Explorador do Mundo do Wumpus
Slide 6
© Ana, Ioram, Leonardo, 1998
Agente Explorador do Mundo do Wumpus
Slide 7
Ambiente
wumpusP: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 8
Ambiente
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)]).
© Ana, Ioram, Leonardo, 1998
Agente Explorador do Mundo do Wumpus
Slide 9
Ambiente
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):brisaX(X,Y):brisaX(X,Y):brisaX(X,Y):-
xburaco(X0,Y ),X
xburaco(X0,Y ),X
xburaco(X ,Y0),Y
xburaco(X ,Y0),Y
© Ana, Ioram, Leonardo, 1998
is
is
is
is
X0 - 1.
X0 + 1.
Y0 - 1.
Y0 + 1.
Agente Explorador do Mundo do Wumpus
Slide 10
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 11
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 12
Mecanismo de Inferência
segura(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 13
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 14
Mecanismo de Inferência
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, 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 15
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 16
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 17
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 18
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 19
Objetivos
vai:- 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 20
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 21
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 22
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 23
Ações
apaga(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)]));(!)),!.
© Ana, Ioram, Leonardo, 1998
Agente Explorador do Mundo do Wumpus
Slide 24
Download

wumpus-explor.pro