✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。

🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室

 👇 关注我领取海量matlab电子书和数学建模资料 

🍊个人信条:做科研,博学之、审问之、慎思之、明辨之、笃行之,是为:博学慎思,明辨笃行。

🔥 内容介绍

一、引言

自主水下航行器(AUV)在海洋探测、资源开发、环境监测等领域发挥着关键作用。精确的运动控制对于 AUV 完成复杂任务至关重要,传统的比例 - 积分 - 微分(PID)控制器虽广泛应用,但在面对水下复杂多变的环境时,其固定参数难以实现最优控制。Q - Learning 作为一种强大的强化学习算法,能够使控制器通过与环境的交互学习,自适应地调整控制参数。本文旨在研究基于 Q - Learning 的自适应强化学习 PID 控制器在 AUV 中的应用,以提升 AUV 的运动控制性能。

二、AUV 运动模型

(一)AUV 动力学方程

AUV 的运动可以用六自由度动力学方程描述,涵盖了沿三个坐标轴的平移运动和绕三个坐标轴的旋转运动。以纵向运动为例,其动力学方程可表示为:

(二)环境干扰因素

水下环境复杂,AUV 会受到诸多干扰。水流的速度和方向变化会对 AUV 的运动产生直接影响,例如,逆流时 AUV 需要更大的动力来保持预定航线;海浪引起的波动会使 AUV 产生上下起伏和左右摇晃,增加了控制的难度;此外,海水密度的不均匀性也会导致 AUV 受到的浮力发生变化,影响其垂直方向的运动稳定性。

三、传统 PID 控制器

(一)PID 控制原理

PID 控制器根据设定值与实际输出值之间的误差,通过比例(P)、积分(I)、微分(D)三个环节的线性组合来调整控制量。其控制律为:

⛳️ 运行结果

📣 部分代码

function [z, historz] = lasso_PCSALM(A, b,eig_AA,paras)

%%%   Xiaokai. Chang · Sanyang. Liu · Zhao Deng,

%%%   A prediction-correction scheme based on  the augmented Lagrangian method

%%%   with indefinite proximal regularization for separable convex programming

tau = paras.tau;

step = paras.step;

rho = paras.rho;

lambda = paras.lambda;

r = 1.001*rho*eig_AA;

r=r*tau;

t_start = tic;

%% Global constants and defaults

QUIET    = 0;

MAX_ITER = 1000;

% MAX_ITER = 50;

ABSTOL   = paras.abstol;

RELTOL   = paras.reltol;

%% Data preprocessing

[m, n] = size(A);

% save a matrix-vector multiplz

Atb = A'*b;

%% ADMM solver

x = zeros(m,1);

z = zeros(n,1);

u = zeros(m,1);

for k = 1:MAX_ITER

    %% x-update

    x=1/(1+rho)*(b+u+rho*A*z);

   %% u-update

    u = u -  rho*(x - A*z);% SADMM涓涓?釜multiplier鐨刾arameter绛変簬alpha

   %% z-update 

    q=-A' * (u-rho*(x-A*z));

    z_p = shrinkage(z + q/r, lambda / r);

    %% u-update

    u_p = u + rho*A*(z_p - z);

 %%%%%%%%%%%%%%%%%%%%%%%  Correction step   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   

    uu_p = u -u_p;

    zz_p = z -z_p;

    num1 = norm(uu_p,'fro')^2/rho + r * norm(zz_p,'fro')^2 - dot(A*(zz_p),uu_p);

    Q_X_XN = [r*zz_p; uu_p/rho];

    alpha_k = step * num1/norm(Q_X_XN,'fro')^2;

    z = z - alpha_k * r * zz_p;

    u = u - alpha_k * uu_p/rho;

  %   z = z_p;

  %   u = u_p;

 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    % diagnostics, reporting, termination checks

    historz.objval(k)  = objective(A, b, lambda, x, z_p);

     historz.r_norm(k)  = norm(x - A*z_p);

    historz.s_norm(k)  = norm(-rho*A*(z_p - z));

    historz.eps_pri(k) = sqrt(n)*ABSTOL + RELTOL*max(norm(x), norm(-A*z_p));

    historz.eps_dual(k)= sqrt(n)*ABSTOL + RELTOL*norm(u_p);

    if (historz.r_norm(k) < historz.eps_pri(k) && ...

            historz.s_norm(k) < historz.eps_dual(k))

             historz.iteration=k;

        historz.time=toc(t_start);

        break;

    end

end

% if ~QUIET

%     toc(t_start);

% end

end

function p = objective(A, b, lambda, x, z)

% p = ( 1/2*sum((A*x - b).^2) + lambda*norm(z,1) );

p = ( 1/2*sum((x - b).^2) + lambda*norm(z,1) );

end

function z = shrinkage(x, kappa)

z = max( 0, x - kappa ) - max( 0, -x - kappa );

end

function [L U] = factor(A, rho)

[m, n] = size(A);

if ( m >= n )    % if skinnz

    L = chol( A'*A + rho*speze(n), 'lower' );

else            % if fat

    L = chol( speze(m) + 1/rho*(A*A'), 'lower' );

end

% force matlab to recognize the upper / lower triangular structure

L = sparse(L);

U = sparse(L');

end

🔗 参考文献

[1]李文飚.基于强化学习的水下机器人追踪控制策略的研究[D].燕山大学,2022.

🍅更多免费数学建模和仿真教程关注领取

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