有人看文章后半部分代码是空的,其实是博客的字变黑了。我不知道这个怎么回事,没检查出语法问题。所以只要你把空白的部分一起复制就能看到所有的代码了!!

准备环境

安装python 游戏包

pip install gym

运行这个脚本,如果正常出现名称列表,就是说已经成功安装了

# Deep-Q learning Agent
import tensorflow as tf
import gym.envs as envs
import numpy as np
import tensorflow.keras as keras
#查看所有游戏列表
print(envs.registry.all())#启动平衡车游戏
env = gym.make('CartPole-v0')
env.reset()
while True:env.render()env.action_space(1)

核心思想是,输入衰减的随机 / 预测操作 > 游戏反馈结果 > 将操作前的状态和操作后的状态 + 奖励 都保存到经验池 > 根据奖励决定训练哪个操作 > 循环

废话少说上全部代码,每行都有详细注释

# Deep-Q learning Agent
import tensorflow as tf
import gym.envs as envs
# 需要安装这个来获取游戏环境
import gym
import numpy as np
import copy
# import io
import os
import tensorflow.keras as keras# 查看所有游戏列表
# print(envs.registry.all())
# env = gym.make('CartPole-v0')
# env.reset()
#
# while True:
#     env.render()
#     env.action_space(1)class DQNAgent(object):def __init__(self, _env):self.env = _env# 经验池self.memory = []self.gamma = 0.9  # decay rate 奖励衰减# 控制训练的随机干涉self.epsilon = 1  # 随机干涉阈值 该值会随着训练减少self.epsilon_decay = .995  # 每次随机衰减0.005self.epsilon_min = 0.1  # 随机值干涉的最小值self.learning_rate = 0.0001  # 学习率self._build_model()# 创建模型  输入4种状态,预测0/1两种行为分别带来到 奖励值def _build_model(self):model = tf.keras.Sequential()# 输入为4,3层128券链接,输出为2线性  2是因为控制为左右model.add(tf.keras.layers.Dense(128, input_dim=4, activation='tanh'))model.add(tf.keras.layers.Dense(128, activation='tanh'))model.add(tf.keras.layers.Dense(128, activation='tanh'))model.add(tf.keras.layers.Dense(2, activation='linear'))# 这里虽然输出2,但第二个完全没用上model.compile(loss='mse', optimizer=tf.keras.optimizers.RMSprop(lr=self.learning_rate))self.model = model# 记录经验 推进memory中def save_exp(self, _state, _action, _reward, _next_state, _done):# 将各种状态 存进memory中self.memory.append((_state, _action, _reward, _next_state, _done))# 经验池重放  根据尺寸获取  #  这里是训练数据的地方def train_exp(self, batch_size):# 这句的目的:确保每批返回的数量不会超出memory实际的存量,防止错误batches = min(batch_size, len(self.memory))  # 返回不大于实际memory.len 的数# 从len(self.memory)中随机选出batches个数batches = np.random.choice(len(self.memory), batches)for i in batches:# 从经验数组中 取出相对的参数 状态,行为,奖励,即将发生的状态,结束状态_state, _action, _reward, _next_state, _done = self.memory[i]# 获取当前 奖励y_reward = _reward# 如果不是结束的状态,取得未来的折扣奖励if not _done:# _target = 经验池.奖励 + gamma衰退值 * (model根据_next_state预测的结果)[0]中最大(对比所有操作中,最大值)# 根据_next_state  预测取得  当前的回报 + 未来的回报 * 折扣因子(gama)y_reward = _reward + self.gamma * np.amax(self.model.predict(_next_state)[0])# print('y_action', y_action)  # 1.5389154434204102# 获取,根据当前状态推断的 行为 input 4,output 2_y = self.model.predict(_state)# print(_action, y_reward, _y[0][_action], '_y', _y)  # [[0.08838317 0.16991007]]# 更新 将 某行为预测的 回报,分配到相应到 行为中  (_action = 1/0)_y[0][_action] = y_reward# 训练  x: 4 当前状态  _y[0]:2self.model.fit(_state, _y, epochs=1, verbose=0)# 随着训练的继续,每次被随机值干涉的几率减少 * epsilon_decay倍数(0.001)if self.epsilon > self.epsilon_min:self.epsilon *= self.epsilon_decay# 输入状态,返回应该采取的动作。随机干涉会随着时间的推进,越来越少。def act(self, _state):  # 返回回报最大的奖励值,或 随机数# 随机返回0-1的数,# 随着训练的增加,渐渐减少随机if np.random.rand() <= self.epsilon:# print('000000000',self.env.action_space.sample())return self.env.action_space.sample()else:# 使用预测值    返回,回报最大到最大的那个act_values = self.model.predict(_state)return np.argmax(act_values[0])  # returns actionif __name__ == "__main__":# 为agent初始化gym环境参数env = gym.make('CartPole-v0')# 游戏结束规则:杆子角度为±12, car移动距离为±2.4,分数限制为最高200分agent = DQNAgent(env)#保存模型到脚本所在目录,如果已有模型就加载,继续训练folder = os.getcwd()imageList = os.listdir(folder)for item in imageList:if os.path.isfile(os.path.join(folder, item)):if item == 'dqn.h5':tf.keras.models.load_model('dqn.h5')# 训练主循环episodes = 1000  # 循环次数for e in range(episodes):# 游戏复位  并获取状态4:# 0  Cart Position   -2.4    2.4# 1  Cart Velocity   -Inf    Inf# 2  Pole Angle  ~ -41.8°    ~ 41.8°# 3  Pole Velocity At Tipstate = env.reset()# 获取当前状态  每局的初始值为 state【0】的值±0.05state = np.reshape(state, [1, 4])# time_t 代表游戏的每一帧 由于每次的分数是+1 或-100所以这个时间坚持的越长分数越高for time_t in range(5000):# 如果想看游戏就开这个# env.render()# 选择行为 传入当前的游戏状态,获取行为 state 是在这里更新# 从模型 获取行为的随机值 或 预测值_action = agent.act(state)# 输入行为,并获取结果,包括状态、奖励和游戏是否结束  返回游戏下一针的数据 done:是否游戏结束,reward:分数  nextstate,新状态_next_state, _reward, _done, _ = env.step(_action)_next_state = np.reshape(_next_state, [1, 4])# 在每一个agent完成了目标的帧agent都会得到回报值1  如果失败得到-100_reward = -100 if _done else _reward# 记忆先前的状态,行为,回报与下一个状态   #  将当前状态,于执行动作后的状态,存入经验池agent.save_exp(state, _action, _reward, _next_state, _done)# 训练# 使下一个状态成为下一帧的新状态 #使下一状态/新状态,成为下一针的 当前状态state = copy.deepcopy(_next_state)# 如果游戏结束 done 被置为 tureif _done:# 打印分数并且跳出游戏循环print("episode: {}/{}, score: {}".format(e, episodes, time_t))break# 通过之前的经验训练模型agent.train_exp(32)# 保存模型if (e + 1) % 10 == 0:  # 每20次迭代保存一次训练数据 注销该行每次都保存   print("saving model")agent.model.save('dqn.h5')

