在 python 中存储状态 space 的最佳方式
Best way to store state space in python
所以我正在尝试实现一个玩井字游戏的强化学习代理。为此,我需要创建一个数据结构来存储游戏状态、该状态下可用的操作以及在给定该状态下采取上述操作的奖励。此外,它必须能够 return 在给定状态下采取可用操作的最大奖励。具体来说,这里的游戏状态由一个 9 向量给出,其值可以是 0、1、2(空,玩家 1,玩家 2)。每一步最多可以采取 9 种可能的行动(如果这些方块已被占用,则更少)
我想到了这个:
#Input np.array([0,0,0,0,0,0,0,0]),1
class Tree():
def __init__(self):
self.data=defaultdict(nested_dict)
def set(self,key,key2,value):
self.data[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]][key[7]][key[8]][key2]=value
def get(self,key,key2=''):
if(key2==''):
return self.data[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]][key[7]][key[8]]
return self.data[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]][key[7]][key[8]][key2]
def get_max_child(self,state):
return np.max(list(a.get(state).values()))
#Example of use
a=Tree()
a.set([0,0,0,0,0,0,0,0,0],7,1)
a.set([0,0,0,0,0,0,0,0,0],6,2)
a.get_max_child([0,0,0,0,0,0,0,0,0])
#Returns 2
如何才能做得更好?我对自己施加的一些限制是:
- 没有预先计算所有可能的状态并为它们分配一个
整数
- 我想通过查找 table 来执行此操作,而不是神经网络。稍后再说。
最后,元组字典 a={(state,action):value} 有效
所以我正在尝试实现一个玩井字游戏的强化学习代理。为此,我需要创建一个数据结构来存储游戏状态、该状态下可用的操作以及在给定该状态下采取上述操作的奖励。此外,它必须能够 return 在给定状态下采取可用操作的最大奖励。具体来说,这里的游戏状态由一个 9 向量给出,其值可以是 0、1、2(空,玩家 1,玩家 2)。每一步最多可以采取 9 种可能的行动(如果这些方块已被占用,则更少)
我想到了这个:
#Input np.array([0,0,0,0,0,0,0,0]),1
class Tree():
def __init__(self):
self.data=defaultdict(nested_dict)
def set(self,key,key2,value):
self.data[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]][key[7]][key[8]][key2]=value
def get(self,key,key2=''):
if(key2==''):
return self.data[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]][key[7]][key[8]]
return self.data[key[0]][key[1]][key[2]][key[3]][key[4]][key[5]][key[6]][key[7]][key[8]][key2]
def get_max_child(self,state):
return np.max(list(a.get(state).values()))
#Example of use
a=Tree()
a.set([0,0,0,0,0,0,0,0,0],7,1)
a.set([0,0,0,0,0,0,0,0,0],6,2)
a.get_max_child([0,0,0,0,0,0,0,0,0])
#Returns 2
如何才能做得更好?我对自己施加的一些限制是:
- 没有预先计算所有可能的状态并为它们分配一个 整数
- 我想通过查找 table 来执行此操作,而不是神经网络。稍后再说。
最后,元组字典 a={(state,action):value} 有效