【数据驱动】一种新颖的数据驱动预测控制(DeePC)算法,专门针对噪声环境下的未知线性时不变(LTI)系统,引入凸组合约束框架,有效减少了与标称系统行为的偏差,提高了轨迹跟踪性附Matlab代码

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

🍎 往期回顾关注个人主页:Matlab科研工作室

🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。

🔥 内容介绍

在过去很长一段时间里,传统控制算法在工业生产、航空航天、机器人等众多领域发挥着重要作用,为系统的稳定运行提供了保障。然而,随着技术的不断发展和应用场景的日益复杂,传统控制算法逐渐暴露出其在面对噪声环境和未知线性时不变(LTI)系统时的局限性。

传统控制算法大多基于精确的系统模型来设计控制器。以常见的比例 - 积分 - 微分(PID)控制器为例,它通过对系统误差的比例、积分和微分运算来调整控制量,以实现对系统的精确控制。在理想情况下,当系统模型准确且不存在外部干扰时,PID 控制器能够表现出良好的控制性能,例如在一些简单的温度控制系统、电机转速控制系统中,PID 控制器可以将温度或转速稳定在设定值附近,误差极小。

但在实际的工业环境中,噪声无处不在。在化工生产过程中,传感器测量数据会受到各种电磁干扰、流体波动等因素的影响,产生噪声;在航空航天领域,飞行器在飞行过程中会受到大气湍流、发动机振动等噪声干扰。这些噪声会使系统的实际输出与基于精确模型预测的输出产生偏差。而传统控制算法由于依赖精确模型,对这种噪声干扰的适应性较差。当噪声干扰较大时,基于精确模型设计的控制器可能会做出错误的决策,导致控制性能下降,甚至使系统失去稳定性。

对于未知的 LTI 系统,获取精确的系统模型本身就是一个巨大的挑战。在许多新兴的技术领域,如新能源汽车的电池管理系统、智能电网中的分布式能源控制等,系统的动态特性复杂,受到多种因素的交互影响,很难建立准确的数学模型。在这种情况下,传统控制算法由于缺乏精确模型的支持,无法有效地对系统进行控制,难以实现理想的轨迹跟踪性能。在智能电网中,分布式能源的接入使得电网的结构和运行特性变得更加复杂,传统的基于模型的控制方法难以适应这种变化,无法准确地跟踪电力负荷的变化,导致电力供应的稳定性和可靠性受到影响。

传统控制算法在噪声环境和未知 LTI 系统面前的困境,促使研究人员不断探索新的控制方法,以满足日益增长的复杂系统控制需求。在这样的背景下,数据驱动控制方法应运而生,为解决这些问题提供了新的思路和途径。

DeePC 算法的诞生

在传统控制算法陷入困境的背景下,数据驱动控制方法逐渐崭露头角,数据高效预测控制(DeePC)算法便是其中的杰出代表。DeePC 算法作为一种数据驱动预测控制方法,其诞生是为了应对现代控制系统中日益复杂的不确定性问题 ,它打破了传统控制算法对精确系统模型的依赖,开辟了一条全新的控制路径。

DeePC 算法的核心优势在于,它能够直接从系统运行过程中产生的历史数据中提取有价值的信息,以此来构建控制策略。在实际应用中,获取精确的系统模型往往需要耗费大量的时间、人力和物力,而且对于一些复杂的系统,由于存在众多难以精确描述的因素,建立精确模型几乎是不可能的。而 DeePC 算法避开了这一难题,它利用丰富的历史数据,通过先进的数据处理和分析技术,挖掘数据背后隐藏的系统动态特性和规律。在工业机器人的运动控制中,机器人在不同的工作场景下,其负载、摩擦力等因素都会发生变化,难以建立精确的数学模型。DeePC 算法可以通过收集机器人在各种工况下的运动数据,包括位置、速度、加速度等信息,来学习和理解机器人的运动特性,从而实现对机器人运动的有效控制。

DeePC 算法在处理噪声环境下的未知 LTI 系统时,展现出了独特的潜力。它通过巧妙地利用历史数据中的信息,能够在一定程度上弥补由于噪声干扰和模型未知所带来的不确定性。通过对历史数据的分析,DeePC 算法可以学习到噪声的统计特性和变化规律,从而在控制过程中对噪声进行有效的抑制或补偿。在传感器测量数据受到噪声污染的情况下,DeePC 算法可以根据历史数据中噪声的分布情况,对当前的测量数据进行滤波处理,去除噪声的影响,提高数据的准确性,进而提升控制性能。

