强化学习——蛇棋游戏gym环境搭建

  学习强化学习精要核心算法与Tensorflow实现这本书中,关于蛇棋游戏利用gym搭建。游戏的规则非常简单,详细请参考冯超的书<<强化学习精要核心算法与Tensorflow实现>>。
下面是游戏的具体实现:

import numpy as np
import gym
from gym.spaces import Discreteclass SnakeEnv(gym.Env):SIZE = 100  # 格子数量def __init__(self, ladder_num, dices): # 构造函数需要传入两个参数:梯子数量和不同投掷骰子方法的最大值self.ladder_num = ladder_num  # 梯子数量self.dices = dices  # 不同投掷骰子方法的最大值self.ladders = dict(np.random.randint(1, self.SIZE, size=(self.ladder_num, 2)))# 生成梯子,格式类似{78: 33, 52: 97, 71: 64, 51: 32}self.observation_space = Discrete(self.SIZE + 1) # 状态空间self.action_space = Discrete(len(dices))    # 行为空间keys = self.ladders.keys()for k in list(keys):  # 将梯子反过来存一遍self.ladders[self.ladders[k]] = kprint('ladders info:')print(self.ladders)# 创造len(dices)个矩阵矩阵维度是100*100self.p = np.zeros([len(dices), self.SIZE + 1, self.SIZE + 1], dtype=np.float)  # Pladder_move = np.vectorize(lambda x: self.ladders[x] if x in self.ladders else x)  # 如果落入梯子区域,则前进到梯子的另一头,否则,还在该位子# 下面是P的值for i, dice in enumerate(self.dices):# print(i,dice)prob = 1.0 / dicefor src in range(1, 100):step = np.arange(dice)step += srcstep = np.piecewise(step, [step > 100, step <= 100],[lambda x: 200 - x, lambda x: x])step = ladder_move(step)for dst in step:self.p[i, src, dst] += probself.p[:, 100, 100] = 1self.pos = 1  # 游戏位置def reset(self):self.pos = 1  # 将游位置重置为1return self.posdef step(self, a):step = np.random.randint(1, self.dices[a] + 1)  # 根据选择的骰子进行投掷self.pos += stepif self.pos == 100:return 100, 100, 1, {}  # 到达位置100,终止游戏elif self.pos > 100:self.pos = 200 - self.pos  # 超过100时要向回走if self.pos in self.ladders:self.pos = self.ladders[self.pos]  # 遇到梯子要前进到梯子的另一头return self.pos, -1, 0, {}def reward(self, s):# 到达位置100则获得100奖励,否则每次-1if s == 100:return 100else:return -1def render(self):pass  # 不进行图形渲染

  代码中构造函数需要传入两个参数:梯子数量和不同投掷骰子方法的最大值。用一个dict存储梯子相连的两个格子的关系,用一个list保存可能的骰子可投掷的最大值;reset方法将pos设置为1,也就是游戏开始的位置;step完成一次投掷,参数a表示玩家将采用何种方法。完成位置的更新后,函数将返回玩家的新位置、得分和其他信息。
  利用这个环境进行游戏,设定游戏中共有10个梯子,两种投掷骰子的方法分别可以投掷[1,3]和[1,6]的整数值,玩家将完全使用第一种策略斤进行游戏,代码如下:

from snake import SnakeEnvenv = SnakeEnv(10, [3,6]) # 10个梯子,2个筛子最大值分别是3和6
env.reset()
while True:state, reward, terminate, _ = env.step(1) # 每次都选择正常的骰子print (reward, state) # 打印r和sif terminate == 1:break

运行结果如下:

ladders info:
{57: 96, 27: 55, 9: 43, 34: 52, 82: 30, 75: 61, 70: 41, 91: 12, 90: 94, 96: 57, 55: 27, 43: 9, 52: 34, 30: 82, 61: 75, 41: 70, 12: 91, 94: 90}
-1 5
-1 7
-1 11
-1 14
-1 18
........(以下省略若干中间结果)
-1 99
-1 99
-1 97
-1 98
100 100

