基于强化学习的倒立摆控制MATLAB实现(含DQN与PPO双算法对比)

基于强化学习的倒立摆控制MATLAB实现(含DQN与PPO双算法对比)


一、系统建模与核心参数

%% 倒立摆动力学参数
m = 0.1;    % 摆杆质量 (kg)
M = 1.0;    % 小车质量 (kg)
l = 0.5;    % 摆杆长度 (m)
g = 9.81;   % 重力加速度 (m/s²)
J = m*l²/3; % 摆杆转动惯量

%% 状态空间定义
state = [x, dx, theta, dtheta](@ref);  % 小车位置/速度 + 摆角/角速度
action = [F_min, F_max](@ref);        % 控制力范围(连续动作空间)

二、强化学习环境搭建

1. 基于Simulink的物理引擎
% 创建倒立摆Simscape模型
env = rlPredefinedEnv('CartPoleSimscapeModel-Continuous');
obsInfo = getObservationInfo(env);  % 获取观测信息
actInfo = getActionInfo(env);       % 获取动作信息
2. 自定义数值仿真环境
function dydt = CartPole_Eqs(t, y)
    % y = [x, dx, theta, dtheta, F](@ref)
    global Mc Mp Lp Cf g;
    dx = y(2);
    dtheta = y(4);
    F = y(5);
    
    % 动力学方程
    ddx = (F + Cf*dtheta^2*sin(y(3)) - Mp*Lp*dtheta^2*cos(y(3))*sin(y(3))) / (Mc + Mp*sin(y(3))^2);
    ddtheta = (Mp*Lp*cos(y(3))*ddx*sin(y(3)) + (Mc+Mp)*g*sin(y(3))*cos(y(3)) - Mp*Lp*dtheta^2*sin(y(3))*cos(y(3)) - F*cos(y(3))) / (Lp*(4/3 - Mp*cos(y(3))^2/(Mc+Mp)));
    
    dydt = [dx; ddx; dtheta; ddtheta; 0](@ref);
end

三、核心算法实现

1. DQN算法(离散动作空间)
%% 神经网络结构
criticOpts = rlRepresentationOptions('LearnRate',1e-3);
critic = rlQValueFunction([64 64](@ref), obsInfo, actInfo, 'full', criticOpts);

%% 训练配置
agentOpts = rlDQNAgentOptions('TargetUpdateMethod','soft', ...
    'TargetUpdateRate',0.005, ...
    'ExperienceBufferLength',1e6, ...
    'DiscountFactor',0.99);
agent = rlDQNAgent(critic, agentOpts);

%% 训练过程
trainOpts = rlTrainingOptions('MaxEpisodes',5000, ...
    'MaxStepsPerEpisode',500, ...
    'StopTrainingCriteria','AverageReward', ...
    'StopTrainingValue',480);
trainingStats = train(agent, env, trainOpts);
2. PPO算法(连续动作空间)
%% 策略网络结构
actorNet = [
    featureInputLayer(4)
    fullyConnectedLayer(128)
    reluLayer
    fullyConnectedLayer(64)
    reluLayer
    fullyConnectedLayer(1)
    tanhLayer('Name','action')];

criticNet = [
    featureInputLayer(4)
    fullyConnectedLayer(128)
    reluLayer
    fullyConnectedLayer(64)
    reluLayer
    fullyConnectedLayer(1)];

%% PPO代理配置
agent = rlPPOAgent(actorNet, criticNet, ...
    'DiscountFactor',0.99, ...
    'ExperienceBufferLength',1e6, ...
    'MiniBatchSize',64, ...
    'EntropyCoefficient',0.01);

%% 训练过程
trainOpts = rlTrainingOptions('MaxEpisodes',10000, ...
    'MaxStepsPerEpisode',200, ...
    'Verbose',false, ...
    'Plots','training-progress');
trainingStats = train(agent, env, trainOpts);

四、关键参数对比

参数 DQN(离散) PPO(连续)
动作空间 3个离散力等级 连续力范围
奖励函数 离散惩罚项 连续角度惩罚
训练效率 5000 episodes 10000 episodes
收敛稳定性 中等
计算资源需求

参考代码 倒立摆系统控制采用强化学习控制 www.youwenfan.com/contentcnr/101638.html

五、应用场景扩展

  1. 无人机姿态控制

    • 扩展状态空间至四维(x,y,z,θ)
  2. 工业机械臂平衡

    • 增加关节力矩约束
  3. 自动驾驶转向控制

    • 融合视觉传感器数据

六、常见问题解决方案

  1. 训练不收敛

    • 调整学习率(建议PPO: 1e-4~1e-3)
    • 增加批量大小(建议PPO: 64~256)
  2. 过拟合问题

    • 启用Dropout层(隐藏层概率0.5)
    • 增加正则化项(L2惩罚系数1e-4)
  3. 实时性不足

    • 使用GPU加速(需Parallel Computing Toolbox)
    gpuEnv = rlCreateEnv('CartPoleSimscapeModel-Continuous', 'UseGPU', true);
    

七、总结

通过对比实验发现:

建议根据实际需求选择算法:

专注于matlab/simulink,电子电路,编程