前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DQN 的代码实现

DQN 的代码实现

作者头像
杨熹
发布2020-03-20 11:12:44
1.5K0
发布2020-03-20 11:12:44
举报
文章被收录于专栏:杨熹的专栏杨熹的专栏

上一篇讲了什么是 DQN,今天来看看如何用代码实现:

算法来自:Volodymyr Mnih,Playing Atari with Deep Reinforcement Learning


根据下面这个图看代码会更容易理解:

图片来自:Resource Management with Deep Reinforcement Learning

1. 首先我们需要建立一个 DQN agent:

代码语言:javascript
复制
import gym
from collections import deque
 
class DQNAgent():
    def __init__(self, env_id, path, episodes, max_env_steps, win_threshold, epsilon_decay,
                 state_size=None, action_size=None, epsilon=1.0, epsilon_min=0.01, 
                 gamma=1, alpha=.01, alpha_decay=.01, batch_size=16, prints=False):
        self.memory = deque(maxlen=100000)
        self.env = gym.make(env_id)
 
        if state_size is None: 
            self.state_size = self.env.observation_space.n 
        else: 
            self.state_size = state_size
 
        if action_size is None: 
            self.action_size = self.env.action_space.n 
        else: 
            self.action_size = action_size
 
        self.episodes = episodes
        self.env._max_episode_steps = max_env_steps
        self.win_threshold = win_threshold
        self.epsilon = epsilon
        self.epsilon_decay = epsilon_decay
        self.epsilon_min = epsilon_min
        self.gamma = gamma
        self.alpha = alpha
        self.alpha_decay = alpha_decay
        self.batch_size = batch_size
        self.path = path                     #location where the model is saved to
        self.prints = prints                 #if true, the agent will print his scores
 
        self.model = self._build_model()

模型的输入是 states,维度可以由 env.observation_space.n 获得。 模型的输出是每个 state 的所有 action 的 Q-value,维度由 env.action_space.n 获得。

模型可以用 Keras 的 sequence 建立,可以是 FFW,也可以是 CNN,根据环境任务的类型决定。

episodes:是指每一次玩游戏,就是从游戏开始到游戏结束算一次episode,这个结束可能是因为失败,也可能是因为达到了设定的结束的标准。

epsilon,epsilon_decay,epsilon_min:这三个是用来进行 exploration-exploitation trade off 的,其中 epsilon_decay 越大的话,agent 就会更多地 explore 环境,相仿就会更多地 exploit 已有的信息。

gamma 代表着我们有多么看重长期收益,它越大说明agent会更重视未来的收益,它越小说明agent会更重视短期的利益,一般我们都是希望长期结果是高收益的,可以放弃一些短期利益。


学习资料: https://www.novatec-gmbh.de/en/blog/deep-q-networks/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 首先我们需要建立一个 DQN agent:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档