尽管 DeePC 算法具有许多传统控制算法无法比拟的优势,但它在发展初期也面临着一些挑战。在处理约束条件和噪声环境方面,早期的 DeePC 算法还存在一定的不足,难以确保闭环约束的严格满足。在实际系统中,往往存在着各种物理限制和性能要求,如电机的转速不能超过额定值、机械结构的受力不能超过其承载能力等,这些都构成了系统的约束条件。而噪声环境又进一步增加了系统的不确定性,使得满足这些约束条件变得更加困难。早期的 DeePC 算法在处理这些问题时,由于缺乏有效的策略和方法,导致在某些情况下控制性能下降,甚至无法满足系统的基本要求 。

正是这些挑战,促使研究人员不断对 DeePC 算法进行深入研究和改进,推动着算法的不断发展和完善,以更好地适应复杂多变的实际应用场景。

凸组合约束框架的奥秘

在实际的工业机器人控制场景中,机器人的运动轨迹需要精确跟踪预设路径,以完成诸如零件装配、焊接等高精度任务。由于噪声干扰和模型不确定性,机器人在运动过程中可能会偏离理想轨迹。引入凸组合约束框架后,我们可以根据机器人在以往成功操作中的历史数据,确定一组标称轨迹。在每次控制决策时,通过凸组合约束,使机器人的预测运动轨迹被限制在这些标称轨迹的凸包内。这样一来,即使存在噪声干扰,机器人的实际运动轨迹也能在一个相对较小的范围内波动,从而提高了轨迹跟踪的精度,确保机器人能够准确地完成任务。

凸组合约束框架还降低了系统对模型精度的依赖。在传统的基于模型的控制方法中,精确的系统模型是实现良好控制性能的基础。然而,对于未知 LTI 系统,获取精确模型几乎是不可能的,模型误差往往会导致控制性能的下降。而凸组合约束框架通过直接对系统的输出进行约束,绕过了对精确模型的依赖。它不依赖于对系统动态特性的精确数学描述,而是从数据中学习和利用系统的行为模式,使得系统在模型存在误差的情况下,依然能够保持较好的控制性能。在智能电网的分布式能源控制中,由于分布式能源的接入和负荷的动态变化,电网的模型非常复杂且难以精确建立。采用基于凸组合约束框架的 DeePC 算法,能够根据电网运行的历史数据,通过凸组合约束来控制分布式能源的输出,有效地跟踪电力负荷的变化,提高电网的稳定性和可靠性,而无需依赖精确的电网模型。

凸组合约束框架为 DeePC 算法在噪声环境下的未知 LTI 系统控制中提供了坚实的理论和实践基础,通过巧妙地限制系统行为和降低对模型精度的依赖,显著提高了轨迹跟踪性能。

预测误差界限与约束收紧

在数据驱动控制框架下,准确预测未来的系统行为对于实现良好的控制性能至关重要,而计算预测误差界限则是其中的关键环节。基于系统辨识结果和噪声统计特性来计算预测误差界限,能够在保证一定置信水平下,对预测误差进行量化,为后续的控制决策提供重要依据。

在实际的工业过程控制中,假设我们通过系统辨识得到了系统的一个近似模型,但由于噪声的存在,这个模型与真实系统之间必然存在一定的误差。同时,我们通过对历史数据的分析,了解到噪声具有一定的统计特性,例如噪声服从均值为零、方差为特定值的高斯分布。基于这些信息,我们可以运用概率论和统计学的相关知识来计算预测误差界限。通过一系列的数学推导和计算,我们可以得到在一定置信水平下,系统预测输出与真实输出之间的误差范围。如果我们设定置信水平为 95%,通过计算得到预测误差界限为 ±0.5。这意味着在 95% 的情况下,系统的预测输出与真实输出之间的误差不会超过 ±0.5。

⛳️ 运行结果

📣 部分代码

% System parameters from Table 1

R_m = 8.4;     % Motor armature resistance

K_t = 0.042;   % Motor torque constant