强化学习——蛇棋游戏gym环境搭建相关推荐

  1. 强化学习——蛇棋游戏策略迭代实现

    强化学习--蛇棋游戏策略迭代实现 1"表格式"Agent 2.对游戏的评估 3.策略迭代 3.1.策略评估 3.2.策略改善 1"表格式"Agent   在之前 ...

  2. 强化学习快餐教程(1) - gym环境搭建

    强化学习快餐教程(1) - gym环境搭建 欲练强化学习神功,首先得找一个可以操练的场地. 两大巨头OpenAI和Google DeepMind都不约而同的以游戏做为平台,比如OpenAI的长处是DO ...

  3. 强化学习UR机械臂仿真环境搭建(一) - 为UR3机械臂添加robotiq ft300力传感器

    为UR3机械臂添加robotiq ft300力传感器 ```建议参考这篇```,[ur机械臂 + robotiq gripper + robotiq ft sensor + gazebo + 连接真实 ...

  4. 贪吃蛇的Gym环境搭建

    title: 贪吃蛇的Gym环境搭建 categories: 深度学习 强化学习 tag: Gym Python author: MurInj summary: 贪吃蛇的Gym环境搭建 date: 2 ...

  5. 强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例

    强化学习(三) - Gym库介绍和使用,Markov决策程序实例,动态规划决策实例 1. 引言 在这个部分补充之前马尔科夫决策和动态规划部分的代码.在以后的内容我会把相关代码都附到相关内容的后面.本部 ...

  6. 用深度强化学习玩atari游戏_被追捧为“圣杯”的深度强化学习已走进死胡同

    作者 | 朱仲光 编译 | 夕颜出品 | AI科技大本营(ID:rgznai1100) [导读]近年来,深度强化学习成为一个被业界和学术界追捧的热门技术,社区甚至将它视为金光闪闪的通向 AGI 的圣杯 ...

  7. 强化学习初探 DQN+PyTorch+gym倒立摆登山车

    文章目录 1.随便说几句 2.为什么选择DQN作为第一个入手的模型 2.工具准备 3.实现思路 3.1.环境采样 3.2 Reward设计 3.3 Q值近似计算 3.4 主循环 4.代码 5.参考文献 ...

  8. 《强化学习周刊》第7期:强化学习应用之游戏

    No.07 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,它在游戏领域中的应用的研究进展与成果也引发了众多关注.为帮助研究与工程人员了 ...

  9. 用深度强化学习玩atari游戏_(一)深度强化学习·入门从游戏开始

    1.在开始正式进入学习之前,有几个概念需要澄清,这样有利于我们对后续的学习有一个大致的框架感 监督型学习与无监督型学习 深度强化学习的范畴 监督型学习是基于已有的带有分类标签的数据集合,来拟合神经网络 ...

最新文章

  1. 我在美团的这两年,想和你分享
  2. Oracle - 使用各种SQL来熟知buffer cache使用情况
  3. 使用okhttp3执行post请求
  4. hdu5299 Circles Game
  5. SpringMVC自学日志05(结果跳转方式,数据处理 ,乱码问题)
  6. linux命令行安装libxml,Ubuntu 14.04下libxml2的安装和使用
  7. java中序列化之子类继承父类序列化
  8. 首个中国高校AI人才培养计划启动,Hinton、Hopcroft和李开复开班授课
  9. c++ ANSI、UNICODE、UTF8互转
  10. Django,Celery, rabbitmq
  11. Jpcap包的安装与配置
  12. 非参数统计之局部多项式回归
  13. pdf打印机如何加密pdf文件?
  14. 51单片机用HS0038B读取遥控按键码
  15. CDD文件——CANdelaStudio
  16. DART booster
  17. PyTorch-LSTM时间序列预测中如何预测真正的未来值
  18. 夏雨老师:告诉你初学习平面设计需要什么条件
  19. 浅谈敏捷思想-08.从产品愿景到用户故事地图
  20. 啊哈C——学习3.6一起来找茬

热门文章

  1. 高光谱遥感数值建模技术及在植被、水体、土壤信息提取领域应用
  2. 深圳软件测试培训:软件测试技术及工具
  3. r生成新的dataframe_R语言中数据框的定义与使用
  4. linux 命令:pwd详解
  5. 求知若飢,虛心若愚 Stay Hungry, Stay Foolish
  6. 企业入驻腾讯公益平台步骤
  7. SAP中利用价格条件有效期条件重叠实现修改价格条件单位的需求实例分析测试
  8. python+pyqt5+mysql设计图书管理系统(1)- 数据库
  9. 安卓生成keystore和查看keystore
  10. 趣味职场俚语笔记(01_Debbie Talks Shop)