基于遗传算法PID控制寻优实现(有代码超详细)

更新时间:2024-05-06 16:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于遗传优化算法对离散PID控制器参数的优化设计

摘要

PID控制作为一种经典的控制方法,从诞生至今,历经数十年的发展和完善,因其优越的控制性能业已成为过程控制领域最为广泛的控制方法;PID控制器具有结构简单、适应性强、不依赖于被控对象的精确模型、鲁棒性较强等优点,其控制性能直接关系到生产过程的平稳高效运行,因此对PID控制器设计和参数整定问题的研究不但具有理论价值更具有很大的实践意义,遗传算法是一种借鉴生物界自然选择和自然遗传学机理上的迭代自适应概率性搜索算法。本论文主要应用遗传算法对PID调节器参数进行优化。

关键词:遗传优化算法 PID控制器 参数优化

1. 前言

PID调节器是最早发展起来的控制策略之一,因为它所涉及的设计算法和控制结构都是简单的,并且十分适用于工程应用背景,此外PID控制方案并不要求精确的受控对象的数学模型,且采用PID控制的控制效果一般是比较令人满意的,所以在工业实际应用中,PID调节器是应用最为广泛的一种控制策略,也是历史最久、生命力最强的基本控制方式。调查结果表明: 在当今使用的控制方式中,PID型占84. 5% ,优化PID型占68%,现代控制型占有15%,手动控制型66%,人工智能(AI)型占0.6% 。如果把PID型和优化PID型二者加起来,则占90% 以上,这说明PID控制方式占绝大多数, 如果把手动控制型再与上述两种加在一起,则占97.5% , 这说明古典控制占绝大多数。就连科学技术高度发达的日本,PID控制的使用率也高达84.5%。这是由于理论分析及实际运行经验已经证明了PID调节器对于相当多的工业过程能够起到较为满足的控制效果。它结构简单、适用面广、鲁棒性强、参数易于调整、在实际中容易被理解和实现、在长期应用中己积累了丰富的经验。特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识, 但往往不能达到预期的效果, 所以不论常规调节仪表还是数

字智能仪表都广泛采用这种调节方式。正是PID控制算法具有以上多种优点, 所以这种算法仍将在现场控制中居于主导地位。

PID控制器参数整定的方法很多,概括起来有两大类:一是实验凑试法,它主要依赖调试经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。二是理论计算整定法,它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改[1]。但根据参数凑试法得出的控制器参数的控制效果并不是很理想,而手动调整控制器参数找到较优值费时又费力,因此利用一种优化算法对控制器参数进行优化是非常必要的。

本文采用遗传优化算法,在二次型性能指标下对离散PID控制器的控制参数进行优化并给出了优化结果,同时通过仿真进行研究与分析。本文的其余部分安排如下:第二部分介绍了PID控制器的基本原理;第三部分介绍了遗传优化算法;第四部分采用MATLAB编程和simulink模块对被控对象进行建模;第五部分使用遗传算法对系统进行仿真分析。最后,在第六部分对本文的研究进行了总结。

2. PID控制器

2.1. PID控制器基本原理

PID控制是基于对变量“过去”、“现在”和“未来”信息估计的交叉控制算法。控制系统框图如图2-1所示,系统主要由被控对象和PID控制器两部分组成。常规的PID一般为线性控制器,实际输出值和给定值会存在一个偏差,将偏差按比例、积分和微分通过线性组合来构成控制量,最后对被控对象进行控制,故称PID控制器。

比例积分微分+++被控对象

图2-1 PID控制器结构图

当系统是连续控制时,PID控制器的输出u(t)与输入e(t)之间会存在比例、积分、微分的关系,用下式表示出来,

u(t)?kc[e(t)?1Ti?t0e(t)dt?Tdde(t)dt] (2-1)

也可写成常见的传递函数形式:

U(s)?Kc(1?1Tis?Tds)E(s)(2-2)

式中,e(t)?r(t)?y(t),Kc是比例增益,Ti是积分时间,Td是微分时间。 在计算机控制系统中,也普遍采用PID控制思想。此时,调节器的输出与输入之间的关系为:

u(kT)?Kc{e(kT)?TTik?e(it)?i?0TdT[e(kT)?e(kT?T)]} (2-3)

