迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践(1)
迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践
- 0、相关文章
- 1、导入所使用的包
- 2、 定义迷宫
- 3、定义迷宫动作
- 4、策略参数θ转换为行动策略π
- 5、定义随机移动函数
- 6、定义使智能体移动到目标的函数
- 7、智能体移动到目标
- 8、运行路径可视化
- 9、最终结果
- 10、代码下载
- 10、参考资料
0、相关文章
迷宫_Sarsa算法_边做边学深度强化学习:PyTorch程序设计实践(2)
1、导入所使用的包
# 导入所使用的包
import numpy as np
import matplotlib.pyplot as plt
2、 定义迷宫
fig = plt.figure(figsize=(5, 5))
ax = plt.gca()# 画出红色的墙壁
plt.plot([1, 1], [0, 1], color='red', linewidth=2)
plt.plot([1, 2], [2, 2], color='red', linewidth=2)
plt.plot([2, 2], [2, 1], color='red', linewidth=2)
plt.plot([2, 3], [1, 1], color='red', linewidth=2)# 画出表示状态的文字S0-S8
plt.text(0.5, 2.5, 'S0', size=14, ha='center')
plt.text(1.5, 2.5, 'S1', size=14, ha='center')
plt.text(2.5, 2.5, 'S2', size=14, ha='center')
plt.text(0.5, 1.5, 'S3', size=14, ha='center')
plt.text(1.5, 1.5, 'S4', size=14, ha='center')
plt.text(2.5, 1.5, 'S5', size=14, ha='center')
plt.text(0.5, 0.5, 'S6', size=14, ha='center')
plt.text(1.5, 0.5, 'S7', size=14, ha='center')
plt.text(2.5, 0.5, 'S8', size=14, ha='center')
plt.text(0.5, 2.3, 'START', ha='center')
plt.text(2.5, 0.3, 'GOAL', ha='center')# 设定画图的范围
ax.set_xlim(0, 3)
ax.set_ylim(0, 3)
ax.set_title("Random")
plt.tick_params(axis='both', which='both', bottom='off', top='off',labelbottom='off', right='off', left='off', labelleft='off')# 当前位置S0用绿色圆圈画出
line, = ax.plot([0.5], [2.5], marker="o", color='g', markersize=60)
3、定义迷宫动作
# 设定参数θ的初始值theta_0,用于确定初始方案# 行为状态0~7,列为用↑、→、↓、←表示的移动方向
theta_0 = np.array([[np.nan, 1, 1, np.nan], # s0[np.nan, 1, np.nan, 1], # s1[np.nan, np.nan, 1, 1], # s2[1, 1, 1, np.nan], # s3[np.nan, np.nan, 1, 1], # s4[1, np.nan, np.nan, np.nan], # s5[1, np.nan, np.nan, np.nan], # s6[1, 1, np.nan, np.nan], # s7、※s8是目标,无策略])
效果:
4、策略参数θ转换为行动策略π
def simple_convert_into_pi_from_theta(theta):'''简单计算百分比'''[m, n] = theta.shape # 获取theta矩阵大小pi = np.zeros((m, n))for i in range(0, m):pi[i, :] = theta[i, :] / np.nansum(theta[i, :]) # 计算百分比pi = np.nan_to_num(pi) # 将nan转换为0return pi
5、定义随机移动函数
# 1步移动后求得状态s
def get_next_s(pi, s):direction = ["up", "right", "down", "left"]# 根据概率pi[s,:]选择directionnext_direction = np.random.choice(direction, p=pi[s, :])# 移动后切换状态if next_direction == "up":s_next = s - 3 elif next_direction == "right":s_next = s + 1 elif next_direction == "down":s_next = s + 3 elif next_direction == "left":s_next = s - 1 return s_next
6、定义使智能体移动到目标的函数
def goal_maze(pi):s = 0 # 开始地点state_history = [0] # 记录智能体移动轨迹的列表while (1): # 循环,直至到达目标next_s = get_next_s(pi, s)state_history.append(next_s)if next_s == 8: # 到达目标地点则终止for i in range(0,10):state_history.append(next_s)breakelse:s = next_sreturn state_history
7、智能体移动到目标
# 求初始策略π
pi_0 = simple_convert_into_pi_from_theta(theta_0)
state_history = goal_maze(pi_0)
print(state_history)
print("求解迷宫问题所需要的步数是:" + str(len(state_history) - 1))
8、运行路径可视化
# 参考URL http://louistiao.me/posts/notebooks/embedding-matplotlib-animations-in-jupyter-notebooks/
from matplotlib import animation
from IPython.display import HTMLdef init():'''初始化背景图像'''line.set_data([], [])return (line,)def animate(i):'''每一帧的画面内容'''state = state_history[i] # 画出当前的位置x = (state % 3) + 0.5 # 状态的x坐标为状态数除以3的余数加0.5y = 2.5 - int(state / 3) # 状态y坐标为2.5减去状态数除以3的商line.set_data(x, y)return (line,)# 用初始化函数和绘图函数来生成动画
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=len(state_history), interval=200, repeat=False)anim.save('result/maze_Random.gif',writer='pillow')
HTML(anim.to_jshtml())
9、最终结果
10、代码下载
跳转到下载地址
10、参考资料
[1]边做边学深度强化学习:PyTorch程序设计实践
迷宫_随机实验_边做边学深度强化学习:PyTorch程序设计实践(1)相关推荐
- 倒立摆_DQN算法_边做边学深度强化学习:PyTorch程序设计实践(5)
倒立摆_DQN算法_边做边学深度强化学习:PyTorch程序设计实践(5) 0.相关系列文章 1.Agent.py 2.Brain.py 3.Environment.py 4.Val.py 5.Rep ...
- 网络安全_密码学实验_非对称加密算法RSA
网络安全_密码学实验_非对称加密算法RSA 一.实验环境 二.非对称加密RSA 1.理解RSA算法原理 2.加密过程 解密过程 一.实验环境 PyCharm 2019.2.4 (Professiona ...
- 网络安全_密码学实验_对称加密算法DES
网络安全_密码学实验_对称密码非对称密码_加密算法DES RSA 一.实验环境 二.对称加密DES 1.理解DES算法原理 2.加密过程 3.解密过程 三.运行结果 一.实验环境 PyCharm 20 ...
- 结构体实验报告总结_解读!清华、谷歌等10篇强化学习论文总结
强化学习(Reinforcement Learning,RL)正成为当下机器学习中最热门的研究领域之一.与常见的监督学习和非监督学习不同,强化学习强调智能体(agent)与环境(environment ...
- 乐器演奏_深度强化学习代理演奏的蛇
乐器演奏 Ever since I watched the Netflix documentary AlphaGo, I have been fascinated by Reinforcement L ...
- 深度强化学习和强化学习_强化强化学习背后的科学
深度强化学习和强化学习 机器学习 ,强化学习 (Machine Learning, Reinforcement Learning) You're getting bore stuck in lockd ...
- 深度强化学习系列之(13): 深度强化学习实验中应该使用多少个随机种子?
How Many Random Seeds Should I Use? Statistical Power Analysis in (Deep) Reinforcement Learning Expe ...
- 深度强化学习_深度学习理论与应用第8课 | 深度强化学习
本文是博雅大数据学院"深度学习理论与应用课程"第八章的内容整理.我们将部分课程视频.课件和讲授稿进行发布.在线学习完整内容请登录www.cookdata.cn 深度强化学习是一种将 ...
- 通过图注意力神经网络进行多智能体游戏抽象_[读论文] AttnPath: 将图注意力机制融入基于深度强化学习的知识图谱推理中...
论文原文:Incorporating Graph Attention Mechanism into Knowledge Graph Reasoning Based on Deep Reinforcem ...
最新文章
- matlab 线模式密度,环形腔窄线宽光纤激光器的研究
- 外贸网络推广浅析新建网站该如何更快速进入搜索结果首页?
- iOS NSString 字符串处理:截取字符串、匹配字符串、分隔字符串
- linux配置apache tomcat,linux下apache+tomcat的配置实现
- mysql添加字典子项_如何使用executemany在MySQL中插入Python字典列表
- dubbo 学习资料
- 3389远程批量服务器,3389远程桌面登陆器 支持3389远程批量连接
- Linux操作系统 (二)下载以及安装
- layer使用心得3
- 如何搭建一个前端脚手架
- 基于stm32的100KV高压发生器 倍压电路
- 开机出现 A disk read error occurred Press 时怎么办
- Win10设置:输入法快捷键【仅保留中英切换】,其他花里胡哨快捷键全部删除
- java map存储对象_java-在ConcurrentHashMap中存储复杂对象
- Aquaculture Equipment 水产养殖设备谷歌Google搜索量和海外市场竞争度分析
- Qt(C++)入门学习
- 详解i++和++i,通俗易懂
- 高端大气上档次的新型界面
- 将区块链带到第三世界:分布式电商BitCherry的格局与野心
- 手绘图分析(Sketch Analysis)
热门文章
- 伤害世界怎么自建服务器,伤害世界服务器架设方法_伤害世界Hurtworld怎么架设服务器_游戏堡...
- 机器学习和人工智能的关系
- linux美学设计,扁平化设计美学探讨
- NBA球员的选秀顺序和实际表现有多大差距?评估球员表现的VORP值又是怎么计算的?
- 2019年深度学习自然语言处理最新十大发展趋势
- Pip修改阿里云镜像
- 毕业设计-基于效果的图像超级分辨率重建
- 对于Java毕业设计选题的一些看法
- 计算机房屋出租系统毕业设计选题意义的说明
- 毛玻璃效果 php,CSS3教程之制作倾斜导航条和毛玻璃效果