如何构建一个输出 1 个离散值和 1 个连续值成对的 DQN?

How to build a DQN that outputs 1 discrete and 1 continuous value as a pair?

我正在为 Open Gym 环境构建 DQN。我的观察 space 只有 1 个离散值,但我的行为是:

self.action_space = (Discrete(3), Box(-100, 100, (1,)))

例如:[1,56]、[0,24]、[2,-78]...

我当前的神经网络是:

model = Sequential()
model.add(Dense(24, activation='relu', input_shape=states)) # (1,)
model.add(Dense(24, activation='relu'))
model.add(Dense(2, activation='linear'))

(我是从一个只输出[0,1]范围内的1个离散值的教程中复制过来的)}

我知道我需要更改神经网络的最后一层,但在我的情况下会怎样?

我猜最后一层应该有3个二进制输出和1个连续输出但我不知道 如果有可能在同一层内有不同性质的输出。

正如您在评论中已经指出的那样,由于 DQN 的工作方式,DQN 与连续动作空间不兼容; argmax of "a" for Q(s,a) - 当 a 是连续的时,不可能检查所有 aQ(s,a)


话虽如此,当将其应用于策略梯度方法(与连续动作空间兼容)时,您将运行 进入您问题中的同一问题,因为使用策略梯度,您需要为您采取的每项行动提供概率。像这样的东西可以工作:

  • Actor(在本例中为神经网络)提供 3 个输出。
  • 前 2 个输出是每个离散值的概率。
  • 第三个输出是你的连续值。

获取前两个输出的 softmax,它会为您提供离散值,然后获取第三个连续输出,这将为您提供操作。然后,您需要推导出该动作的概率,该概率由所有输出的组合概率给出。