前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MATLAB训练CartPole强化学习模型

MATLAB训练CartPole强化学习模型

作者头像
万木逢春
发布于 2022-01-19 08:23:33
发布于 2022-01-19 08:23:33
1.3K20
代码可运行
举报
文章被收录于专栏:帮你学MatLab帮你学MatLab
运行总次数:0
代码可运行

MATLAB在gym环境中进行强化学习训练

首先回忆一下我们的小目标

这次用的环境是移动倒立摆CartPole环境,建立环境模型,主要是对reword进行定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
classdef CartPoleEnv < rl.env.MATLABEnvironment
    %http://gym.openai.com/envs/CartPole-v1
    %% 属性设置
    properties
        show=true;
        % pygame环境对象
        p
        % 初始状态
        State
    end
    properties(Access = protected)
        % 结束标记
        IsDone = false
    end
    %% 必须的方法
    methods
        % 构造方法
        function this = CartPoleEnv()
            % 初始设置观察状态
            ObservationInfo = rlNumericSpec([1 4]);
            % 设置动作
            ActionInfo = rlFiniteSetSpec(1:2);
            % 继承系统环境
            this = this@rl.env.MATLABEnvironment(ObservationInfo,ActionInfo);
            % 初始化、设置
            this.State=[0 0 0 0];
            this.p=py.gym.make('CartPole-v0');
            this.p.reset();
            notifyEnvUpdated(this);
        end
        % 一次动作的效果
        function [Observation,Reward,IsDone,LoggedSignals] = step(this,action)
            LoggedSignals = [];
            act = py.int(action-1);
            %             act
            % 计算reward
            temp = cell(this.p.step(act));
            Observation = double(temp{1,1});
            IsDone = temp{1,3};
            x=Observation(1);
            theta=Observation(3);
            x_threshold=2.4;
            theta_threshold=12*2*pi/360;
            rp = (x_threshold - abs(x))/x_threshold - 0.8 ;
            ra = (theta_threshold - abs(theta))/theta_threshold - 0.5 ;
            Reward = rp + ra;
            if IsDone
                Reward=-10;
            end
            this.State = Observation;
            this.IsDone = IsDone;
            notifyEnvUpdated(this);
        end
        % 环境重置
        function InitialObservation = reset(this)
            this.p.reset();
            InitialObservation =[0 0 0 0];
            this.State = InitialObservation;
            notifyEnvUpdated(this);
        end
    end
    %% 可选函数、为了方便自行添加的
    methods
        % 收到绘图通知开始绘图的方法
        function isDone=is_done(this)
            % 设置是否需要绘图
            isDone = this.IsDone;
        end
    end
    methods (Access = protected)
        % 收到绘图通知开始绘图的方法
        function envUpdatedCallback(this)
            % 设置是否需要绘图
            if this.show
                this.p.render();
            end
        end
    end
end

接下来建立强化学习网络模型、和MATLAB借助openai gym环境训练强化学习模型不同,CartPole环境的输入只分为2项——左边施力与右边施力,输出为滑块位置、滑块速度、摆杆角度、摆杆转速,根据输入输出设置网络模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%% 读取环境
ccc
env = CartPoleEnv;
% 获取可观察的状态
obsInfo = getObservationInfo(env);
% 获取可观察的状态维度
numObservations = obsInfo.Dimension(2);
% 获取可执行的动作
actInfo = getActionInfo(env);
% 获取可执行的动作维度
numActions = actInfo.Dimension(1);
rng(0)
%% 初始化agent
dnn = [
    featureInputLayer(obsInfo.Dimension(2),'Normalization','none','Name','state')
    fullyConnectedLayer(24,'Name','CriticStateFC1')
    reluLayer('Name','CriticRelu1')
    fullyConnectedLayer(24, 'Name','CriticStateFC2')
    reluLayer('Name','CriticCommonRelu')
    fullyConnectedLayer(length(actInfo.Elements),'Name','output')];
