我想在2048游戏中执行Mini-Max算法。为了做到这一点,我首先创建了一个树
class Tree(object):
def __init__(self, num_sons, data, parent=None):
self.data = [None, data]
self.sons = []
self.index_son = 0
self.parent = parent
for i in range(num_sons):
self.sons.append(None)
def add_son(self, son):
self.sons[self.index_son] = son
self.index_son += 1
def get_son(self, index):
return self.sons[index]
def is_terminal(self):
return self.index_son == 0
基本上每个节点的每个动作都有不同数量的后代。 Max的动作是2048年游戏中的常用动作,向上或向左移动,Min of Actions是在游戏中创建额外2个块的动作(每当你在2048年没有取得进展时)在边缘上创建了额外的2个块。
我创建了树,所以终端保存了值。 现在我想使用MiniMax算法在树的每个节点初始化数据。
尝试这个:
def minimax(self, root, player_turn):
if root.is_terminal():
return root.data[1]
else:
if player_turn % 2 == 0:
for i in range(root.index_son):
root.data[1] = max(root.data[1], self.minimax(root.get_son(i), 1))
if player_turn % 2 == 1:
for i in range(root.index_son):
root.data[1] = min(root.data[1], self.minimax(root.get_son(i), 0))
我收到错误
TypeError: '>' not supported between instances of 'NoneType' and 'float'
在这一行:
root.data[1] = max(root.data[1], self.minimax(root.get_son(i), 1))
我知道如果节点不是终端,我不会返回任何内容,但我不知道在这些情况下要添加什么。