当前位置:文档之家› MATLAB遗传算法PID大作业.

MATLAB遗传算法PID大作业.

MATLAB遗传算法PID大作业.
MATLAB遗传算法PID大作业.

遗传算法在调节控制系统参数中的应用

【摘要】自动化控制系统多采用PID 控制器来调节系统稳定性和动态性,PID 的

Kp,Ki,Kd 参数需要合理选择方能达到目标。遗传算法是一种模拟生物进化寻求最优解的有效算法,本文通过利用GAbx 工具箱实现对控制电机的PID 进行参数优化,利用matlab 的仿真功能可以观察控制效果。 1. 直流伺服电机模型 1.1物理模型

图1 直流伺服电机的物理模型

αu ---电枢输入电压(V ) a R ---电枢电阻(Ω) S L ---电枢电感(H ) q u ---感应电动势(V ) g T ---电机电磁转矩(N m ?) J---转动惯量(2m kg ?)

B---粘性阻尼系数(s m N ??) g i ---流过电枢的电流(A ) θ---电机输出的转角(rad )

1.2传递函数

利用基尔霍夫定律和牛顿第二定律得出电机基本方程并进行拉布拉斯变换

)

()()()()()()()()()()(2s s K s U K s I s T s Bs s Js s T s I s L R s I s U s U e q t a g g a a a a q a θθθ?=?=?+?=?+?=-

式中:t K 为电机的转动常数(m N ?)A ;e K 为感应电动势常数(s V ?)rad

图2 直流伺服电机模型方框图

消去中间变量得系统的开环传递函数:

s

K K B Js R s L K s U s s G C t a d t

a ]))([()

()

()(+++=

=

θ

系统参数如下:s m uN B m mg J ??=?=51.3,23.32

A m N K K uH L R e t a a )(03.0,75.2,4?===Ω=

2. PID 校正

图3 PID 校正

s K s

K K s G d i

p c ++

=)( Kp,Ki,Kd 为比例,积分,微分系数 令Kp=15、Ki=0.8 、Kd=0.6

M 文件:J=3.23E-6;

B=3.51E-6; Ra=4;

La=2.75E-6; Kt=0.03; num= Kt;

den=[(J*La) ((J*Ra)+(La*B)) ((B*Ra)+Kt*Kt) 0]; t=0:0.001:0.2; step(num,den,t); Kp=15; Ki=0.8; Kd=0.6;

numcf=[Kd Kp Ki]; dencf=[1 0];

numf=conv(numcf,num); denf=conv(dencf,den);

[numc,denc]=cloop(numf,denf); t=0:0.001:0.04; step(numc,denc,t);

matlab 进行仿真,我们可以看出不恰当的PID 参数并不能使系统达到控制系统的要求,

因此需要对PID参数进行优化。

图4 系统阶跃响应(Kp=15,Ki=0.8,Kd=0.6)

3.遗传算法

3.1 遗传算法和工具箱简介

遗传算法(GA)是基于自然选择和基因遗传学原理的优化搜索方法。它借鉴了达尔文的进化论和孟德尔的遗传学说。其本质上是一种高效、并行、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最优解。遗传算法操作使用适者生存的原则,在潜在的解决方案种群中逐次产生一个近似最优的方案。在遗传算法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产生一个新的近似解。在这个过程导致种群中个体的进化,得到的新个体比原个体更能适应环境,就像自然界中的改造一样。

表3.1遗传学和遗传算法中基本用语对照表

英国谢菲尔德大学开发的遗传算法工具箱把参数,选择,交叉,变异等过程封装成函数进行操作,其基本搜索过程不变。

表3.2 遗传算法工具箱常用函数

3.2 利用遗传算法优化过程

1)根据遗传算法优缺点这里选择遗传代数为100,种群大小为30,变量维数为3其中10≤Kp ≤20,0≤Ki ≤1, 0≤Kd ≤1,要求精度0.0001所以二进制串编码长度为17故Kp 精度为(20-10)/(

-1) Ki,Kd 精度为(1-0)/(

-1),代沟为0.9,交叉概率为0.6,

变异概率为0.01。 2)适应度函数的设计

PID 优化设计的目的是使系统某些性能指标最优,然而,单纯的误差性能指标很难同时满足系统对快速性、稳定性和鲁棒性的要求,因此在适应度函数中引入超调量、上升时间和累计绝对误差指标项。设σ=(|y p -y ref |/y ref )×100%为系统的超调量,y p 和y ref 分别为输出峰值和输入参考值;t *r 为上升时间,将其定义为输出从0第1次达到0.95yref 的时间;e k =y k -y ref 为采样时刻k 的输出误差;w j (j=1,2,3)为权重系数。则多目标适应度函数为:

∑=++=n

k k r e w t w w f 1

3*

21σ (5)

通过对权重系数的调整,可以改变系统对快速性和稳定性的要求。如系统要求较小的超调,可以适当增大w 1;若系统要求快速的动态响应,则可以适当增大w 2。

计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此连续PID 控制算法不能直接使用,需要采用离散化方法。在计算机PID 控制中,使用的是数字PID 控制器。

图3.2 增量式PID 控制系统

增量式PID 控制是数字控制器的输出只是控制器的增量△u(k)。当执行机构需要的是控制量的增量时,应采用增量式PID 控制,采样时刻点kT (T 为采样周期)代表连续时间t 。做如下近似变换来离散化:

()

()

00()()(1)

k t

j t kT e t T

e j de t e k e k dt

T =??

???????

??

??=≈--≈∑? 可得离散的PID 表达式:

1

(1)(2)

(1)(1)()k p

i d j e k e k u k k e k k e j T k T

==----=-++∑

增量式PID 控制算法: ()2(1)(2)

()(()(1))()e k e k e k u k k p e k e k k i e k T k d

T

--+-?=-

-++ 增量式PID 控制算法不需多次累加,控制增量△u(k)仅与最近3次得采样有关,所以误动作时的影响相对较小

图3.3 基于GA 算法参数调整的PID 控制系统

采样时间取1ms ,为获取满意的过渡过程动态特性,采用误差绝对值时间积分性能指标作为参数选择的目标函数。为防止控制量过大,在目标函数中加入控制输入的平方项。选用下式作为参数选取的最优指标

20(0.999|()|0.001())2u

J e t u t dt t ∞

=++?

()e t 为系统偏差,()u t 为PID 控制器输出,u t

为上升时间。

为避免超调了,采用惩罚功能,一旦产生超调,将超调量作为最优指标的一项,此时最优指标为

20()0

(0.999|()|0.001()100|()|)2u

if e t J e t u t e t dt t ∞

<=+++?

J 值越小,对应的PID 参数越优良。但是,由于GA 算法用于求解最大值问题,所以需要对J 做一个简单变形,从而得到算法的适应度函数:

1f J =

3)依据遗传算法的步骤编写程序并仿真