% figure
% plot(layerGraph(dnn))
criticOpts = rlRepresentationOptions('LearnRate',0.001,'GradientThreshold',1);
critic = rlQValueRepresentation(dnn,obsInfo,actInfo,'Observation',{'state'},criticOpts);
agentOpts = rlDQNAgentOptions(...
    'UseDoubleDQN',false, ...    
    'TargetSmoothFactor',1, ...
    'TargetUpdateFrequency',4, ...   
    'ExperienceBufferLength',100000, ...
    'DiscountFactor',0.99, ...
    'MiniBatchSize',256);
agent = rlDQNAgent(critic,agentOpts);
%% 设置训练参数
trainOpts = rlTrainingOptions(...
    'MaxEpisodes',1000, ...
    'MaxStepsPerEpisode',500, ...
    'Verbose',false, ...
    'Plots','training-progress',...
    'StopTrainingCriteria','AverageReward',...
    'StopTrainingValue',480); 
%% 训练

env.show=false;
trainingStats = train(agent,env,trainOpts);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%% 结果展示
env.show=true;
simOptions = rlSimulationOptions('MaxSteps',5000);
experience = sim(env,agent,simOptions);
totalReward = sum(experience.Reward);
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帮你学MatLab 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
您做matlab有几年了呀
您做matlab有几年了呀
11点赞举报
十年的业余使用
十年的业余使用
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
MATLAB借助openai gym环境训练强化学习模型
虽然openai的gym强化学习环境底层绘图库是pyglet,不太方便自定义,但是已有的环境还是很好用的,有了前面的python环境准备之后,只需要安装gym就可以
万木逢春
2020/07/31
1.8K0
MATLAB借助openai gym环境训练强化学习模型
matlab倒立摆环境建模
classdef CartPoleEnv < rl.env.MATLABEnvironment
万木逢春
2019/11/05
1.3K0
matlab倒立摆环境建模
MATLAB强化学习 DQN 算法
强化学习 DQN 算法将状态和动作当成神经网络的输入, 然后经过神经网络分析后得到动作的 Q 值, 这样不需要在表格中记录 Q 值, 而是直接使用神经网络生成 Q 值.也可以只输入状态值, 输出所有的动作值, 然后按照 Q learning 的原则, 直接选择拥有最大值的动作当做下一步要做的动作.
万木逢春
2019/11/18
4.6K1
MATLAB调用pygame实现强化学习环境
前面我们已经能够通过MATLAB调用Python操作键鼠,也在MATLAB环境中建立简单的环境来训练强化学习模型,比如matlab倒立摆环境建模,现在我们需要稍稍复杂的环境,如果在MATLAB中从零开始搭建游戏环境耗时费力,一顿搜索之后也没发现可以利用的游戏m程序,试图通过调用python的gym库时遇到很大难题解决不了,底层pyglet库更是相当底层,想要扩展或者模仿也很有难度,所以我们选用pygame库来实现游戏环境,网上有很多开源的小游戏实现,还有个将pygame游戏包装成为强化学习环境的PLE库
万木逢春
2020/07/16
1.3K0
MATLAB强化学习训练simulink模型优化
simulink物理结构模型用的是前面文章matlab倒立摆环境建模当在solidworks绘制后导入的,去除子模块封装,添加驱动以及传感器接口,就像这个样子
万木逢春
2020/04/14
2.6K7
matlab倒立摆强化学习训练
Actor(玩家):为了得到尽量高的reward,实现一个函数:输入state,输出action。用神经网络来近似这个函数。目标任务就是如何训练神经网络,让它的表现更好(得更高的reward)。这个网络被称为actor Critic(评委):为了训练actor,需要知道actor的表现到底怎么样,根据表现来决定对神经网络参数的调整。这就要用到强化学习中的“Q-value”、但Q-value也是一个未知的函数,所以也可以用神经网络来近似。这个网络被称为critic。
万木逢春
2019/11/10
1.5K0
MATLAB强化学习工具箱整理
其中网格环境是可以从空网格自定义起点终点障碍物的,也可以添加全局外力,甚至跳跃障碍物的特殊功能
万木逢春
2020/07/24
4.1K0
MATLAB强化学习工具箱整理
强化学习系列(三)-gym介绍和实例
gym是openAI下的一个开发和对比强化学习算法的工具包,内部提供了强化学习需要的环境。
languageX
2022/02/06
5.5K0
强化学习第1天:强化学习概述
强化学习中有一些重要的概念,我们接下来一一介绍他们,如果有些不理解不要着急,我们会举一个具体例子来解释
Nowl
2024/01/18
2860
强化学习第1天:强化学习概述
MATLAB强化学习训练simulink模型
simulink可以方便地建立物理域模型,这是一个简单的倒立摆,同样可以使用MATLAB的强化学习工具箱进行训练
万木逢春
2020/02/11
2.3K4
MATLAB强化学习训练simulink模型
OpenAI gym  强化学习环境库安装以及使用
在强化学习里面我们需要让agent运行在一个环境里面,然鹅手动编环境是一件很耗时间的事情, 所以如果有能力使用别人已经编好的环境, 可以节约我们很多时间。 OpenAI gym 就是这样一个模块, 他提供了我们很多优秀的模拟环境. 我们的各种 RL 算法都能使用这些环境.。
大鹅
2021/06/15
2.2K0
OpenAI gym  强化学习环境库安装以及使用
通过图像训练强化学习模型
在gym中运行atari环境的时候可以选择同一个游戏的内存方式或者图像方式,内存方式直接返回游戏的状态,图像方式返回当前游戏的画面
万木逢春
2020/04/16
1.1K0
通过图像训练强化学习模型
OpenAI Gym高级教程——领域自适应强化学习
OpenAI Gym是一个为强化学习任务提供统一接口的开源平台,它允许研究人员和开发者使用标准化的环境进行实验和开发。本教程将介绍OpenAI Gym的高级用法,重点关注领域自适应强化学习,通过代码示例帮助您理解如何在不同环境中实现自适应性。
Echo_Wish
2024/02/08
3770
MATLAB强化学习 PG 算法
采用 policy gradient 学习方法训练agent,并行训练的参数也需要调整
万木逢春
2019/11/24
1.5K0
强化学习系列(四)-PolicyGradient实例
上文我们介绍了使用简单的Random Guessing Algorithm & Hill Climbing 算法来解决CartPole问题,主要在决策动作这个步骤进行了修改,但是上文介绍的方法都是随机改变权重,针对简单问题参数量比较少的问题可能会得到比较好的效果,但是如果问题复杂,需要参数量多的话,这种方法就不太理想。本文主要介绍基于PolicyGradient方案如何解决CartPole问题。
languageX
2022/02/06
9310
OpenAI Gym 中级教程——深入强化学习算法
OpenAI Gym 是一个用于开发和比较强化学习算法的工具包,提供了多个环境,包括经典的控制问题和 Atari 游戏。本篇博客将深入介绍 OpenAI Gym 中的强化学习算法,包括深度 Q 网络(Deep Q Network, DQN)和深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)。
Echo_Wish
2024/01/30
8571
用一个小游戏入门深度强化学习
今天我们来用深度强化学习算法 deep Q-learning 玩 CartPole 游戏。
杨熹
2018/10/09
1.4K0
用一个小游戏入门深度强化学习
一文带你实战强化学习(下) | DQN
【磐创AI导读】:本篇文章是深度强化学习专栏的第四篇,讲了第五节实战强化学习中Monte Carlo Policy Gradient 算法及Actor Critic 算法,希望对大家有所帮助。查看关于本专栏的介绍:深度强化学习(DRL)专栏开篇。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/10/23
1.1K0
一文带你实战强化学习(下) | DQN
【AI模型】gym强化学习仿真平台配置与使用
OpenAI Gym 是一个用于开发和比较强化学习算法的开源工具包。它提供了一系列标准化的环境场景和 API 接口,使得研究人员和开发者能够轻松地创建、测试和评估各种强化学习算法。
DevFrank
2024/07/24
4140
使用Python实现深度学习模型:强化学习与深度Q网络(DQN)
深度Q网络(Deep Q-Network,DQN)是结合深度学习与强化学习的一种方法,用于解决复杂的决策问题。本文将详细介绍如何使用Python实现DQN,主要包括以下几个方面:
Echo_Wish
2024/06/27
1K0
使用Python实现深度学习模型:强化学习与深度Q网络(DQN)
相关推荐
MATLAB借助openai gym环境训练强化学习模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验