【问题标题】:What is the best approach to tackle this kind of DQN Agent?处理这种 DQN 代理的最佳方法是什么?
【发布时间】:2021-03-01 02:35:57
【问题描述】:

我是强化学习和深度学习的初学者,所以对我来说很简单^^

假设我们在 Keras 中有一个 DQN 代理,它接收一个由 0 和 1 组成的二维矩阵的输入,假设它有 10 行和 3 列。

这个矩阵是一个包含 10 个用户(行数)的请求矩阵,如果其中一列的值等于 1,则表示用户正在向代理请求提供给该用户的资源。

例子:

[
 [0, 1, 0],
 [0, 0, 0],
 [1, 0, 0],
 [0, 0, 1],
 ...
]

在收到输入矩阵后,代理必须为请求它的用户提供资源,而不为没有请求的用户提供任何资源。

假设代理有 12 个可以分配的资源。我们可以将资源分配表示为一个 12 行(资源数量)和 10 列(用户数量)的二维矩阵。

每个资源只能给一个用户,每个用户在每个步骤中只能使用一个资源。

我尝试过this,这与我的问题相似,但是当我运行代码时,q_values(或权重?)被分配给输出矩阵每一行的每一列,我想要的是q_values 分配给整个矩阵,或者至少这是我的初学者大脑告诉我的。

动作(输出)矩阵可以是这样的:

[
 [1, 0, 0, 0, 0, ...]
 [0, 0, 0, 0, 0, ...],
 [0, 0, 0, 1, 0, ...],
 ...
]

我的一个想法是从一组矩阵(动作)中进行选择,但是该集合非常大,我无法存储它,因为它给了我一个 MemoryError。

我仍然不知道解决这个困境的最佳方法是什么。

【问题讨论】:

    标签: python keras deep-learning reinforcement-learning conv-neural-network


    【解决方案1】:

    最简单的方法是使用 n_users 维动作向量定义您的 DQN 代理。这个动作向量的每个条目应该是一个整数x in [-1, n_resources)x == -1 表示没有分配给该用户的资源,而0 <= x < n_resources 表示分配给该用户的第 x 个资源。因此,您的示例操作输出将表示为:

    [0, -1, 3, ...]
    

    如果代理尝试将相同的资源分配给两个代理,则将其标记为非法操作。这样做的问题是您的非法行为空间很大(与用户数量有关)。

    另一种方法是彻底改变您的问题架构,并有一个一次将资源分配给人员的方法。代理显然需要某种内存来存储它分配的资源。这样,您的行动和非法行动结构就简单多了。在这种情况下,一个情节将由 n_users 个时间步组成,其中代理在每个时间步与环境交互并查看当前用户的请求及其已分配的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2010-09-05
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多