function [Destination_fitness,bestPositions,Convergence_curve]=ismaforkelm(N,Max_iter,lb,ub,dim,fobj)
% 种群初始化
bestPositions=zeros(1,dim);
Destination_fitness=inf;%设置初始全最优适应度
AllFitness = inf*ones(N,1);%初始所有种群的适应度
weight = ones(N,dim);%每一个黏菌的权重
%种群初始化
lb = [1,1];%下边界
ub = [10,10];%上边界
Ub=ub(1);Lb=lb(1);
X=Goodnode_initialization(N,dim,Ub,Lb);
it=1; %初始迭代次数
lb=ones(1,dim).*lb; % 下界
ub=ones(1,dim).*ub; % 上界
z=0.03; % 初始参数z
% 主循环
while it <= Max_iter
it
for i=1:N
% 检查是否在范围内
Flag4ub=X(i,:)>ub;
Flag4lb=X(i,:)<lb;
X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
AllFitness(i) = fobj(X(i,:));
end
[X,AllFitness]=ODE(X,AllFitness,ub,lb,fobj);
if AllFitness(1) < Destination_fitness
bestPositions=X(1,:);
Destination_fitness = AllFitness(1);
end
[SmellOrder,SmellIndex] = sort(AllFitness); %%筛选出最优和最差的种群
worstFitness = SmellOrder(N);
bestFitness = SmellOrder(1);
% bestPositions=X(SmellIndex(1),:);
% Destination_fitness = AllFitness(SmellIndex(1));
S=bestFitness-worstFitness+eps; %避免分母为0的操作
%计算每一个黏菌的权重
for i=1:N
for j=1:dim
if i<=(N/2) %参考源码,式2.5
weight(SmellIndex(i),j) = 1+rand()*log10((bestFitness-SmellOrder(i))/(S)+1);
else
weight(SmellIndex(i),j) = 1-rand()*log10((bestFitness-SmellOrder(i))/(S)+1);
end
end
end
%更新当前最优的种群和适应度
if bestFitness < Destination_fitness
bestPositions=X(SmellIndex(1),:);
Destination_fitness = bestFitness;
end
a = atanh(-(it/Max_iter)+1); %参考原式2.4
b = 1-it/Max_iter;
% 更新每一代种群的位置
for i=1:N
if rand<z %Eq.(2.7)
X(i,:) = (ub-lb)*rand+lb;
else
p =tanh(abs(AllFitness(i)-Destination_fitness)); %Eq.(2.2)
vb = unifrnd(-a,a,1,dim); %Eq.(2.3)
vc = unifrnd(-b,b,1,dim);
for j=1:dim
r = rand();
A = randi([1,N]); % two positions randomly selected from population
B = randi([1,N]);
if r<p %Eq.(2.1)
X(i,j) = bestPositions(j)+ vb(j)*(weight(i,j)*X(A,j)-X(B,j));
else
X(i,j) = vc(j)*X(i,j);
end
end
end
end
f_ave=mean(AllFitness);
for g=1:N
if fobj(X(i,:))<f_ave
X(i,:)=X(i,:).*trnd(it);
X(i,:) = Bounds(X(i,:), lb, ub);
else
rand_num=randperm(0.5*N,1);
X(i,:)=(X(i,:)+X(rand_num,:))/2;
X(i,:) = Bounds(X(i,:), lb, ub);
end
end
Convergence_curve1(it)=Destination_fitness;
it=it+1;
end
智能算法及其模型预测
- 粉丝: 2529
- 资源: 871
最新资源
- 飞行汽车发展的关键技术和创新
- 离网下三相不平衡负载,基于下垂控制的T型三电平逆变器,采用正负序分离四环控制,正序电压电流双闭环,负序电压电流双闭环,中点电位平衡控制,采用SPWM调制 1.提供下垂控制原理,参数计算方法以及相关文
- PikaPython 是一个完全重写的超轻量级python引擎,零依赖,零配置,可以在少于4KB的RAM下运行(如stm32g030c8和stm32f103c8),极易部署和扩展
- comsol瓦斯抽采数值模拟comsol 流固耦合数值模型
- 2-NP管理器V3.1.13 APK反编译等安卓逆向功能
- 基于S7-200 PLC和组态王组态切片机控制系统 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
- 相间soc均衡,相内soc均衡,级联H桥储能,储能变器,零序电压注入法,负序电压注入法,解耦控制,单极倍频载波移相调制,蓄电池充放电控制
- 大雾天气识别数据集,1012张图,使用PASICAL VOC XML格式标注
- 大雾天气识别数据集,1012张图,使用 COCO JSON格式标注
- 大雾天气识别数据集,1012张图,使用yolov7pytorch格式标注
- 大雾天气识别数据集,1012张图,使用yolov8格式标注
- 大雾天气识别数据集,1012张图,使用yolov5格式标注
- 大雾天气识别数据集,1012张图,使用yolov9格式标注
- 大雾天气识别数据集,1012张图,使用yolov11格式标注
- 2-自动隐藏和显示桌面图标v6.27绿色版
- Comsol声子晶体能带计算,包含六角晶格不同原胞的选取以及简约布里渊区高对称点选择 核心在于区分三角晶格和六角晶格区别
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