【强化学习】DDPG 算法实现案例

3 篇文章 3 订阅
订阅专栏

问题描述与Demo介绍

完整代码:
如果觉得不错,麻烦点颗星哦!

1.Demo介绍

在该demo中,我们将利用DDPG算法,使一个机械臂学会自己变换角度去抓“方块”,如下图,机械臂从最开始完全不知道如何去捕捉方块,到最后,每次都能精准的抓住方块。
在这里插入图片描述在这里插入图片描述

2.算法介绍

其实理解 Deep Deterministic Policy Gradient (DDPG)最快的方法就是讲其分解开看:Deep Deterministic Policy Gradient = Deep + Deterministic Policy Gradient ,而 Deterministic Policy Gradient = Deterministic + Policy Gradient 。总体来说,DDPG = Deep + Deterministic + Policy Gradient
Deep,顾名思义:更深的层次,这里很容易联想到 Deep Learning ,而 Deep Learning 又与神经网络有着密切的联系,所以我把Deep理解成神经网络,用神经网络构造更深更复杂的网络结构。
Policy gradient :强化学习中经典的方法,用于处理连续动作中的筛选(不熟悉的可以看我上一篇博客)
Deterministic:众所周知,Policy gradient 输出动作概率,然后根据学到的动作的分布随机进行筛选,而 Deterministic 直接改变了动作输出过程,在连续的动作上直接输出一个动作值。

3.算法实现

算法流程:
在这里插入图片描述

代码框架:(下图出自: 博客)
在这里插入图片描述
上面两个图非常重要,第一个是整体代码流程,方便我们在大脑中形成DDPG大致思想,后面一张图是具体每一步在做什么。
接下来,我们用上面两个图来一步步解释DDPG代码结构:

1. 首先,我们需要实现一个critic network和一个actor network,然后再实现一个target critic network和target actor network,并且对应初始化为相同的weights:

actor network & target actor network

    with tf.variable_scope('Actor'):
        # input s, output a
        self.a = self._build_net(S, scope='eval_net', trainable=True)

        # input s_, output a, get a_ for critic
        self.a_ = self._build_net(S_, scope='target_net', trainable=False)
    def _build_net(self, s, scope, trainable):
        with tf.variable_scope(scope):
            init_w = tf.contrib.layers.xavier_initializer()
            init_b = tf.constant_initializer(0.001)
            net = tf.layers.dense(s, 200, activation=tf.nn.relu6,
                                  kernel_initializer=init_w, bias_initializer=init_b, name='l1',
                                  trainable=trainable)
            net = tf.layers.dense(net, 200, activation=tf.nn.relu6,
                                  kernel_initializer=init_w, bias_initializer=init_b, name='l2',
                                  trainable=trainable)
            net = tf.layers.dense(net, 10, activation=tf.nn.relu,
                                  kernel_initializer=init_w, bias_initializer=init_b, name='l3',
                                  trainable=trainable)
            with tf.variable_scope('a'):
                actions = tf.layers.dense(net, self.a_dim, activation=tf.nn.tanh, kernel_initializer=init_w,
                                          name='a', trainable=trainable)
                scaled_a = tf.multiply(actions, self.action_bound,
                                       name='scaled_a')  # Scale output to -action_bound to action_bound
        return scaled_a

critic network & target critic network 同理

2. 初始化replay memory buffer R

经验回放机制,解决网络片面看待问题甚至学不到东西的问题。

原理回顾: 经验回放机制是DQN那篇文章提出的,DQN 每一次根据所获得的来更新Q-value,本质就是stochastic gradient descent (SGD)。一般在用mini-batch SGD做优化时,都假设样本之间的相对独立,从而使得每个mini-batch内数据所含的噪声相互抵消,算法收敛的更快。

在这个问题中,之所以加入experience replay是因为样本是从游戏中的连续帧获得的,这与简单的reinforcement learning问题(比如maze)相比,样本的关联性大了很多,如果没有experience replay,算法在连续一段时间内基本朝着同一个方向做gradient descent,那么同样的步长下这样直接计算gradient就有可能不收敛。因此experience replay是从一个memory pool中随机选取了一些 experience,然后再求梯度,从而避免了这个问题。

class Memory(object):
    def __init__(self, capacity, dims):
        """用 numpy 初始化记忆库"""

    def store_transition(self, s, a, r, s_):
        """保存每次记忆在 numpy array 里"""

    def sample(self, n):
        """随即从记忆库中抽取 n 个记忆进行学习"""
3. 回合循环:

