基于遗传算法的LQR控制器最优设计算法

线性二次调节器(LQR)是控制理论中重要的设计方法,而遗传算法(GA)为LQR控制器的优化设计提供了强大的全局搜索能力。

LQR控制器基本原理

LQR控制器通过最小化代价函数设计最优状态反馈增益矩阵:

J=∫(xTQx+uTRu)dtJ = ∫(xᵀQx + uᵀRu)dtJ=∫(xTQx+uTRu)dt

其中:

  • Q≥0Q ≥ 0Q≥0:状态加权矩阵
  • R>0R > 0R>0:控制输入加权矩阵
  • u=−Kxu = -Kxu=−Kx:状态反馈控制律

传统方法通过求解代数RiccatiRiccatiRiccati方程获得最优增益矩阵KKK:

K=R−1BTPK = R⁻¹BᵀPK=R−1BTP
AP+PAT−PBR−1BTP+Q=0AP + PAᵀ - PBR⁻¹BᵀP + Q = 0AP+PAT−PBR−1BTP+Q=0

遗传算法优化LQR设计

优化问题分析

  1. 优化变量:Q和R矩阵的元素
  2. 目标函数:闭环系统性能指标(如响应时间、超调量、控制能耗)
  3. 约束条件:系统稳定性、控制输入限制

算法流程

初始化种群

评估适应度

满足终止条件?

选择操作

交叉操作

变异操作

新一代种群

输出最优解

MATLAB实现

1. 系统建模与适应度函数

function[fitness, stability]=lqr_fitness_function(params, A, B, Q_structure, R_structure)% 提取参数 n =size(A,1); m =size(B,2);% 重构Q矩阵ifstrcmp(Q_structure,'diagonal') q_diag =params(1:n); Q =diag(q_diag); param_offset = n;elseifstrcmp(Q_structure,'full') Q =reshape(params(1:n*n), n, n); Q =(Q + Q')/2;% 确保对称性 param_offset = n*n;end% 重构R矩阵ifstrcmp(R_structure,'scalar') R =params(param_offset +1); R = R *eye(m);elseifstrcmp(R_structure,'diagonal') r_diag =params(param_offset +1:param_offset + m); R =diag(r_diag); param_offset = param_offset + m;elseifstrcmp(R_structure,'full') R =reshape(params(param_offset +1:param_offset + m*m), m, m); R =(R + R')/2;% 确保对称性end% 求解Riccati方程try[K,~, eig_vals]=lqr(A, B, Q, R); stability =all(real(eig_vals)<0);% 检查稳定性catch fitness =inf;% 求解失败,赋予极大代价 stability = false;return;end% 闭环系统仿真 sys_cl =ss(A - B*K, B,eye(n),0); t =0:0.01:10; x0 =[1;zeros(n-1,1)];% 初始状态[y,~, x]=initial(sys_cl, x0, t);% 计算性能指标 settling_time =settling_time_calc(y(:,1), t);% 调节时间 overshoot =max(y(:,1))/y(1,1)-1;% 超调量 control_effort =sum(sum((K*x).^2))*0.01;% 控制能耗% 加权适应度函数 w1 =0.4;% 调节时间权重 w2 =0.3;% 超调量权重 w3 =0.3;% 控制能耗权重 fitness = w1*(settling_time/10)+ w2*overshoot + w3*(control_effort/100);% 惩罚不稳定系统if~stability fitness = fitness +10;endendfunction ts =settling_time_calc(response, time) final_value =response(end); tolerance =0.02*abs(final_value);% 2%容差带 idx =find(abs(response - final_value)<= tolerance,1,'first');ifisempty(idx) ts =time(end);else ts =time(idx);endend

2. 遗传算法主程序

