首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从头开始做一个机器手臂1:搭建结构

从头开始做一个机器手臂1:搭建结构

原创
作者头像
腾讯云AI
发布于 2019-08-06 06:32:29
发布于 2019-08-06 06:32:29
9.4K10
代码可运行
举报
运行总次数:0
代码可运行

作者:Morvanzhou 周沫凡

为什么做这个实践

做这个实践的主要目的就是让我们活学活用, 从0开始搭建一个强化学习框架。之前我们在强化学习系列教程中学习到了很多强化学习的知识, 了解了各种算法应该怎样运用, 从最简单的 Q-Learning到结合神经网络的 DQN, 再到做连续动作的 DDPG 以及分布式训练的 A3CDPPO。但是我们却没有真正意义上的实践过一次, 因为在那个系列中大多数时候我们只关注了算法本身。 但是搭建模拟环境, 调整参数也同样重要。 所以我们在这个系列中将会做到这些, 让你真正意义上入门了强化学习。

要做成怎样

这个实践很简单, 我使用的是我自己一年前编写的训练代码, 让机器人手臂学会到达某一个预设点。

不过这次, 我优化了代码结构, 将这个自己做过的练习给大家呈现一遍, 让你也能一步步知道在做强化学习的时候要考量些什么, 怎么样做一个合理的环境. 所以我将从下面几个方面来阐述这些。

代码主结构

在做每一个强化学习的时候, 我们最好先规划好要怎么分解这一个 task。一般来说我们尽量不要把所有代码 (环境, 强化学习算法, 学习主循环) 放在一个脚本中。拆分成三个脚本分开管理将会更有效率, 更加方便管理, 而且眼睛也不会花了。这也是我在自己强化学习系列教程中一直给大家呈现的方式。

具体来说, 这三方面的脚本可以是这样:

  • 环境脚本 (env.py)
  • 强化学习脚本 (rl.py)
  • 主循环脚本 (main.py)

我们在主循环脚本中将会 import 环境和强化学习方法, 所以主循环脚本将上面两者给串联了起来。如果你看到这次教学的 代码, 你会发现我将每一步分别打包, part1, part2… 中都有上述三个脚本文件。我们将在每个 part 中一一添加必要的部分。

这一节, 我们从最基本的 main.py 开始说。这里涉及了程序的主循环, 也是学习的部分。整个学习的框架可以被简化成下面这样, 我采取了 gym 模块的形式。所以如果使用过 gym 的朋友, 你会发现无比的熟悉。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# main.py 
# 导入环境和学习方法 
from part1.env import ArmEnv 
from part1.rl import DDPG 

# 设置全局变量 
MAX_EPISODES = 500 
MAX_EP_STEPS = 200 

# 设置环境 
env = ArmEnv() 
s_dim = env.state_dim 
a_dim = env.action_dim 
a_bound = env.action_bound 

# 设置学习方法 (这里使用 DDPG) 
rl = DDPG(a_dim, s_dim, a_bound) 

# 开始训练 
for i in range(MAX_EPISODES): 
    s = env.reset() # 初始化回合设置 
    for j in range(MAX_EP_STEPS): 
        env.render() # 环境的渲染 
        a = rl.choose_action(s) # RL 选择动作 
        s_, r, done = env.step(a) # 在环境中施加动作 
        
        # DDPG 这种强化学习需要存放记忆库 
        rl.store_transition(s, a, r, s_) 
        if rl.memory_full: 
            rl.learn() # 记忆库满了, 开始学习 
        s = s_ # 变为下一回合

写到这个时候, 我们明白了, 在 rl.py 和 env.py 中, 我们必须有这样几个 function 和 attribute。

  • rl.py
    • rl.choose_action(s)
    • rl.store_transition(s, a, r, s_)
    • rl.learn()
    • rl.memory_full
  • env.py
    • env.reset()
    • env.render()
    • env.step(a)
    • env.state_dim
    • env.action_dim
    • env.action_bound

有了这些准则, 我们就能在 rl.py 和 env.py 中进行前期规划了。所以你可以另外创建一个 env.py 的脚本, 先写好下面这个 ArmEnv 的 class。 然后给他加上上面提到的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# env.py

class ArmEnv(object):
    def __init__(self):
        pass
    def step(self, action):
        pass
    def reset(self):
        pass
    def render(self):
        pass

然后再创建一个 rl.py 脚本, 用来存放你要使用的 RL 的方法。 因为我想要将这个手臂环境设置成一个连续动作的环境(机器人旋转手臂时的角度是一个连续值), 所以我会选用 DDPG 的算法。但是如果你想设置的环境是一个离散动作(比如机器人只能选上下左右4个键), 你可能需要选择不同的 RL 算法, 对环境也要有不同的应对方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# rl.py

class DDPG(object):
    def __init__(self, a_dim, s_dim, a_bound,):
        pass
    def choose_action(self, s):
        pass
    def learn(self):
        pass
    def store_transition(self, s, a, r, s_):
        pass 

