线性离散时间系统的H∞跟踪控制:基于无模型Q学习的设计(Matlab代码实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

线性离散时间系统的H∞跟踪控制是控制工程中的一个重要课题,通过设计控制器使系统在追踪给定轨迹的同时满足H∞性能指标。基于无模型Q学习的设计研究则是一种基于强化学习的控制方法,通过学习系统的动态特性和环境反馈来实现控制目标。

在这样的研究中,通常会通过Q学习算法来学习系统的最优控制策略,使系统能够在不确定性环境下实现稳定的控制。通过对系统状态和行为的不断学习和优化,最终实现系统的H∞跟踪控制。

这种方法的优势在于可以应对系统复杂性高、模型不完全或难以建模等情况,但也需要考虑到强化学习算法在实际应用中可能会受到训练数据质量、训练时间等因素的影响,需要综合考虑算法性能和实际应用效果。

线性离散时间系统的H∞跟踪控制是一种重要的控制策略,旨在确保系统能够在面对外部扰动和不确定性时实现稳定的轨迹跟踪。基于无模型Q学习的设计为这一控制问题提供了一种新颖而高效的解决方案。通过结合强化学习的思想和H∞控制理论,该方法能够在不依赖系统模型的情况下,实现对系统的精准跟踪控制。这种设计不仅提高了系统的鲁棒性和性能,同时也为控制理论与机器学习的融合提供了一个引人注目的范例。这种创新性的方法为解决复杂的控制问题开辟了新的途径,并在实际工程应用中展现出巨大的潜力。

📚2 运行结果

部分代码:

%The number of independent elements of H is 21.
    if mod(n, 22) == 0
        err_K = abs(K - K_P_dare);
        err_L = abs(L - L_P_dare);
        
        if n <= Count_train
            mm = mm + 1;
            % PEV using the LS
            Z_temp = zbar * zbar';
            T_temp = zbar * d_target;
            rank(Z_temp);
            vecH = inv(Z_temp) * T_temp;
            H = [vecH(1),   vecH(2)/2,   vecH(3)/2,   vecH(4)/2,  vecH(5)/2,   vecH(6)/2;
                 vecH(2)/2, vecH(7),     vecH(8)/2,   vecH(9)/2,  vecH(10)/2,  vecH(11)/2;
                 vecH(3)/2, vecH(8)/2,   vecH(12),    vecH(13)/2, vecH(14)/2,  vecH(15)/2;
                 vecH(4)/2, vecH(9)/2,   vecH(13)/2,  vecH(16),   vecH(17)/2,  vecH(18)/2;
                 vecH(5)/2, vecH(10)/2,  vecH(14)/2,  vecH(17)/2, vecH(19),    vecH(20)/2;
                 vecH(6)/2, vecH(11)/2,  vecH(15)/2,  vecH(18)/2, vecH(20)/2,  vecH(21)];
            %PIM
            Hxx = H(1:4, 1:4);
            Hxu = H(1:4, 5);
            Hxw = H(1:4, 6);
            Hux = H(5, 1:4);
            Huu = H(5, 5);
            Huw = H(5, 6);
            Hwx = H(6, 1:4);
            Hwu = H(6, 5);
            Hww = H(6, 6);
            L = inv(Huu - Huw*inv(Hww)*Hwu) * (Huw*inv(Hww)*Hwx - Hux);
            K = inv(Hww - Hwu*inv(Huu)*Huw) * (Hwu*inv(Huu)*Hux - Hwx);
            
            %Error calculation
            err_L_norm(mm) = norm(err_L);
            err_K_norm(mm) = norm(err_K);
 
        end 
    end
end

%The learned results
L_mf = L
K_mf = K

err_L_norm_c2 = err_L_norm;
err_K_norm_c2 = err_K_norm;

figure(1)
subplot(2,1,1), hold on, box on;
plot(1:mm, err_L_norm,'m','linewidth',3);
plot(1:mm, err_L_norm,'bo','linewidth',3);
set(gca,'FontSize',30, 'FontName','Times New Roman');
ylabel('||L-L^*||');
subplot(2,1,2), hold on, box on;
plot(1:mm, err_K_norm,'m','linewidth',3);
plot(1:mm, err_K_norm,'bo','linewidth',3);
ylabel('||K-K^*||');
set(gca,'FontSize',30, 'FontName','Times New Roman');
hold off

y_c2 = y;
r_c2 = r;

figure(2),hold on, box on
t=1:Count_N;
plot(t, y, 'm', 'linewidth', 2)
plot(t, r(1:Count_N), 'b', 'linewidth', 3)
set(gca,'FontSize',30, 'FontName','Times New Roman');
legend('Output', 'Reference', 'location','southeast');
hold off

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]肖会芹,何勇,吴敏,等.基于T-S 模糊模型的采样数据网络控制系统H∞ 输出跟踪控制[J].自动化学报, 2015, 41(3):8.DOI:10.16383/j.aas.2015.c140444.

