我是靠谱客的博主 虚心冰棍,这篇文章主要介绍DQN的e-greedy策略理解,现在分享给大家,希望可以做个参考。

阅读蘑菇书源码时,在写DQN网络的智能体是这样写的:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class DQN: def __init__(self, state_dim, action_dim, cfg): self.action_dim = action_dim # 总的动作个数 self.device = cfg.device # 设备,cpu或gpu等 self.gamma = cfg.gamma # 奖励的折扣因子 # e-greedy策略相关参数 self.frame_idx = 0 # 用于epsilon的衰减计数 self.epsilon = lambda frame_idx: cfg.epsilon_end + (cfg.epsilon_start - cfg.epsilon_end) * math.exp(-1. * frame_idx / cfg.epsilon_decay) self.batch_size = cfg.batch_size self.policy_net = MLP(state_dim, action_dim, hidden_dim=cfg.hidden_dim).to(self.device) # 定义一个深度学习网络 self.target_net = MLP(state_dim, action_dim, hidden_dim=cfg.hidden_dim).to(self.device) # 目标深度学习网络 for target_param, param in zip(self.target_net.parameters(), self.policy_net.parameters()): # copy params from policy net target_param.data.copy_(param.data) self.optimizer = optim.Adam(self.policy_net.parameters(), lr=cfg.lr) self.memory = ReplayBuffer(cfg.memory_capacity)

对于衰减函数,可以描述成:
ε = ε e n d + ( ε s t a r t − ε e n d ) × e − i n d e x ε d e c a y varepsilon = {varepsilon _{end}} + ({varepsilon _{start}} - {varepsilon _{end}}) times {e^{ - frac{{index}}{{{varepsilon _{decay}}}}}} ε=εend+(εstartεend)×eεdecayindex
利用MATLAB编程看一下这个函数的特点:

复制代码
1
2
3
4
5
6
7
8
9
frame_idx=1:10000; epsilon_end=0.01; epsilon_start=0.90; epsilon_decay=500; epsilon=epsilon_end+(epsilon_start-epsilon_end).*exp(-frame_idx./epsilon_decay); plot(frame_idx,epsilon) hold on scatter(500,epsilon(500))

绘图为:
在这里插入图片描述
可以看到,随着迭代次数frame_idx逐渐增大,最终的epsilon会越来越小,从初始的epsilon_start逐渐递减无限逼近epsilon_end实现策略收敛。

图中红色圆圈为迭代次数等于epsilon_decay时的位置,大概从这个位置开始放缓递减速度,之后逐渐收敛,达到策略稳定的效果。

这个策略在Q-learning里也是一样的。

最后

以上就是虚心冰棍最近收集整理的关于DQN的e-greedy策略理解的全部内容,更多相关DQN内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部