Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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:写静态环境
【RL Latest Tech】分层强化学习(Hierarchical RL)
分层强化学习(Hierarchical Reinforcement Learning,HRL)是一类旨在通过引入多层次结构来提高强化学习算法效率的方法。其核心思想是将复杂的任务分解为若干子任务,通过解决这些子任务来最终完成整体目标。以下是关于分层强化学习的详细介绍:
不去幼儿园
2024/12/03
5240
【RL Latest Tech】分层强化学习(Hierarchical RL)
convlab2中强化学习方法之对话策略学习浅析
可以看到,Success rate 在RulePolicy中的表现远高于基于强化学习模型的policy。尽管如此,本文还是以学习的态度进入github地址分析了一下作者的代码。稍微还原一下强化学习PPOPolicy在多轮对话中建模的过程。
朴素人工智能
2020/05/08
1.7K0
convlab2中强化学习方法之对话策略学习浅析
【强化学习】双延迟深度确定性策略梯度算法(TD3)详解
双延迟深度确定性策略梯度算法,TD3(Twin Delayed Deep Deterministic Policy Gradient)是强化学习中专为解决连续动作空间问题设计的一种算法。TD3算法的提出是在深度确定性策略梯度(DDPG)算法的基础上改进而来,用于解决强化学习训练中存在的一些关键挑战。
不去幼儿园
2025/01/02
2K0
【强化学习】双延迟深度确定性策略梯度算法(TD3)详解
深度强化学习-DDPG算法原理和实现
在之前的几篇文章中,我们介绍了基于价值Value的强化学习算法Deep Q Network。有关DQN算法以及各种改进算法的原理和实现,可以参考之前的文章: 实战深度强化学习DQN-理论和实践 DQN三大改进(一)-Double DQN DQN三大改进(二)-Prioritised replay DQN三大改进(三)-Dueling Network 基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。如果我们省略中间的步骤,即直接根据当前的状态来选择动作。基
石晓文
2018/04/11
2.4K0
深度强化学习-DDPG算法原理和实现
强化学习系列(七)--DDPG
DDPG(deep deterministic policy gradient),深度确定性策略梯度算法。
languageX
2022/04/01
8.9K0
强化学习之Q-Learning
我们做事情都会有自己的一个行为准则,比如小时候爸妈常说“不写完作业就不准看电视”。所以我们在写作业的状态(state)下,好的行为就是继续写作业,直到写完它,我们还可以得到奖励(reward),不好的行为就是没写完作业就跑去看电视了,被爸妈发现就会被惩罚,这种事情做的多了,也变成了我们不可磨灭的记忆,这其实就是一个Q-learning的决策过程。
CristianoC
2020/05/31
1.4K0
matlab增强学习之小球不落地
在利用之前FrozenLake环境训练当中那种面向对象方式管理程序时发现训练后期运行速度变慢、而且是肉眼可观察到的变慢,所以采用了matlab另一种程序文件管理方式packages
万木逢春
2019/09/25
7900
matlab增强学习之小球不落地
【MADRL】多智能体深度确定性策略梯度(MADDPG )算法
MADDPG (Multi-Agent Deep Deterministic Policy Gradient) 是一种用于多智能体强化学习环境的算法。它由2017年发布的论文《Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments》提出。MADDPG结合了深度确定性策略梯度(DDPG)算法的思想,并对多智能体场景进行了扩展,能够处理混合的协作与竞争环境。
不去幼儿园
2024/12/03
6870
【MADRL】多智能体深度确定性策略梯度(MADDPG )算法
【Hierarchical RL】分层深度Q网络(Hierarchical-DQN)算法
Hierarchical-DQN (Hierarchical Deep Q-Network) 是一种分层强化学习算法,专门设计用于解决复杂的任务,通过将任务分解为层次化的子任务来学习。它结合了深度 Q 网络(DQN)和分层强化学习的思想,将复杂任务分解为多个具有不同时间尺度的子任务。Hierarchical-DQN 的设计思路和 FeUdal Networks 类似,都是通过层次结构来解决长时间跨度的任务,但 Hierarchical-DQN 的具体实现有所不同,尤其在策略的选择和值函数的更新方面。
不去幼儿园
2024/12/03
3530
【Hierarchical RL】分层深度Q网络(Hierarchical-DQN)算法
强化学习之Sarsa
在强化学习中,Sarsa和Q-Learning很类似,本次内容将会基于之前所讲的Q-Learning的内容。
CristianoC
2020/05/31
7180
强化学习之Sarsa
OpenAI gym——一款开发和比较RL算法的工具包
手动编写环境是一件很耗时间的事情,所以如果可以直接使用比人编写好的环境,可以节约我们很多时间。OpenAI gym就是这样一个模块,他提供给我们很多优秀的模拟环境。我们的各种强化学习算法都能使用这些环境。之前的环境都是用tkinter来手动编写,或者想玩玩更厉害的,像OpenAI一样,使用pyglet模块来编写。 OpenAI gym官网:https://gym.openai.com/
CristianoC
2020/05/31
1.4K0
强化学习笔记1-Python/OpenAI/TensorFlow/ROS-基础知识
版权声明:本文为zhangrelay原创文章,有错请轻拍,转载请注明,谢谢... https://blog.csdn.net/ZhangRelay/article/details/91361113
zhangrelay
2019/06/15
7020
使用强化学习训练机械臂完成人类任务
今天在各行业部署的工业机器人大多是在执行重复的任务。基本上是在预定好的轨迹中移动或者放置物体。但事实上,机器人在如今的制造业中处理不同或者复杂任务环境的能是非常有限的。
AI研习社
2019/05/08
1.1K0
使用强化学习训练机械臂完成人类任务
【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例
注释:导入gym库,第2行创建CartPole-v0环境,并在第3行重置环境状态。在for循环中进行1000个时间步长(timestep)的控制,第5行刷新每个时间步长环境画面,第6行对当前环境状态采取一个随机动作(0或1),最后第7行循环结束后关闭仿真环境。 同时本地会渲染出一个窗口进行模拟如下图:
汀丶人工智能
2022/12/01
9520
【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例
机器学习-22:MachineLN之RL
原本打算将机器学习基础写完以后再写深度学习、强化学习、迁移学习的内容,但是现在看还是中间穿插一点比较好。
MachineLP
2022/05/09
4010
机器学习-22:MachineLN之RL
OpenAI发布8个模拟机器人环境以及一种HER实现,以训练实体机器人模型
OpenAI:我们将发布8个模拟的机器人环境,以及一种叫做“事后经验回顾”(Hindsight Experience Replay,简称HER)的一种Baselines实现,它允许从简单的、二元的奖励
AiTechYun
2018/03/02
1.2K0
OpenAI发布8个模拟机器人环境以及一种HER实现,以训练实体机器人模型
深度强化学习-DDPG算法原理和实现
基于值的强化学习算法的基本思想是根据当前的状态,计算采取每个动作的价值,然后根据价值贪心的选择动作。如果我们省略中间的步骤,即直接根据当前的状态来选择动作。基于这种思想我们就引出了强化学习中另一类很重要的算法,即策略梯度(Policy Gradient)。之前我们已经介绍过策略梯度的基本思想和实现了,大家可以有选择的进行预习和复习:
用户1332428
2023/03/28
1K0
深度强化学习-DDPG算法原理和实现
自定义Gym环境之井字棋
在文章 中 ,我们了解了一个简单的环境应该如何定义,并使用 print 简单地呈现了环境。在本文中,我们将学习自定义一个稍微复杂一点的环境——井字棋。回想一下井字棋游戏:
冬夜先生
2021/12/06
5790
【机器学习】机器学习重要分支——强化学习:从理论到实践
强化学习(Reinforcement Learning, RL)作为机器学习的重要分支之一,通过与环境交互、试错学习来优化决策策略,已在机器人控制、游戏AI、自动驾驶等领域展现出巨大的潜力。本文将深入探讨强化学习的基本原理、核心算法及其在实际中的应用,并提供代码示例和图表以帮助读者更好地理解和掌握这一技术。
E绵绵
2024/06/17
1.5K0
推荐阅读
相关推荐
大咖浅谈 | 从头开始做一个机器手臂2:写静态环境
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档