我在体育馆建立了一个非常基本的环境,由一个 nxn 矩阵组成,由 0 和 1 填充。神经网络现在应该输出一个向量,指向矩阵的一个特定条目。
目前,这应该只是一个 0 的条目,然后将其更改为 1:本质上,ai 通过强化学习用 1 填充矩阵。后来,我希望它找到合适的位置将形状放入矩阵中(有点像俄罗斯方块游戏,只是块不会掉落)。
无论如何,我到目前为止都使用过DQN模型,这似乎不太适合这里。谁能指出我这种输入/输出设置的更好方法?
为了让我的设置与 DQN 配合使用,我现在所做的就是展平两个空间:
self.observation_space = spaces.MultiBinary(n * n)
self.action_space = spaces.Discrete(n*n)
观察空间:虽然我的状态/观察空间实际上是由0和1组成的矩阵,但我将其扁平化为MultiBinary,其中true代表1,false代表0。使用MultiBinary极大地提高了性能。
action_space:同样,虽然它表示指向矩阵位置中某个位置的向量,但我使用离散动作空间,然后将其unflatten用于取消矩阵中的条目
row = action // (self.n)
col = action % (self.n)
总而言之,虽然对我来说不直观,但 DQN 模型可以处理观察空间中的矩阵,只需将矩阵展平为一个 MultiDiscrete 或 MultiBinary。此外,选择矩阵中的条目的动作可以用 Discrete(n*n) 表示。