“TypeError: can only concatenate tuple (not “float”) to tuple” 出现

时间:2021-03-19 08:06:51

标签: python debugging depth-first-search pacman

所以我正在研究我们的实验室工作,我们必须为吃豆人实现深度优先搜索算法。我一直有这个错误,但我无法调试它,因为我只能在命令提示符下运行该文件,而且因为它是一个基于多个文件的程序,我对这些知之甚少。任何人都可以帮助我了解我在这里做错了什么吗?

我实现的算法是这样的:

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

0 个答案:

没有答案