其中,Kc、Ti、Td分别为比例系数、积分时间常数和微分时间常数;T为采样周期;k为采样序号,k=0,1,2,?;u(kT)为第k次采样输出值;e(kT)为第k次采样的输入偏差值;e(kT-T)为第(K-1)次采样的输入偏差值。

2.2. PID控制器参数对控制性能的影响

PID控制器各个参数对系统的动态和稳态性能起着不同的作用,这三个参数的取值优劣将直接影响PID控制系统的控制品质好坏。 2.2.1. 比例作用

比例作用就是以比例形式来反应系统的偏差信号e(t),以最快速度来产生控制作用,使偏差逐渐趋于减小。

(1)对动态特性的影响

比例控制参数Kc加大,使系统的动作灵敏,速度加快,Kc越大,振荡次数加多,调节时间也越长。当Kc太大时,系统会趋于不稳定,若Kc太小,又会使系统的动作缓慢。

(2)对稳态特性的影响

在系统稳定的情况下,比例系数Kc增大,稳态误差就会减少,以此来提高控制精度,但是加大Kc只是减少,却无法从本质上上消除稳态误差。

2.2.2. 积分作用

引入积分作用,主要是为了在稳态状态下,满足被控量对设定值的无静差跟踪,对系统的性能影响主要表现如下:

(1)对动态特性的影响

积分作用会引起系统的稳定性下降,Ti太小,系统将不稳定,Ti偏小到一定程度时,系统会出现振荡;Ti太大,对系统性能的影响力也会缩减,只有当Ti合适时,才能出现比较理想的过渡特性。

(2)对稳态特性的影响

积分作用能够降低系统稳态误差,同时也能提高系统的控制精度,不过,当Ti值太大时,积分作用将会变得非常弱,稳态误差ess也不会紧随减弱了。 2.2.3. 微分作用

微分作用常规使用会与比例作用、比例积分作用联合,构成PD控制器或者PID控制器。微分作用主要改善闭环系统的动态特性和稳定性。Td偏大时,超调量会较大,调节时间也会较长;Td偏小时,超调量也较大,相应调节时间也会较长。

3. 遗传优化算法

遗传算法是-类可用于复杂系统优化计算的鲁棒搜索算法, 与其他一些优化算法相比, 它主要有下述几个恃点:

(1)遗传算法以决策变量的编码作为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算过程中可以借鉴生物学中染色体和基因等概念, 可以模仿自然界中生物的遗传和进化等机理, 也使得我们可以方便地应用遗传操作算子。

(2) 遗传算法直接以目标函数值作为搜索信息。传统优化算法不仅需要利用目标函数值,而且往往需要目标函数的导数值等其他一些辅助信息才能确定搜索方向。而遗传算法仅使用由目标函数值变换来的适应度函数值,就可确定进一步的搜索方向和搜索范围, 无需目标函数的导数值等其他一些辅助信息。这个特性对很多目标函数是无法或很难求导数的函数, 或导数不存在的函数的优化问

题,以及组合优化问题等, 应用遗传算法时就显得比较方便, 因为它避开了函数求导这个障碍。

(3) 遗传算法同时使用多个搜索点的搜索信息。单个搜索点所提供的搜索信息毕竟不多,所以搜索效率不高,有时甚至使搜索过程陷于局部最优解而停滞不前。遗传算法从由很多个体所组成的一个初始群体开始最优解的搜索过程,而不是从一个单一的个体开始搜索,这是遗传算法所特有的一种隐含并行性。

(4) 遗传算法使用概率搜索技术。很多传统的优化算法往往使用的是确定性的搜索方法,而遗传算法属于一种自适应概率搜索技术,其选择、交叉、变异等运算都是以一种概率的方式来进行的,从而增加了其搜索过程的灵活性。当然, 交叉概率和奇异概率等参数也会影响算法的搜索效果和搜索效率,所以如何选择溃传算法的参数在其应用中是一个比较重要的问题。而另一方面,与其他一些算法相比,遗传算法的鲁棒性又会使得参数对其搜索效果的影响会尽可能地低。

3.1. SGA的基本实现技术

