参考
1、深度强化学习(一): Deep Q Network(DQN)(两个网络的区别)
2、深度强化学习——DQN(工作流程图、误差计算方法)
DQN简介
DQN是一种融合了神经网络和 Q learning 的方法,因为传统表格形式的强化学习有这样一个瓶颈:当问题过于复杂,状态过多时,全用表格来存储它们是不现实的。
使用神经网络,我们就可以将状态和动作当成神经网络的输入, 然后经过神经网络分析后得到动作的 Q 值,这样我们就没必要在表格中记录 Q 值,而是直接使用神经网络生成 Q 值。
还有一种形式的是这样,我们也可以只输入状态值,输出所有的动作值,然后按照 Q learning 的原则,直接选择拥有最大值的动作当做下一步要做的动作。
算法原理
流程结构
实现步骤
1.初始化记忆库D和容量N,初始化Q的估计值、真实值等参数
2.在每一轮训练中,首先初始化状态序列 和 预处理序列,并在训练中的每一步进行如下操作:
(1)根据贪婪度epsilon概率选择下一步的动作action
(2)在当前状态state采用行动action后,得到下一状态state’和反馈reward
(3)保存这一步的记忆到记忆库D中
(4)当积累一定的步数记忆后,从记忆库D中随机抽取一定数量的记忆作为样本并进行学习,以及更新网络参数
(5)将本次训练的将下一个 state_ 作为 下次循环训练的起始 state
代码架构
# 定义DeepQNetwork类,用于实现神经网络结构
RL = DeepQNetwork(env.n_actions, env.n_features,
learning_rate=0.01,
reward_decay=0.9,
e_greedy=0.9,
replace_target_iter=200, # 每 200 步替换一次 target_net 的参数
memory_size=2000, # 记忆上限
# output_graph=True # 是否输出 tensorboard 文件
)
# 用来控制什么时候学习
step = 0
for episode in range(300):
# initial observation
observation = env.reset()
while True:
# 刷新环境
env.render()
# DQN 根据观测值选择行为
action = RL.choose_action(observation)
# 环境根据行为给出下一个 state, reward, 是否终止
observation_,