在介绍回合循环之前,先介绍下UO随机过程,OU过程其实给action添加一个均值为0的OU噪声。然后这么做有什么好处呢?首先,一是增加训练的step,使得训练的更快;其次,探索效率确实更高。(想知道具体的去查看相关论文)
for each episode:
   初始化UO随机过程;
   for t = 1 ,do:(下面的编号与上图代码构架中的步骤相同)
     1. actor 根据behavior策略选择一个行动 a t a_t at, 下达给gym执行该行动 a t a_t at .
     2.gym执行 a t a_t at ,返回reward r t r_t rt 和新的状态 s t + 1 s_{t+1} st+1;
     3. actor将这个状态转换过程(transition): ( s t s_t st , a t a_t at , r t r_t rt , s t + 1 s_{t+1} st+1 ) 存入replay memory buffer R中,作为训练online网络的数据集。
     4.从replay memory buffer RR中,随机采样NN个 transition 数据,作为online策略网络、 online Q网络的一个mini-batch训练数据。我们用 ( s i s_i si , a i a_i ai , r i r_i ri , s i + 1 s_{i+1} si+1 )表示mini-batch中的单个transition数据。
     5.计算online Q网络的 gradient
     6.update online Q: 采用Adam optimizer更新 θ Q θ^Q θQ;
     7.计算策略网络的policy gradient
     8.update online策略网络:采用Adam optimizer更新 θ μ θ^μ θμ;
     9.soft update target网络 μ ′ μ′ μ Q ′ Q′ Q:

代码实现:(结合上面的步骤看十分易懂)

def train():
    var = 2.  # control exploration

    for ep in range(MAX_EPISODES):
        s = env.reset()
        ep_reward = 0

        for t in range(MAX_EP_STEPS):
            # while True:
            if RENDER:
                env.render()

            # Added exploration noise
            a = actor.choose_action(s)
            a = np.clip(np.random.normal(a, var), *ACTION_BOUND)  # add randomness to action selection for exploration
            s_, r, done = env.step(a)
            M.store_transition(s, a, r, s_)

            if M.pointer > MEMORY_CAPACITY:
                var = max([var * .9999, VAR_MIN])  # decay the action randomness
                b_M = M.sample(BATCH_SIZE)
                b_s = b_M[:, :STATE_DIM]
                b_a = b_M[:, STATE_DIM: STATE_DIM + ACTION_DIM]
                b_r = b_M[:, -STATE_DIM - 1: -STATE_DIM]
                b_s_ = b_M[:, -STATE_DIM:]

                critic.learn(b_s, b_a, b_r, b_s_)
                actor.learn(b_s)

            s = s_
            ep_reward += r

            if t == MAX_EP_STEPS - 1 or done:
                # if done:
                result = '| done' if done else '| ----'
                print('Ep:', ep,
                      result,
                      '| R: %i' % int(ep_reward),
                      '| Explore: %.2f' % var,
                      )
                break

    if os.path.isdir(path): shutil.rmtree(path)
    os.mkdir(path)
    ckpt_path = os.path.join('./' + MODE[n_model], 'DDPG.ckpt')
    save_path = saver.save(sess, ckpt_path, write_meta_graph=False)
    print("\nSave Model %s\n" % save_path)
def eval():
    env.set_fps(30)
    s = env.reset()
    while True:
        if RENDER:
            env.render()
        a = actor.choose_action(s)
        s_, r, done = env.step(a)
        s = s_
