【数据驱动】一种用于噪声环境中未知LTI系统的数据驱动预测控制方案中的新型凸组合约束框架DeepC附Matlab代码

 ✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知,求助可私信。

🔥 内容介绍

在系统控制领域,在满足约束条件的理论保证下实现最优轨迹跟踪仍然是一个重大的挑战。本文提出了一种新颖的基于凸组合约束的数据驱动预测控制方案,用于处理噪声环境下的未知线性时不变 (LTI) 系统。通过将凸组合约束融入经典的数据高效预测控制 (DeePC) 算法,所提出的算法减少了系统行为与标称值的偏差,从而提高了轨迹跟踪性能。本文还提出了一种在该框架内指定预测误差界限的方法,以及一种两步约束收紧算法,该算法能够确保满足约束条件,同时避免引入不必要的保守性。因此,所提出的 DeePC 算法能够在数据不精确的情况下有效地实现参考轨迹跟踪,并对闭环约束满足性提供理论保证。本文深入分析了数据长度对性能的影响,并提出了一种基于正则化的改进方法,以在最小化数据和计算需求的同时提高跟踪性能。此外,本文还引入了一种调整方法,通过软化汉克尔矩阵等式约束来减少闭环约束违反,在适当的调整下,在数值上成功实现了约束满足。

一、引言

精确的轨迹跟踪是许多工程系统,例如机器人、无人机和工业过程控制等,的关键需求。然而,在实际应用中,系统模型通常是未知的或不精确的,存在各种不确定性,例如噪声、扰动和模型误差。传统的基于模型的控制方法在处理这些不确定性时往往表现不足,容易导致控制性能下降甚至系统不稳定。近年来,数据驱动控制方法因其无需精确系统模型而备受关注,数据高效预测控制 (DeePC) 作为一种具有代表性的数据驱动预测控制方法,在轨迹跟踪方面展现出一定的优势。然而,现有的 DeePC 算法在处理约束条件和噪声环境方面仍然存在不足,难以保证闭环约束的满足。

二、凸组合约束框架

本文的核心贡献在于提出了一种基于凸组合约束的 DeePC 算法。传统的 DeePC 算法主要依赖于从历史数据中学习得到的系统动力学模型,但这种模型不可避免地存在误差。为了减轻模型误差的影响并提高轨迹跟踪精度,我们引入了凸组合约束。具体来说,我们约束系统的预测输出必须位于一组预定义的标称轨迹的凸包内。这组标称轨迹可以根据系统的先验知识或历史数据进行选择。通过这种方式,我们可以限制系统行为偏离标称轨迹的程度,从而提高控制精度并降低对模型精度的依赖。

三、预测误差界限与约束收紧算法

在数据驱动控制框架下,准确预测未来的系统行为至关重要。本文提出了一种基于系统辨识结果和噪声统计特性来计算预测误差界限的方法。该方法能够在保证一定的置信水平下,对预测误差进行量化。基于此,我们设计了一种两步约束收紧算法。第一步,根据预测误差界限,对原始约束进行收紧,以确保在最坏情况下也能满足约束条件。第二步,通过迭代优化,对收紧后的约束进行微调,在保证约束满足的同时,最大限度地提高控制性能。这种两步法有效地平衡了保守性和性能之间的矛盾。

四、数据长度的影响与正则化方法

数据长度对 DeePC 算法的性能有显著影响。数据长度不足会导致模型精度下降,从而影响轨迹跟踪精度。反之,数据长度过长则会增加计算负担。本文分析了数据长度对系统辨识精度和控制性能的影响,并提出了一种基于正则化的改进方法。通过在系统辨识过程中引入正则化项,可以有效地抑制模型过拟合现象,提高模型泛化能力,从而在有限的数据条件下获得较好的控制效果。

五、汉克尔矩阵约束的软化与参数调整

在 DeePC 算法中,汉克尔矩阵等式约束起着至关重要的作用。然而,由于数据噪声和模型误差的存在,严格满足这些约束条件往往非常困难。本文提出了一种通过软化汉克尔矩阵等式约束来减少闭环约束违反的方法。通过引入一个惩罚因子,可以将严格的等式约束转化为软约束,从而提高算法的鲁棒性和稳定性。本文还讨论了惩罚因子的选取方法,并通过数值实验验证了该方法的有效性。

六、结论

本文提出了一种基于凸组合约束的数据驱动预测控制算法,该算法能够有效地处理噪声环境下的未知 LTI 系统轨迹跟踪问题。通过引入凸组合约束、预测误差界限计算方法、两步约束收紧算法、基于正则化的数据处理方法以及汉克尔矩阵约束软化技术,该算法在保证闭环约束满足性的同时,显著提高了轨迹跟踪精度和鲁棒性。未来的工作将着重于进一步提高算法的效率和适应性,并将其应用于更复杂的非线性系统和多智能体系统。

📣 部分代码

 output

x = zeros(size(Ad, 1), N);  % State

y = zeros(p, N);            % Output

mu_bar = 0.001^2;           % Variance

mu_limit = 0.001;           % Noise limit

% Covariance matrix

cov_matrix = mu_bar * eye(p);

