【优化PID】基于matlab混沌改进的蚁群算法求解船舶锅炉压力控制PID优化问题【含Matlab源码 2303期】

⛄一、混沌改进的蚁群算法求解船舶锅炉压力控制PID优化

本文的优化算法设计思路为:将混沌优化算法应用到蚁群算法的初始环节中以此设置初始信息素值, 采取变尺度混沌局部再搜索机制和引入混沌扰动的信息素更新策略, 有效克服局部最优的缺点, 提高搜索效率。

基于改进混沌蚁群算法的设计步骤如下:

  1. 混沌优化算法初始化, 得到初始混沌路径。初始化蚁群规模数目为Na, 蚂蚁活动范围为[a, b], 引入随机函数以产生混沌映射的初始值x (0) 。通过Logistic映射迭代Na-1次产生混沌序列{X c}, 将混沌序列{X c}中变量分别进行载波映射得到新的混沌序列{Xd}, 上述过程如下:
    在这里插入图片描述
    式 (19) 中, a和b为蚁群搜索范围[a, b]的边界。最后, 将序列{Xd}中Na个新混沌变量利用全排列构造原理构造出Na!条不同的初始混沌路径。

  2. 获取初始信息素值。将通过步骤2) 产生的Na!条初始混沌路径代入步骤3) 中航路代价函数, 从中选择前Na个最小值并取倒数, 以此作为改进蚁群算法的信息素初值。

  3. 初始化迭代次数u=0, 最大迭代次数为Ncmax。

  4. 将Na只蚂蚁均置于起始点, 每只蚂蚁根据式 (11) 所示的启发函数ηij (t) 和信息素浓度函数τij (t) , 按照式 (10) 所示状态转移概率Pik, j (t) 选择下一节点, 直至所有蚂蚁均搜索到目标点, 则输出Na个航路。计算这Na个航路对应的航路代价值, 从中择优得出当前迭代次数u下的最优解。假设当前迭代次数u下的最优解为第t (t∈[1, Na]) 只蚂蚁寻找的路径, 记作Pbest (u, t) , 初始化为Pbest (u, t) 。当迭代次数u≥1时, 满足:
    在这里插入图片描述
    其中, Pbest (u-1, t) 为上一次迭代次数下最优解。

  5. 引入变尺度混沌局部再搜索机制, 进行局部再搜索。以上一步骤产生的Pbest (u, t) 为基础, 通过以下2个公式产生ε个在对应于最优解Pbest (u, t) 的搜索点附近具有混沌特性的搜索点集合W, 计算ε个搜索点的航路代价值, 并将它们与Pbest (u, t) 进行比较, 取两者的最小值替换Pbest (u, t) 。这些搜索点的计算公式如下:
    在这里插入图片描述

  6. 引入混沌扰动的信息素更新策略, 对上述寻优得到的航路按下式进行全局信息素更新:
    在这里插入图片描述

⛄二、部分源代码

clear
K=20;%迭代次数
N=10;%蚁群规模
Rho=0.95;%信息素蒸发系数,取值0~1之间,推荐取值0.7~0.95
Q=1;%信息素增加强度,大于0,推荐取值1左右
Lambda=0.2;%蚂蚁爬行速度,取值0~1之间,推荐取值0.1~0.5
LB=[2,0.5,0.8];
UB=[3,2,1.6];
Num=[1,2];
Den=[1,2,1];
Delay=0.5;
ts=0.01;
StepNum=1000;
SigType=1;
PIDLB=-10;
PIDUB=10;

%% 第二步:调用蚁群算法
[BESTX,BESTY,ALLX,ALLY]=ACOUCP(K,N,Rho,Q,Lambda,LB,UB,Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);

%% 第三步:整理输出结果
bestx=BESTX{K};
kp=bestx(1);
ki=bestx(2);
kd=bestx(3);
disp(‘最佳控制参数kp,ki,kd分别为’);
disp(bestx);
[J,u,yout,error]=PIDOBJ(kp,ki,kd,Num,Den,Delay,ts,StepNum,SigType,PIDLB,PIDUB);
time=ts*(1:StepNum);
if SigType1%阶跃信号
rin=ones(1,StepNum);
elseif SigType
2%方波信号
rin=sign(sin(22pitime));
elseif SigType==3%正弦波信号
rin=0.5
sin(22pi*time);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]刘蓉,杨帆,张衡.基于改进混沌蚁群算法的无人机航路规划[J].指挥信息系统与技术. 2018,9(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
%%清空环境? clear all; clc; %%参数设置? w=0.6;%惯性因子? c1=2;%加速常数 c2=2;%加速常数? Dim=3;%维数 SwarmSize=50;%粒子群规模? ObjFun=@PIDcl;%待优化函数句柄? MaxIter=100;%最大迭代次数? MinFit=-Inf;%最小适应值 Vmax=1; Vmin=-1; Ub=[10 10 10]; Lb=[0 0 0]; %%粒子群初始化? Range=ones(SwarmSize,1)*(Ub-Lb); Swarm=rand(SwarmSize,Dim).*Range+ones(SwarmSize,1)*Lb;%初始化粒子群 VStep=rand(SwarmSize,Dim)*(Vmax-Vmin)+Vmin;%初始化速度 fSwarm=zeros(SwarmSize,1); for i=1:SwarmSize fSwarm(i,:)=feval(ObjFun,Swarm(i,:));%粒子群的适应值计算 end %%个体极值和群体极值 [bestfbestindex]=min(fSwarm); zbest=Swarm(bestindex,:);%全局最佳 gbest=Swarm;%个体最佳 fgbest=fSwarm;%个体最佳适应值 fzbest=bestf;%全局最佳适应值 %%迭代寻优 iter=0; y_fitness=zeros(1,MaxIter);%预先产生4个空矩阵? K_p=zeros(1,MaxIter); K_i=zeros(1,MaxIter); K_d=zeros(1,MaxIter); while ((iter<MaxIter)&&(fzbest>MinFit)) for j=1:SwarmSize %速度更新 VStep(j,:)=w*VStep(j,:)+c1*rand*(gbest(j,:)-Swarm(j,:))+c2*rand*(zbest-Swarm(j,:)); if VStep(j,:)>Vmax,VStep(j,:)=Vmax; end if VStep(j,:)<Vmin,VStep(j,:)=Vmin; end %位置更新? Swarm(j,:)=Swarm(j,:)+VStep(j,:); for k=1:Dim if Swarm(j,k)>Ub(k),Swarm(j,k)=Ub(k); end if Swarm(j,k)<Lb(k),Swarm(j,k)=Lb(k); end end %适应值 fSwarm(j,:)=feval(ObjFun,Swarm(j,:)); %个体最优更新? if fSwarm(j)<fgbest(j) gbest(j,:)=Swarm(j,:); fgbest(j)=fSwarm(j); end %群体最优更新? if fSwarm(j)<fzbest zbest=Swarm(j,:); fzbest=fSwarm(j); end end

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值