从零开始实现深度强化学习算法——DDPG算法
禅与计算机程序设计艺术
08-18 1121
深度强化学习(Deep Reinforcement Learning,DRL)是一种机器学习方法,它可以训练智能体(Agent)以解决任务并作出决策。其特点在于它能够直接学习到一个策略,该策略是基于环境(Environment)中的各种奖励、动作等信息而产生的,而不是依赖规则或者其他手段来指导决策。深度强化学习算法的目标是在给定一系列状态时,学习一个控制策略,使得智能体能在这个环境中最大化收益。常用的深度强化学习算法包括DQN、A3C、PPO、A2C、IMPALA等。
深度探索:机器学习中的深度确定性策略梯度(DDPG算法原理及其应用
qq_51320133的博客
04-17 1343
DDPG算法作为深度强化学习在连续动作空间控制任务中的重要突破,其结合确定性策略梯度与深度学习的优势,有效解决了高维连续动作空间的学习难题。尽管存在对超参数敏感、对环境噪声敏感等局限性,但通过不断的优化与改进,如引入噪声调整机制、采用更稳健的更新规则等,DDPG在诸多实际应用中展现出强大的性能。未来,随着强化学习理论与实践的不断发展,DDPG及其衍生算法有望在更广泛的领域,如自动驾驶、智能制造、智能物流等,发挥更大的作用,推动人工智能技术的进步与应用落地。
学习DDPG机械手臂算法笔记
AndesStay的博客
07-19 4072
1.关于pyglet点击打开链接 一个实时刷新的做动画模块     pyglet.gl.glClearColor(1, 1, 1, 1) 窗口背景颜色     self.batch=pyglet.graphics.Batch()点击打开链接 pyglet.graphics.Batch()用于产生一个图形的数组,存储在batch中     点击打开链接     self.batch.draw...
深度强化学习——机械臂
Zzz
08-19 2138
基于 DDPG+HER+Prior Data 在xarm6机械臂上复现FetchPickAndPlace-v0任务
机械臂抓取
whaosoft143ai的博客
06-06 2327
实现了稀疏奖励下的机械臂的抓取任务,并针对本文的抓取场景提出了结合深度确定性策略梯度及后视经验回放的分段学习的算法,相比于传统控制算法强化学习提高了抓取的准确度及稳定性,在仿真与实际系统中验证了效果。在抓取任务中,开始时DDPG算法在动作空间随机采样运动,由于奖励的稀疏,在多次探索后可能仍然无法获得奖励,而HER加入后,在已经探索的轨迹中加入虚拟奖励,刺激价值函数的增长,以加速强化学习的学习速率。分段学习是指通过将问题分解成多个子问题,并针对每个子问题独立地解决,从而提高了算法的效率和鲁棒性。
【PyTorch深度强化学习DDPG算法的讲解及实战(超详细 附源码)
showswoller的博客
11-27 1万+
【PyTorch深度强化学习DDPG算法的讲解及实战(超详细 附源码)
DDPG算法详解
Sweeping_Robot的博客
04-19 2064
在RL领域,DDPG主要从:PG -> DPG -> DDPG 发展而来。
Pytorch实现DDPG算法
小菜羊的博客
09-24 6099
本文主要介绍Pytorch复现一下DDPG
用pytorch实现DDPG算法
m0_62444401的博客
06-24 2008
DDPG算法的结构和算法实现
强化学习13 —— Deep Deterministic Policy Gradient(DDPG算法原理与 tensorflow 2.0 实现
靡不有初鲜克有终
08-22 6387
上篇文章介绍了强化学习——Actor-Critic算法详解加实战 介绍了Actor-Critic,本篇文章将介绍 DDPG 算法DDPG 全称是 Deep Deterministic Policy Gradient(深度确定性策略梯度算法) 其中 PG 就是我们前面介绍了 Policy Gradient,在强化学习10——Policy Gradient 推导 已经讨论过,那什么是确定性策略梯度呢? 一、确定性策略 与确定性策略对应的是随机性策略,就是神经网络输出的是动作的分布,在确定每一步动作时,我们需要
DDPG智能体强化学习倒立摆案例
01-26
DDPG智能体强化学习倒立摆案例,Train DDPG Agent to Swing Up and Balance Cart-Pole System - MATLAB & Simulink.pdf
深度强化学习DQN算法实现小车平衡杆(CartPole)问题
02-07
DQN(Deep Q-Network)算法是一种基于深度神经网络的强化学习算法,旨在解决Q-learning算法在高维状态空间中面临的问题。 本代码借鉴学习《深度强化学习专栏 —— 2.手撕DQN算法实现CartPole控制》,对每一行代码...
基于强化学习DDPG)的机器人导航算法实现python源码+数据集.zip
04-10
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目...基于强化学习DDPG)的机器人导航算法实现python源码+数据集.zip
基于DDPG算法强化学习系统.zip
最新发布
05-11
求解强化学习问题所使用的算法可分为策略搜索算法和值函数(value function)算法两类。 强化学习理论受到行为主义心理学启发,侧重在线学习并试图在探索-利用(exploration-exploitation)间保持平衡。不同于监督...
基于深度强化学习DDPG算法的投资组合管理.pdf
08-19
基于深度强化学习DDPG算法的投资组合管理.pdf
基于Pendulum的DDPG简洁示例【TF 2.X】
gdhy9064的博客
09-26 943
本文提供了tensorflow 2.X 下一个基于Pendulum环境的DDPG算法的优雅而简洁的示例,旨在帮助曾像我一样因为难以发现的小疏忽而无法复现的小伙伴们。
DDPG之OU过程
热门推荐
微念的博客
11-06 1万+
Ornstein-Uhlenbeck过程浅析        上周在实现DDPG的过程中,发现其中用到了一个没见过的随机过程,叫做Ornstein-Uhlenbeck过程,所以简单地去了解了一下,下面我们进行概要讨论。        OU过程是一种序贯相关的过程,在DDPG中用于实现RL的探索,想想也对,毕竟RL也是一种序贯相关模型,引入序贯噪声也不无道理。先参考维基百科看看OU过程长什么样子,OU...
MATLAB强化学习实战(四) 训练DDPG智能体控制双积分器系统
wangyifan123456zz的博客
11-09 4302
训练DDPG智能体控制双积分器系统双积分器的MATLAB环境创建环境接口创建DDPG智能体训练智能体DDPG智能体仿真 该示例说明了如何训练深度确定性策略梯度(DDPG)智能体来控制以MATLAB®为模型的二阶动态系统。 有关DDPG智能体的详细信息,请参阅深度确定性策略梯度智能体。 有关显示如何在Simulink®中训练DDPG智能体的示例,请参阅训练DDPG智能体平衡摆。 双积分器的MATLAB环境 此示例的强化学习环境是具有增益的二阶双积分器系统。 训练目标是通过施加力输入来控制介质在二阶系统中的位置
强化学习DDPG算法
10-25
强化学习DDPG算法是一种基于深度学习的强化学习算法,全称为Deep Deterministic Policy Gradient。它是一种Actor-Critic算法,其中Actor网络用于学习策略,Critic网络用于学习值函数。DDPG算法的主要特点是可以处理连续动作空间的问题,并且可以在高维状态空间中进行学习。DDPG算法的核心思想是使用一个Actor网络来输出动作,同时使用一个Critic网络来评估这个动作的价值。Actor网络和Critic网络都是基于深度神经网络的,可以使用反向传播算法进行训练。DDPG算法的优点是可以处理高维状态空间和连续动作空间的问题,并且可以在实际应用中取得很好的效果。 下面是DDPG算法的几个步骤: 1. 初始化Actor网络和Critic网络的参数。 2. 从环境中获取初始状态s,并使用Actor网络输出一个动作a。 3. 执行动作a,并观察环境的反馈,得到下一个状态s'和奖励r。 4. 将(s,a,r,s')存储到经验回放池中。 5. 从经验回放池中随机采样一批数据,使用Critic网络计算每个状态动作对的Q值,并使用Actor网络计算每个状态的动作。 6. 使用反向传播算法更新Actor网络和Critic网络的参数。 7. 重复步骤2-6,直到达到预设的训练次数或者达到预设的性能指标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 【强化学习】DDPG 算法实现案例 11433
  • 【强化学习】Q-Learning 迷宫算法案例 10821
  • PyTorch实战:AlexNet 8292
  • VGG(Pytorch实现) 5541
  • 【openMP并行计算】计算π 5014