function[best_K, best_params, best_fitness]=ga_lqr_design(A, B, Q_structure, R_structure)% 参数设置 n =size(A,1);% 状态维度 m =size(B,2);% 输入维度% 根据矩阵结构确定变量个数ifstrcmp(Q_structure,'diagonal') nQ = n;elseifstrcmp(Q_structure,'full') nQ = n*n;endifstrcmp(R_structure,'scalar') nR =1;elseifstrcmp(R_structure,'diagonal') nR = m;elseifstrcmp(R_structure,'full') nR = m*m;end total_vars = nQ + nR;% 遗传算法参数 pop_size =50; max_gen =100; crossover_rate =0.8; mutation_rate =0.1;% 变量边界 (Q对角元素>0, R元素>0) lb =zeros(total_vars,1); ub =ones(total_vars,1)*100;% 初始化种群 population = lb +(ub - lb).*rand(pop_size, total_vars);% 进化循环 best_fitness_history =zeros(max_gen,1);for gen =1:max_gen % 评估适应度 fitness =zeros(pop_size,1); stability_flags =false(pop_size,1);parfori=1:pop_size [fit, stable]=lqr_fitness_function(population(i,:), A, B, Q_structure, R_structure);fitness(i)= fit;stability_flags(i)= stable;end% 记录最佳个体[best_fit, idx]=min(fitness); best_individual =population(idx,:);best_fitness_history(gen)= best_fit;fprintf('Generation %d: Best Fitness = %.4f\n', gen, best_fit);% 选择操作 (锦标赛选择) new_population =zeros(size(population));fori=1:pop_size candidates =randperm(pop_size,2);[~, winner]=min(fitness(candidates));new_population(i,:)=population(candidates(winner),:);end% 交叉操作 (算术交叉)fori=1:2:pop_size-1if rand < crossover_rate alpha = rand; parent1 =new_population(i,:); parent2 =new_population(i+1,:); child1 = alpha*parent1 +(1-alpha)*parent2; child2 = alpha*parent2 +(1-alpha)*parent1;new_population(i,:)= child1;new_population(i+1,:)= child2;endend% 变异操作 (高斯变异)fori=1:pop_size if rand < mutation_rate mutation =randn(1, total_vars)*0.1;new_population(i,:)=new_population(i,:)+ mutation;% 确保在边界内new_population(i,:)=max(min(new_population(i,:), ub), lb);endend population = new_population;end% 提取最优解 best_params = best_individual;[~, stability]=lqr_fitness_function(best_params, A, B, Q_structure, R_structure);% 重构最优Q和Rifstrcmp(Q_structure,'diagonal') q_diag =best_params(1:n); Q_opt =diag(q_diag); param_offset = n;elseifstrcmp(Q_structure,'full') Q_opt =reshape(best_params(1:n*n), n, n); Q_opt =(Q_opt + Q_opt')/2; param_offset = n*n;endifstrcmp(R_structure,'scalar') R_opt =best_params(param_offset +1)*eye(m);elseifstrcmp(R_structure,'diagonal') r_diag =best_params(param_offset +1:param_offset + m); R_opt =diag(r_diag);elseifstrcmp(R_structure,'full') R_opt =reshape(best_params(param_offset +1:end), m, m); R_opt =(R_opt + R_opt')/2;end% 计算最优增益矩阵 best_K =lqr(A, B, Q_opt, R_opt); best_fitness = best_fit;% 绘制进化过程 figure;plot(1:max_gen, best_fitness_history,'LineWidth',2);xlabel('Generation');ylabel('Best Fitness');title('Genetic Algorithm Convergence'); grid on;end

3. 示例使用案例