图3.4 BestKpKiKd优化值时的阶跃响应

图3.5 J随进化代数的变化曲线

图3.6 优化得到BestKpKiKd及此时的LeastJ

4.程序代码

1.GA.m文件

%GA(Generic Algorithm) Program to optimize Parameters of PID

clc

clear all;

close all; %清除命令,变量,关闭窗口

global rin yout timef %输入,输出,离散时间

%******Initialization******%

MAXGEN=100; %遗传代数

NIND=30; %种群大小

NVAR=3; %变量维数

PRECI=17; %变量精度

GGAP=0.9; %代沟(Generation gap)

Pc=0.6; %交叉概率

Pm=0.01; %变异概率

FieldD=[PRECI,PRECI,PRECI;10,0,0;20,1,1; 1,1,1;0,0,0;1,1,1;1,1,1]; %区域描述器

Chrom=crtbp(NIND,NVAR*PRECI); %初始种群

for i=1:1:MAXGEN

gen(i)=i; %遗传代数

%****** Step 1 : Evaluate LeastJ ******

KpKiKdlsj=bs2rv(Chrom,FieldD); %各代种群由二进制串转化为实值

for j=1:1:NIND

J=0;

KpKiKd=KpKiKdlsj(j,:);

[KpKiKd,J]=pidf(KpKiKd,J); %计算本代种群中各个个体的目标函数值

