我一直在为伯克利的Pacman项目工作。课程。我遇到了一个问题,想弄清楚如何找到一条路径让pacman接触到pacman板的四个角落。它使用一般的广度优先搜索算法。它只在有一个目标状态时才返回路径,而不是四个。
这个特定问题的项目指出:
在角落迷宫中,有四个点,每个角落一个。我们新的搜索问题是找到通过迷宫接触所有四个角落的最短路径(迷宫是否实际上有食物在那里)。请注意,对于像tinyCorners这样的迷宫,最短的路径并不总是首先去最近的食物!提示:通过tinyCorners的最短路径需要28步。
在searchAgents.py中实施CornersProblem搜索问题。您需要选择一个状态表示,该状态表示编码检测是否已到达所有四个角所需的所有信息。
BFS:
File "C:\Users\Vincent Law\Desktop\23.py", line 36, in load_file
newProject.__init__.clientLogoEntry.delete(0, END) AttributeError: 'function' object has no attribute 'clientLogoEntry'
搜索代理启动状态:
fringe = util.Queue()
fringe.push( (problem.getStartState(), [], 0) )
visited = set()
while not fringe.isEmpty():
curState, curAction, curCost = fringe.pop()
if curState in visited:
continue
visited.add(curState)
if problem.isGoalState(curState):
return curAction
for state, action, cost in problem.getSuccessors(curState):
fringe.push( (state, curAction + [action], cost ) )
return []
util.raiseNotDefined()
SearchAgent目标状态
def getStartState(self):
"""
Returns the start state (in your state space, not the full Pacman state
space)
"""
"*** YOUR CODE HERE ***"
return self.startingPosition
util.raiseNotDefined()
我坚持回到目标状态,以便测试通过。目前,该函数返回:
"""
Returns whether this search state is a goal state of the problem.
"""
"*** YOUR CODE HERE ***"
// TODO
util.raiseNotDefined()
或者我只返回4个角中的1个。
答案 0 :(得分:0)
目标状态的定义是什么?当触摸所有4个角时。
鉴于你已经拥有了所有4个角坐标,你可以使用一个简单的Python列表来存储角,当你在后继状态中传递状态时,当你到达那个状态时从角落列表中删除。 (检查本身将进入getSuccessors()
函数,因为您传递的是包含当前位置的状态。)
然后检查此列表应该很简单。