% 示例系统:倒立摆 m =0.5;% 小车质量 (kg) M =0.5;% 摆杆质量 (kg) l =0.3;% 摆杆长度 (m) g =9.81;% 重力加速度 (m/s²)% 状态空间矩阵 A =[0100;00-(m*g)/M 0;0001;00((M+m)*g)/(M*l)0]; B =[0;1/M;0;-1/(M*l)];% 使用遗传算法优化LQR参数% Q结构:对角矩阵 (状态加权)% R结构:标量 (控制输入加权)[Q_struct, R_struct]=deal('diagonal','scalar');[best_K, best_params, best_fitness]=ga_lqr_design(A, B, Q_struct, R_struct);% 显示结果disp('Optimal gain matrix K:');disp(best_K);% 重构最优Q和R n =size(A,1);ifstrcmp(Q_struct,'diagonal') q_diag =best_params(1:n); Q_opt =diag(q_diag); R_opt =best_params(n+1);elseifstrcmp(Q_struct,'full') Q_opt =reshape(best_params(1:n*n), n, n); Q_opt =(Q_opt + Q_opt')/2; R_opt =best_params(n*n+1);end% 验证性能 sys_open =ss(A, B,eye(4),0); sys_closed =ss(A - B*best_K, B,eye(4),0);% 仿真对比 t =0:0.01:10; x0 =[0.1;0;0.1;0];% 初始状态 figure;subplot(2,1,1);initial(sys_open, x0, t);title('Open-loop Response');legend('Position','Velocity','Angle','Angular Velocity');subplot(2,1,2);initial(sys_closed, x0, t);title('Closed-loop Response with GA-LQR');legend('Position','Velocity','Angle','Angular Velocity');% 性能指标对比[y_open, t_open]=initial(sys_open, x0, t);[y_closed, t_closed]=initial(sys_closed, x0, t); overshoot_open =max(y_open(:,3))-y_open(1,3); overshoot_closed =max(y_closed(:,3))-y_closed(1,3);fprintf('Open-loop overshoot: %.4f rad\n', overshoot_open);fprintf('GA-LQR closed-loop overshoot: %.4f rad\n', overshoot_closed);

算法改进策略

1. 混合优化策略

function[K_opt, params_opt]=hybrid_optimization(A, B)% 第一阶段:遗传算法粗搜索[~, params_ga,~]=ga_lqr_design(A, B,'diagonal','scalar');% 第二阶段:局部搜索精调 options =optimoptions('fmincon','Algorithm','sqp',...'Display','iter','StepTolerance',1e-6); fun =@(x)lqr_fitness_function(x, A, B,'diagonal','scalar'); params_opt =fmincon(fun, params_ga,[],[],[],[],...zeros(size(params_ga)),inf(size(params_ga)),...[], options);% 重构最优Q和R n =size(A,1); q_diag =params_opt(1:n); Q_opt =diag(q_diag); R_opt =params_opt(n+1);% 计算最优增益 K_opt =lqr(A, B, Q_opt, R_opt);end

2. 多目标优化

function multi_objective_fitness =multi_obj_fitness(params, A, B)% 重构Q和R% ... (同上)% 求解Riccati方程[K,~, eig_vals]=lqr(A, B, Q, R); stability =all(real(eig_vals)<0);% 闭环系统仿真 sys_cl =ss(A - B*K, B,eye(size(A,1)),0); t =0:0.01:10; x0 =rand(size(A,1),1);% 随机初始状态[y,~, x]=initial(sys_cl, x0, t);% 目标1:调节时间 settling_time =settling_time_calc(y(:,1), t);% 目标2:控制能耗 control_energy =sum(sum((K*x).^2))*0.01;% 目标3:鲁棒性 (H∞范数近似) robustness =norm(ss(A-B*K, B,eye(size(A,1)),0),'inf');% 多目标适应度 (归一化处理) multi_objective_fitness =[settling_time/max_time,... control_energy/max_energy,... robustness/max_robustness];if~stability multi_objective_fitness = multi_objective_fitness +10;endend

性能评估与可视化

functionplot_performance_comparison(A, B, K_ga, K_classic)% 测试不同初始条件 test_cases ={[0.1;0;0.1;0],[0.2;0;0.2;0],[0.3;0;0.3;0]}; t =0:0.01:5; figure;fori=1:length(test_cases) x0 = test_cases{i};% 经典LQR (Q=I, R=1) K_c =lqr(A, B,eye(4),1); sys_c =ss(A - B*K_c, B,eye(4),0);[y_c,~]=initial(sys_c, x0, t);% GA优化LQR sys_ga =ss(A - B*K_ga, B,eye(4),0);[y_ga,~]=initial(sys_ga, x0, t);% 绘制角度响应subplot(2,2,i);plot(t,y_c(:,3),'b--', t,y_ga(:,3),'r-','LineWidth',1.5);title(sprintf('Initial Angle: %.1f°',rad2deg(x0(3))));xlabel('Time (s)');ylabel('Pendulum Angle (rad)');legend('Classic LQR','GA-LQR','Location','best'); grid on;end% 性能指标对比 metrics ={'Settling Time','Overshoot','Control Effort'}; classic_metrics =zeros(3,length(test_cases)); ga_metrics =zeros(3,length(test_cases));fori=1:length(test_cases) x0 = test_cases{i};% Classic LQR sys_c =ss(A - B*K_c, B,eye(4),0);[y_c, t_c]=initial(sys_c, x0, t);classic_metrics(1,i)=settling_time_calc(y_c(:,3), t_c);classic_metrics(2,i)=max(y_c(:,3))/y_c(1,3)-1;classic_metrics(3,i)=sum(sum((K_c*initial(sys_c, x0, t_c)).^2))*0.01;% GA-LQR sys_ga =ss(A - B*K_ga, B,eye(4),0);[y_ga, t_ga]=initial(sys_ga, x0, t);ga_metrics(1,i)=settling_time_calc(y_ga(:,3), t_ga);ga_metrics(2,i)=max(y_ga(:,3))/y_ga(1,3)-1;ga_metrics(3,i)=sum(sum((K_ga*initial(sys_ga, x0, t)).^2))*0.01;end% 显示表格 figure;subplot(1,3,1);bar([mean(classic_metrics(1,:));mean(ga_metrics(1,:))]);set(gca,'XTickLabel',{'Classic LQR','GA-LQR'});title(metrics{1});ylabel('Time (s)');subplot(1,3,2);bar([mean(classic_metrics(2,:));mean(ga_metrics(2,:))]*100);set(gca,'XTickLabel',{'Classic LQR','GA-LQR'});title(metrics{2});ylabel('Percentage (%)');subplot(1,3,3);bar([mean(classic_metrics(3,:));mean(ga_metrics(3,:))]);set(gca,'XTickLabel',{'Classic LQR','GA-LQR'});title(metrics{3});ylabel('Energy Units');end

参考代码 基于遗传算法的LQR控制器最优设计算法 www.youwenfan.com/contentcsr/100888.html

应用场景与优势

典型应用领域

  1. 机器人控制:机械臂轨迹跟踪、平衡控制
  2. 航空航天:飞行器姿态控制、自动驾驶仪
  3. 电力系统:发电机励磁控制、HVDC输电控制
  4. 汽车工程:主动悬架系统、电子稳定控制

算法优势

特性传统LQRGA-LQR
全局最优性局部最优全局搜索
约束处理困难灵活
非线性系统不适用可扩展
参数调整经验依赖自动优化
计算复杂度较高

实际应用建议

  1. 问题简化:先尝试对角Q/R矩阵降低维度
  2. 并行计算:利用MATLAB Parallel Computing Toolbox加速评估
  3. 混合策略:结合梯度下降法进行局部搜索
  4. 实时调整:设计在线自适应机制应对参数变化

Read more

苹果最贵手机要来了!折叠屏iPhone将于9月亮相;部分高校严禁校内使用OpenClaw;黄仁勋预言:传统软件和APP或将消失 | 极客头条

苹果最贵手机要来了!折叠屏iPhone将于9月亮相;部分高校严禁校内使用OpenClaw;黄仁勋预言:传统软件和APP或将消失 | 极客头条

「极客头条」—— 技术人员的新闻圈! ZEEKLOG 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。(投稿或寻求报道:[email protected]) 整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 一分钟速览新闻点! * 多所高校要求警惕 OpenClaw 安全风险,部分严禁校内使用 * 荣耀 CEO 李健:荣耀机器人全栈自研,将聚焦消费市场 * 马化腾凌晨 2 点发声:还有一批龙虾系产品陆续赶来 * 前快手语言大模型中心负责人张富峥,已加入智源人工智能研究院,负责 LLM 方向 * 最新全球 AI 应用百强榜发布,豆包/DeepSeek/千问上榜 * 苹果折叠 iPhone 将于九月亮相,融合 iPhone 与 iPad 体验

By Ne0inhk
不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码

不止“996”!曝硅谷AI创业圈「极限工作制」:每天16小时、凌晨3点下班、周末也在写代码

编译 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) “如果你周日去旧金山的咖啡馆,会发现几乎每个人都在工作。” 这是 AI 创业公司 Mythril 联合创始人 Sanju Lokuhitige 最近最直观的感受。去年 11 月,他特地搬到旧金山,只为了更接近 AI 创业浪潮的中心。但很快,他也被卷入了这股浪潮带来的另一面——一种越来越极端的工作文化。 Lokuhitige 坦言,他现在几乎每天工作 12 小时,每周 7 天。除了每周少数几场刻意安排的社交活动(主要是为了和创业者们建立联系),其余时间几乎都在写代码、做产品。 “有时候我整整一天都在编程,”他说,“我基本没有什么工作与生活的平衡。”而这样的生活,在如今的 AI 创业圈里并不算罕见。 旧金山 AI 创业圈的真实日常 一位在旧金山一家 AI

