在python

时间:2017-03-16 21:03:01

标签: python tree reinforcement-learning

所以我正在尝试实施一个强化学习代理,这个代理能够发挥作用。为此,我需要创建一个数据结构,用于存储游戏状态,该状态下可用的操作以及在该状态下执行所述操作的奖励。此外,它必须能够返回在给定状态下采取可用行动的最大奖励。具体来说,这里的游戏状态由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

怎样才能做得更好?我自己施加的一些限制是:

  1. 不预先计算所有可能的状态并为其分配 整数
  2. 我想用查找表而不是神经网络来做这件事。那会晚些。

1 个答案:

答案 0 :(得分:0)

最后一个元组字典a = {(state,action):value}工作