Lsj(j,1)=J;

end

[OderLsj,IndexLsj]=sort(Lsj); %本代种群中各个个体的目标函数值升序排列

genlstj(i)=OderLsj(1); %升序排列中第一个最小,为本代最优

BestKpKiKd=KpKiKdlsj(IndexLsj(1),:);%BestKpKiKd

Lsj=Lsj+1e-10; %Avoiding deviding zero 1*10^(-10)

Msj=1./Lsj; %设置适应度函数

[OderMsj,IndexMsj]=sort(Msj); %Arranging fi small to bigger适应度值升序排列genmost=OderMsj(NIND) ; % Let Bestfi=max(fi)升序中最后一个最大,为本代最优moststring=Chrom(IndexMsj(NIND),:); %本代中对应最优的PID参数

%****** Step 2 : Select and Reproduct Operation******

FitnV = ranking(Lsj); %分配适应度值(Assign fitness values)

SelCh=select('sus',Chrom,FitnV,GGAP); %选择

%************ Step 3 : Crossover Operation ************

SelCh=recombin('xovsp', SelCh,Pc); %交叉

%************ Step 4: Mutation Operation **************

SelCh=mut(SelCh,Pm); %变异

SelCh(NIND,:)=moststring; %保证交叉后的新种群Temp2包含原种群中的最优个体%*************Step 5:Reinsert Operation***************

ObjV=FitnV;

KpKiKdlsj=bs2rv(SelCh,FieldD); %计算ObjVSel

for j=1:1:NIND

J=0;

KpKiKd=KpKiKdlsj(j,:);

[KpKiKd,J]=pidf(KpKiKd,J);

Lsj(j,1)=J;

end

Lsj=Lsj+1e-10;

Msj=1./Lsj;

ObjVSel=Msj;

[Chrom ObjV] = reins(Chrom, SelCh, 1, 1, ObjV,ObjVSel); %重插入

end

LeastJ=genlstj(MAXGEN) %最优目标函数值(性能指标)

BestKpKiKd %最优PID参数(实值)

figure(1);

plot(gen,genlstj);

xlabel('gen(s)');ylabel('genlstj');

figure(2);

plot(timef,rin,'r',timef,yout,'b');

xlabel('Time(s)');ylabel('rin,yout');

2.pidf.m函数文件

function [KpKiKd,J]=pidf(KpKiKd,J)

global rin yout timef

tz=0.001;

sys=tf(0.03,[8.8825e-12,1.2920e-05,9.1404e-04,0]);

zsys=c2d(sys,tz,'z');

[num,den]=tfdata(zsys,'v');

rin=1.0;

u_1=0.0;u_2=0.0;u_3=0.0;

y_1=0.0;y_2=0.0;y_3=0.0;

K=[0,0,0]';

error_1=0;

Tup=1;

m=0;

final=100;

for t=1:1:final

timef(t)=t*tz;

r(t)=rin;

u(t)=KpKiKd(1)*K(1)+KpKiKd(2)*K(2)+KpKiKd(3)*K(3);

if u(t)>=10

u(t)=10;

end

if u(t)<=-10

u(t)=-10;

end

yout(t)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4)*u_3; error(t)=r(t)-yout(t);

%------------ Return of PID parameters -------------

u_3=u_2;u_2=u_1;u_1=u(t);

y_3=y_2;y_2=y_1;y_1=yout(t);