By Ne0inhk
黄仁勋公开发文:传统软件开发模式终结,参与AI不必非得拥有计算机博士学位

黄仁勋公开发文:传统软件开发模式终结,参与AI不必非得拥有计算机博士学位

AI 究竟是什么?在 NVIDIA CEO 黄仁勋看来,它早已不只是聊天机器人或某个大模型,而是一种正在迅速成形的“新型基础设施”。 近日,黄仁勋在英伟达官网发布了一篇长文,提出一个颇具形象的比喻——AI 就像一块“五层蛋糕”。从最底层的能源,到芯片、基础设施、模型,再到最上层的应用,人工智能正在形成一整套完整的产业技术栈,并像电力和互联网一样,逐渐成为现代社会的底层能力。 这也是黄仁勋自 2016 年以来公开发表的第七篇长文。在这篇文章中,他从计算机发展史与第一性原理出发,试图解释 AI 技术栈为何会演化成如今的形态,以及为什么全球正在掀起一场规模空前的 AI 基础设施建设。 在他看来,过去几十年的软件大多是预先编写好的程序:人类设计好算法,计算机按指令执行,数据被结构化存储在数据库中,通过精确查询调用。而 AI 的出现打破了这一模式——计算机开始能够理解图像、文本和声音,并根据上下文实时生成答案、推理结果甚至新的内容。 正因为智能不再是预先写好的代码,而是实时生成的能力,支撑它运行的整个计算体系也必须被重新设计。

