Berkeley Pacman CornersProblem

时间:2018-01-07 22:22:20

标签: pacman

我一直在为伯克利的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个。

1 个答案:

答案 0 :(得分:0)

目标状态的定义是什么?当触摸所有4个角时。

鉴于你已经拥有了所有4个角坐标,你可以使用一个简单的Python列表来存储角,当你在后继状态中传递状态时,当你到达那个状态时从角落列表中删除。 (检查本身将进入getSuccessors()函数,因为您传递的是包含当前位置的状态。)

然后检查此列表应该很简单。