所以我正在研究我们的实验室工作,我们必须为吃豆人实现深度优先搜索算法。我一直有这个错误,但我无法调试它,因为我只能在命令提示符下运行该文件,而且因为它是一个基于多个文件的程序,我对这些知之甚少。任何人都可以帮助我了解我在这里做错了什么吗?
我实现的算法是这样的:
def DFS(succ, stack, problem):
global flag
successors = []
if problem.isGoalState(succ):
flag = True
return
else:
if flag:
stack.push(succ)
return
else:
successors.append((problem.getSuccessors(succ)))
if not successors:
return
else:
i = 0
while i < len(successors):
if flag:
return stack
else:
stack.push(successors[i])
DFS(successors[i], stack, problem)
return
主要调用函数是:
def depthFirstSearch(problem):
"""
Search the deepest nodes in the search tree first.
Your search algorithm needs to return a list of actions that reaches the
goal. Make sure to implement a graph search algorithm.
To get started, you might want to try some of these simple commands to
understand the search problem that is being passed in:
"""
print "Start:", problem.getStartState()
print "Is the start a goal?", problem.isGoalState(problem.getStartState())
print "Start's successors:", problem.getSuccessors(problem.getStartState())
stack = util.Stack()
startState = problem.getStartState()
startNode = (startState, [])
DFS(startNode, stack, problem)
while not stack.IsEmpty:
val = stack.pop()
print val
"*** YOUR CODE HERE ***"
出现的错误是:
> File "C:\Users\Abdullah Khurram\Desktop\AI Lab\search\game.py", line
> 607, in run
> agent.registerInitialState(self.state.deepCopy()) File "C:\Users\Abdullah Khurram\Desktop\AI Lab\search\searchAgents.py",
> line 115, in registerInitialState
> self.actions = self.searchFunction(problem) # Find a path File "C:\Users\Abdullah Khurram\Desktop\AI Lab\search\search.py", line 93,
> in depthFirstSearch
> DFS(startNode, stack, problem) File "C:\Users\Abdullah Khurram\Desktop\AI Lab\search\search.py", line 141, in DFS
> successors.append((problem.getSuccessors(succ))) File "C:\Users\Abdullah Khurram\Desktop\AI Lab\search\searchAgents.py",
> line 199, in getSuccessors
> nextx, nexty = int(x + dx), int(y + dy) TypeError: can only concatenate tuple (not "float") to tuple
它所指的搜索代理函数如下:
def getSuccessors(self, state):
"""
Returns successor states, the actions they require, and a cost of 1.
As noted in search.py:
For a given state, this should return a list of triples,
(successor, action, stepCost), where 'successor' is a
successor to the current state, 'action' is the action
required to get there, and 'stepCost' is the incremental
cost of expanding to that successor
"""
successors = []
for action in [Directions.NORTH, Directions.SOUTH, Directions.EAST, Directions.WEST]:
x,y = state
dx, dy = Actions.directionToVector(action)
nextx, nexty = int(x + dx), int(y + dy)
if not self.walls[nextx][nexty]:
nextState = (nextx, nexty)
cost = self.costFn(nextState)
successors.append( ( nextState, action, cost) )
# Bookkeeping for display purposes
self._expanded += 1 # DO NOT CHANGE
if state not in self._visited:
self._visited[state] = True
self._visitedlist.append(state)
return successors