By Ne0inhk
猛裁1.6万人后,网站再崩6小时、一周4次重大事故!官方“紧急复盘”:跟裁员无关,也不是AI写代码的锅

猛裁1.6万人后,网站再崩6小时、一周4次重大事故!官方“紧急复盘”:跟裁员无关,也不是AI写代码的锅

整理 | 郑丽媛 出品 | ZEEKLOG(ID:ZEEKLOGnews) 过去几年里,科技公司几乎都在同一件事上加速:让 AI 参与写代码。 从自动补全、自动生成函数,到直接修改系统配置,生成式 AI 已经逐渐走进真实生产环境。但最近发生在亚马逊的一连串事故,却给整个行业泼了一盆冷水——当 AI 开始真正参与生产环境开发时,事情可能远比想象复杂。 最近,多家媒体披露,本周二亚马逊内部紧急召开了一场工程“深度复盘(deep dive)”会议,专门讨论最近频繁出现的系统故障——其中,一个被反复提及的关键词是:AI 辅助代码。 一周 4 次严重事故,亚马逊内部紧急复盘 事情的起点,是最近一段时间亚马逊系统稳定性明显下降。 负责亚马逊网站技术架构的高级副总裁 Dave Treadwell 在一封内部邮件中坦言:“各位,正如大家可能已经知道的,最近网站及相关基础设施的可用性确实不太理想。” 为此,公司决定把原本每周例行举行的技术会议

By Ne0inhk