K(1)=error(t); % Calculating P

K(2)=(error(t)-error_1)/tz; % Calculating D

K(3)=K(3)+error(t)*tz; % Calculating I

error_1=error(t);

if m==0

if yout(t)>0.95&yout(t)<1.05

Tup=timef(t);

m=1;

end

end

end

for t=1:1:final

J=J+0.999*abs(error(t))+0.001*u(t)^2; if t>1

erry(t)=yout(t)-yout(t-1);

if erry(t)<0

J=J+100*abs(erry(t));

end

end

end

J=J+2*Tup;

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

MATLAB遗传算法作业

MATLAB遗传算法 一:遗传算法简介: 遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。遗传算法的这些性质,已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。它是现代有关智能计算中的关键技术。 二:遗传算法的基本步骤 a)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。 b)个体评价:计算群体P(t)中各个个体的适应度。 c)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个 体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。

d)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。 e)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。 群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。 f)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。 三:matlab实现 例子:f(x)=10*sin(5x)+7*cos(4x)x∈[0,10]将变量域[0,10]离散化为二值域[0,1023],x=0+10*b/1023。 1.初始化 initpop.m function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength));%rand随机产生每个单元为0或者1 行数(种群数量)为popsize,列数为chromlength(个体所含基因数)的矩阵, 2.计算目标函数值 2.1将二进制数转化为十进制数(1) decodebinary.m %产生[2^n2^(n-1)...1]的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop) [px,py]=size(pop)%Pop的行和列数 for i=1:px pop2(i)=0 for j=1:py pop2(i)=pop2(i)+2.^(py-j)*pop(i,j) end end 2.2将二进制编码转化为十进制数(2) Decodechrom.m %函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的

MATLAB课程遗传算法实验报告及源代码

硕士生考查课程考试试卷 考试科目: 考生姓名:考生学号: 学院:专业: 考生成绩: 任课老师(签名) 考试日期:年月日午时至时

《MATLAB 教程》试题: A 、利用MATLA B 设计遗传算法程序,寻找下图11个端点最短路径,其中没有连接端点表示没有路径。要求设计遗传算法对该问题求解。 a e h k B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 C 、利用MATLAB 编程实现:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行,随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何乘船渡河的大权掌握在商人手中,商人们怎样才能安全渡河? D 、结合自己的研究方向选择合适的问题,利用MATLAB 进行实验。 以上四题任选一题进行实验,并写出实验报告。

选择题目: B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 一、问题分析(10分) 这是一个简单的三元函数求最小值的函数优化问题,可以利用遗传算法来指导性搜索最小值。实验要求必须以matlab 为工具,利用遗传算法对问题进行求解。 在本实验中,要求我们用M 函数自行设计遗传算法,通过遗传算法基本原理,选择、交叉、变异等操作进行指导性邻域搜索,得到最优解。 二、实验原理与数学模型(20分) (1)试验原理: 用遗传算法求解函数优化问题,遗传算法是模拟生物在自然环境下的遗传和进化过程而形成的一种自适应全局优化概率搜索方法。其采纳了自然进化模型,从代表问题可能潜在解集的一个种群开始,种群由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体;初始种群产生后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的解:在每一代,概据问题域中个体的适应度大小挑选个体;并借助遗传算子进行组合交叉和主客观变异,产生出代表新的解集的种群。这一过程循环执行,直到满足优化准则为止。最后,末代个体经解码,生成近似最优解。基于种群进化机制的遗传算法如同自然界进化一样,后生代种群比前生代更加适应于环境,通过逐代进化,逼近最优解。 遗传算法是一种现代智能算法,实际上它的功能十分强大,能够用于求解一些难以用常规数学手段进行求解的问题,尤其适用于求解多目标、多约束,且目标函数形式非常复杂的优化问题。但是遗传算法也有一些缺点,最为关键的一点,即没有任何理论能够证明遗传算法一定能够找到最优解,算法主要是根据概率论的思想来寻找最优解。因此,遗传算法所得到的解只是一个近似解,而不一定是最优解。 (2)数学模型 对于求解该问题遗传算法的构造过程: (1)确定决策变量和约束条件;