基于对自然界中生物遗传与进化机理的模仿,针对不同的问题, 很多学者设计了许多不同的编码方法来表示问题的可行解, 开发出了许多种不同的遗传算子来模仿不同环境下的生物遗传特性。这样,由不同的编码方法和不同的遗传算子就构成了各种不同的遗传算法。但这些遗传算法都有共同的特点,即通过对生物遗传和进化过程中选择、交叉、变异机理的模仿,来完成对问题最忧解的自适应搏索过程。基于这个共同特点,Goldberg总结出了一种统一的最基本的遗传算法——基本遗传算法(Simple Genetic Algorithms,简称SGA)。基本遗传算法只使用选择算子、交叉算子和变异算子这三种基本遗传算子,其遗传进化操作过程简单,容易理解,是其他一些遗传算法的雏形和基础,它不仅给各种遗传算法提供了一个基本框架,同时也具有一定的应用价值。

3.2. 编码方法

在遗传算法中如何描述问题的可行解, 即把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法称为编码。编码是应用遗传算法时要解决的首要问题,也是设计遗传算法时的一个关键步骤。二进制编码方法是

遗传算法中最常用的一种编码方法。假设某一个参数U的取值范围是[Umin , Umax ],用- 1 位二进制数n来表示,则它们的关系如下式(3- 1)所示:

u?Umin?n2?1l(Umax?Umin) (3-1)

上述过程为解码,它的反过程即为编码。

3.3. 适应度函数

在研究自然界中生物的遗传和进化现象时,生物学家使用适应度这个术语来度量某个物种对于其生存环境的适应程度。遗传算法中也使用适应度这个概念来度量群体中各个个体在优化计算中有可能达到或接近于或有助于找到最优解的优良程度。适应度较高的个体遗传到下一代的概率就较大:而适应度较低的个体遗传到下一代的概率就相对小一些。度量个体适应度的函数称为适应度函数( Fitness Function)。

3.4. 选择、交叉、变异算子

遗传算法使用选择算子来对群体中的个体进行优胜劣汰操作。最常用的选择算子是基本遗传算法中的比例选择算子。其基本思想是:各个个体被选中的概率与其适应度大小成E比。设群体大小为M,个体i的适应度为F,则个体i被选中的概率Pis为:

pis?FiM,i?(1,2,...,M)i(3-2)

?Fi?1交叉算子是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。交叉运算是遗传算法区别于其他进化算法的重要特征,它在遗传算法中起关键作用,是产生新个体的主要办法。最简单的交叉算子是单点交叉算子, 即在群体中随机选取两个个体, 并在个体编码串中只随机设置一个交叉点,然后在该点以一定的概率Pc相互交换两个配对个体的部分染色体。一般民的经验取值范围是0.4-0.99。变异运算是指将个体染色体编码串中某些基因座上的基因值用该基因座的其它等位基因来替换, 从而形成一个新的个体。最简单的变异算子是基本位变异算子,即对个体编码串中的每一位基因座上的基因值均以变异概率p作变异运算。一般Pm的经验取值范围是0.0001-0.10变异可使

遗传算法具有局部随机搜索功能, 又可维持群体的多样性, 避免出现初期收敛问题。

4. 被控对象及建模

已知被控对象的传递函数模型为:

G(s)?1s(10s?1) (4-1)

?20%采样周期T=1s,要求阶跃响应超调量?。

如图4-1所示,利用MATLAB/Simulink搭建系统仿真模型。

图4-1 系统仿真模型

PID控制器模块如图所示,其中PID控制器的Ki、Kd、Kp三个参数利用图4-2给定

图4-2 PID控制器模型

对于PID控制器,给定如下二次型性能指标函数:

?J??[ek?02(k)??u(k)]

2 (4-2)

其中?为常数,取值范围为0???1,搭出如图4-3所示模型。

图4-3 系统模型及二次型性能指标函数

亦可直接编写M函数对系统进行建模,程序如下:

function [Kpidi,BsJ]=pid_gaf(Kpidi,BsJ) global rinyouttimef ts=1

sys=tf(1,[10,1,0]); %被控对象函数 dsys=c2d(sys,ts,'z'); %零阶保持器法离散化 [num,den]=tfdata(dsys,'v');%提取被控对象参数

rin=1.0; %赋初值 u_1=0.0;u_2=0.0; y_1=0.0;y_2=0.0; x=[0,0,0]'; B=0; error_1=0; tu=1; s=0; P=100;

