深度Q学习代理表现不佳。需要帮助优化

时间:2019-04-11 22:30:29

标签: python keras artificial-intelligence reinforcement-learning

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

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

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

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

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

他们与特工一起旋转。

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

操作将向左转,向右转,什么也不做。

当代理与奖励门相交时,奖励功能返回25;否则,奖励函数将返回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

我尝试了不同类型的模型,每层神经元的数量不同,其他激活和损失函数,丢失,批处理归一化,并且该模型目前效果最好

我尝试了不同的奖励值

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

有时候,我的特工设法在撞到边界之前相交了几扇大门。很少有他能穿越一半的赛道,并且在这种设置下,他一次穿越了两圈,然后才卡住。

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

我认为问题在于状态表示或奖励功能。

任何建议将不胜感激

0 个答案:

没有答案