深度 Q-Learning 代理的行为表现不佳。需要帮助优化

人工智能 强化学习 Python q学习 喀拉斯 深度学习
2021-11-13 01:37:54

我正在尝试从https://keon.io/deep-q-learning制作深度 q-learning 代理

我的环境如下所示: https ://imgur.com/a/OnbiCtV

如您所见,我的代理人是一个圆圈,并且有一条带有橙色线条的灰色轨道(奖励门)。粗线是活动门。圆圈中的橙色线指向他的方向。

代理具有恒定的速度,它可以向左/向右转 10 度或什么也不做

下一张图片是代理传感器 https://imgur.com/a/Qj7Kesi

他们与代理一起旋转。

状态是从代理到活动门的距离和传感器的长度。总共有 1+7 个状态,它是 q-learning 神经网络输入维度。

行动是左转,右转,什么都不做。

当代理与奖励门相交时,奖励函数返回 25;125 当代理与最后一个门相交时;-5 如果代理与轨道边界相交如果都没有,奖励函数比较代理到当前状态和下一个状态的活动门的距离:

如果当前状态距离 > 下一个状态距离:返回 0.1 否则返回 -0.1

此外,DQNAgent 具有负面、正面和中性记忆。如果奖励为-5,(状态,动作,奖励,next_state,完成)转到负记忆,如果奖励> = 25,则为正,否则为中性

那是因为当我形成小批量进行训练时,我从中性记忆中随机抽取 20 个样本,其中 6 个来自正样本,6 个来自负样本。

每次代理与轨道边界相交或被卡住超过 30 秒时,我都在进行训练(重播),代理从头开始。这是我的模型

model = Sequential()
model.add(Dense(64, input_dim=self.state_size,activation='relu', 
                  kernel_initializer=VarianceScaling(scale=2.0)))
model.add(Dense(32, 
    activation='relu',kernel_initializer=VarianceScaling(scale=2.0)))
model.add(Dense(self.action_size, activation='linear'))
model.compile(loss=self._huber_loss,
                  optimizer=Adam(lr=self.learning_rate))
return model

我尝试了不同类型的模型,每层不同数量的神经元,其他激活和损失函数,dropout,批量归一化,这个模型现在效果最好

我尝试了不同的奖励值

另外,我尝试使用静态传感器(它们不与代理一起旋转) https://imgur.com/a/8eDtQIF(照片上的绿线)

有时我的代理人会在到达边界之前设法穿过几个大门。他很少能跑过一半的赛道,有一次,在这个设置下,他跑了两圈才卡住。

更多的时候,他只在一个地方旋转。

我认为问题在于状态表示或奖励函数。

任何建议,将不胜感激

0个回答
没有发现任何回复~