上QQ阅读APP看书,第一时间看更新
1.4.3 主函数设计
通过上述分析,可以设置蜉蝣优化算法参数如下。
设置蜉蝣雌雄性种群数量pop为30,最大迭代次数maxIter为100,个体的维度dim为7(即x1,x2,x3,x4,x5,x6,x7),个体上边界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
从收敛曲线上看,适应度函数值随着迭代次数不断减小,表明蜉蝣优化算法不断地对参数进行优化。最后,在约束条件范围内,得到了一组满足约束条件的参数,对减速器的优化设计具有指导意义。