智能优化算法与MATLAB编程实践
上QQ阅读APP看书,第一时间看更新

1.4.3 主函数设计

通过上述分析,可以设置蜉蝣优化算法参数如下。

设置蜉蝣雌雄性种群数量pop为30,最大迭代次数maxIter为100,个体的维度dim为7(即x1x2x3x4x5x6x7),个体上边界ub =[3.6, 0.8, 28, 8.3,8.3, 3.9, 5.5],个体下边界lb=[2.6, 0.7, 17, 7.3, 7.3, 2.9, 5]。蜉蝣优化算法求解减速器设计问题的主函数main设计如下:

%% 基于蜉蝣优化算法的减速器设计
clc;clear all;close all;
%参数设定
pop = 30;%种群数量
dim = 7;%变量维度
ub = [3.6, 0.8, 28, 8.3, 8.3, 3.9, 5.5];%个体上边界信息
lb = [2.6, 0.7, 17, 7.3, 7.3, 2.9, 5];%个体下边界信息
maxIter = 100;%最大迭代次数
fobj = @(x) fun(x);%设置适应度函数为fun(x)
%蜉蝣优化算法求解问题
[Best_Pos,Best_fitness,IterCurve] = MOA(pop,dim,ub,lb,fobj,maxIter);
%绘制迭代曲线
figure
plot(IterCurve,'r-','linewidth',1.5);
grid on;%网格开
title('蜉蝣优化算法迭代曲线')
xlabel('迭代次数')
ylabel('适应度')
disp(['求解得到的x1为:',num2str(Best_Pos(1))]);
disp(['求解得到的x2为:',num2str(Best_Pos(2))]);
disp(['求解得到的x3为:',num2str(round(Best_Pos(3)))]);
disp(['求解得到的x4为:',num2str(Best_Pos(4))]);
disp(['求解得到的x5为:',num2str(Best_Pos(5))]);
disp(['求解得到的x6为:',num2str(Best_Pos(6))]);
disp(['求解得到的x7为:', num2str(Best_Pos(7))]);
disp(['最优解对应的函数值为:',num2str(Best_fitness)]);
%计算不满足约束条件的个数
[fitness,g]=fun(Best_Pos);
n=sum(g>0);%约束的值大于0的个数
disp(['违反约束条件的个数',num2str(n)]);

程序运行结果如图1.7所示。

图1.7 程序运行结果

运行结果如下:

求解得到的x1为:3.5
求解得到的x2为:0.7
求解得到的x3为:17
求解得到的x4为:8.054
求解得到的x5为:7.9878
求解得到的x6为:3.3663
求解得到的x7为:5.2934
最优解对应的函数值为:3015.6084
违反约束条件的个数0

从收敛曲线上看,适应度函数值随着迭代次数不断减小,表明蜉蝣优化算法不断地对参数进行优化。最后,在约束条件范围内,得到了一组满足约束条件的参数,对减速器的优化设计具有指导意义。