基于遗传算法的PID参数优化毕业设计(论文)

本科生毕业设计(论文) 论文题目:基于遗传算法的PID参数优化

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

基于遗传算法的matlab源代码

function youhuafun D=code; N=50;%Tunable maxgen=50;%Tunable crossrate=0.5;%Tunable muterate=0.08;%Tunable generation=1; num=length(D); fatherrand=randint(num,N,3); score=zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); %多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; %%两点交叉 %for kk=1:(N-2)/2 %rndtmp=randint(1,1,num)+1; %tmp=A(1:rndtmp,kk); %A(1:rndtmp,kk)=B(1:rndtmp,kk); %B(1:rndtmp,kk)=tmp; %end fatherrand=[fatherrand(:,1:2),A,B]; %变异 rnd=rand(num,N); ind=rnd[m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); %fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(t mpind)]; if~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end %score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; save DData D function D=code load youhua.mat %properties F2and F3 F1=A(:,1); F2=A(:,2); F3=A(:,3); if(max(F2)>1450)||(min(F2)<=900) error('DATA property F2exceed it''s range (900,1450]') end %get group property F1of data,according to F2value F4=zeros(size(F1)); for ite=11:-1:1 index=find(F2<=900+ite*50); F4(index)=ite; end D=[F1,F2,F3,F4]; function ScoreN=scorefun(fatherrand,D) F3=D(:,3); F4=D(:,4); N=size(fatherrand,2); FF4=F4*ones(1,N); FF4rnd=FF4-fatherrand; FF4rnd=max(FF4rnd,1); ScoreN=ones(1,N)*300*11; %这里有待优化

遗传算法Matlab程序

% f(x)=11*sin(6x)+7*cos(5x),0<=x<=2*pi; %%初始化参数 L=16;%编码为16位二进制数 N=32;%初始种群规模 M=48;%M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异 T=100;%进化代数 Pc=0.8;%交叉概率 Pm=0.03;%%变异概率 %%将十进制编码成16位的二进制,再将16位的二进制转成格雷码 for i=1:1:N x1(1,i)= rand()*2*pi; x2(1,i)= uint16(x1(1,i)/(2*pi)*65535); grayCode(i,:)=num2gray(x2(1,i),L); end %% 开始遗传算子操作 for t=1:1:T y1=11*sin(6*x1)+7*cos(5*x1); for i=1:1:M/2 [a,b]=min(y1);%找到y1中的最小值a,及其对应的编号b grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体y1(1,b)=inf;%用来排除已找到的最小值 end for i=1:1:M/2 p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉的位置if rand()

遗传算法经典MATLAB代码资料讲解

遗传算法经典学习Matlab代码 遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 2.2 计算目标函数值 % 2.2.1 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: decodebinary.m %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 % 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

基于遗传算法的PID整定原理及matlab仿真程序

主程序:chap5_2.m %GA(Generic Algorithm) Program to optimize PID Parameters clear all; close all; global rin yout timef 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=100; BsJ=0; %*************** Start Running *************** for kg=1:1:G time(kg)=kg; %****** Step 1 : Evaluate BestJ ****** for i=1:1:Size Kpidi=Kpid(i,:); [Kpidi,BsJ]=chap5_2f(Kpidi,BsJ); BsJi(i)=BsJ; end [OderJi,IndexJi]=sort(BsJi); BestJ(kg)=OderJi(1); BJ=BestJ(kg); Ji=BsJi+1e-10; %Avoiding deviding zero fi=1./Ji; % Cm=max(Ji);

MATLAB遗传算法PID大作业.

