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

2024-05-20 17:21:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个开放的健身房环境建造一个DQN。我的观察空间只有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个连续输出,但我不知道 如果可能在同一层中有不同性质的输出


Tags: selfaddmodel环境dqn空间actionspace
1条回答
网友
1楼 · 发布于 2024-05-20 17:21:17

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


话虽如此,当将此应用于策略梯度方法(与连续动作空间兼容的方法)时,您将在问题中遇到相同的问题,因为对于策略梯度,您需要为您采取的每个动作提供概率。类似这样的方法可能会奏效:

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

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

相关问题 更多 >