% Initialize noise matrix

noise_matrix = zeros(N, p);

% Generate truncated noise

for i = 1:N

    while true

        mu_k = mvnrnd(zeros(1, p), cov_matrix);  % Sample noise

        if max(abs(mu_k)) <= mu_limit

            noise_matrix(i, :) = mu_k;

            break;

        end

    end

end

% Simulate discrete-time system

for k = 1:N-1

    x(:, k+1) = Ad * x(:, k) + Bd * u(k, :)';

    y(:, k) = Cd * x(:, k) + Dd * u(k, :)';

end

y(:, N) = Cd * x(:, N) + Dd * u(N, :)';  % Last time step output

y = y' + noise_matrix;  % Add noise

% Initialize DeePC parameters

T_ini = 1;   % Initial data length

T_pred = 20; % Prediction horizon

p_steps = 200; % Total time steps

theta_amp = deg2rad(20);  % Amplitude

theta_freq = 0.1;         % Frequency

W = kron(eye(T_pred), diag([1, 1, 1, 1]));

options = optimoptions('quadprog', 'Algorithm', 'interior-point-convex', 'Display', 'off');

% Initialize input/output data

u_ini = repmat(zeros(m,1),T_ini,1);

y_ini = repmat(zeros(p,1),T_ini,1);

% Build Hankel matrix

U_d = build_hankel(u', T_ini, T_pred);

Y_d = build_hankel(y', T_ini, T_pred);

U_p = U_d(1:m*T_ini, :);

U_f = U_d(m*T_ini+1:end, :);

Y_p = Y_d(1:p*T_ini, :);

Y_f = Y_d(p*T_ini+1:end, :);

x_new = zeros(4, p_steps);

target_angel_all = [];

Q = W' * W;

f = @(target_angle) -2 * (target_angle' * Q * Y_f)';

H_combined = [U_p; Y_p; U_f];

Pi = pinv(H_combined) * H_combined;

lamda_ii = 3000;

H = 2 * (Y_f' * Q * Y_f + 0.00001 * (U_f' * U_f) + lamda_ii * (eye(size(Pi)) - Pi)' * (eye(size(Pi)) - Pi));

H = (H + H') / 2;

error = 0;

% Recursive DeePC loop

for t_step = 1:p_steps

    theta_ref = theta_amp * square(2 * pi * theta_freq * t(t_step));

    target_angle = repmat([theta_ref; 0; 0; 0], T_pred, 1);

    target_angel_all = [target_angel_all; [theta_ref, 0, 0, 0]];

    % Equality constraints

    Aeq = [U_p; Y_p];

    beq = [u_ini(:); y_ini(:)];

    A = kron(eye(T_pred * 2), [0,1,0,0;0,0,1,0;0,0,0,1]) * [Y_f; -Y_f];

    b = kron(ones(T_pred * 2, 1),[0.0284;0.5443;0.2274]) - mu_limit;

    % Solve optimization problem

    [g_opt, fval] = quadprog(H, f(target_angle), [], [], Aeq, beq, [], [], [], options);

    sum(g_opt);

    % Compute optimal inputs

    u_opt = U_f * g_opt;

    y_opt = Y_f * g_opt;

    % Update input/output data

    u_opt_all = [u_opt_all; u_opt(1:m)'];

    y_opt_all = [y_opt_all; y_opt(1:p)'];

    x_new(:, t_step+1) = Ad * x_new(:, t_step) + Bd * u_opt(1:m)';

    y_new = Cd * x_new(:, t_step) + Dd * u_opt(1:m)';

    u_ini = [u_ini(m+1:end); u_opt(1:m)'];

    y_ini = [y_ini(p+1:end); y_new];

    y_new_all = [y_new_all; y_new'];

    error = error + ((y_new(1) -theta_ref).^2);

end

error = error/p_steps;

% Plot results

figure;

for i = 1:p

    subplot(2, 2, i);

    plot(0:dt:(length(y_opt_all)-1)*dt, y_new_all(:, i));

    hold on;

    plot(0:dt:(length(y_opt_all)-1)*dt, target_angel_all(:,i), '--');

    xlabel('Time (seconds)');

    ylabel(['Output ', num2str(i), ' (radians)']);

    legend(['Output ', num2str(i)], 'Reference');

    title(['DeePC Control of Inverted Pendulum - Output ', num2str(i)]);

end

function H = build_hankel(data, T_ini, T_pred)

    [num_data, num_samples] = size(data);

    H = zeros(num_data * (T_ini + T_pred), num_samples - T_ini - T_pred + 1);

    for i = 1:(num_samples - T_ini - T_pred + 1)

        H(:, i) = reshape(data(:, i:i + T_ini + T_pred - 1), [], 1);

    end

end

⛳️ 运行结果

🔗 参考文献

🎈 部分理论引用网络文献,若有侵权联系博主删除

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

🎁  私信完整代码和数据获取及论文数模仿真定制

🌿 往期回顾可以关注主页,点击搜索

🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:

🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌈图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌈 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
🌈 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
🌈 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌈 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌈电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
🌈 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌈 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌈 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP

👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值