logic q6
This commit is contained in:
@ -268,23 +268,23 @@ def pacphysicsAxioms(t: int, all_coords: List[Tuple], non_outer_wall_coords: Lis
|
|||||||
"""
|
"""
|
||||||
pacphysics_sentences = []
|
pacphysics_sentences = []
|
||||||
|
|
||||||
# 1. 对于所有坐标,如果有墙,则Pacman不在该位置
|
# For all coordinates, if there is a wall, then Pacman is not in that location.
|
||||||
for x, y in all_coords:
|
for x, y in all_coords:
|
||||||
pacphysics_sentences.append(PropSymbolExpr(wall_str, x, y) >> ~PropSymbolExpr(pacman_str, x, y, time=t))
|
pacphysics_sentences.append(PropSymbolExpr(wall_str, x, y) >> ~PropSymbolExpr(pacman_str, x, y, time=t))
|
||||||
|
|
||||||
# 2. Pacman在t时刻恰好位于一个非外墙坐标
|
# At time t, Pacman is precisely located at a non-wall coordinate.
|
||||||
pacman_locations = [PropSymbolExpr(pacman_str, x, y, time=t) for x, y in non_outer_wall_coords]
|
pacman_locations = [PropSymbolExpr(pacman_str, x, y, time=t) for x, y in non_outer_wall_coords]
|
||||||
pacphysics_sentences.append(exactlyOne(pacman_locations))
|
pacphysics_sentences.append(exactlyOne(pacman_locations))
|
||||||
|
|
||||||
# 3. Pacman在t时刻恰好执行一个动作
|
# At time t, Pacman executes exactly one action.
|
||||||
actions = [PropSymbolExpr(action, time=t) for action in DIRECTIONS]
|
actions = [PropSymbolExpr(action, time=t) for action in DIRECTIONS]
|
||||||
pacphysics_sentences.append(exactlyOne(actions))
|
pacphysics_sentences.append(exactlyOne(actions))
|
||||||
|
|
||||||
# 4. 如果提供了sensorModel,则添加传感器公理
|
# If a sensor model is provided, add sensor axioms.
|
||||||
if sensorModel:
|
if sensorModel:
|
||||||
pacphysics_sentences.append(sensorModel(t, non_outer_wall_coords))
|
pacphysics_sentences.append(sensorModel(t, non_outer_wall_coords))
|
||||||
|
|
||||||
# 5. 如果提供了successorAxioms,则添加转移公理
|
# If successor axioms are provided, add transition axioms.
|
||||||
if t!=0 and successorAxioms:
|
if t!=0 and successorAxioms:
|
||||||
pacphysics_sentences.append(successorAxioms(t, walls_grid, non_outer_wall_coords))
|
pacphysics_sentences.append(successorAxioms(t, walls_grid, non_outer_wall_coords))
|
||||||
|
|
||||||
@ -463,11 +463,31 @@ def localization(problem, agent) -> Generator:
|
|||||||
|
|
||||||
KB = []
|
KB = []
|
||||||
|
|
||||||
"*** BEGIN YOUR CODE HERE ***"
|
# Add information about walls to the KB
|
||||||
util.raiseNotDefined()
|
for x, y in all_coords:
|
||||||
|
if (x, y) in walls_list:
|
||||||
|
KB.append(logic.PropSymbolExpr(wall_str, x, y))
|
||||||
|
else:
|
||||||
|
KB.append(~logic.PropSymbolExpr(wall_str, x, y))
|
||||||
|
|
||||||
for t in range(agent.num_timesteps):
|
for t in range(agent.num_timesteps):
|
||||||
"*** END YOUR CODE HERE ***"
|
pacphysics = pacphysicsAxioms(t, all_coords, non_outer_wall_coords, walls_grid, sensorModel=sensorAxioms,successorAxioms=allLegalSuccessorAxioms)
|
||||||
|
KB.append(pacphysics)
|
||||||
|
action_t = agent.actions[t]
|
||||||
|
KB.append(logic.PropSymbolExpr(action_t, time=t))
|
||||||
|
percepts=agent.getPercepts()
|
||||||
|
percept_rules=fourBitPerceptRules(t,percepts)
|
||||||
|
KB.append(percept_rules)
|
||||||
|
possible_locations = []
|
||||||
|
for (x, y) in non_outer_wall_coords:
|
||||||
|
pacman_at_xy_t = logic.PropSymbolExpr(pacman_str, x, y, time=t)
|
||||||
|
if findModel(conjoin(KB + [pacman_at_xy_t])):
|
||||||
|
possible_locations.append((x, y))
|
||||||
|
if entails(conjoin(KB), pacman_at_xy_t):
|
||||||
|
KB.append(pacman_at_xy_t)
|
||||||
|
if entails(conjoin(KB), ~pacman_at_xy_t):
|
||||||
|
KB.append(~pacman_at_xy_t)
|
||||||
|
agent.moveToNextState(action_t)
|
||||||
yield possible_locations
|
yield possible_locations
|
||||||
|
|
||||||
#______________________________________________________________________________
|
#______________________________________________________________________________
|
||||||
|
Reference in New Issue
Block a user