我一直在尝试为搜索算法创建一个Minmax代理,并且正在努力寻找为什么这会给我一个错误:
def getAction(self, gameState):
def isTerminalState(gameState):
if (gameState.isWin() or gameState.isLose() or self.depth == 0):
return True;
return False;
def max_value(state, depth):
if isTerminalState(state):
return self.evaluationFunction(state)
depth -= 1
maximum_value = float("-inf")
maximum_action = None
for action in state.getLegalActions(0):
next_state = state.generateSuccessor(0, action)
num_ghosts = state.getNumAgents() - 1
temp_value = min_value(next_state, depth, num_ghosts)
if temp_value > maximum_value:
maximum_value = temp_value
maximum_action = action
return (maximum_value, maximum_action)
def min_value(state, depth, num_ghosts):
if isTerminalState(state):
return self.evaluationFunction(state)
minimum_value = float("inf")
if num_ghosts is 1:
for action in state.getLegalActions(1):
next_state = state.generateSuccessor(1, action)
temp_value = max_value(next_state, depth)[0]
if temp_value < minimum_value:
minimum_value = temp_value
return minimum_value
else:
list = []
if num_ghosts > 1:
for action in state.getLegalActions(i):
next_state = state.generateSuccessor(i, action)
list.append(min_value(next_state, depth, num_ghosts - 1))
return min(list)
return max_value(gameState, self.depth)[1]
错误出现在min_value(状态,深度,num_ghosts)内部,即:
temp_value = max_value(next_state, depth)[0]
我正在尝试从max_value函数访问maxium_value,而我收到的错误是
TypeError: 'float' object is not subscriptable
请帮助:(
答案 0 :(得分:0)
该错误告诉您问题所在。您从max_value返回浮点数而不是元组(或任何其他可下标数据类型)。
return self.evaluationFunction(state)
这是您返回浮点数的行。如果您需要进一步的帮助,请将代码发布到此功能。