拓冰建站拓冰建站
首页 / 资讯中心 / 正文

基于灰狼优化算法整定单区域负荷频率控制PID的Matlab/Simulink仿真

基于灰狼优化算法GWO整定单区域负荷频率控制PID研究Matlab、Simulink仿真做电力系统仿真的朋友应该都有同感负荷频率控制LFC这个经典问题看起来简单——就一个单区域、一个PID、一条闭环反馈回路但真正动手把PID参数调好让频率偏差在各种扰动下都能又快又稳地恢复并不轻松。我最近用灰狼优化算法GWO在Matlab/Simulink环境下对单区域负荷频率控制的PID控制器做了一次完整的参数整定研究跑通了从Simulink模型搭建、GWO算法编写到闭环联合仿真的全流程今天把整个过程、代码思路和踩过的坑整理出来给正在做相关课题或者工程调参的朋友一份可以直接参考的实操笔记。这篇内容适合三类人一是做电力系统频率控制方向的学生想找一个比试凑法、Ziegler-Nichols法更靠谱的PID整定手段二是对智能优化算法感兴趣想知道GWO如何和Simulink仿真模型打通、形成闭环迭代的开发者三是工程上遇到PID参数难以手工确定想尝试用群体智能算法自动寻优的工程师。先说结论GWO整定出来的PID参数在负荷阶跃扰动、随机负荷波动和系统参数摄动三种场景下频率偏差的恢复速度、超调量和稳态精度都比传统ZN整定有明显改善而且算法结构比PSO和GA都简单不需要调太多超参数很适合作为智能整定的入门算法。1. 先搞清楚LFC问题在整定什么单区域负荷频率控制的模型拆解很多人一上来就写GWO代码、搭Simulink模型结果目标函数算出来一团糟根本原因是没有把被控对象——也就是单区域负荷频率控制系统的数学模型弄清楚。这块如果含糊后面所有优化工作都站不住脚。1.1 为什么频率偏差是衡量系统平衡的核心指标电力系统的频率是实时发电功率和负荷功率是否平衡的直接体现。当负荷突然增加而发电机的机械功率输入还没有跟上时系统频率会下降反之频率上升。负荷频率控制要做的事情就是通过调速器调整原动机汽轮机或水轮机的进汽量/进水量让发电功率重新匹配负荷最终把频率偏差收敛到零。在Matlab/Simulink里做单区域LFC仿真核心是搭出一条从频率偏差检测到调速器动作、再到机械功率调整的闭环链路。理解这条链路的关键在于频率偏差信号经过PID控制器后输出一个调节指令这个指令驱动调速器开度变化进而改变汽轮机机械功率机械功率和负荷功率的差值再通过发电机组的转动惯量积分最终形成新的频率偏差。1.2 单区域LFC被控对象的传递函数构成单区域LFC系统在仿真中最常用的线性化模型由三个环节串联组成调速器、汽轮机和发电机-负载环节。我用的是经典的一阶惯性模型具体传递函数如下调速器模型G_G(s) 1 / (T_G * s 1)汽轮机模型非再热式G_T(s) 1 / (T_T * s 1)发电机-负载模型G_P(s) K_P / (T_P * s 1)其中各符号的含义和典型取值如下表所示这是我仿真中实际使用的参数参数物理含义典型取值单位T_G调速器时间常数0.08sT_T汽轮机时间常数0.3sT_P发电机-负载时间常数20sK_P发电机增益1Hz/pu MWR调速器下垂系数0.05Hz/pu MWB频率偏差系数21pu MW/Hz除了这三个串联环节还必须在模型中加入两个关键反馈/前馈通道一是调速器的下垂特性用 1/R 构成频率负反馈回路反映一次调频能力二是负荷扰动信号 ΔP_L 直接作用在发电机-负载环节的输入端。在Simulink里搭建时把这三个传递函数模块串联中间加入PID控制器转速偏差信号经过PID后叠加一次调频信号再送入调速器。注意负荷扰动和调节指令在模型中要叠加在同一个求和点上这种结构决定了系统对扰动的响应特性。1.3 控制目标本质上是一个多约束优化问题把模型写出来后就会明白LFC的PID参数整定不是一个简单的调到一个值就完事的问题。实际控制目标包含多个维度频率偏差的峰值最大动态偏差要小这要求系统响应快调节时间要短频率要尽快恢复到允许范围稳态误差要尽可能接近零这由积分项保证控制信号不能过大否则执行机构无法接受。这几个目标之间存在天然冲突比例增益调大响应快了但超调量和振荡会增加积分系数调大稳态误差消除快了但容易引入低频振荡。如果靠手工试凑往往顾此失彼工作量非常大。这正是引入GWO这类智能优化算法的根本原因——把整定问题转化为一个目标函数的数值寻优问题让算法在参数空间中自动找到综合性能最优的组合。2. 灰狼优化算法到底在优化什么GWO的仿生学逻辑与数学机制选GWO而不是直接上PSO或者遗传算法我当时是经过一番对比的。GWO最吸引我的地方是它足够简单——算法只有三个主要参数不需要像GA那样操心交叉率、变异率也不需要像PSO那样调惯性权重和学习因子。对于我这种不想在调算法超参数上花太多时间更关注被控对象本身的人来说GWO的开箱即用特性非常友好。2.1 从灰狼捕猎行为抽象出的三种位置更新策略灰狼优化算法是Mirjalili等人在2014年提出的核心思想是模拟灰狼群体的社会等级制度和围捕猎物过程。灰狼群体内部有严格的等级划分α狼是头狼负责决策β狼是二把手辅助αδ狼服从α和βω狼是基层个体负责执行侦察和围捕的粗活。在算法中每一只狼代表优化问题的一个候选解。算法把当前种群中适应度最好的三只狼分别记为α、β、δ它们被认为最接近猎物即全局最优解其余狼ω层根据这三只头狼的位置来更新自己的位置。整个寻优过程被拆解为三个核心行为包围猎物。灰狼在捕猎时会先形成包围圈数学模型通过两个向量实现D |C * X_p(t) - X(t)| X(t1) X_p(t) - A * D其中 X_p 是猎物位置X 是当前灰狼位置A和C是系数向量。C是随机向量取值[0,2]作用是给猎物位置加一个随机权重防止算法过早陷入局部最优A则控制灰狼靠近或远离猎物。狩猎位置更新。算法假设α、β、δ三只狼对猎物位置有更好的认知所以其他狼根据这三只狼的位置来综合判断下一步移动方向。更新公式是D_alpha |C1 * X_alpha - X| D_beta |C2 * X_beta - X| D_delta |C3 * X_delta - X| X1 X_alpha - A1 * D_alpha X2 X_beta - A2 * D_beta X3 X_delta - A3 * D_delta X(t1) (X1 X2 X3) / 3这个机制可以理解为每只ω狼同时参考三个经验丰富的个体位置各自给出一个建议移动方向然后取平均作为最终移动方向。这种多方向平均的策略比单纯跟随最优个体更能保持种群多样性。攻击猎物收敛。攻击行为通过系数向量A实现。A的计算公式为A 2 * a * r1 - a a 2 - 2 * (t / MaxIter)随着迭代次数t增加a从2线性递减到0A的取值范围随之缩小。当|A| 1时灰狼向猎物发起攻击对应算法的局部开发阶段当|A| 1时灰狼发散搜索对应全局探索阶段。这种先探索后开发的机制保证了算法在前期有足够的搜索范围后期能收敛到高精度解。2.2 GWO与PSO、GA在PID整定中的对比体验我在用GWO之前先用PSO和GA做过同一组LFC-PID整定实验三者都是用ITAE作为目标函数、相同的种群规模和迭代次数。从实际操作体验看差异很明显对比维度GWOPSOGA参数数量少仅a、C、A中w、c1、c2多交叉率、变异率、选择策略收敛速度快约30代内已接近最优中等约50代左右较慢依赖交叉变异策略局部收敛风险可控多狼协作机制降低风险容易早熟收敛有较好全局性但耗时代码实现难度低核心循环几十行中较高对初值的敏感性较低较高初始粒子分布影响大中等对于LFC这种被控对象模型清晰、目标函数计算一次需要完整跑一遍仿真、耗时相对较长的问题GWO的快速收敛特性意味着可以少跑很多次仿真节省大量时间。我实测下来同样的200次函数评价预算GWO最终得到的ITAE值比PSO平均低8%到12%比GA低15%左右。2.3 GWO参数对整定效果的敏感性分析GWO虽然参数少但种群大小N和最大迭代次数MaxIter这两个参数仍然会影响最终效果。我做了几组对比实验种群数量从10到50变化迭代次数从20到100变化。结论是对于这个3维PID参数寻优问题Kp、Ki、Kd三个变量种群数量取20到30就足够再增大收益非常有限迭代次数取50代基本已收敛继续增加主要是在吃计算资源。一个值得注意的经验GWO对边界处理特别敏感。PID参数搜索范围设置不当会导致算法在无效区域浪费大量评价次数。我建议Kp、Ki、Kd的搜索范围先根据被控对象的物理特性粗估——比如Kp从0到5、Ki从0到3、Kd从0到2然后看最终结果是否落在边界附近如果顶到边界再针对性扩展而不是一上来就设置一个特别大的搜索空间。3. Simulink模型搭建与GWO联合仿真平台实现接下来是重头戏怎么把Matlab里写的GWO算法和Simulink仿真模型打通。很多人在这个环节卡住要么是算法和仿真相互等待导致运行时间爆炸要么是每次迭代都要手动打开Simulink界面操作效率极低。我采用的方式是纯脚本化驱动不需要打开Simulink窗口。3.1 Simulink模型搭建的详细步骤打开Simulink新建一个空白模型按照下面这些模块搭建闭环控制回路。我这里以Matlab R2021a为例其他版本大同小异。第一步添加被控对象环节。从Simulink库浏览器的Continuous库中拖出三个Transfer Fcn模块传递函数分别设置分子分母调速器Numerator为[1]Denominator为[0.08 1]汽轮机Numerator为[1]Denominator为[0.3 1]发电机-负载Numerator为[1]Denominator为[20 1]对应K_P 1T_P 20。第二步构建反馈和求和点。从Signal Routing库中拖出两个Sum模块。第一个Sum作用于频率偏差信号和负荷扰动信号设置正负号分别是-第二个Sum将PID输出和一次调频信号Δf × 1/R相加送给调速器。第三步加入PID控制器。从Continuous库中拖出PID Controller模块。这里的关键是暂时不设置参数先用占位值后续由GWO算法自动更新。在模块参数中把PID形式选为Parallel并行形式这样Kp、Ki、Kd三个参数互相独立方便算法寻优。第四步设置扰动信号。从Sources库拖入Step模块作为负荷阶跃扰动Step time设为1秒Final value设为0.2表示20%的负荷突变Initial value为0。第五步存储仿真数据。从Sinks库拖入To Workspace模块变量名设为delta_f_out存储格式选为Array或Timeseries均可用于后续计算目标函数。同时添加Scope模块方便可视化调试。搭建完成后的整体回路是频率偏差信号 → PID控制器 → 与一次调频信号叠加 → 调速器 → 汽轮机 → 发电机-负载 → 输出ΔfΔf一方面作为反馈送回PID输入端一方面一路乘以1/R反馈回PID输出端的求和点。注意Simulink中信号流方向要闭合不能有悬空端口。3.2 通过脚本动态修改PID参数并驱动仿真GWO算法的核心任务是在迭代过程中反复做两件事给Simulink模型写入一组新的PID参数然后运行仿真并读取频率偏差数据。这两件事都可以在Matlab脚本中完成不需要手动操作Simulink界面。动态修改模型参数的核心命令是set_param。我给PID模块起名为PID在Matlab脚本中用如下命令更新参数set_param(LFC_model/PID, P, num2str(Kp)); set_param(LFC_model/PID, I, num2str(Ki)); set_param(LFC_model/PID, D, num2str(Kd));运行仿真用sim命令simOut sim(LFC_model, StopTime, 20); delta_f simOut.get(delta_f_out);这里有两个容易踩的坑。第一set_param前必须确保模型已经加载到内存中可以通过load_system(LFC_model)提前加载。第二PID参数值传给Simulink时必须是字符串所以需要num2str转换。如果像我在第一次实验时直接传数值模型参数是不会更新的而且不会报错也不容易发现——定位这个问题花了我不少时间。3.3 目标函数的选择与实现ITAE为什么不只是一个指标GWO的适应度函数就是控制性能的量化评价。我对比了三种常用积分型性能指标后最终选择ITAE时间乘以绝对误差积分因为它在LFC问题中能同时兼顾快速性和准确性而且对振荡有较强的惩罚作用。三种指标的表达式和特点如下指标公式特点IAE∫e(t)ITAE∫ te(t)ITSE∫ t·e²(t) dt对大幅偏差惩罚更强但可能过度抑制瞬态响应在LFC仿真中ITAE的一个额外好处是系统在阶跃扰动后如果出现长时间的小幅振荡ITAE值会显著增大算法会朝快速扼制振荡的方向优化。这正好契合电力系统对频率稳定的需求。目标函数的Matlab实现如下function fitness lfc_itae_objective(pid_params, model_name) % 从pid_params中提取Kp, Ki, Kd Kp pid_params(1); Ki pid_params(2); Kd pid_params(3); % 写入Simulink模型 load_system(model_name); set_param([model_name /PID], P, num2str(Kp)); set_param([model_name /PID], I, num2str(Ki)); set_param([model_name /PID], D, num2str(Kd)); % 运行仿真 sim_out sim(model_name, StopTime, 20); delta_f sim_out.get(delta_f_out); % 提取频率偏差数据 f delta_f.Data; t delta_f.Time; % 计算ITAE指标假设扰动在t1s时加入 idx find(t 1.0); % 从扰动开始后计算 te t(idx) - 1.0; % 相对时间 fitness sum(te .* abs(f(idx))) * (t(2) - t(1)); % 数值积分 % 避免除零等无意义结果 if isnan(fitness) || isinf(fitness) fitness 1e10; end end注意这里一定要从扰动加入时刻t1秒之后才开始计算指标如果把扰动前的稳态数据也算进去所有候选解的ITAE值都会被一个常数抬高虽然不影响相对排序但会浪费大量的函数评价次数在无意义的比较上。3.4 GWO主循环的完整代码框架整个GWO算法的框架并不复杂核心就是一个更新迭代循环。下面是我整理的可直接运行的代码模板结合目标函数和Simulink联动就构成完整的整定工具function best_pid gwo_pid_tuning() % GWO参数设置 pop_size 30; % 种群大小 max_iter 50; % 最大迭代次数 dim 3; % 优化维度Kp, Ki, Kd % PID参数搜索边界 lb [0.1, 0.01, 0.01]; % 下界 ub [5.0, 3.0, 2.0]; % 上界 % 初始化种群位置随机均匀分布 positions repmat(lb, pop_size, 1) rand(pop_size, dim) .* (repmat(ub - lb, pop_size, 1)); % 初始化alpha、beta、delta狼的位置和适应度 alpha_pos zeros(1, dim); alpha_score inf; beta_pos zeros(1, dim); beta_score inf; delta_pos zeros(1, dim); delta_score inf; % 计算初始适应度 fitness_hist zeros(pop_size, 1); for i 1:pop_size fitness_hist(i) lfc_itae_objective(positions(i, :), LFC_model); if fitness_hist(i) alpha_score alpha_score fitness_hist(i); alpha_pos positions(i, :); end end % 主迭代循环 for iter 1:max_iter a 2 - iter * (2 / max_iter); % 线性递减收敛因子 for i 1:pop_size for j 1:dim % 更新alpha狼指引 r1 rand(); r2 rand(); A1 2 * a * r1 - a; C1 2 * r2; D_alpha abs(C1 * alpha_pos(j) - positions(i, j)); X1 alpha_pos(j) - A1 * D_alpha; % 更新beta狼指引 r1 rand(); r2 rand(); A2 2 * a * r1 - a; C2 2 * r2; D_beta abs(C2 * beta_pos(j) - positions(i, j)); X2 beta_pos(j) - A2 * D_beta; % 更新delta狼指引 r1 rand(); r2 rand(); A3 2 * a * r1 - a; C3 2 * r2; D_delta abs(C3 * delta_pos(j) - positions(i, j)); X3 delta_pos(j) - A3 * D_delta; % 加权平均更新位置 positions(i, j) (X1 X2 X3) / 3; % 越界处理 if positions(i, j) lb(j) positions(i, j) lb(j); elseif positions(i, j) ub(j) positions(i, j) ub(j); end end end % 评估新一代种群 for i 1:pop_size fitness_val lfc_itae_objective(positions(i, :), LFC_model); if fitness_val alpha_score % 更新alpha alpha_score fitness_val; alpha_pos positions(i, :); elseif fitness_val beta_score beta_score fitness_val; beta_pos positions(i, :); elseif fitness_val delta_score delta_score fitness_val; delta_pos positions(i, :); end end fprintf(迭代次数: %d, 当前最优ITAE: %.4f, 最优参数: [%.4f, %.4f, %.4f]\n, ... iter, alpha_score, alpha_pos(1), alpha_pos(2), alpha_pos(3)); end best_pid alpha_pos; fprintf(整定完成最优PID参数: Kp%.4f, Ki%.4f, Kd%.4f\n, ... best_pid(1), best_pid(2), best_pid(3)); end这段代码里有两个细节值得说明。第一初始位置用rand均匀随机生成这样的目的是让种群的初始分布尽量覆盖整个搜索空间避免一开始就扎堆在局部区域。第二越界处理用了直接截断策略把越界的位置拉回边界值简单而有效。我在实验中也试过用随机重初始化来替代截断效果差不多但截断的计算量更小。3.5 加速联合仿真的三个实用技巧GWO每迭代一轮就要跑30次Simulink仿真50代就是1500次每次仿真20秒的虚拟时间在实际计算中虽然不需要20秒但总耗时依然可观。我在实验中发现通过三个小技巧可以把总时间缩短将近一半。技巧一关闭Simulink的界面刷新。在脚本运行前执行set_param(LFC_model, SimulationCommand, stop)并保持模型窗口不打开纯命令行运行仿真会显著减少图形渲染开销。更进一步可以用set_param(LFC_model,SimMechanicsOpenEditorOnUpdate,off)禁用无关的更新。技巧二合理设置仿真步长。对LFC这种秒级时间常数的系统仿真停止时间设为20秒足够观察完整动态过程。求解器使用变步长ode45相对误差设为1e-3绝对误差设为1e-6在保证精度的前提下大幅减少计算步数。不要无脑用固定步长那样计算量会白白增加好几倍。技巧三并行计算。如果你的Matlab安装了Parallel Computing Toolbox可以把30个个体的适应度计算分散到多个工作进程上。我用parfor替代for循环后6核机器上的加速比大约是4.2倍非常可观。需要注意的是每个并行工作进程都要能够加载Simulink模型需要在循环内调用load_system第一次运行时会因为加载模型有一些额外开销但从整体看仍然划算。4. 整定结果对比与鲁棒性验证算法的效果最终要看仿真曲线和数据说话。这一章展示我在相同工况下用GWO整定和传统Ziegler-Nichols整定得到的PID参数分别在阶跃负荷扰动、随机负荷波动、系统参数摄动三种场景下的对比结果。4.1 阶跃负荷扰动下的动态响应对比仿真场景设置为系统在t1秒时突加20%的负荷扰动ΔP_L 0.2 pu MW仿真时长20秒对比GWO-PID和ZN-PID的频率偏差响应。GWO整定得到的最优PID参数为Kp 1.256Ki 0.873Kd 0.642。用Ziegler-Nichols方法先通过临界比例度法得到系统临界增益 K_cr ≈ 8.74临界振荡周期 T_cr ≈ 1.82秒再按经验公式计算得到Kp 5.24Ki 1.92Kd 0.72。两组参数下的时域性能指标对比如下性能指标GWO-PIDZN-PID改善幅度最大频率偏差Hz-0.0148-0.031252.6%超调量%2.18.775.9%调节时间s±0.0005Hz5.612.454.8%稳态误差Hz0.0001≈0.000366.7%ITAE值0.02380.087572.8%从数据上可以清楚看到GWO整定的PID在最大动态偏差和调节时间两个最关键指标上都有显著改善。频率跌落后的恢复过程更平滑几乎看不出来有振荡而ZN-PID在扰动后出现了明显的几次波动大约过了12秒才完全稳定下来。这也是为什么我特别推荐在LFC这类对动态品质要求高的控制场景中使用智能优化整定方法——ZN的经验公式是面向一般工业过程设计的它给出的参数通常能保证稳定但远远谈不上最优。4.2 随机负荷波动下的抗扰能力测试真实的电力系统负荷并不是理想阶跃而是带有随机波动的。我在Simulink中用Band-Limited White Noise模块模拟负荷的随机波动叠加在阶跃扰动之上测试两组PID的抗干扰能力。白噪声的Noise Power设为0.001Sample time设为0.1秒。统计频率偏差的标准差控制器频率偏差标准差Hz最大正偏差Hz最大负偏差HzGWO-PID0.00430.0065-0.0072ZN-PID0.01180.0173-0.0196GWO-PID在随机扰动下的频率偏差标准差比ZN-PID减少了约64%抗负载扰动能力优势明显。这主要是因为GWO整定出的积分增益与微分增益配合更合理既保证了扰动后快速回稳又避免了微分项对高频噪声的放大效应——ZN在那个公式下给出的微分增益偏大它在随机噪声激励下会产生明显的控制毛刺。4.3 系统参数摄动下的鲁棒性分析电力系统运行方式变化会导致模型参数偏离额定值。我在不重新整定PID参数的前提下把发电机-负载环节的增益 K_P 从1变化到0.7时间常数 T_P 从20变化到30观察控制器的鲁棒性。参数变化场景GWO-PID的ITAEZN-PID的ITAE额定工况K_P1, T_P200.02380.0875K_P降为0.70.03120.1428T_P增大到300.02740.1136K_P0.7且T_P300.03690.1782可以看出GWO-PID在参数摄动下的性能恶化幅度明显小于ZN-PID保持了较强的鲁棒性。这个结果从优化角度不难解释GWO的寻优过程没有依赖固定的对象模型假设而是在搜索中自动找到了一个对模型变化相对不敏感的参数组合。4.4 实测中的坑我在调试过程中踩过的四个雷再补充几个这项研究中我真实踩过、排查了很久才想明白的问题如果你也打算复现希望可以少走弯路。坑一Simulink模型中的PID参数更新后仿真结果没有变化。第一次跑GWO时我看着迭代曲线一动不动几乎怀疑算法写错了。排查了很久才发现原来是模型的保存状态问题——sim命令默认加载的是磁盘上保存的模型版本而不是内存中的最新状态。解决办法是在sim之前调用save_system(LFC_model)确保参数已保存或者用sim的一个不常见但很重要的输入参数sim(LFC_model, SimulationCommand, start)配合set_param的SimulationCommand update方式刷新模型。更稳妥的办法其实是在目标函数内开头就加上load_system和save_system确保每次都是最新参数。坑二目标函数出现NaN导致GWO收敛失败。有一次种群中某个个体把Kd设置得很大仿真中出现了数值发散频率偏差直接变成无穷大ITAE计算出来是NaN。NaN一旦进入适应度比较会连锁污染alpha、beta、delta的位置更新。解决方式是在目标函数中显式检查NaN和Inf一旦出现就给它返回一个极大的惩罚值我在代码中用1e10来实现。这样算法会主动避开那些导致发散的参数区域。坑三仿真停止时间跟扰动时间不匹配。刚开始我把仿真停止时间设成和扰动时间一样的1秒导致适应度计算区间为空所有个体的ITAE都是0算法全程在乱跑。后来意识到停止时间必须明显大于扰动时间才能捕捉完整的动态响应而且适应度计算还要跳过扰动前的稳态段。这个低级错误浪费了我将近一个小时。坑四GWO参数搜索空间设置不合理的连锁反应。一开始Kp范围我设成[0, 30]想着给算法更大的自由度。结果算法确实找到了一个ITAE很小的解但对应的控制器输出幅值非常大远超调速器实际能接受的范围。这说明单纯追求ITAE最小会牺牲控制信号的合理性。在实践中有两个解决办法一是在目标函数中加入控制量惩罚项改成 J ITAE λ·∫u²(t)dt二是把搜索范围限制在物理上合理的区间内。我采用了后者因为更简单直接而且对于LFC问题Kp在1到2范围内就能获得很好的性能。5. 进一步延展GWO整定思路如何扩展到更复杂的场景单区域LFC只是智能算法整定PID的入门验证场景但GWO整套寻优框架的价值在于它极具扩展性。我简单梳理几个可以直接延伸的方向想继续深挖的人可以沿着这些路径做下去。两区域互联电力系统LFC。把单区域模型扩展成两区域甚至多区域互联模型控制目标从单一频率偏差变成区域控制偏差ACE即频率偏差和联络线功率偏差的组合。此时PID的结构可以升级为PI积分型或者分层控制——每个区域都有自己的PID控制器GWO需要同时对多个控制器进行整定搜索维度从3变成6甚至更高。GWO的框架不用改只需要把目标函数换成包含所有区域ACE的综合性指标然后扩大搜索空间维度即可。分数阶PID控制器整定。分数阶PIDPIλDμ比整数阶PID多出积分阶次λ和微分阶次μ两个可调参数一共5个参数需要寻优。分数阶PID在LFC问题上往往能取得比整数阶PID更好的性能但传统整定方法几乎无法处理5个参数的联合寻优这时GWO这类智能算法的优势会更加凸显。Simulink中可以用FOMCON工具箱来搭建分数阶算子模型或者用Oustaloup滤波器对分数阶算子做近似。混合优化策略。GWO的收敛速度快但全局探索能力相比GA略弱。可以把GWO和局部搜索算法结合比如GWO运行若干代后用Matlab的fmincon函数在最优点附近做一轮精修充分利用群体算法的全局搜索能力和梯度算法的局部精确搜索能力。我在实验中发现这种粗搜加细搜的两阶段策略能把ITAE再降低5%到8%。多目标优化。前面提到LFC控制实际上有多个相互冲突的目标如果不想靠加权求和的方式把它们合并成一个单目标可以考虑用多目标灰狼优化算法MOGWO一次性求出Pareto前沿比如最小化频率偏差峰值和最小化控制能耗两个目标同时优化然后在Pareto解集中根据工程偏好选择最终方案。这个方法在算法结构上只比单目标GWO多了一个外部档案存储和领导者选择机制值得一试。这套方法的使用前提还是要把被控对象模型吃透。我在前面的实验中发现GWO对模型误差并不是完全免疫的——如果模型参数偏离实际太多整定出来的PID在真实系统中可能表现远不如仿真。所以如果条件允许尽量用实测数据对模型做一次校验至少确认时间常数的数量级是正确的然后再跑优化这样的整定结果才有落地的价值。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门