强化学习中如何处理不同的状态空间大小?

I_A*_*ary 6 python reinforcement-learning tensorflow

我正在从事A2C强化学习,我的环境中代理的数量在增加和减少。由于代理数量的增加和减少,状态空间也会发生变化。我试图通过这种方式解决改变状态空间的问题:

  • 如果状态空间超过选择为 的最大状态空间,则将选择n_input多余的状态空间, np.random.choice其中随机选择提供了一种在将状态空间转换为概率后从状态空间创建随机样本的方法。

  • 如果状态空间小于最大状态,我用零填充状态空间。

    def get_state_new(state):
     n_features =  n_input-len(get_state(env))
     # print("state",len(get_state(env)))
     p = np.array(state)
     p = np.exp(p)
     if p.sum() != 1.0:
         p = p * (1. / p.sum())
     if len(get_state(env)) > n_input:
         statappend = np.random.choice(state, size=n_input, p=p)
         # print(statappend)
     else:
         statappend = np.zeros(n_input)
         statappend[:state.shape[0]] = state
     return statappend
    
    Run Code Online (Sandbox Code Playgroud)

它有效,但结果不如预期,我不知道这是否正确。

我的问题

有没有参考论文处理这样的问题以及如何处理状态空间的变化?

I_A*_*ary 2

我使用不同的解决方案解决了问题,但我发现编码是解决我的问题的最佳解决方案

\n
    \n
  • 选择具有预先估计最大状态空间的模型,如果状态空间小于最大状态,我们用零填充状态空间
  • \n
  • 仅考虑代理本身的状态,而不共享其他状态。
  • \n
  • 正如论文[1] 提到的,额外连接的自动驾驶车辆 (CAV) 不包含在状态中,如果它们小于最大 CAV,则状态将用零填充。我们可以选择可以共享多少代理的状态,并将其状态添加到代理\xe2\x80\x99s\n状态中。
  • \n
  • 对状态进行编码,它将帮助我们处理输入并将信息压缩为固定长度。在编码器中,LSTM 层或具有门控循环单元 (GRU) 的 RNN 中的每个单元\n返回隐藏状态 (Ht) 和单元状态 (E\xe2\x80\x99t)。
  • \n
\n

在此输入图像描述

\n

对于编码器,我使用带有注意代码的神经机器翻译

\n
class Encoder(tf.keras.Model):\n  def __init__(self, vocab_size, embedding_dim, enc_units, batch_sz):\n    super(Encoder, self).__init__()\n    self.batch_sz = batch_sz\n    self.enc_units = enc_units\n    self.embedding = tf.keras.layers.Embedding(vocab_size, embedding_dim)\n    self.gru = tf.keras.layers.GRU(self.enc_units,\n                                   return_sequences=True,\n                                   return_state=True,\n                                   recurrent_initializer=\'glorot_uniform\')\n\n  def call(self, x, hidden):\n    x = self.embedding(x)\n    output, state = self.gru(x, initial_state = hidden)\n    return output, state\n\n  def initialize_hidden_state(self):\n    return tf.zeros((self.batch_sz, self.enc_units))\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • LSTM 零填充和掩码,我们使用稍后要掩码(跳过)的特殊值来填充状态。如果我们在没有掩蔽的情况下进行填充,则填充后的值将被视为实际值,因此,它在状态[2-4]中变成噪声。
  • \n
\n

1- Vinitsky, E.、Kreidieh, A.、Le Flem, L.、Kheterpal, N.、Jang, K.、Wu, C....和 ​​Bayen, AM(2018 年 10 月)。混合自主交通中强化学习的基准。机器人学习会议(第 399-409 页)

\n

2- Kochkina, E.、Liakata, M. 和 Augenstein, I. (2017)。Turing at semeval-2017 任务 8:使用分支 lstm 进行谣言立场分类的顺序方法。arXiv 预印本 arXiv:1704.07221。

\n

3- Ma, L. 和梁 L. (2020)。增强 CNN 对噪声的鲁棒性,以对可变长度的 12 导联 ECG 进行分类。arXiv 预印本 arXiv:2008.03609。

\n

4-如何为 LSTM 提供不同的输入数组大小?

\n

5- 赵X.、夏L.、张L.、丁Z.、尹D.和唐J.(2018 年 9 月)。用于逐页推荐的深度强化学习。第 12 届 ACM 推荐系统会议论文集(第 95-103 页)。

\n