基于遗传算法PID控制寻优实现有代码超详细Word文件下载.docx
《基于遗传算法PID控制寻优实现有代码超详细Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于遗传算法PID控制寻优实现有代码超详细Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
(2-1)
也可写成常见的传递函数形式:
(2-2)
式中,
,
是比例增益,
是积分时间,
是微分时间。
在计算机控制系统中,也普遍采用PID控制思想。
此时,调节器的输出与输入之间的关系为:
(2-3)
其中,
、
分别为比例系数、积分时间常数和微分时间常数;
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.积分作用
引入积分作用,主要是为了在稳态状态下,满足被控量对设定值的无静差跟踪,对系统的性能影响主要表现如下:
积分作用会引起系统的稳定性下降,Ti太小,系统将不稳定,Ti偏小到一定程度时,系统会出现振荡;
Ti太大,对系统性能的影响力也会缩减,只有当Ti合适时,才能出现比较理想的过渡特性。
积分作用能够降低系统稳态误差,同时也能提高系统的控制精度,不过,当Ti值太大时,积分作用将会变得非常弱,稳态误差ess也不会紧随减弱了。
2.2.3.微分作用
微分作用常规使用会与比例作用、比例积分作用联合,构成PD控制器或者PID控制器。
微分作用主要改善闭环系统的动态特性和稳定性。
Td偏大时,超调量会较大,调节时间也会较长;
Td偏小时,超调量也较大,相应调节时间也会较长。
3.遗传优化算法
遗传算法是-类可用于复杂系统优化计算的鲁棒搜索算法,与其他一些优化算法相比,它主要有下述几个恃点:
(1)遗传算法以决策变量的编码作为运算对象。
这种对决策变量的编码处理方式,使得我们在优化计算过程中可以借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地应用遗传操作算子。
(2)遗传算法直接以目标函数值作为搜索信息。
传统优化算法不仅需要利用目标函数值,而且往往需要目标函数的导数值等其他一些辅助信息才能确定搜索方向。
而遗传算法仅使用由目标函数值变换来的适应度函数值,就可确定进一步的搜索方向和搜索范围,无需目标函数的导数值等其他一些辅助信息。
这个特性对很多目标函数是无法或很难求导数的函数,或导数不存在的函数的优化问题,以及组合优化问题等,应用遗传算法时就显得比较方便,因为它避开了函数求导这个障碍。
(3)遗传算法同时使用多个搜索点的搜索信息。
单个搜索点所提供的搜索信息毕竟不多,所以搜索效率不高,有时甚至使搜索过程陷于局部最优解而停滞不前。
遗传算法从由很多个体所组成的一个初始群体开始最优解的搜索过程,而不是从一个单一的个体开始搜索,这是遗传算法所特有的一种隐含并行性。
(4)遗传算法使用概率搜索技术。
很多传统的优化算法往往使用的是确定性的搜索方法,而遗传算法属于一种自适应概率搜索技术,其选择、交叉、变异等运算都是以一种概率的方式来进行的,从而增加了其搜索过程的灵活性。
当然,交叉概率和奇异概率等参数也会影响算法的搜索效果和搜索效率,所以如何选择溃传算法的参数在其应用中是一个比较重要的问题。
而另一方面,与其他一些算法相比,遗传算法的鲁棒性又会使得参数对其搜索效果的影响会尽可能地低。
3.1.SGA的基本实现技术
基于对自然界中生物遗传与进化机理的模仿,针对不同的问题,很多学者设计了许多不同的编码方法来表示问题的可行解,开发出了许多种不同的遗传算子来模仿不同环境下的生物遗传特性。
这样,由不同的编码方法和不同的遗传算子就构成了各种不同的遗传算法。
但这些遗传算法都有共同的特点,即通过对生物遗传和进化过程中选择、交叉、变异机理的模仿,来完成对问题最忧解的自适应搏索过程。
基于这个共同特点,Goldberg总结出了一种统一的最基本的遗传算法——基本遗传算法(SimpleGeneticAlgorithms,简称SGA)。
基本遗传算法只使用选择算子、交叉算子和变异算子这三种基本遗传算子,其遗传进化操作过程简单,容易理解,是其他一些遗传算法的雏形和基础,它不仅给各种遗传算法提供了一个基本框架,同时也具有一定的应用价值。
3.2.编码方法
在遗传算法中如何描述问题的可行解,即把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法称为编码。
编码是应用遗传算法时要解决的首要问题,也是设计遗传算法时的一个关键步骤。
二进制编码方法是遗传算法中最常用的一种编码方法。
假设某一个参数U的取值范围是[Umin,Umax],用-1位二进制数n来表示,则它们的关系如下式(3-1)所示:
(3-1)
上述过程为解码,它的反过程即为编码。
3.3.适应度函数
在研究自然界中生物的遗传和进化现象时,生物学家使用适应度这个术语来度量某个物种对于其生存环境的适应程度。
遗传算法中也使用适应度这个概念来度量群体中各个个体在优化计算中有可能达到或接近于或有助于找到最优解的优良程度。
适应度较高的个体遗传到下一代的概率就较大:
而适应度较低的个体遗传到下一代的概率就相对小一些。
度量个体适应度的函数称为适应度函数(FitnessFunction)。
3.4.选择、交叉、变异算子
遗传算法使用选择算子来对群体中的个体进行优胜劣汰操作。
最常用的选择算子是基本遗传算法中的比例选择算子。
其基本思想是:
各个个体被选中的概率与其适应度大小成E比。
设群体大小为M,个体i的适应度为F,则个体i被选中的概率Pis为:
(3-2)
交叉算子是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。
交叉运算是遗传算法区别于其他进化算法的重要特征,它在遗传算法中起关键作用,是产生新个体的主要办法。
最简单的交叉算子是单点交叉算子,即在群体中随机选取两个个体,并在个体编码串中只随机设置一个交叉点,然后在该点以一定的概率Pc相互交换两个配对个体的部分染色体。
一般民的经验取值范围是0.4-0.99。
变异运算是指将个体染色体编码串中某些基因座上的基因值用该基因座的其它等位基因来替换,从而形成一个新的个体。
最简单的变异算子是基本位变异算子,即对个体编码串中的每一位基因座上的基因值均以变异概率p作变异运算。
一般Pm的经验取值范围是0.0001-0.10变异可使遗传算法具有局部随机搜索功能,又可维持群体的多样性,避免出现初期收敛问题。
4.被控对象及建模
已知被控对象的传递函数模型为:
(4-1)
采样周期T=1s,要求阶跃响应超调量
。
如图4-1所示,利用MATLAB/Simulink搭建系统仿真模型。
图4-1系统仿真模型
PID控制器模块如图所示,其中PID控制器的Ki、Kd、Kp三个参数利用图4-2给定
图4-2PID控制器模型
对于PID控制器,给定如下二次型性能指标函数:
(4-2)
其中
为常数,取值范围为
,搭出如图4-3所示模型。
图4-3系统模型及二次型性能指标函数
亦可直接编写M函数对系统进行建模,程序如下:
function[Kpidi,BsJ]=pid_gaf(Kpidi,BsJ)
globalrinyouttimef
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;
fork=1:
1:
P
timef(k)=k*ts;
r(k)=rin;
u(k)=Kpidi
(1)*x
(1)+Kpidi
(2)*x
(2)+Kpidi(3)*x(3);
%控制器输出
ifu(k)>
=10
u(k)=10;
end
ifu(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);
ifs==0
ifyout(k)>
0.95&
yout(k)<
1.05
tu=timef(k);
s=1;
end
fori=1:
Ji(i)=error(i)^2+rol*u(i)^2;
%二次型性能指标函数
B=B+Ji(i);
%叠加
BsJ=B;
5.算法实现与仿真分析
5.
5.1.遗传算法流程及程序
第一步,随机产生初始种群,个体数目一定,每个个体表示为染色体的基因编码;
第二步,计算个体的适应度,并判断是否符合优化准则,若符合,输出最佳个体及其代表的最优解,并结束计算,否则转向第三步;
第三步,依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体可能被淘汰;
第四步,按照一定的交叉概率和交叉方法,生成新的个体;
第五步,按照一定的变异概率和变异方法,生成新的个体;
第六步,由交叉和变异产生新一代的种群,返回到第二步。
遗传算法的一般流程如图5-1所示。
图5-1基本遗传算法的算法流程
遗传算法中的优化准则,一般依据问题的不同有不同的确定方式。
例如,可以采用以下的准则之一作为判断条件:
①种群中个体的最大适应度超过预先设定值;
②种群中个体的平均适应度超过预先设定值;
③世代数超过预先设定值。
5.2.遗传算法仿真程序
%用于优化PID参数的遗传算法
clearall;
closeall;
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);
2)=MinX
(2)+(MaxX
(2)-MinX
(2))*rand(Size,1);
3)=MinX(3)+(MaxX(3)-MinX(3))*rand(Size,1);
G=1000;
BsJ=0;
%***************开始运行***************
forkg=1:
G
time(kg)=kg;
%******步骤1:
产生BestJ******
Size
Kpidi=Kpid(i,:
%代入PID参数
[Kpidi,BsJ]=chap5_3f(Kpidi,BsJ);
%调用系统模型函数
BsJi(i)=BsJ;
%取出最优值
[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);
fori=Size:
-1:
Size-r+1
fi_S(Index(i))=fi_S(Index(i))+1;
%使得种群大小保持不变
k=1;
1
forj=1:
fi_S(i)
TempE(k,:
)=Kpid(Indexfi(i),:
%选择与生成新个体
k=k+1;
%k用来生成新个体
%************步骤3:
交叉运算************
Pc=0.90;
fori=1:
2:
(Size-1)
temp=rand;
ifPc>
temp%交叉条件
alfa=rand;
TempE(i,:
)=alfa*Kpid(i+1,:
)+(1-alfa)*Kpid(i,:
TempE(i+1,:
)=alfa*Kpid(i,:
)+(1-alfa)*Kpid(i+1,:
TempE(Size,:
)=BestS;
Kpid=TempE;
%************步骤4:
变异运算**************
Pm=0.10-[1:
Size]*(0.01)/Size;
%具有更大fi的个体具有更小的Pm
Pm_rand=rand(Size,CodeL);
Mean=(MaxX+MinX)/2;
Dif=(MaxX-MinX);
CodeL
ifPm(i)>
Pm_rand(i,j)%变异条件
TempE(i,j)=Mean(j)+Dif(j)*(rand-0.5);
%保证TempE(Size,:
)为最优个体
Bestfi
BestS
Best_J=BestJ(G)
figure
(1);
plot(time,BestJ);
xlabel('
Times'
ylabel('
BestJ'
figure
(2);
plot(timef,rin,'
r'
timef,yout,'
b'
Time(s)'
rin,yout'
5.3.仿真优化及分析
由式(4-2)可知,二次型性能指标的常数
的取值范围为
,首先取
设置控制系统M函数模型的运行时间为100秒。
给定阶跃信号,采用实数编码方式,经过100代进化,获得的优化PID整定结果为Kp=0.2756,Ki=0,Kd=0.9210,性能指标J=5.1323。
得到系统动态响应曲线,如图5-2所示。
图5-2系统响应曲线
由图5-2可测得,系统调节时间T=34s,超调量为12.5%,最终达到稳定,无静态误差,得到较好的动静态响应特性。
图5-3表示控制器输出波形,如图,控制器输出峰值为1.17,并且35秒后趋于稳定。
图5-3控制器输出波形
图5-4为遗传算法随进化代数增加,性能指标J的变化过程,在100代前后得到最优参数。
图5-4遗传算法优化过程
二次型性能指标系数是否对对优化结果产生影响,可通过改变
值并进行寻优来研究。
值分别为0.25,0.5,0.75,1时的响应曲线比较图如图5-4所示。
图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