clc
clear all
close all
NP=40;%种群个数 number of population (必需为偶数)
NS=NP/2;%解的个数,取种群个数的一半 number of solution
D=3;%优化的参数个数,即kp,ki,kd
MaxCycle=100;%最大的迭代次数
Limit=10;%内循环次数
x=zeros(NS,D+1);%用来存放每个相对优解
NewX=zeros(1,4);%用来保存邻域新值
%设定PID参数的范围
%MaxPID=[500,700,300];
MaxPID=[20,1,1];
MinPID=[0,0,0];
%MaxKp=430;MinKp=200;MaxKi=1050;MinKi=100;MaxKd=160;MinKd=100;
for i=1:1:NS %产生初始解集
x(i,1)=round(unifrnd(MinPID(1),MaxPID(1),1,1));
x(i,1)=x(i,1)+round(unifrnd(0,20,1,1))*0.1;
if x(i,1)>MaxPID(1)
x(i,1)=MaxPID(1);
end
x(i,2)=rand(1)*(MaxPID(2)-MinPID(2))+MinPID(2);
x(i,3)=rand(1)*(MaxPID(3)-MinPID(3))+MinPID(3);
end
for i=1:1:NS % 计算各个解的适应度
et=PID_FUN(x(i,1),x(i,2),x(i,3));
x(i,4)=et;
end
BestITAE=zeros(1,100);
iter=0;
for Cycle=1:1:MaxCycle
for s=1:1:Limit
iter=iter+1;
if iter>MaxCycle%如果迭代次数达到最大值,即退出循环
break
end
for i=1:1:NS
%Sort_FUN函数是对已产生的解根据ITAE的值进行升序排序
x=Sort_FUN(x,NS);%每次迭代都记录最好的解
BestITAE(iter)=x(1,4);
b=x(1,4);
if i==NS
k=i-1;
else
k=i+1;
end
%在食物源的邻域搜索新的食物源
NewX=FindNewSolution_FUN(x(i,:),MaxPID,MinPID);
%计算每个食物源的适应度,即PID参数的优劣性
NewX(1,4)=PID_FUN(NewX(1,1),NewX(1,2),NewX(1,3));
if x(i,4)>NewX(1,4) %如果找到适应度更好的解的话就进行替换
x(i,:)=NewX(1,:);
end
end %NS Cycle end
%对所有解中最好的前一半解进行邻域搜索
for j=1:1:NS/2
if j==NS/2
k=j-1;
else
k=j+1;
end
%在食物源的邻域搜索新的食物源
NewX=FindNewSolution_FUN(x(j,:),MaxPID,MinPID);
%计算每个食物源的适应度,即PID参数的优劣性
NewX(1,4)=PID_FUN(NewX(1,1),NewX(1,2),NewX(1,3));
if x(j,4)>NewX(1,4) %如果找到适应度更好的解的话就进行替换
x(j,:)=NewX(1,:);
end
end
x=Sort_FUN(x,NS);%每次迭代都记录最好的解
BestITAE(iter)=x(1,4);
end %Limit Cycle end
if iter>MaxCycle%如果迭代次数达到最大值,即退出循环
break
end
%经过一轮搜索后,对最差的一半解进行重新搜索新解
for worse=NS/2:1:NS
NewX=FindElse_FUN(x(1,:),x(NS,:),MaxPID,MinPID);
NewX(1,4)=PID_FUN(NewX(1,1),NewX(1,2),NewX(1,3));
if x(worse,4)>NewX(1,4)
x(worse,:)=NewX(1,:);
end
end
end % MaxCycle Cycle end
NewX(1,:)=x(1,:);
for i=2:1:NS
if x(i,4)<NewX(1,4)
NewX(1,:)=x(i,:);
end
end
NewX(1,:)
BestITAE
PID_FUNTest(NewX(1,1),NewX(1,2),NewX(1,3),1);
for i=1:1:100
j=i;
BestJ(j)=BestITAE(j);
end
IterBestJ(BestJ,100,1);
plot(BestITAE);
xlabel('BestITAE'),ylabel('time(s)');
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab【优化求解-单目标求解】基于人工蜂群算法求解无刷直流电机PID控制.zip
共9个文件
m:7个
png:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2023-09-27
10:19:17
上传
评论
收藏 24KB ZIP 举报
温馨提示
1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可si信 %% 开发者:Matlab科研助手 %% 更多咨询关注天天Matlab微信公众号
资源推荐
资源详情
资源评论
收起资源包目录
Matlab【优化求解-单目标求解】基于人工蜂群算法求解无刷直流电机PID控制.zip (9个子文件)
PID_FUNTest.m 1KB
Sort_FUN.m 341B
IterBestJ.m 497B
FindNewSolution_FUN.m 594B
untitled.png 12KB
PID_FUN.m 1KB
PID_ABC.m 3KB
FindElse_FUN.m 913B
2.png 12KB
共 9 条
- 1
资源评论
Matlab科研辅导帮
- 粉丝: 3w+
- 资源: 7785
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#通用固定资产管理系统源码带二维码数据库 SQL2008源码类型 WebForm
- Matlab 建立了并具有数字调压功能的空间矢量脉宽调制SVPWM逆变器仿真
- 毕业设计-毕业设计&课设-推荐系统项目:含协同过滤、矩阵分解等算法及相关代码
- 电力系统继电保护整定及其应用-发电机组与变压器保护
- C++极速内存池、跨平台高效C++内存池
- C#WMS仓库管理系统源码 WMS仓储管理系统源码数据库 SQL2008源码类型 WinForm
- 基于51单片机电子称称重压力检测阈值报警系统设计.zip
- C#ASP.NET工程项目管理源码带文档数据库 SQL2008源码类型 WebForm
- 20210203047_卢诗贝_大数据1班.rar
- GL《装成偏执狂攻略清冷师尊翻车后》作者:酸辣离蒿.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功