代码:

  1. # -*- coding: utf-8 -*-
  2. import random
  3. import gym
  4. import numpy as np
  5. from collections import deque
  6. from keras.models import Sequential
  7. from keras.layers import Dense
  8. from keras.optimizers import Adam
  9. from keras.utils.vis_utils import plot_model
  10.  
  11. EPISODES = 1000
  12.  
  13. class DQNAgent:
  14. def __init__(self, state_size, action_size):
  15. self.state_size = state_size
  16. self.action_size = action_size
  17. self.memory = deque(maxlen=2000)
  18. self.gamma = 0.95 # discount rate
  19. #self.epsilon = 1.0 # exploration rate
  20. self.epsilon = 0.4 # exploration rate
  21. self.epsilon_min = 0.01
  22. self.epsilon_decay = 0.995
  23. self.learning_rate = 0.001
  24. self.model = self._build_model()
  25. #可视化MLP结构
  26. plot_model(self.model, to_file='dqn-cartpole-v0-mlp.png', show_shapes=False)
  27.  
  28. def _build_model(self):
  29. # Neural Net for Deep-Q learning Model
  30. model = Sequential()
  31. model.add(Dense(24, input_dim=self.state_size, activation='relu'))
  32. model.add(Dense(24, activation='relu'))
  33. model.add(Dense(self.action_size, activation='linear'))
  34. model.compile(loss='mse',
  35. optimizer=Adam(lr=self.learning_rate))
  36. return model
  37.  
  38. def remember(self, state, action, reward, next_state, done):
  39. self.memory.append((state, action, reward, next_state, done))
  40.  
  41. def act(self, state):
  42. if np.random.rand() <= self.epsilon:
  43. return random.randrange(self.action_size)
  44. act_values = self.model.predict(state)
  45. #print("act_values:")
  46. #print(act_values)
  47. return np.argmax(act_values[0]) # returns action
  48.  
  49. def replay(self, batch_size):
  50. minibatch = random.sample(self.memory, batch_size)
  51. for state, action, reward, next_state, done in minibatch:
  52. target = reward
  53. if not done:
  54. target = (reward + self.gamma *
  55. np.amax(self.model.predict(next_state)[0]))
  56. target_f = self.model.predict(state)
  57. target_f[0][action] = target
  58. self.model.fit(state, target_f, epochs=1, verbose=0)
  59. #if self.epsilon > self.epsilon_min:
  60. # self.epsilon *= self.epsilon_decay
  61.  
  62. def load(self, name):
  63. self.model.load_weights(name)
  64.  
  65. def save(self, name):
  66. self.model.save_weights(name)
  67.  
  68. if __name__ == "__main__":
  69. env = gym.make('CartPole-v0')
  70. state_size = env.observation_space.shape[0]
  71. action_size = env.action_space.n
  72.  
  73. #print(state_size)
  74. #print(action_size)
  75.  
  76. agent = DQNAgent(state_size, action_size)
  77.  
  78. done = False
  79. batch_size = 32
  80. avg=0
  81.  
  82. for e in range(EPISODES):
  83. state = env.reset()
  84. state = np.reshape(state, [1, state_size])
  85. for time in range(500):
  86. env.render()
  87. action = agent.act(state)
  88. next_state, reward, done, _ = env.step(action)
  89. reward = reward if not done else -10
  90. next_state = np.reshape(next_state, [1, state_size])
  91. agent.remember(state, action, reward, next_state, done)
  92. state = next_state
  93. if done:
  94. print("episode: {}/{}, score: {}, e: {:.2}"
  95. .format(e, EPISODES, time, agent.epsilon))
  96. avg+=time
  97. break
  98. if len(agent.memory) > batch_size:
  99. agent.replay(batch_size)
  100.  
  101. print("Avg score:{}".format(avg/1000))

基本思路:

让他自己训练玩这个游戏(每次应该左右移动的距离),基本思路就是:

本质上就是使用MLP训练(动作,得分)

这个得分是坚持时间的长短,如果时间长得分就高。

