中国石油大学(华东)本科毕业设计(论文)
适应值度量为群体中每个可能的确定长度的特征串指定一个适应值,它经常是问题本身所具有的。适应值度量必须有能力计算搜索空间中每个确定长度的特征串的适应值。
(3) 控制该算法的参数和变量
控制遗传算法的主要参数有群体规模n、算法执行的最大代数M、复制概率Pr、杂交概率PC、变异概率Pm和选择策略R等参数。
(4) 确定指定结果的方法和停止运行的准则
当遗传代数达到最大允许代数时,就可以停止算法的执行,并指定执行中得到的最好结果作为算法的结果。 3.3.2 基本遗传算法的步骤
(1) 确定每个参数的大致范围和编码长度,进行编码; (2) 随机产生n个个体构成初始种群P(0);
(3) 将种群中各个体解码成对应的参数值,用此参数求代价函数值J及适应函数值f,取f=1/J。
(4) 应用复制,交叉和变异算子对种群P(t)进行操作产生下一代种群P(t+1);
(5) 重复步骤(3)和(4),直至参数收敛或达到预定的指标。 [2]
3.4遗传算法PID参数整定的编程实现
3.4.1初始群体
本论文所有的算法都采用Matlab进行了仿真.Matlab的最大特点是对矩阵操作方便。在此,以P,I,D三个被优化的参数为基因,每个基因的长度CodeL为10个二进制编码,创建初始个体;初始群体的大小Size可任意设置,如30,用随机生成矩阵语句rand(n,m)来实现。rand(n,m)产生的是一个nXm的均匀分布的随机矩阵,每个元素为一个0到1之间的4位小数。为产生出0/1序列进行二进制编码,规定上面产生的小数rand在区间(0,0.5]之间为逻辑0,在区间[0.5,1]
27
中国石油大学(华东)本科毕业设计(论文)
之间为逻辑1。调用Matlab的库函数round(rand)来实现。具体语句如下:
Size=30; CodeL=10;
E=round(rand(Size,3*CodeL));
鉴于程序的通用性,对一些参数,如Size,CodeL等以变量操作,而在初始化时给定共体值,以下同理。 3.4.2 编码
在多数遗传算法的编程中都采用二进制编码,这样方便各种遗传操作。本论文采用二进制编码,P,I,D三个参数均采用十位二进制数表示,组合一起构成一个三十位的染色体,从左到右每十个数依次代表P,I,D参数的二进制码。
首先设置P,I,D三个参数的取值范围,P为[MinX(1), MaxX(1)], I为[MinX(2), MaxX(2)], D为[MinX(3), MaxX(3)];
MinX(1)=zeros(1); MaxX(1)=50*ones(1); MinX(2)=zeros(1); MaxX(2)=1.0*ones(1); MinX(3)=zeros(1); MaxX(3)=1.0*ones(1);
将第s个染色体E(s,:)的前10位,第10到20位,第20到30位二进制码分别编码为Kpid(s,1), Kpid(s,2), Kpid(s,3).用for循环进行Size次后得到矩阵Kpid便为解码的结果.
for s=1:1:Size m=E(s,:); y1=0;y2=0;y3=0;
28
中国石油大学(华东)本科毕业设计(论文)
m1=m(1:1:CodeL); for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1); end
Kpid(s,1)=(MaxX(1)-MinX(1))*y1/(2^CodeL-1)+MinX(1); m2=m(CodeL+1:1:2*CodeL); for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1); end
Kpid(s,2)=(MaxX(2)-MinX(2))*y2/(2^CodeL-1)+MinX(2); m3=m(2*CodeL+1:1:3*CodeL); for i=1:1:CodeL
y3=y3+m3(i)*2^(i-1); end
Kpid(s,3)=(MaxX(3)-MinX(3))*y3/(2^CodeL-1)+MinX(3);
end
3.4.3 基本操作算子
(1) 选择算子
采用最普遍的适应度比例法。
首先要计算每个染色体的适应度fi(i),并累加,利用库函数sum(fi)实现: fi_sum=sum(fi);
计算每一行被选择的概率Pi(i): for i=1:1:Size
Pi(i)=fi(i)/fi_sum; end
29
中国石油大学(华东)本科毕业设计(论文)
产生一个随机数,与各行的选择概率进行比较,当某行的概率小于这一随机数的时候,该行被选中,并保存在另一个同维的空矩阵T中,如此循环. 为保证每次选择操作后群体的大小,所以加一个计数器k,使每代群体个数为初始设定的Size个;同时,在选择判断语句中也要判定已经选择的个数,来保证群体大小的不变。所以计数和判断语句改为:
T=zeros(Size,3*CodeL); k=0; while k if Pi(i)>Ps & k 为保证所有运算对矩阵E进行,在最后要把选择后的T矩阵再赋给矩阵E,实现语句为: E=T (2) 交叉算子 在众多的交叉算子算法中,我们选用最简单的一点交叉算法。参照选择算子中的选取方法,可以先选行,再选列,从而找到交叉点。以随机产生的数为参照,来确定交叉点。 设置交叉概率Pc: Pc=0.60; 30 中国石油大学(华东)本科毕业设计(论文) 随机生成一个0到3*CodeL之间的整数n: n=ceil(3*CodeL*rand); 用rand产生一个随机值: temp=rand; 对于行号用循环语句从第i行第一列找起,当随机值小于交又概率PC时,进行交叉操作,把第i行从第n个到最后一个的二进制数保存在临时矩阵F中,然后把第i+1行的第n个到最后一个的二进制数复制给第i行的第n个到最后一个的二进制数,最后把临时矩阵F再复制给第i+1行的第n个到最后一个的二进制数,如此完成交叉操作. 实现语句如下: pc=0.60; n=ceil(3*CodeL*rand); for i=1:2:(Size-1) temp=rand; if pc>temp F=zeros(1,3*CodeL); F=E(i,n:3*CodeL); E(i,n:3*CodeL)=E(i+1,n:3*CodeL); E(i+1,n:3*CodeL)=F; end end 把最后一个个体替换成适应度最好的个体,保证最优基因不丢失: E(Size,:)=BestS; (3) 变异算子 对于变异算子,在此我们也选用最简单的基本位变异。 用rand产生一个随机值: 31 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PID参数优化与整定方法(7)在线全文阅读。
相关推荐: