public class HybridWumpusAgent extends AbstractAgent
function HYBRID-WUMPUS-AGENT(percept) returns an action
inputs: percept, a list, [stench, breeze, glitter, bump, scream]
persistent: KB, a knowledge base, initially the atemporal "wumpus physics"
t, a counter, initially 0, indicating time
plan, an action sequence, initially empty
TELL(KB, MAKE-PERCEPT-SENTENCE(percept, t))
TELL the KB the temporal "physics" sentences for time t
safe <- {[x, y] : ASK(KB, OKtx,y) = true}
if ASK(KB, Glittert) = true then
plan <- [Grab] + PLAN-ROUTE(current, {[1,1]}, safe) + [Climb]
if plan is empty then
unvisited <- {[x, y] : ASK(KB, Lt'x,y) = false for all t' ≤ t}
plan <- PLAN-ROUTE(current, unvisited ∩ safe, safe)
if plan is empty and ASK(KB, HaveArrowt) = true then
possible_wumpus <- {[x, y] : ASK(KB, ~Wx,y) = false}
plan <- PLAN-SHOT(current, possible_wumpus, safe)
if plan is empty then //no choice but to take a risk
not_unsafe <- {[x, y] : ASK(KB, ~OKtx,y) = false}
plan <- PLAN-ROUTE(current, unvisited ∩ not_unsafe, safe)
if plan is empty then
plan <- PLAN-ROUTE(current, {[1,1]}, safe) + [Climb]
action <- POP(plan)
TELL(KB, MAKE-ACTION-SENTENCE(action, t))
t <- t+1
return action
--------------------------------------------------------------------------------
function PLAN-ROUTE(current, goals, allowed) returns an action sequence
inputs: current, the agent's current position
goals, a set of squares; try to plan a route to one of them
allowed, a set of squares that can form part of the route
problem <- ROUTE-PROBLEM(current, goals, allowed)
return A*-GRAPH-SEARCH(problem)
Figure 7.20 A hybrid agent program for the wumpus world. It uses a
propositional knowledge base to infer the state of the world, and a
combination of problem-solving search and domain-specific code to decide what
actions to takeprogram
Constructor and Description |
---|
HybridWumpusAgent() |
HybridWumpusAgent(int caveXandYDimensions) |
Modifier and Type | Method and Description |
---|---|
Action |
execute(Percept percept)
function HYBRID-WUMPUS-AGENT(percept) returns an action
|
java.util.List<Action> |
planRoute(AgentPosition current,
java.util.Set<Room> goals,
java.util.Set<Room> allowed)
Returns a sequence of actions using A* Search.
|
java.util.List<Action> |
planShot(AgentPosition current,
java.util.Set<Room> possibleWumpus,
java.util.Set<Room> allowed) |
isAlive, setAlive
public HybridWumpusAgent()
public HybridWumpusAgent(int caveXandYDimensions)
public Action execute(Percept percept)
execute
in interface Agent
execute
in class AbstractAgent
percept
- a list, [stench, breeze, glitter, bump, scream]public java.util.List<Action> planRoute(AgentPosition current, java.util.Set<Room> goals, java.util.Set<Room> allowed)
current
- the agent's current positiongoals
- a set of squares; try to plan a route to one of themallowed
- a set of squares that can form part of the routepublic java.util.List<Action> planShot(AgentPosition current, java.util.Set<Room> possibleWumpus, java.util.Set<Room> allowed)
current
- the agent's current positionpossibleWumpus
- a set of squares where we don't know that there isn't the
wumpus.allowed
- a set of squares that can form part of the route