[2]张一晗,肖振飞,李金娜.数据驱动的线性离散系统自学习H_(∞)跟踪控制[J].控制工程, 2023, 30(10):1927-1934.

🌈4 Matlab代码实现

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用T-S模糊模型设计具有时滞的非线性系统的H∞滤波器,需要按照以下步骤进行: 1. 建立T-S模糊模型:根据非线性系统的特性,将其分解为若干个局部线性系统,并建立T-S模糊模型。 2. 建立带时滞的状态空间模型:将T-S模糊模型进行时序离散化,建立带时滞的状态空间模型。 3. 设计H∞滤波器:根据滤波器的性能指标,设计H∞滤波器。 4. 实现滤波器:将所设计的H∞滤波器实现在具体的控制系统中。 下面是一个MATLAB代码示例,用于实现具有时滞的非线性系统的H∞滤波器设计: ```matlab %% 建立T-S模糊模型 % 定义系统参数 A1 = [0.5 -0.3; 0.2 0.1]; B1 = [1; 0.5]; C1 = [1 0]; D1 = 0; A2 = [0.1 0.4; -0.2 0.5]; B2 = [0.5; 1]; C2 = [0 1]; D2 = 0; % 定义模糊集合 x1 = -1:0.5:1; x2 = -1:0.5:1; mf1 = {'trimf', [-1 -0.5 0]; 'trimf', [-0.5 0 0.5]; 'trimf', [0 0.5 1]}; mf2 = {'trimf', [-1 -0.5 0]; 'trimf', [-0.5 0 0.5]; 'trimf', [0 0.5 1]}; % 建立T-S模糊模型 sys1 = fuzzyModel('Name', 'model1', 'Type', 'ts', 'NumInputs', 2, 'NumOutputs', 1, 'NumMFs', [3 3], 'InputMFs', mf1, 'OutputMFs', {'trimf', [-1 -0.5 0]; 'trimf', [-0.5 0 0.5]; 'trimf', [0 0.5 1]}, 'Rules', [1 1; 1 2; 1 3; 2 1; 2 2; 2 3; 3 1; 3 2; 3 3], 'InputNames', {'x1', 'x2'}, 'OutputNames', {'y'}); sys2 = fuzzyModel('Name', 'model2', 'Type', 'ts', 'NumInputs', 2, 'NumOutputs', 1, 'NumMFs', [3 3], 'InputMFs', mf2, 'OutputMFs', {'trimf', [-1 -0.5 0]; 'trimf', [-0.5 0 0.5]; 'trimf', [0 0.5 1]}, 'Rules', [1 1; 1 2; 1 3; 2 1; 2 2; 2 3; 3 1; 3 2; 3 3], 'InputNames', {'x1', 'x2'}, 'OutputNames', {'y'}); sys = [sys1, sys2]; sys = connect(sys, {'model1/y', 'model2/y'}, {'sum1/in1', 'sum2/in1'}); %% 建立带时滞的状态空间模型 % 定义采样周期和时滞 Ts = 0.1; tau = 0.5; % 建立带时滞的状态空间模型 sysd = c2d(sys, Ts); sysd.InputDelay = tau; % 提取输入、输出和状态向量 B = sysd.B; C = sysd.C; D = sysd.D; x = [zeros(size(C)); zeros(size(C))]; y = 0; %% 设计H∞滤波器 % 定义滤波器参数 Q = eye(size(C, 1)); R = 1; % 设计H∞滤波器 [P, L, G] = dare(sysd.A, sysd.B, Q, R); K = (sysd.B' * P * sysd.C + G) / R; %% 实现滤波器 % 定义初始状态和输入 x0 = [0; 0]; u = 1; % 实现滤波器 for k = 1:100 y(k) = C * x(:, end); x(:, end+1) = sysd.A * x(:, end) + sysd.B * u; x(:, end) = x(:, end) - K * (C * x(:, end) - y(k)); end % 绘制输出图形 t = (0:99) * Ts; plot(t, y); xlabel('Time (s)'); ylabel('Output'); title('H-infinity Filter for Nonlinear System with Time Delay'); ``` 这个例子中,我们首先建立了具有时滞的非线性系统的T-S模糊模型,并将其转换为带时滞的状态空间模型。然后,我们根据H∞滤波器的性能指标,设计了H∞滤波器,并将其实现在具体的控制系统中。最后,我们绘制了滤波器的输出图形。 你可以根据自己的需求修改系统参数、模糊集合、采样周期、时滞、滤波器参数等来实现自己的具有时滞的非线性系统的H∞滤波器设计

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值