遗传算法优化LQR控制算法Q矩阵的matlab代码例子
时间: 2023-12-01 17:35:45 浏览: 144
以下是一个基于遗传算法优化LQR控制算法Q矩阵的matlab代码例子:
%% 遗传算法优化LQR控制算法Q矩阵
clc;clear;close all;
%% LQR控制算法
% 系统模型
A=[0 1;0 0];
B=[0;1];
C=[1 0;0 1];
D=[0;0];
% 状态反馈控制器
Q=diag([1 1]);
R=1;
[K,S,e]=lqr(A,B,Q,R);
% 系统闭环
sys=ss(A-B*K,B,C,D);
% 仿真
t=0:0.05:10;
u=ones(size(t));
x0=[1;1];
[y,t,x]=lsim(sys,u,t,x0);
% 绘图
figure;
subplot(2,1,1);
plot(t,y(:,1),'b',t,y(:,2),'r');
legend('y1','y2');
ylabel('Output');
title('LQR Control');
subplot(2,1,2);
plot(t,K(1)*x(:,1)+K(2)*x(:,2),'k');
ylabel('Input');
xlabel('Time');
%% 遗传算法优化
% 目标函数
fun=@(q)lqr(A,B,q,R);
% 变量个数与边界
nVar=2;
VarMin=0.1;
VarMax=10;
% 遗传算法参数
GAoptions=gaoptimset('PopulationSize',100,...
'EliteCount',10,...
'CrossoverFraction',0.8,...
'MutationFcn',{@mutationadaptfeasible,0.02},...
'Generations',50,...
'Display','iter');
% 遗传算法优化
[q,~,~,~]=ga(fun,nVar,[],[],[],[],VarMin*ones(1,nVar),VarMax*ones(1,nVar),[],GAoptions);
% LQR控制器
Q=diag(q);
[K,S,e]=lqr(A,B,Q,R);
% 系统闭环
sys=ss(A-B*K,B,C,D);
% 仿真
t=0:0.05:10;
u=ones(size(t));
x0=[1;1];
[y,t,x]=lsim(sys,u,t,x0);
% 绘图
figure;
subplot(2,1,1);
plot(t,y(:,1),'b',t,y(:,2),'r');
legend('y1','y2');
ylabel('Output');
title('GA-LQR Control');
subplot(2,1,2);
plot(t,K(1)*x(:,1)+K(2)*x(:,2),'k');
ylabel('Input');
xlabel('Time');
阅读全文