for k=1:1:P timef(k)=k*ts; r(k)=rin;

u(k)=Kpidi(1)*x(1)+Kpidi(2)*x(2)+Kpidi(3)*x(3); %控制器输出 if u(k)>=10

u(k)=10; end if u(k)<=-10 u(k)=-10; end

yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2; %输出 error(k)=r(k)-yout(k); %误差 %------------ 返回PID参数 ------------- u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k);

x(1)=error(k); % 计算 P x(2)=(error(k)-error_1)/ts; % 计算 D x(3)=x(3)+error(k)*ts; % 计算 I

error_2=error_1; error_1=error(k); if s==0

if yout(k)>0.95&yout(k)<1.05 tu=timef(k); s=1; end end end

for i=1:1:P

Ji(i)=error(i)^2 +rol*u(i)^2; %二次型性能指标函数 B=B+Ji(i); %叠加 end BsJ=B;

5. 算法实现与仿真分析

5.1. 遗传算法流程及程序

第一步,随机产生初始种群,个体数目一定,每个个体表示为染色体的基因编码;第二步,计算个体的适应度,并判断是否符合优化准则,若符合,输出最佳个体及其代表的最优解,并结束计算,否则转向第三步;第三步,依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体可能被淘汰;第四步,按照一定的交叉概率和交叉方法,生成新的个体;第五步,按照一定的

变异概率和变异方法,生成新的个体;第六步,由交叉和变异产生新一代的种群,返回到第二步。遗传算法的一般流程如图5-1 所示。

开始随机产生初始群体计算个体适应度满足条件N复制交叉变异计算出最优个体结束Y

图5-1基本遗传算法的算法流程

遗传算法中的优化准则, 一般依据问题的不同有不同的确定方式。例如,可以采用以下的准则之一作为判断条件:

①种群中个体的最大适应度超过预先设定值; ②种群中个体的平均适应度超过预先设定值; ③世代数超过预先设定值。

5.2. 遗传算法仿真程序

%用于优化PID参数的遗传算法 clear all; close all;

global rinyouttimef Size=30; CodeL=3;

MinX(1)=zeros(1); MaxX(1)=20*ones(1); MinX(2)=zeros(1); MaxX(2)=1.0*ones(1); MinX(3)=zeros(1); MaxX(3)=1.0*ones(1);

%产生初始种群

Kpid(:,1)=MinX(1)+(MaxX(1)-MinX(1))*rand(Size,1); Kpid(:,2)=MinX(2)+(MaxX(2)-MinX(2))*rand(Size,1);

Kpid(:,3)=MinX(3)+(MaxX(3)-MinX(3))*rand(Size,1); G=1000; BsJ=0;

%*************** 开始运行 *************** for kg=1:1:G time(kg)=kg;

%****** 步骤 1 : 产生 BestJ ****** for i=1:1:Size

Kpidi=Kpid(i,:); %代入PID参数

[Kpidi,BsJ]=chap5_3f(Kpidi,BsJ);%调用系统模型函数

BsJi(i)=BsJ; %取出最优值 end

[OderJi,IndexJi]=sort(BsJi); BestJ(kg)=OderJi(1); BJ=BestJ(kg);

Ji=BsJi+1e-10; %避免除0运算

fi=1./Ji;

[Oderfi,Indexfi]=sort(fi); %从小到大排列fi Bestfi=Oderfi(Size); %令 Bestfi=max(fi)

BestS=Kpid(Indexfi(Size),:); %令 BestS=E(m), m 是 max(fi) 的索引

kg BJ BestS

%****** 步骤 2 : 选择与新种群产生 ****** fi_sum=sum(fi);

fi_Size=(Oderfi/fi_sum)*Size;

fi_S=floor(fi_Size); % 向下取整运算 r=Size-sum(fi_S);

Rest=fi_Size-fi_S;

[RestValue,Index]=sort(Rest);

for i=Size:-1:Size-r+1

fi_S(Index(i))=fi_S(Index(i))+1; % 使得种群大小保持不变 end

k=1;

for i=Size:-1:1 for j=1:1:fi_S(i)

TempE(k,:)=Kpid(Indexfi(i),:); % 选择与生成新个体

k=k+1; % k 用来生成新个体 end end

