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

问题描述

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

我实现的算法是这样的:

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],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,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,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,int(y + dy)
        if not self.walls[nextx][nexty]:
            nextState = (nextx,nexty)
            cost = self.costFn(nextState)
            successors.append( ( nextState,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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...