遗传算法中最常用的一种编码方法。假设某一个参数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);