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,time);
xlabel('BestITAE'),ylabel('time(s)');
没有合适的资源?快使用搜索试试~ 我知道了~
基于MATLAB实现的人工蜂群算法优化无刷直流电机PID控制+使用说明文档
共8个文件
m:7个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 187 浏览量
2024-05-22
22:44:34
上传
评论 1
收藏 18KB ZIP 举报
温馨提示
CSDN IT狂飙上传的代码均可运行,功能ok的情况下才上传的,直接替换数据即可使用,小白也能轻松上手 【资源说明】 基于MATLAB实现的人工蜂群算法优化无刷直流电机PID控制,并基于三种评价指标函数IAE、ITAE、ITSE来进行对比分析+使用说明文档 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误,根据提示GPT修改;若不会,私信博主(问题描述要详细); 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可后台私信博主; 4.1 期刊或参考文献复现 4.2 Matlab程序定制 4.3 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信 5、欢迎下载,沟通交流,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于MATLAB实现的人工蜂群算法优化无刷直流电机PID控制,并基于三种评价指标函数IAE、ITAE、ITSE来进行对比分析+使用说明文档.zip (8个子文件)
蜂群算法
PID_FUNTest.m 1KB
Sort_FUN.m 341B
IterBestJ.m 497B
FindNewSolution_FUN.m 594B
PID_FUN.m 1KB
PID_ABC.m 3KB
FindElse_FUN.m 913B
使用说明文档.md 13KB
共 8 条
- 1
资源评论
- m0_576984032024-06-15支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
IT狂飙
- 粉丝: 4778
- 资源: 2640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功