DQN 的代码实现

作者: 不会停的蜗牛 | 来源:发表于2020-03-16 23:56 被阅读0次

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

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


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

    图片来自:Resource Management with Deep Reinforcement Learning

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

    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/

    相关文章

      网友评论

        本文标题:DQN 的代码实现

        本文链接:https://www.haomeiwen.com/subject/khyaehtx.html