分类专栏

  • Java 13篇
  • 深度学习 3篇
  • 并行计算 1篇
  • 强化学习 3篇

最新评论

  • 【强化学习】Q-Learning 迷宫算法案例

    HRunning_: pandas在2.0以后的版本更新了,舍弃了原本的append操作 解决办法 1.将append改为了_append dataframe = dataframe._append() 2.可以使用 “pandas.concat()” 方法代替“dataframe.append()

  • 【强化学习】Q-Learning 迷宫算法案例

    ecjtuyzy: AttributeError: 'DataFrame' object has no attribute 'append'我运行发生了这个错误,有人知道怎么修改吗?

  • 【大白话系列】-- AOP实战

    我是个老六: 看不懂啊

  • 【强化学习】Q-Learning 迷宫算法案例

    Xiashawuyanzu: 如何保留最终的Q表,然后使得下次开始运行的时候就使用最终的Q表选择最佳的路径?

  • 【强化学习】Q-Learning 迷宫算法案例

    风起猿涌: 好好看源码,update()函数中episode就是迭代轮数

大家在看

  • 超过600万用户的专业且强悍的数据恢复软件 120
  • 单片机密码锁-矩阵按键
  • 专业的数据分析软件
  • 简单记录个python国内镜像源 108

最新文章

  • 【LeetCode】科学的刷题顺序
  • Java的Future机制详解
  • java并发编程
2021年1篇
2020年12篇
2019年4篇
2018年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司民治seo网站优化推荐山南如何制作网站公司柳州网站设计模板推荐商丘网站设计模板报价大同优秀网站设计哪家好通化网页制作多少钱鹤壁seo排名公司昭通网站改版推荐固原百度seo多少钱南昌建站价格铜仁建网站公司桐城至尊标王推荐信阳SEO按天收费沈阳设计公司网站报价清徐网站搜索优化钦州网站推广系统公司黄山网站改版哪家好孝感网站制作多少钱广州网站搜索优化报价朔州百度标王价格黑河高端网站设计价格茂名网站优化按天扣费多少钱眉山百姓网标王推广公司无锡网站推广工具湖州网站推广方案哪家好金昌百姓网标王推广价格迪庆网站定制哪家好桂林网站seo优化金华外贸网站设计多少钱宿迁品牌网站设计多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化