K_m = 0.042;   % Back-emf constant

m_p = 0.024;   % Pendulum mass

l_p = 0.0645;  % Distance from pivot to center of gravity

J_p = 3.3282e-5; % Pendulum moment of inertia

J_r = 5.7198e-5; % Rotary arm moment of inertia

B_p = 0.0005;  % Pendulum damping coefficient

B_r = 0.0015;  % Viscous friction force

r = 0.085;     % Rotary arm length

g = 9.81;      % Gravitational constant

% State-space matrices for the downward position

A = [0, 0, 1, 0;

     0, 0, 0, 1;

     0, (g*l_p^2*m_p^2*r)/(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r), -(B_r*J_p*R_m + J_p*K_m*K_t + B_r*R_m*l_p^2*m_p + K_m*K_t*l_p^2*m_p)/(R_m*(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r)), (B_p*l_p*m_p*r)/(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r);

     0, -(R_m*g*l_p*m_p^2*r^2 + J_r*R_m*g*l_p*m_p)/(R_m*(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r)), (B_r*R_m*l_p*m_p*r + K_m*K_t*l_p*m_p*r)/(R_m*(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r)), -(B_p*R_m*m_p*r^2 + B_p*J_r*R_m)/(R_m*(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r))];

B = [0; 0; (K_t*m_p*l_p^2 + J_p*K_t)/(R_m*(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r)); -(K_t*l_p*m_p*r)/(R_m*(J_r*m_p*l_p^2 + J_p*m_p*r^2 + J_p*J_r))];

C = eye(4);  % Identity matrix

D = [0; 0; 0; 0];

dt = 0.1;

% Discretize the state-space model

sys = ss(A, B, C, D);

sysd = c2d(sys, dt);

% Discrete system matrices

Ad = sysd.A;

Bd = sysd.B;

Cd = sysd.C;

Dd = sysd.D;

%% Simulate data generation

% Time settings

T_total = 30;    % Total simulation time

t = 0:dt:T_total;

N = length(t);   % Number of time steps

% Random input

m = size(B, 2);

p = size(C, 1);

u = randn(N, m);  % Random input sequence

% Initialize state and output

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

y = zeros(p, N);  % Output

% Simulate discrete-time system response

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, :)';  % Output at final time step

y = y';

%% Initialization

T_ini = 1;       % Initial input/output data length

T_pred = 20;     % Prediction horizon

p_steps = 200;   % Number of time steps

theta_amp = deg2rad(20);  % Amplitude in radians

theta_freq = 0.1;  % Frequency

% Target angles

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

% Optimization settings

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

% Initialize input/output

u_opt_all = [];

y_opt_all = [];

y_new_all = [];

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

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

% Construct 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, :);

% Recursive DeePC

x_new = zeros(4, p_steps);

target_angle_all = [];

Q = W' * W;

H = 2 * (Y_f' * Q * Y_f + 0.00001 * (U_f' * U_f));

H = (H + H') / 2;

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

cost_all = [];  % Store cost for each time step

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_angle_all = [target_angle_all; [theta_ref, 0, 0, 0]];

    Aeq = [U_p; Y_p];

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

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

    u_opt = U_f * g_opt;

    y_opt = Y_f * g_opt;

    % Store cost

    cost = fval;

    cost_all = [cost_all; cost];

    % Apply input to the system and simulate new response

    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'];

end

%% Plot results

figure;

for i = 1:p

    subplot(3, 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_angle_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

% Plot cost curve

subplot(3, 2, 5:6);  % Occupy two slots

plot(0:dt:(length(cost_all)-1)*dt, cost_all, '-o');

xlabel('Time (seconds)');

ylabel('Cost');

title('Cost Over Time');

legend('Cost');

% Hankel matrix construction function

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优化、家庭用电、电/冷/热负荷预测、电力设备故障诊断、电池管理系统(BMS)SOC/SOH估算(粒子滤波/卡尔曼滤波)、 多目标优化在电力系统调度中的应用、光伏MPPT控制算法改进(扰动观察法/电导增量法)、电动汽车充放电优化、微电网日前日内优化、储能优化、家庭用电优化、供应链优化
🌟 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌟 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌟 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP

👇

5 往期回顾扫扫下方二维码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天天Matlab科研工作室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值