基于遗传算法的simulink/PID参数整定(s函数)
仿真图:
仿真主程序:
%遗传算法优化simulink仿真模型中的参数Kp Ki Kd
clear all;
close all;
Size=30;%种群中个体数,对应要优化的参数现有Size组(在后面会随机生成)
CodeL=3;%每个个体由codeL个元素,对应要优化的参数个数,对应要优化的参数Kp Ki Kd有3个
MinX(1)=zeros(1);
MaxX(1)=20.0*ones(1);
MinX(2)=zeros(1);
MaxX(2)=1.0*ones(1);
MinX(3)=zeros(1);
MaxX(3)=1.0*ones(1);%确定各优化参数的取值范围
E(:,1)=MinX(1)+(MaxX(1)-MinX(1))*rand(Size,1);
E(:,2)=MinX(2)+(MaxX(2)-MinX(2))*rand(Size,1);
E(:,3)=MinX(3)+(MaxX(3)-MinX(3))*rand(Size,1);%8-17代码就是在参数指定范围随机生成size组要优化的控制参数,产生种群E,后续的选择、复制、变异都是对该初始种群E进行处理
G=50;%迭代次数(次数少达不到最优值,次数多时间长)
BsJ=0;%目标函数值初始化为0
%*************** 开始运行***************
for kg=1:1:G
time(kg)=kg;%此处time为种群迭代次数
%****** Step 1 : 计算第kg代种群最小目标函数值 BestJ(kg) ******
for i=1:1:Size
x=E(i,:);
BsJ=GA_PID_Simulink_fitness(x,BsJ);%调用目标函数,输入种群E中的第一个个体x,该个体就是一组参数组成的向量;返回目标函数值BsJ。
BsJi(i)=BsJ;%将每一个个体(控制参数)在simulink中仿真,都会得到一个目标函数值,执行完for循环,所有控制参数依次带入simulink中仿真,得到的所有目标函数值存放在BsJi向量中。
end
[OderJi,IndexJi]=sort(BsJi); %将所有目标函数值从小到大排序,OderJi返回的是BsJi向量经过排序后的结果向量,IndexJi返回的是OderJi结果向量元素在BsJi中的下标(位置)
BestJ(kg)=OderJi(1);%找到目标函数值最小值
BJ=BestJ(kg);%将目标函数值最小值保存
Ji=BsJi+1e-10; %因为优化的目的是目标函数值越小越好,那么就会有0结果,适应度fi是目标函数值的导数,所以加上1e-10是为了防止分母为零报错。
fi=1./Ji;%求适应度
[Oderfi,Indexfi]=sort(fi); %将所有适应度值从小到大排序
Bestfi=Oderfi(Size); %找到适应度最大值
BestS=E(Indexfi(Size),:); %适应度最大对应的目标函数最小对应的参数(个体)是整个种群中最优的参数(个体),找到适应度最大值对应个体在种群中的位置(第Indexfi(Size)个),即可找出适应度最大值对应最优参数,并保存给 BestS变量
bfi(kg)=Bestfi;%保存第kg代种群的适应度最大值
kg %第kg代
BestS %第kg代群体中最优个体,也就是满足目标函数最小,对应的个体,个体就是三个参数(kp,ki,kd)组成的行向量
BJ %第kg代群体对应的目标函数最小值
%****** Step 2 : 选择和复制计算******
%都是固定套路不必研究,但种群E变量名要与之前的代码一致
fi_sum=sum(fi);
fi_Size=(Oderfi/fi_sum)*Size;
fi_S=floor(fi_Size); % Selecting Bigger fi value
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; % Adding rest to equal Size
end
k=1;
for i=Size:-1:1 % Select the Sizeth and Reproduce firstly
for j=1:1:fi_S(i)
TempE(k,:)=E(Indexfi(i),:); % 通过上述选择复制产生新的个体,进而形成新的种群
k=k+1; % k is used to reproduce
end
end
%************ Step 3 : 交叉计算 ************
%都是固定套路不必研究,但种群E变量名要与之前的代码一致
Pc=0.90;%交叉概率
for i=1:2:(Size-1)
temp=rand;
if Pc>temp %Crossover Condition
alfa=rand;
TempE(i,:)=alfa*E(i+1,:)+(1-alfa)*E(i,:);
TempE(i+1,:)=alfa*E(i,:)+(1-alfa)*E(i+1,:);
end
end
TempE(Size,:)=BestS;
E=TempE;%通过上述交叉产生新的个体,进而形成新的种群
%************ Step 4: 变异计算 **************
Pm=0.10-[1:1:Size]*(0.01)/Size; %(变异概率计算,每个个体变异概率不一样)Bigger fi,smaller 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) %Mutation Condition
TempE(i,j)=Mean(j)+Dif(j)*(rand-0.5);
end
end
end
%Guarantee TempE(Size,:) belong to the best individual
TempE(Size,:)=BestS;
E=TempE;%%通过上述变异产生新的个体,进而形成新的种群
end
%23-105代码实现G次迭代,迭代过程为计算当前种群最小目标函数,最大适应度,并找出对应的最优参数个体,然后对整个当前种群做选择、复制、交叉、变异,产生新的更好地种群,然后进行下一步迭代。
BestS %迭代完成后的种群里面的最优个体,也就是经过遗传寻优得到的最优参数向量
Bestfi %以经过迭代产生的最优参数,运行simulink模型,计算目标函数,再计算适应度,得到的最大适应度值
fi %以经过迭代后的种群所有个体(包括最优个体)运行simulink模型,计算目标函数,再计算适应度,得到所有适应度值
x %经过迭代后种群的最后一个个体(不一定是最优个体)
Best_J=BestJ(G)%以第G代群体中个体,运行simulink模型,计算目标函数,其中的目标函数最小值
figure(1);
plot(time,BestJ);%注意此处的time不是时间,而是迭代次数,所以此处作图以迭代次数为横坐标,迭代次数对应群体的最小目标函数值为纵坐标
xlabel('Times');ylabel('Best J');
完整程序:
基于遗传算法的simulink/PID参数整定(s函数)_simulink遗传算法整定pid-电子商务文档类资源-CSDN文库
仿真结果:
迭代50次,需等待几分钟。
基于遗传算法的simulink/PID参数整定(s函数)相关推荐
- 基于遗传算法的PID参数整定研究(七)
基于遗传算法的PID参数整定研究 在前述深入了解PID参数的含义.基于常规人工的PID参数整定.以及所运用的遗传算法的介绍与应用后,紧接着进入应用遗传算法的PID参数整定,实现了Simulink仿真与 ...
- 基于遗传算法的PID参数整定研究(三)
基于遗传算法的PID参数整定研究 在获得对象模型的基础上设计PID参数时常用的原理,经典的有经验试凑法.临界比例度法.极点配置原理.零极点相消原理.幅相裕度法等:现代的则往往借助于计算机,利用最优化方 ...
- 基于入门级粒子群算法的PID参数整定(MATLAB2016b-simulink)(超详细01)
PID算法作为工业或日常生活中常用的控制算法,想必大家都不陌生,依靠误差反馈来消除误差,关于PID的原理部分相比看这篇博客的同学应该都十分清楚,有不清楚的同学可以百度或知网搜索.PID算法的应用程度很 ...
- 自动控制原理PID参数整定的Matlab实现
以一道题为例介绍调节PID控制器系数的方法,有:试凑法(Trial-and-Error Method).齐格勒-尼科尔斯校正规则(Ziegler and Nichols First Method. ...
- 我的四轴专用PID参数整定方法及原理
给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...
- 我的四轴专用PID参数整定方法及原理---超长文慎入(转)
给四轴调了好久的PID,总算是调好了,现分享PID参数整定的心得给大家,还请大家喷的时候手下留情. 首先说明一下,这篇文章的主旨并不是直接教你怎么调,而是告诉你这么调有什么道理,还要告诉大家为什么'只 ...
- matlab求系统根轨迹代码_根轨迹法、PID参数整定和matlab指令计算
收获 (1)理解根轨迹的概念及其在控制系统设计中的作用: (2)手绘根轨迹草图,以及如何使用极端及绘制根轨迹: (3)熟悉在反馈控制系统中应用广泛的关键部件:PID控制器: (4)理解根轨迹在参数设计 ...
- 一个实例说明PID 参数整定
引言:PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解. 1.比例控制 ...
- 机器人控制——PID参数整定
(1)首先选择一个合适的并且尽量短的采样时间让系统工作: (2)首先加入比例环节,调节比例系数,直到系统的输出出现临界振荡: (3)若单独的比例环节不能满足设计要求,则此时加入积分环节,调整好的比例系 ...
- 针对具有纯滞后环节的一阶惯性系统PID参数整定(衰减曲线法)
假定被控系统的传递函数为: 一.建立开环结构图,观察系统对阶跃输入信号的跟随性. 由图二可知:开环系统的的上升时间很长,并且输出到达不了给定值,下面对该系统进行PID参数整定,进行PID控制. 图1 ...
最新文章
- sql大小写敏感吗_postgresql基础:表名字段名是大小写敏感的么
- 平正真诚——记红帆公司2011年秋季旅游·衡山
- Class.getResources()和classLoader.getResources()区别
- 小月金嗓再现经典版迟来的爱
- 如何选择一个合适的建站系统?
- 女人护肤品可与男人共用! - 健康程序员,至尚生活!
- JQUERY的parent()
- WEB框架研究笔记六(Spring WEB)
- 通过 Ruby 买卖Bitcoin:使用开放交易所OceanOne
- 八、非规则组织分析及其数学模型——平纹变化组织
- larvel 中的api.php_laravel route api.php 与 web.php 的区别
- XSS后台敏感操作(审计思路实现)
- 学术论文投稿与返修(Rebuttal)经验分享
- 计算机视觉知识点-人脸对齐
- 成为阿里云架构师的进阶之路——阿里云首批ACE认证通过者逸疏专访
- 无盘php,MZD无盘系统160台网吧安装实战教程
- 温故知新(五)——三参数陷波滤波器离散化推导及MATLAB实现
- Android设备获取mp3中的专辑封面信息
- 6本超实用平面设计书籍
- js 随机数时间戳函数