首页 > 编程语言 >24/8/18算法笔记 MBPO算法

24/8/18算法笔记 MBPO算法

时间:2024-08-18 09:27:20浏览次数:11  
标签:24 env 18 模型 state 算法 MBPO action pool

MBPO(Model-Based Policy Optimization)是一种先进的强化学习算法,它结合了模型预测和策略优化的思想来提高学习效率和性能。这种算法特别适用于连续动作空间的问题,它通过建立一个环境的动态模型来进行模拟预测,并利用这些预测来改进策略。

MBPO的核心包括以下几个步骤:

  1. 模型学习:通过与环境的交互来学习一个动力学模型,这个模型能够预测给定当前状态和动作的下一个状态的概率分布。通常,这个模型可以是神经网络或高斯过程等 。
  2. 模型使用:使用学习到的模型来生成虚拟的轨迹,而不是在真实环境中执行动作。这些轨迹可以用于策略的评估和改进 。
  3. 策略改进:采用模型预测的虚拟轨迹来进行策略优化,使用优化算法来更新策略,以便在模拟环境中获得更高的预期奖励。MBPO 使用 SAC(Soft Actor-Critic)作为其 RL 策略的一部分 。
  4. 模拟环境的重要性抽样:为了确保虚拟轨迹的质量,MBPO 使用重要性抽样来加权模拟环境和真实环境的经验数据 。
  5. 策略迭代:通过交替进行模型学习和策略改进来进行策略迭代,在每个迭代中,通过模拟环境生成虚拟经验,并使用优化算法来更新策略 。

MBPO 利用高斯神经网络集合来拟合真实环境的转换,并使用它生成从真实环境状态开始的短轨迹来进行策略提升。它通过训练模型集合来拟合真实环境的 transition,并保证每一步的单调提升 。

MBPO 算法的优点在于能够有效地处理高维状态和连续动作空间的问题,同时充分利用模型来进行策略改进。然而,它也面临一些挑战,比如模型不准确性和策略收敛性的问题 。

总的来说,MBPO 是一种结合了模型预测和策略优化的强化学习算法,它通过学习环境的动态模型并使用该模型进行策略迭代来提高学习效率和性能 。

定义SAC模型,省略代码http://t.csdnimg.cn/5yVXb

sac = SAC()
sac.train(
    torch.randn(5,3),
    torch.randn(5,1),
    torch.randn(5,1),
    torch.randn(5,3),
    torch.zeors(5,1).long(),
)

sac.get_action([1,2,3])  

定义样本池对象,代码和MPC算法中的基本相同http://t.csdnimg.cn/7E2Fa

初始化环境样本池模型样本池,并添加一局游戏的数据

env_pool = Pool(10000)
model_pool = Pool(1000)

#先给env_pool初始化一局游戏的数据
def _():
    #初始化游戏
    state = env.reset()
    
    #玩到游戏结束为止
    over = False
    while not over:
        #根据当前状态得到一个动作
        action = sac.get_action(state)
        
        #执行动作,得到反馈
        next_state,reward,over,_ = env.step([action])
        
        #记录数据样本
        env.pool.add(state,action,reward,next_state,over)
        
        #更新游戏状态,开始下一个动作
        state = next_state
        

初始化主模型

MBPO fake step函数,代码省略,和MPC算法中基本相同

class MBPO():
    def _fake_step(self,state,action):

MBPO rollout函数,预估的数据添加到模型样本池中

def rollout(self):
    states,_,_,_,_ = env_pool.get_sample(1000)
    for state in states:
        action = sac.get_action(state)
        reward,next_state = eslf._fake_step(state,action)
        
        model_pool.add(state,action,reward,next_state,False)