有了这些框架, 我们的主结构就大功告成了, 接着我们就开始继续往下面添砖加瓦吧。看看如何搭建一个模拟环境.

实战:从头开始搭建训练机器人手臂

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
学习
学习
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
大咖浅谈 | 从头开始做一个机器手臂2:写静态环境
上次我们已经搭建好了三个主要部分, 包括 main.py, rl.py, env.py. 强化学习最重要的部分之一就是怎样定义你的环境. 做出来一个可视化的模拟环境能大大减轻不可见的负担. 有一个机器人在你屏幕上跑来跑去, 你能看见它, 根据他的行为来调整程序, 比看不见任何东西, 不知道是哪出了问题要好得多. 所以做一个可视化的环境变得重要起来.
腾讯云AI
2019/08/15
9.5K0
大咖浅谈 | 从头开始做一个机器手臂2:写静态环境
机器学习-22:MachineLN之RL
原本打算将机器学习基础写完以后再写深度学习、强化学习、迁移学习的内容,但是现在看还是中间穿插一点比较好。
MachineLP
2022/05/09
4260
机器学习-22:MachineLN之RL
深度强化学习-DDPG算法原理和实现
在之前的几篇文章中,我们介绍了基于价值Value的强化学习算法Deep Q Network。有关DQN算法以及各种改进算法的原理和实现,可以参考之前的文章: 实战深度强化学习DQN-理论和实践 DQN三大改进(一)-Double DQN DQN三大改进(二)-Prioritised replay DQN三大改进(三)-Dueling Network 基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。如果我们省略中间的步骤,即直接根据当前的状态来选择动作。基
石晓文
2018/04/11
2.5K0
深度强化学习-DDPG算法原理和实现
强化学习第0步
global N_STATES ACTIONS EPSILON ALPHA GAMMA MAX_EPISODES FRESH_TIME
万木逢春
2019/07/10
5430
Hands on Reinforcement Learning Frontier Chapter
虽然强化学习不需要有监督学习中的标签数据,但它十分依赖奖励函数的设置。有时在奖励函数上做一些微小的改动,训练出来的策略就会有天差地别。在很多现实场景中,奖励函数并未给定,或者奖励信号极其稀疏,此时随机设计奖励函数将无法保证强化学习训练出来的策略满足实际需要。例如,对于无人驾驶车辆智能体的规控,其观测是当前的环境感知恢复的 3D 局部环境,动作是车辆接下来数秒的具体路径规划,那么奖励是什么?如果只是规定正常行驶而不发生碰撞的奖励为+1,发生碰撞为-100,那么智能体学习的结果则很可能是找个地方停滞不前。具体能帮助无人驾驶小车规控的奖励函数往往需要专家的精心设计和调试。
一只野生彩色铅笔
2023/04/27
8630
Hands on Reinforcement Learning Frontier Chapter
深度强化学习-DDPG算法原理和实现
基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。如果我们省略中间的步骤,即直接根据当前的状态来选择动作。基于这种思想我们就引出了强化学习中另一类很重要的算法,即策略梯度(Policy Gradient)。之前我们已经介绍过策略梯度的基本思想和实现了,大家可以有选择的进行预习和复习:
用户1332428
2023/03/28
1.1K0
深度强化学习-DDPG算法原理和实现
【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例
注释:导入gym库,第2行创建CartPole-v0环境,并在第3行重置环境状态。在for循环中进行1000个时间步长(timestep)的控制,第5行刷新每个时间步长环境画面,第6行对当前环境状态采取一个随机动作(0或1),最后第7行循环结束后关闭仿真环境。 同时本地会渲染出一个窗口进行模拟如下图:
汀丶人工智能
2022/12/01
9870
【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例
Hands on Reinforcement Learning Advanced Chapter
在第 5 章讲解的 Q-learning 算法中,我们以矩阵的方式建立了一张存储每个状态下所有动作值的表格。表格中的每一个动作价值Q(s,a)Q(s,a)Q(s,a)表示在状态sss下选择动作aaa然后继续遵循某一策略预期能够得到的期望回报。然而,这种用表格存储动作价值的做法只在环境的状态和动作都是离散的,并且空间都比较小的情况下适用,我们之前进行代码实战的几个环境都是如此(如悬崖漫步)。当状态或者动作数量非常大的时候,这种做法就不适用了。例如,当状态是一张 RGB 图像时,假设图像大小是210×160×3210\times 160\times 3210×160×3,此时一共有256(210×160×3)256^{(210\times 160\times 3)}256(210×160×3)种状态,在计算机中存储这个数量级的QQQ值表格是不现实的。更甚者,当状态或者动作连续的时候,就有无限个状态动作对,我们更加无法使用这种表格形式来记录各个状态动作对的QQQ值。
一只野生彩色铅笔
2023/04/24
9220
Hands on Reinforcement Learning Advanced Chapter
【机器学习】机器学习重要分支——强化学习:从理论到实践
强化学习(Reinforcement Learning, RL)作为机器学习的重要分支之一,通过与环境交互、试错学习来优化决策策略,已在机器人控制、游戏AI、自动驾驶等领域展现出巨大的潜力。本文将深入探讨强化学习的基本原理、核心算法及其在实际中的应用,并提供代码示例和图表以帮助读者更好地理解和掌握这一技术。
E绵绵
2024/06/17
1.8K0
convlab2中强化学习方法之对话策略学习浅析
可以看到,Success rate 在RulePolicy中的表现远高于基于强化学习模型的policy。尽管如此,本文还是以学习的态度进入github地址分析了一下作者的代码。稍微还原一下强化学习PPOPolicy在多轮对话中建模的过程。
朴素人工智能
2020/05/08
1.7K0
convlab2中强化学习方法之对话策略学习浅析
强化学习之Sarsa
在强化学习中,Sarsa和Q-Learning很类似,本次内容将会基于之前所讲的Q-Learning的内容。
CristianoC
2020/05/31
7390
强化学习之Sarsa
强化学习系列(七)--DDPG
DDPG(deep deterministic policy gradient),深度确定性策略梯度算法。
languageX
2022/04/01
9.4K0
使用强化学习训练机械臂完成人类任务
今天在各行业部署的工业机器人大多是在执行重复的任务。基本上是在预定好的轨迹中移动或者放置物体。但事实上,机器人在如今的制造业中处理不同或者复杂任务环境的能是非常有限的。
AI研习社
2019/05/08
1.1K0
使用强化学习训练机械臂完成人类任务
RL实践2——RL环境gym搭建
首先先来回顾一下强化学习问题中,环境Env 和 代理Agent 分别承担的角色和作用。
列夫托尔斯昊
2020/09/07
1.6K0
DDPG强化学习的PyTorch代码实现和逐步讲解
来源:Deephub Imba本文约4300字,建议阅读10分钟本文将使用pytorch对其进行完整的实现和讲解。 深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)是受Deep Q-Network启发的无模型、非策略深度强化算法,是基于使用策略梯度的Actor-Critic,本文将使用pytorch对其进行完整的实现和讲解。 DDPG的关键组成部分是 Replay Buffer Actor-Critic neural network Explorati
数据派THU
2023/04/05
9700
DDPG强化学习的PyTorch代码实现和逐步讲解
【MADRL】多智能体深度确定性策略梯度(MADDPG )算法
MADDPG (Multi-Agent Deep Deterministic Policy Gradient) 是一种用于多智能体强化学习环境的算法。它由2017年发布的论文《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》提出。MADDPG结合了深度确定性策略梯度(DDPG)算法的思想,并对多智能体场景进行了扩展,能够处理混合的协作与竞争环境。
不去幼儿园
2024/12/03
9270
【MADRL】多智能体深度确定性策略梯度(MADDPG )算法
【David Silver 深度强化学习教程代码实战07】 DQN的实现
点击上方“专知”关注获取更多AI知识! 【导读】Google DeepMind在Nature上发表最新论文,介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。Alpha Zero的背后核心技术是深度强化学习,为此,专知有幸邀请到叶强博士根据DeepMind AlphaGo的研究人员David Silver《深度强化学习》视频公开课进行创作的中文学习笔记,在专知发布推荐给大家!(关注
WZEARW
2018/04/10
3.7K0
【David Silver 深度强化学习教程代码实战07】 DQN的实现
Hands on Reinforcement Learning 10 Actor-Critic Algorithm
本书之前的章节讲解了基于值函数的方法(DQN)和基于策略的方法(REINFORCE),其中基于值函数的方法只学习一个价值函数,而基于策略的方法只学习一个策略函数。那么,一个很自然的问题是,有没有什么方法既学习价值函数,又学习策略函数呢?答案就是 Actor-Critic。Actor-Critic 是囊括一系列算法的整体架构,目前很多高效的前沿算法都属于 Actor-Critic 算法,本章接下来将会介绍一种最简单的 Actor-Critic 算法。需要明确的是,Actor-Critic 算法本质上是基于策略的算法,因为这一系列算法的目标都是优化一个带参数的策略,只是会额外学习价值函数,从而帮助策略函数更好地学习。
一只野生彩色铅笔
2023/04/09
6980
Hands on Reinforcement Learning 10 Actor-Critic Algorithm
强化学习(RL)
pip install gym或者pip install openai gym找不到make函数,通过gym.file 查看模块文件路径,避免因为文件名命名错误导致加载错误的模块
sofu456
2019/07/09
7910
Hands on Reinforcement Learning 07 Deep Q Network
在第 5 章讲解的 Q-learning 算法中,我们以矩阵的方式建立了一张存储每个状态下所有动作值的表格。表格中的每一个动作价值
一只野生彩色铅笔
2023/04/07
8090
Hands on Reinforcement Learning 07 Deep Q Network
相关推荐
大咖浅谈 | 从头开始做一个机器手臂2:写静态环境
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档