tensorflow2.0 dqn 深度强化学习 AI自动玩游戏,有详细注解相关推荐

  1. 深度强化学习的人工智能在游戏中的运用:游戏AI入门及AI优化指南

    前言: 现如今,所有电子游戏都离不开AI的运用,对于游戏策划而言AI是什么,AI又是如何运作,可以说是面试时的加分项,本文在这里不探讨理论的AI(采用深度强化学习的智能AI,如腾讯AI Lab.网易伏 ...

  2. 首个深度强化学习AI,能控制核聚变,成功登上《Nature》

    编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 最近,DeepMind 开发出了世界上第一个深度强化学习 AI ,可以在模拟环境和真正的核聚变装置中实现对等离子体的自主控制. ...

  3. 深度强化学习加载Atari游戏运行库:Could not find module “XXXX\lib\site-packages\atari_py\ale_interface\ale_c.dll“

    深度强化学习加载Atari游戏运行库:Could not find module "XXXX\lib\site-packages\atari_py\ale_interface\ale_c.d ...

  4. 几行代码轻松实现,Tensorlayer 2.0推出深度强化学习基准库

    2019-11-11 16:37:04 机器之心发布 机器之心编辑部 强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法.深度强化学习由于其可扩展性,受到科 ...

  5. 动手搭建深度强化学习的自动股票量化交易系统

    基于深度强化学习的股票量化交易 ⭐ ⭐ ⭐ 欢迎点个小小的Star支持!⭐ ⭐ ⭐ 开源不易,希望大家多多支持~ 更多实践案例(AI识虫,基于PaddleX实现森林火灾监测,眼疾识别,智能相册分类等) ...

  6. 论文研读——基于深度强化学习的自动驾驶汽车运动规划研究综述

    论文研读--Survey of Deep Reinforcement Learning for Motion Planning of Autonomous V ehicles 此篇文章为论文的学习笔记 ...

  7. 自动驾驶前沿综述:基于深度强化学习的自动驾驶算法

    ©作者 | 陈道明 学校 | 布里斯托尔大学 研究方向 | 自动驾驶方向 这是 21 年的一篇综述文章,可以算得上是最前沿的自动驾驶技术综述.这几年随着深度表征学习的发展,强化学习领域也得到了加强.本 ...

  8. 【普通玩家VS高手玩家】一带传奇游戏《俄罗斯方块儿》新作—实现AI自动玩游戏~

    导语 提到<俄罗斯方块>(Tetris),那真是几乎无人不知无人不晓. ​ 其历史之悠久,可玩性之持久,能手轻轻一挥,吊打一大波游戏. 对于绝大多数小友而言,<俄罗斯方块>的规 ...

  9. python创始人游戏_李总为AI湿身,而5118老板连夜教你Python写AI自动玩游戏,快搬凳...

    5118 Python公开课 昨天在百度AI开发者大会现场,正当李彦宏在现场讲解百度无人驾驶汽车自动泊车时,一名不明人士冲向演讲台并向他泼洒不名液体.李彦宏没有停止演讲,并在现场表示:"大家 ...

最新文章

  1. python 仪表盘-python仪表盘
  2. 烂泥:纠结一天的zencart网站问题,终于解决了
  3. 团队博客第五周 运行与总结
  4. 50个PHP程序性能优化的方法
  5. AKKA文档(java版)——准备开始
  6. 为什么lamda不能修改外部引用的变量?
  7. ui unity 图片高亮_程序化生成UI模型与顶点动画
  8. 不同范数下的余弦定理_第06题 | 从源头追溯「余弦定理」amp; 文理科知识点的异同...
  9. 就等android了
  10. AMD优势: 与众不同 选择丰富
  11. Linux系统下公式编辑器KLatexFormula
  12. java万年历JFrame_Java Gui万年历
  13. spleetergui2.9汉化版下载 | SpleeterGui(音轨分离软件)官方中文版V2.9.1 | 人声分离软件下载
  14. 17、Python的循环结构(一)
  15. java.jpi在线_JPI中常使用的类介绍:
  16. 【解决方法(最详细)】WIN10系统使用Teamviewer远程连接时被检测出商业用途
  17. 简单总结几种思维模式---助你编程,思绪如飞
  18. 用c++实现贪吃蛇小游戏,初学者记录一下首次实现的经历,有超详细的思路与语法讲解,新手向
  19. bitset的使用方法
  20. 网神SecVSS 3600漏洞扫描系统

热门文章

  1. win10打开计算机黑屏怎么办,win10电脑黑屏只有鼠标箭头怎么办_win10电脑打开黑屏只有鼠标的解决方法...
  2. ubuntu快捷键备忘
  3. 银河麒麟4.0.2配置网络源
  4. 新安装Win7 Windows Update 错误 代码80072EE2 80072EFE
  5. Auto.js加密解密|快照Snapshot解密|Dex转js|Auto.js庖丁下载|解除APP限制
  6. 可升级鸿蒙的设备,华为鸿蒙即将到来,华为终于“出手”了!哪些机型可升级? - 王石头...
  7. 如何获取到javasript链接的网址
  8. 一些概率论所揭示的道理
  9. 在浏览器输入url回车后发生了什么
  10. 常用流程图符号和基本流程图