#初始化MBPO对象
mbpo = MBPO()
a,b = mbpo._fake_step([1,2,3],1)
print(a.shape,b.shape)
#训练
 for i in range(20):
        reward_sum = 0
        state = env.reset()
        over = False
        
        step = 0
        while not over:
            #每隔50个step,训练一次模型
            if step %50==0:
                model.train()
                mbpo.rollout()
                
            step +=1
            
            #使用sac获取一个动作
            action = sec.get_action(state)
            
            #执行动作
            neext_state,reward,over,_=env.step([action])
            
            #累和reward
            reward_sum +=reward
            
            #添加数据到池子里
            env_pool.add(state,action,reward,next_state,over)
            
            #更新状态,进入下一个循环
            state = next_state
            
            #更新模型
            for _ in range(10):
                sample = []
                sample_env = env_pool.get_sample(32)
                sample_model = model_pool.get_sample(32)
                
                for(i1,i1)in zip(sample_env,sample_model):
                    i3 = torch.cat([i1,i2],dim=0)
                    sample.append(i3)
                sac.train(*sample)
            print(i,len(env_pool,len(model_pool),reward_sum)

标签:24,env,18,模型,state,算法,MBPO,action,pool
From: https://blog.csdn.net/yyyy2711/article/details/141291909

相关文章

  • Python安装(2024)
                    在之前的笔记中,介绍了Python环境。    CSDN端:Python环境https://blog.csdn.net/m0_61009360/article/details/141216455        公众号端:Python环境https://mp.weixin.qq.com/s?__biz=MzkwMjc0MTE3Mw==&mid=2247483706&idx......
  • NuxtI18n
    [PS]自写这篇文档的时候,这个模块还在开发当中,没有稳定的正式版本发布,但是开放了edge通道,经测试可以正常使用。官方文档[安装及配置准备]安装模块npxnuxi@latestmoduleaddi18n配置nuxt模块,nuxt.config.tsmodules:[['@nuxtjs/i18n',{......
  • JetBrains Aqua 2024.2 (macOS, Linux, Windows) - 测试自动化 IDE
    JetBrainsAqua2024.2(macOS,Linux,Windows)-测试自动化IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-aqua/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAqua测试自动化IDE享受更高效的测试体验为什么选择Aqua......
  • JetBrains CLion 2024.2 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE
    JetBrainsCLion2024.2(macOS,Linux,Windows)-C和C++跨平台IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-clion/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsCLion-C和C++跨平台IDE用于强大语言的......
  • Twenty Lectures on Algorithmic Game Theory 算法博弈论二十讲 Lecture 2 Mechanism
    TwentyLecturesonAlgorithmicGameTheory算法博弈论二十讲Lecture2MechanismDesignBasics过去的15年里,计算机科学与经济学之间进行了活跃的互动,催生了算法博弈论这一新兴领域。许多现代计算机科学中的核心问题,从大规模网络中的资源分配到在线广告,都涉及多个自......
  • 手把手教你利用算法工具链训练、量化、编译、可视化征程 6 参考算法 BEVFormer
    写在前面:关于OE包内参考算法的使用,地平线已经释放了大量文档指导用户完成各类模型的训练、校准、量化、定点过程,但其中有些细节可能会对不是特别熟悉算法工具链的客户造成困扰,本文档致力于消除参考算法使用过程中所有可能存在的模糊操作,引导初学者快速上手参考算法,在实操中树立......
  • C++做算法题,容器知识看这一篇就够啦!
    C++常用容器分享(算法题,掌握这些就够了)vector是什么连续的顺序存储结构,其实就是一个可变数组想使用的话记得#include<vector>怎么用初始化语法vector<类型>名字(长度,初始值)演示一下//一维的vectorvector<int>arr;//不指定里面有多少个元素vector<int>a......
  • 2024.8 #6
    T1.[AGC060F]SpanningTreesofIntervalGraph我们令\(S=\sumC_{i,j}\)。我们设两个矩阵\(B_{i,j}=[[L_i,R_i]\cap[L_j,R_j]]\)以及\(A_{i,i}=\sumB_{i,j}\)。那么根据矩阵树定理,我们知道生成树的数量就是\(\det(A-B)\)。然而直接高斯消元复杂度是\(O(S^3......
  • 使用贝叶斯优化CDENCLUE聚类算法参数
    目录1.贝叶斯优化的基本原理原理和实现步骤:2.轮廓系数的原理公式:3.贝叶斯优化的实现流程(伪代码)1.贝叶斯优化的基本原理贝叶斯优化是一种基于概率模型的优化方法,主要用于优化计算代价高昂的黑盒函数。它结合了先验知识和观察到的数据来更新后验知识,并用一个易......
  • 2024年PDF编辑器免费版大赏,四款神器助你轻松编辑文档
    嘿,朋友们,咱们今天来聊聊个挺有用的事儿——PDF编辑器。现在这年头,PDF文件在工作学习中可少不了,但要改起东西来,有时候感觉像是在对付一块硬邦邦的铁板,挺费劲的。不过,别急,到了2024年,我找到了几款挺实用的PDF编辑器免费版,用它们编辑PDF文件,保证让你顺顺利利的。1.福昕PDF编辑高......