但是我感觉这个gym自己做了很多事情,比如度量奖励分数,action描述等。待进一步挖掘!

DQN 处理 CartPole 问题——使用强化学习,本质上是训练MLP,预测每一个动作的得分的更多相关文章

  1. 【转载】 “强化学习之父”萨顿:预测学习马上要火,AI将帮我们理解人类意识

    原文地址: https://yq.aliyun.com/articles/400366 本文来自AI新媒体量子位(QbitAI)     ------------------------------- ...

  2. LSTM入门学习——本质上就是比RNN的隐藏层公式稍微复杂了一点点而已

    LSTM入门学习 摘自:http://blog.csdn.net/hjimce/article/details/51234311 下面先给出LSTM的网络结构图: 看到网络结构图好像很复杂的样子,其实 ...

  3. 强化学习系列之:Deep Q Network (DQN)

    文章目录 [隐藏] 1. 强化学习和深度学习结合 2. Deep Q Network (DQN) 算法 3. 后续发展 3.1 Double DQN 3.2 Prioritized Replay 3. ...

  4. 强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!

    1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报. ...

  5. 【转】【强化学习】Deep Q Network(DQN)算法详解

    原文地址:https://blog.csdn.net/qq_30615903/article/details/80744083 DQN(Deep Q-Learning)是将深度学习deeplearni ...

  6. DQN 强化学习

    pytorch比tenserflow简单. 所以我们模仿用tensorflow写的强化学习. 学习资料: 本节的全部代码 Tensorflow 的 100行 DQN 代码 我制作的 DQN 动画简介 ...

  7. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

  8. Deep Learning专栏--强化学习之MDP、Bellman方程(1)

    本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...

  9. 强化学习之三:双臂赌博机(Two-armed Bandit)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

随机推荐

  1. Python3.6全栈开发实例[022]

    22.完成彩票36选7的功能. 从36个数中随机的产生7个数. 最终获取到7个不重复的数据作为最终的开奖结果.随机数: from random import randintrandint(0, 20) ...

  2. python基础:while循环,for循环

    ---恢复内容开始--- 1.使用while循环输出1 2 3 4 5 6     8 9 10 2.求1-100的所有数的和 3.输出 1-100 内的所有奇数 4.输出 1-100 内的所有偶数 ...

  3. PCL+Qt+VS可视化点云

    前言 Point Cloud Library (PCL)是一个功能强大的开源C++库,假设可以使用好PCL将会对我们在LiDAR数据处理领域的研究产生巨大帮助.LiDAR技术经过几十年的发展.眼下国内 ...

  4. Vim 指令一览表

    vim 程序编辑器 移动光标的方法 h 或 向左箭头键(←) 光标向左移动一个字符 j 或 向下箭头键(↓) 光标向下移动一个字符 k 或 向上箭头键(↑) 光标向上移动一个字符 l 或 向右箭头键( ...

  5. 当退出python时,是否释放全部内存

    答案是no,循环引用其他对象或引用自全局命名空间的对象的模块,在python退出时并非完全释放 另外,也不会释放c库保留的内存部分

  6. LeetCode:杨辉三角【118】

    LeetCode:杨辉三角[118] 题目描述 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: ...

  7. 解决远程桌面关闭后teamviewer不能连接的问题

    使用windows远程桌面连接远程电脑,在关闭远程桌面后,windows系统会锁定,此时再用teamviewer连接会出现“无法捕捉画面”或者“拒绝连接”的问题. 解决办法:设置要连接的远程电脑上的t ...

  8. loadrunder之脚本篇——加密解密

    密码加密 可以给密码加密,意在把结果字符串作为脚本的参数或者参数值.例如,完整可能有一个用户密码填写的表单,你想测试网站针对不同密码的反应,但是你又想保护密码的安全.Password Encoder允 ...

  9. 每天一个Linux命令(41)iostat命令

        iostat是I/O statistics(输入/输出统计)的缩写,对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.     (1)用法:     ...

  10. 每天一个Linux命令(39)free命令

    free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区.       (1)用法:       用法:  free  [选项参数]       (2)功能:     ...