%************ 步骤 3 : 交叉运算 ************ Pc=0.90; for i=1:2:(Size-1) temp=rand;

if Pc>temp %交叉条件 alfa=rand;

TempE(i,:)=alfa*Kpid(i+1,:)+(1-alfa)*Kpid(i,:); TempE(i+1,:)=alfa*Kpid(i,:)+(1-alfa)*Kpid(i+1,:); end end

TempE(Size,:)=BestS; Kpid=TempE;

%************ 步骤 4: 变异运算 **************

Pm=0.10-[1:1:Size]*(0.01)/Size; %具有更大 fi的个体具有更小的 Pm Pm_rand=rand(Size,CodeL); Mean=(MaxX + MinX)/2; Dif=(MaxX-MinX);

for i=1:1:Size for j=1:1:CodeL

if Pm(i)>Pm_rand(i,j) %变异条件 TempE(i,j)=Mean(j)+Dif(j)*(rand-0.5); end end end

%保证 TempE(Size,:) 为最优个体 TempE(Size,:)=BestS; Kpid=TempE; end Bestfi BestS

Best_J=BestJ(G) figure(1); plot(time,BestJ);

xlabel('Times');ylabel('Best J'); figure(2);

plot(timef,rin,'r',timef,yout,'b'); xlabel('Time(s)');ylabel('rin,yout');

5.3. 仿真优化及分析

由式(4-2)可知,二次型性能指标的常数?的取值范围为0?首先取??1,

??1。

设置控制系统M函数模型的运行时间为100秒。给定阶跃信号,采用实数编码方式,经过100代进化,获得的优化PID整定结果为Kp=0.2756,Ki=0,Kd=0.9210,性能指标J=5.1323。得到系统动态响应曲线,如图5-2所示。

1.41.210.8Out(t)0.60.40.2001020304050Time(s)60708090100

图5-2 系统响应曲线

由图5-2可测得,系统调节时间T=34s,超调量为12.5%,最终达到稳定,无静态误差,得到较好的动静态响应特性。图5-3表示控制器输出波形,如图,控制器输出峰值为1.17,并且35秒后趋于稳定。

1.210.80.6U(t)0.40.20-0.201020304050Time(t)60708090100

图5-3 控制器输出波形

图5-4为遗传算法随进化代数增加,性能指标J的变化过程,在100代前后得到最优参数。

3x 1042.52Best J1.510.500100200300400500Times6007008009001000

图5-4 遗传算法优化过程

二次型性能指标系数是否对对优化结果产生影响,可通过改变?值并进行寻优来研究。?值分别为0.25,0.5,0.75,1时的响应曲线比较图如图5-4所示。

1.4ρ=1ρ=0.75ρ=0.5ρ=0.25 1.210.8Out0.60.40.20 0102030Time(s)405060

图5-5 不同参数值下的响应曲线比较

当?值增加时超调量上升,调节时间增加。

6. 总结

本文在二次型性能指标的要求下,通过研究遗传算法,对控制对象进行PID参数整定,对PID系数进行了优化。利用优化结果进行了系统仿真,分析了控制器输出响应与系统动态响应。并对在不同?值下的的系统响应进行了对比分析,得出结论。可以得出,利用遗传算法可以较好的优化PID控制器参数,使系统得到较好的动静态响应。

参考文献

1.关守平,周玮等. 计算机控制系统[M]. 北京:科学出版社,2009.

2.薛定宇,陈泉阳. 高等应用数学问题的MATLAB求解[M].北京:清华大学出版社,2008.

3.薛定宇.控制系统计算机辅助设计[M].北京:清华大学出版社,2006. 4.周明,孙树栋.遗传算法原理及应用[M].北京:国防工业出版社,1999. 5.刘金琨.先进PID控制MATLAB仿真[M].北京:电子工业出版社,2004. 6.苏小林,阎晓霞.基于遗传算法的PID参数优化技术电力系统及其自动化学 报,1997, 9(2):20----26.

7.刘国贤,林宪枢,杨奇逊.基于遗传算法的控制器参数寻优[J],现代电力,1997,14(3):18----22

8.杨智,高靖,基于遗传算法的预测自整定PID控制器[J].控制与决策,2000,15(1):113----115,118

本文来源:https://www.bwwdw.com/article/ujtg.html

Top