本节主要介绍如何利用蜉蝣优化算法对减速器设计工程问题进行参数寻优,主要包括问题描述、适应度函数设计、主函数设计几个部分。
在机械系统中,齿轮箱的一个重要部件是减速器,它可用于多种应用,如图1.6所示。在这个优化问题中,减速器的重量设计应在11个约束条件下最小化。该优化问题一共涉及7个变量:齿宽 b (= x 1 ),齿模 m (= x 2 ),小齿轮齿数 z (= x 3 ),轴承之间第一根轴的长度 l 1 (= x 4 ),轴承之间第二轴的长度 l 2 (= x 5 ),第一轴的直径 d 1 (= x 6 ),第二轴的直径 d 2 (= x 7 )。该问题的数学公式如下。
最小化:
图1.6 减速器示意图
约束:
变量范围:
2.6≤ x 1 ≤3.6
0.7≤ x 2 ≤0.8
x 3 ∈{17,18,19,…,28}
7.3≤ x 4 ≤8.3
7.3≤ x 5 ≤8.3
2.9≤ x 6 ≤3.9
5≤ x 7 ≤5.5
基于轮齿的弯曲应力、表面应力、轴的横向偏转、轴的应力来考虑,本工程问题包括11个约束,其中7个为非线性约束,4个为非线性不等式约束。
在该问题中,变量范围的约束条件如下:
2.6≤ x 1 ≤3.6
0.7≤ x 2 ≤0.8
x 3 ∈{17,18,19,…,28}
7.3≤ x 4 ≤8.3
7.3≤ x 5 ≤8.3
2.9≤ x 6 ≤3.9
5≤ x 7 ≤5.5
可以通过设置蜉蝣个体的边界条件来进行设置,即设置蜉蝣个体的上边界为 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]。针对约束 g 1 ( X )- g 11 ( X ),在适应度函数中进行处理。针对不满足约束条件的情况,采用增加惩罚数的方式来对适应度进行求解。当满足约束条件时,不增加惩罚数,反之则增加。使得不满足条件个体的适应度比较大,竞争力减弱。定义不满足约束条件的个数为 n ,惩罚系数为 P ,惩罚数的计算如下:
V = nP
适应度的计算如下:
fitness = f ( x )+ V
定义适应度函数fun如下:
通过上述分析,可以设置蜉蝣优化算法参数如下。
设置蜉蝣雌雄性种群数量 pop 为30,最大迭代次数 maxIter 为100,个体的维度 dim 为7(即 x 1 , x 2 , x 3 , x 4 , x 5 , x 6 , x 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]。蜉蝣优化算法求解减速器设计问题的主函数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
从收敛曲线上看,适应度函数值随着迭代次数不断减小,表明蜉蝣优化算法不断地对参数进行优化。最后,在约束条件范围内,得到了一组满足约束条件的参数,对减速器的优化设计具有指导意义。