✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
⛄ 部分代码
%%
cl;清除; 关闭所有;
%% 问题定义
% 目标函数
ANSWER=listdlg('PromptString','Choose Objective Function','SelectionMode','single', 'ListString', {'1.ZDT', '2.ZDT2', '3.ZDT3'});
如果当量(答案,1);ObjectiveFunctinotallow=@(x) ZDT(x); funcname='ZDT';
elseif eq(ANSWER,2); 目标函数=@(x) ZDT2(x); funcname='ZDT2';
elseif eq(ANSWER,3); 目标函数=@(x) ZDT3(x); funcname='ZDT3';
别的; disp('终止'); 返回
结尾
问题大小=[1 10]; % 决策变量大小
下界=0;% 决策变量下限
上界=1;% 决策变量上限
%% 蜉蝣参数
methname='蜉蝣算法';
最大值=100;% 最大迭代次数
nPop=20;nPopf=20;% 人口规模(男性和女性)
n帕累托=50;% 存储库大小
g=0.8;% 惯性重量
gdamp=1;% 惯性重量阻尼比
a1=1.0;% 个人学习系数
a2=1.5;a3=1.5;% 全球学习系数
贝塔=2;% 视距系数
舞蹈=0.77;% 突变系数
dance_damp=0.99; % 突变系数阻尼比
fl=0.77;% 随机飞行
fl_damp=0.99;
% 交配参数
n交叉=20;% Parnets 数量(后代)
nMutatinotallow=round(0.5*nPop); % 突变体数量
亩=0.02;% 突变率
% 速度限制
VelMax=1*(上界-下界)*5;VelMin=-VelMax;
%% 初始化
%运行初始
empty_mayfly.Positinotallow=[];
empty_mayfly.Velocity=[];
empty_mayfly.Cost=[];
empty_mayfly.Best.Positinotallow=[];
empty_mayfly.Best.Cost=[];
empty_mayfly.Rank=[];
empty_mayfly.Dominatinotallow=[];
empty_mayfly.DownedCount=[];
empty_mayfly.CrowdingDistance=[];
蜉蝣=repmat(empty_mayfly,nPop,1);
蜉蝣f=repmat(empty_mayfly,nPopf,1);
对于 i=1:nPop
% 初始化男性位置
蜉蝣(i).Positinotallow=unifrnd(LowerBound,UpperBound,ProblemSize);
% 初始化速度
蜉蝣(i).Velocity=zeros(ProblemSize);
% 评估
蜉蝣(i).Cost=ObjectiveFunction(蜉蝣(i).Position);
% 更新个人最好成绩
蜉蝣(i).Best.Positinotallow=蜉蝣(i).Position;
蜉蝣(i).Best.Cost=蜉蝣(i).Cost;
% 初始化女性位置
如果 i<=nPopf
Mayflyf(i).Positinotallow=unifrnd(LowerBound,UpperBound,ProblemSize);
蜉蝣f(i).Velocity=zeros(ProblemSize);
Mayflyf(i).Cost=ObjectiveFunction(Mayflyf(i).Position);
蜉蝣f(i).Best.Positinotallow=蜉蝣f(i).Position;
蜉蝣f(i).Best.Cost=蜉蝣f(i).Cost;
结尾
结尾
% 合并
帕累托=[蜉蝣;蜉蝣];
% 非支配排序
[帕累托,F]=帕累托排序(帕累托);
% 计算拥挤距离
帕累托=计算CD(帕累托,F);
% 排序人口
帕累托=排序解决方案(帕累托);
帕累托=帕累托(F{1});
% 截断
如果数字(帕累托)>n帕累托
帕累托=帕累托(1:n帕累托);
结尾
%% 蜉蝣主循环
对于它=1:MaxIt
对于 i=1:nPop
领导者=帕累托(兰迪(大小(帕累托,2)));
% 更新女性
如果 i<=nPopf
如果支配(蜉蝣(i),蜉蝣f(i))
rmf=norm(蜉蝣(i).Position-蜉蝣f(i).Position);
蜉蝣f(i).Velocity = g*Mayflyf(i).Velocity ...
+a3*exp(-beta*rmf^2).*(Mayfly(i).Position-Mayflyf(i).Position);
别的
e=unifrnd(-1,+1,ProblemSize);
蜉蝣f(i).Velocity = g*Mayflyf(i).Velocity+fl*(e);
结尾
% 应用速度限制
蜉蝣f(i).Velocity = max(蜉蝣f(i).Velocity,VelMin);
蜉蝣f(i).Velocity = min(Mayflyf(i).Velocity,VelMax);
% 更新位置
蜉蝣f(i).Position = Mayflyf(i).Position + Mayflyf(i).Velocity;
% 速度镜像效果
IsOutside=(Mayflyf(i).Position<LowerBound | Mayflyf(i).Position>UpperBound);
蜉蝣f(i).Velocity(IsOutside)=-Mayflyf(i).Velocity(IsOutside);
% 应用头寸限制
蜉蝣f(i).Position = max(蜉蝣f(i).Position,LowerBound);
蜉蝣f(i).Position = min(蜉蝣f(i).Position,UpperBound);
% 评估
Mayflyf(i).Cost=ObjectiveFunction(Mayflyf(i).Position);
蜉蝣f(i).Best.Positinotallow=蜉蝣f(i).Position;
蜉蝣f(i).Best.Cost=蜉蝣f(i).Cost;
结尾
% 更新男性
% 更新速度
如果支配(领导者,蜉蝣(i))
rpbest=norm(蜉蝣(i).Best.Position-蜉蝣(i).Position);
rgbest=norm(leader.Position-Mayfly(i).Position);
蜉蝣(i).Velocity = g*Mayfly(i).Velocity ...
+a1*exp(-beta*rpbest^2).*(Mayfly(i).Best.Position-Mayfly(i).Position) ...
+a2*exp(-beta*rgbest^2).*(leader.Position-Mayfly(i).Position);
别的
e=unifrnd(-1,+1,ProblemSize);
蜉蝣(i).Velocity = g*Mayfly(i).Velocity+dance*(e);
结尾
% 应用速度限制
蜉蝣(i).Velocity = max(蜉蝣(i).Velocity,VelMin);
蜉蝣(i).Velocity = min(蜉蝣(i).Velocity,VelMax);
% 更新位置
蜉蝣(i).Position =蜉蝣(i).Position +蜉蝣(i).Velocity;
% 速度镜像效果
IsOutside=(Mayfly(i).Position<LowerBound | Mayfly(i).Position>UpperBound);
蜉蝣(i).Velocity(IsOutside)=-蜉蝣(i).Velocity(IsOutside);
% 应用头寸限制
蜉蝣(i).Position = max(蜉蝣(i).Position,LowerBound);
蜉蝣(i).Position = min(蜉蝣(i).Position,UpperBound);
% 评估
蜉蝣(i).Cost=ObjectiveFunction(蜉蝣(i).Position);
% 更新个人最好成绩
如果占主导地位(蜉蝣(i),蜉蝣(i).Best)
蜉蝣(i).Best.Positinotallow=蜉蝣(i).Position;
蜉蝣(i).Best.Cost=蜉蝣(i).Cost;
elseif 占优(蜉蝣(i).Best,蜉蝣(i))
% 没做什么
别的
如果兰德<0.5
蜉蝣(i).Best.Positinotallow=蜉蝣(i).Position;
蜉蝣(i).Best.Cost=蜉蝣(i).Cost;
结尾
结尾
结尾
% 伴侣
popc=repmat(empty_mayfly,nCrossover/2,2);
对于 k=1:nCrossover/2
% 选择父母
i1=兰迪(数字(帕累托));
i2=兰迪(数字(帕累托));
%p1=蜉蝣(i1).Best;
%p2=蜉蝣f(i2).Best;
% 应用交叉
[popc(k,1).Position, popc(k,2).Position]=Crossover(Pareto(i1).Position,Pareto(i2).Position);
% 评估
popc(k,1).Position = max(popc(k,1).Position, LowerBound);
popc(k,1).Position = min(popc(k,1).Position, UpperBound);
popc(k,1).Cost=ObjectiveFunction(popc(k,1).Position);
% 评估
popc(k,2).Position = max(popc(k,2).Position, LowerBound);
popc(k,2).Position = min(popc(k,2).Position, UpperBound);
popc(k,2).Cost=ObjectiveFunction(popc(k,2).Position);
popc(k,1).Best.Position = popc(k,1).Position;
popc(k,1).Best.Cost = popc(k,1).Cost;
popc(k,1).Velocity= zeros(ProblemSize);
popc(k,2).Best.Position = popc(k,2).Position;
popc(k,2).Best.Cost = popc(k,2).Cost;
popc(k,2).Velocity= zeros(ProblemSize);
end
% break
popc=popc(:);
% Mutation
popm=repmat(empty_mayfly,nMutation,1);
for k=1:nMutation
i=randi(numel(Pareto));
popm(k)=Pareto(i);
popm(k).Positinotallow=Mutate(popm(k).Position,mu,LowerBound,UpperBound);
% Evaluation
popm(k).Position = max(popm(k).Position, LowerBound);
popm(k).Position = min(popm(k).Position, UpperBound);
popm(k).Cost=ObjectiveFunction(popm(k).Position);
end
% Create Merged Population
popc=[popc
popm]; %#ok
split=round((nCrossover/2+nMutation)/2);
males=popc(1:split);
Mayfly=[Mayfly
males]; %#ok
males=popc(split+1:nCrossover/2+nMutation);
Mayflyf=[Mayflyf
males]; %#ok
% SHORT
% Non-Dominated Sorting
[Mayfly, F]=ParetoSorting(Mayfly);
Mayfly=CalcCD(Mayfly,F);
[Mayfly, F]=SortSolutions(Mayfly);
[Mayflyf, F]=ParetoSorting(Mayflyf);
Mayflyf=CalcCD(Mayflyf,F);
[Mayflyf, F]=SortSolutions(Mayflyf);
Mayfly=Mayfly(1:nPop);
Mayflyf=Mayflyf(1:nPopf);
Pareto=[Pareto
Mayfly
Mayflyf]; %#ok
all=Pareto;
% Non-Dominated Sorting
[Pareto, F]=ParetoSorting(Pareto);
% Calculate Crowding Distance
Pareto=CalcCD(Pareto,F);
% Sort Population
[Pareto, F]=SortSolutions(Pareto);
% Store F1
Pareto=Pareto(F{1});
% Truncate
if numel(Pareto)>nPareto
Pareto=Pareto(1:nPareto);
end
% Show Iteration Information
disp(['迭代' num2str(it) ': 存储库中的解数 = ' num2str(numel(Pareto))]);
% 绘制 F1 成本
图1);
PlotCosts(全部,帕累托);
%暂停(0.01);
g=g*gdamp;
舞蹈=舞蹈*dance_damp;
fl = fl*fl_damp;
结尾
%% 结果
⛄ 运行结果
⛄ 参考文献
[1]陈伟超, and 符强. "基于倒位变异的蜉蝣优化算法." 计算机系统应用 30.8:7.