遗传算法在调节控制系统参数中的应用 【摘要】自动化控制系统多采用PID 控制器来调节系统稳定性和动态性,PID 的 Kp,Ki,Kd 参数需要合理选择方能达到目标。遗传算法是一种模拟生物进化寻求最优解的有效算法,本文通过利用GAbx 工具箱实现对控制电机的PID 进行参数优化,利用matlab 的仿真功能可以观察控制效果。 1. 直流伺服电机模型 1.1物理模型 图1 直流伺服电机的物理模型 αu ---电枢输入电压(V ) a R ---电枢电阻(Ω) S L ---电枢电感(H ) q u ---感应电动势(V ) g T ---电机电磁转矩(N m ?) J---转动惯量(2m kg ?) B---粘性阻尼系数(s m N ??) g i ---流过电枢的电流(A ) θ---电机输出的转角(rad ) 1.2传递函数 利用基尔霍夫定律和牛顿第二定律得出电机基本方程并进行拉布拉斯变换 ) ()()()()()()()()()()(2s s K s U K s I s T s Bs s Js s T s I s L R s I s U s U e q t a g g a a a a q a θθθ?=?=?+?=?+?=- 式中:t K 为电机的转动常数(m N ?)A ;e K 为感应电动势常数(s V ?)rad

图2 直流伺服电机模型方框图 消去中间变量得系统的开环传递函数: s K K B Js R s L K s U s s G C t a d t a ]))([() () ()(+++= = θ 系统参数如下:s m uN B m mg J ??=?=51.3,23.32 A m N K K uH L R e t a a )(03.0,75.2,4?===Ω= 2. PID 校正 图3 PID 校正 s K s K K s G d i p c ++ =)( Kp,Ki,Kd 为比例,积分,微分系数 令Kp=15、Ki=0.8 、Kd=0.6 M 文件:J=3.23E-6; B=3.51E-6; Ra=4; La=2.75E-6; Kt=0.03; num= Kt; den=[(J*La) ((J*Ra)+(La*B)) ((B*Ra)+Kt*Kt) 0]; t=0:0.001:0.2; step(num,den,t); Kp=15; Ki=0.8; Kd=0.6; numcf=[Kd Kp Ki]; dencf=[1 0]; numf=conv(numcf,num); denf=conv(dencf,den); [numc,denc]=cloop(numf,denf); t=0:0.001:0.04; step(numc,denc,t); matlab 进行仿真,我们可以看出不恰当的PID 参数并不能使系统达到控制系统的要求,

基于遗传算法的PID控制概述

龙源期刊网 https://www.doczj.com/doc/5317988298.html, 基于遗传算法的PID控制概述 作者:张亚飞 来源:《卷宗》2013年第08期 摘要:基于PID控制应用的广泛性,本文简要阐述了遗传算法理论的关键思想及其在PID 控制中的应用策略,并用Matlab软件对一个控制实例进行了仿真研究。 关键词:PID控制;遗传算法;Matlab仿真 0 引言 PID控制作为最早实用化的控制算法已有70多年历史,现在仍然是控制系统中应用最为 普遍的一种控制规律。它所涉及的算法和控制结构简单,实际经验以及理论分析都表明,这种控制规律对许多工业过程进行控制时,一般都能得到较为满意的控制效果。随着控制理论的 发展,尤其是人工智能研究的日趋成熟,许多先进的算法理论逐渐被应用到传统的PID控制中,并取得了更为优越的控制效果。本文就以传统PID控制和遗传算法理论为基础,简述了基于遗传算法整定的PID控制基本理论和方法。 1 PID控制 通过将偏差的比例(Proportional)、积分(Integral)、微分(Derivative)进行线性组合构成控制量,对被控对象进行控制,这种控制方法叫做PID控制。在自动控制发展的历程中,常规PID控制得到了广泛的应用,整个控制系统由常规PID控制器和被控对象组成,根据系统给定值r(t)与实际输出值y(t)存在的控制偏差e(t)=r(t)-y(t)组成控制规律。PID控制器将偏差e(t)的比例-积分-微分通过线性组合构成控制量,对被控对象进行控制。其基本控制规律为 式中,Kp为比例增益,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e (t)为偏差。 2 遗传算法基本操作 遗传算法,简称GA(Genetic Algorithms),是由美国Michigan大学的Holland教授于上世纪六十年代率先提出的一种高效并行全局最优搜索方法。遗传算法是模拟达尔文生物进化论的自然选择和孟德尔遗传学机理的生物进化过程的计算模型,它将“优胜劣汰,适者生存”的生物进化理论引入优化参数形成的编码串联群体中,按所选择的适配值函数通过遗传中的复制、交叉和变异对种群个体进行筛选,并保留适配值高的种群个体,组成新的群体。新的群体既继承了上一代的种群信息,又包含有优于上一代的个体信息,这样周而复始,种群中个体的适应度不断提高,直到满足一定的特定条件而停止运算,从而得到最优解。

遗传算法的MATLAB程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

基于遗传算法的PID参数整定

摘要:研究自动控制器参数整定问题,PID参数整定是自动控制领域研究的重要内容,系统参数选择决定控制的稳定性和快速性,也可保证系统的可靠性。传统的PID参数多采用试验加试凑的方式由人工进行优化,往往费时而且难以满足控制的实时要求。为了解决控制参数优化,改善系统性能,提出一种遗传算法的PID 参数整定策略。 在本文里,通过介绍了遗传算法的基本原理,并针对简单遗传算法在PID控制中存在的问题进行了分析,提出在不同情况下采用不同的变异概率的方法,并对其进行了实验仿真。结果表明,用遗传算法来整定PID参数,可以提高优化性能,对控制系统具有良好的控制精度、动态性能和鲁棒性。 关键词:PID控制器;遗传算法;整定PID 1 引言 传统的比例、积分、微分控制,即PID控制具有算法简单、鲁棒性好和可靠性高等优点,已经被广泛用于工业生产过程。但工程实际中,PID控制器的比例、积分和微分调节参数往往采用实验加试凑的方法由人工整定。这不仅需要熟练的技巧,往往还相当费时。更为重要的是,当被控对象特性发生变化,需要控制器参数作相应调整时,PID控制器没有自适应能力,只能依靠人工重新整定参数,由于经验缺乏,整定结果往往达不到最优值,难以满足实际控制的要求。考虑生产过程的连续性以及参数整定费事费力,这种整定实际很难进行。所以,人们从工业生产实际需要出发,基于常规PID控制器的基本原理,对其进行了各种各样的改进。近年来许多学者提出了基于各种智能算法的PID整定策略,如模糊PID,神经元网络PID等…,但这些先进算法都要求对被控对象有很多的先验知识,在实际应用中往往难于做到。随着计算技术的发展,遗传算法有了很大的发展。将遗传算法用于控制器参数整定,已成为遗传算法的重要应用之一。 本文介绍基于遗传算法的PID参数整定设计方法。这是一种寻求全局最优的控制器优化方法,且无需对目标函数微分,可提高参数优化效果,简化计算过程。仿真实例表明该方法与其他传统寻优方法相比,在优化效果上具有一定的优势。 2 遗传算法简介 2.1 遗传算法的基本原理 遗传算法是John H.Holland根据生物进化的模型提出的一种优化算法。自然选择学说是进化论的中心内容。根据进化论,生物的发展进化主要有三个原因:即遗传、变异和选择。遗传算法基于自然选择和基因遗传学原理的搜索方法,将“优胜劣汰,适者生存”的生物进化原理引入待优化参数形成的编码串群体中,按照一定的适应度函数及一系列遗传操作对各个体进行筛选,从而使适应度高的个体被保留下来,组成新的群体;新群体包含上一代的大量信息,并且引入了新的优于上一代的个体。这样周而复始,群体中各个体适应度不断提高,直至满足一定的极限条件。此时,群体中适应度最高的个体即为待优化问题的最优解。 遗传算法通过对参数空间编码并用随机选择作为工具来引导搜索过程朝着更高效的方向发展。正是由于遗传算法独特的工作原理,使它能够在复杂空间进行全局优化搜索,具有较强的鲁棒性。另外,遗传算法对于搜索空问,基本上不需要什么限制性的假设(如连续、可微及单峰等)。而其它优化算法,如解析法,往往只能得到局部最优解而非全局最优解,且需要目标函数连续光滑及可微;枚举

遗传算法的原理及MATLAB程序实现

1 遗传算法的原理 1.1 遗传算法的基本思想 遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。 遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。这一过程循环执行,直到满足优化准则,最终产生问题的最优解。图1-1给出了遗传算法的基本过程。 1.2 遗传算法的特点 1.2.1 遗传算法的优点 遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点: 1. 遗传算法以控制变量的编码作为运算对象。传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。 2. 遗传算法具有内在的本质并行性。它的并行性表现在两个方面,一是遗传

基于遗传算法的BP神经网络MATLAB代码

用遗传算法优化BP神经网络的Matlab编程实例(转) 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=[1:19;2:20;3:21;4:22]'; YY=[1:4]; XX=premnmx(XX); YY=premnmx(YY); YY %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'tra inlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个MAT-file,initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

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

基于遗传优化算法对离散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调节器对于相当多的工业过程能够起到较为满足的控制效果。它结构简单、适用面广、鲁棒性强、参数易于调整、在实际中容易被理解和实现、在长期应用中己积累了丰富的经验。特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识,但往往不能达到预期的效果,所以不论常规调节仪表还是数

简单的遗传算法MATLAB实现

遗传算法是对达尔文生物进化理论的简单模拟,其遵循“适者生存”、“优胜略汰”的原理。遗传算法模拟一个人工种群的进化过程,并且通过选择、杂交以及变异等机制,种群经过若干代以后,总是达到最优(或近最优)的状态。 自从遗传算法被提出以来,其得到了广泛的应用,特别是在函数优化、生产调度、模式识别、神经网络、自适应控制等领域,遗传算法更是发挥了重大的作用,大大提高了问题求解的效率。遗传算法也是当前“软计算”领域的重要研究课题。 本文首先结合MATLAB对遗传算法实现过程进行详细的分析,然后通过1个实际的函数优化案例对其应用进行探讨。 1. 遗传算法实现过程 现实生活中很多问题都可以转换为函数优化问题,所以本文将以函数优化问题作为背景,对GA的实现过程进行探讨。大部分函数优化问题都可以写成求最大值或者最小值的形式,为了不是一般性,我们可以将所有求最优值的情况都转换成求最大值的形式,例如,求函数f(x)的最大值,

若是求函数f(x)的最小值,可以将其转换成 g(x)=-f(x),然后求g(x)的最大值, 这里x可以是一个变量,也可是是一个由k个变量组成的向量,x=(x1, x2, …, x k)。每个x i,i=1,2,…,k, 其定义域为D i,D i=[a i, b i]。 一般规定f(x)在其定义域内只取正值,若不满足,可以将其转换成以下形式, 其中C是一个正常数。 1.1 编码与解码 要实现遗传算法首先需要弄清楚如何对求解问题进行编码和解码。对于函数优化问题,一般来说,有两种编码方式,一是实数编码,一是二进制编码,两者各有优缺点,二进制编码具有稳定性高、种群多样性大等优点,但是需要的存储空间大,需要解码过程并且难以理解;而实数编码直接用实数表示基因,容易理解并且不要解码过程,但是容易过早收敛,从而陷入局部最优。本文以最常用的二进制编码为例,说明遗传编码的过程。

相关主题
文本预览
相关文档 最新文档