0% found this document useful (0 votes)
2K views

Ex.5:Propositional Model Checking - Wumpus World: Aim: Methodology

The document describes implementing Python code for propositional model checking using the Wumpus world problem. An Agent class is defined that can navigate a 4x4 room cave, perceiving breeze or stench in adjacent rooms. The agent takes actions like Up, Down, Left, Right and checks if it is alive, has exited, or detects a pit or Wumpus. The code is executed to demonstrate the agent moving until it enters a room with a Wumpus and dies.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2K views

Ex.5:Propositional Model Checking - Wumpus World: Aim: Methodology

The document describes implementing Python code for propositional model checking using the Wumpus world problem. An Agent class is defined that can navigate a 4x4 room cave, perceiving breeze or stench in adjacent rooms. The agent takes actions like Up, Down, Left, Right and checks if it is alive, has exited, or detects a pit or Wumpus. The code is executed to demonstrate the agent moving until it enters a room with a Wumpus and dies.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

Ex.

5:Propositional model checking – Wumpus world

Aim:
To implement python code for propositional model checking using wumpus world problem

Methodology:
1.Goal formation:
Input:

Output:
The agent will get a reward if he comes out with gold, and he will get a penalty if eaten by Wumpus
or falls in the pit.
2. Problem Statement:
*A cave with 16(4×4) rooms
*Rooms adjacent (not diagonally) to the Wumpus are stinking
Rooms adjacent (not diagonally) to the pit are breezy
*The room with the gold glitters
*Agent’s initial position – Room[1, 1] and facing right side
*Location of Wumpus, gold and 3 pits can be anywhere, except in Room[1, 1].
3. Search solutions:
The knowledge-based agent starts from Room[1, 1]. The cave has – some pits, a treasure and a beast
named Wumpus. The Wumpus can not move but eats the one who enters its room. If the agent enters
the pit, it gets stuck there.
4. Execution:
The goal of the agent is to take the treasure and come out of the cave. The agent is rewarded, when the
goal conditions are met. The agent is penalized, when it falls into a pit or being eaten by the Wumpus.

Source code:
class Agent:
def __init__(self):
self.__wumpusWorld = [
['','','P',''],
['','','',''],
['W','','',''],
['','','',''],
]
self.__curLoc = [1,1]
self.__isAlive = True
self.__hasExited = False

def __FindIndicesForLocation(self,loc):
x,y = loc
i,j = y-1, x-1
return i,j

def __CheckForPitWumpus(self):
ww = self.__wumpusWorld
i,j = self.__FindIndicesForLocation(self.__curLoc)
if 'P' in ww[i][j] or 'W' in ww[i][j]:
print(ww[i][j])
self.__isAlive = False
print('Agent is DEAD.')
return self.__isAlive

def TakeAction(self,action):
validActions = ['Up','Down','Left','Right']
assert action in validActions, 'Invalid Action.'
if self.__isAlive == False:
print('Action cannot be performed. Agent is DEAD. Location:{0}'.format(self.__curLoc))
return False
if self.__hasExited == True:
print('Action cannot be performed. Agent has exited the Wumpus
world.'.format(self.__curLoc))
return False

index = validActions.index(action)
validMoves = [[0,1],[0,-1],[-1,0],[1,0]]
move = validMoves[index]
newLoc = []
for v, inc in zip(self.__curLoc,move):
z = v + inc
z = 4 if z>4 else 1 if z<1 else z
newLoc.append(z)
self.__curLoc = newLoc
print('Action Taken: {0}, Current Location {1}'.format(action,self.__curLoc))
if self.__curLoc[0]==4 and self.__curLoc[1]==4:
self.__hasExited=True
return self.__CheckForPitWumpus()

def __FindAdjacentRooms(self):
cLoc = self.__curLoc
validMoves = [[0,1],[0,-1],[-1,0],[1,0]]
adjRooms = []
for vM in validMoves:
room = []
valid = True
for v, inc in zip(cLoc,vM):
z = v + inc
if z<1 or z>4:
valid = False
break
else:
room.append(z)
if valid==True:
adjRooms.append(room)
return adjRooms

def PerceiveCurrentLocation(self):
breeze, stench = False, False
ww = self.__wumpusWorld
if self.__isAlive == False:
print('Agent cannot perceive. Agent is DEAD. Location:{0}'.format(self.__curLoc))
return [None,None]
if self.__hasExited == True:
print('Agent cannot perceive. Agent has exited the Wumpus World.'.format(self.__curLoc))
return [None,None]

adjRooms = self.__FindAdjacentRooms()
for room in adjRooms:
i,j = self.__FindIndicesForLocation(room)
if 'P' in ww[i][j]:
breeze = True
if 'W' in ww[i][j]:
stench = True
return [breeze,stench]

def FindCurrentLocation(self):
return self.__curLoc
def main():
ag = Agent()
print('curLoc',ag.FindCurrentLocation())
print('Percept [breeze, stench] :',ag.PerceiveCurrentLocation())
ag.TakeAction('Right')
print('Percept',ag.PerceiveCurrentLocation())
ag.TakeAction('Right')
print('Percept',ag.PerceiveCurrentLocation())
ag.TakeAction('Right')
print('Percept',ag.PerceiveCurrentLocation())
ag.TakeAction('Up')
print('Percept',ag.PerceiveCurrentLocation())
ag.TakeAction('Up')
print('Percept',ag.PerceiveCurrentLocation())
ag.TakeAction('Up')
print('Percept',ag.PerceiveCurrentLocation())

if __name__=='__main__':
main()

Output:
curLoc [1, 1]
Percept [breeze, stench] : [False, False]
Action Taken: Right, Current Location [2, 1]
Percept [True, False]
Action Taken: Right, Current Location [3, 1]
P
Agent is DEAD.
Agent cannot perceive. Agent is DEAD. Location:[3, 1]
Percept [None, None]
Action cannot be performed. Agent is DEAD. Location:[3, 1]
Agent cannot perceive. Agent is DEAD. Location:[3, 1]
Percept [None, None]
Action cannot be performed. Agent is DEAD. Location:[3, 1]
Agent cannot perceive. Agent is DEAD. Location:[3, 1]
Percept [None, None]
Action cannot be performed. Agent is DEAD. Location:[3, 1]
Agent cannot perceive. Agent is DEAD. Location:[3, 1]
Percept [None, None]
Action cannot be performed. Agent is DEAD. Location:[3, 1]
Agent cannot perceive. Agent is DEAD. Location:[3, 1]
Percept [None, None]

Result:
Thus we have implemented python code for propositional model checking using wumpus
world problem

Reference:
https://github.com/swapnil-ahlawat/Wumpus-World/blob/master/Agent.py

You might also like