购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 拉伸/压缩弹簧设计

本节主要介绍如何利用哈里斯鹰优化算法对拉伸/压缩弹簧设计工程问题进行参数寻优。主要包括问题描述;适应度函数设计;主函数设计几个部分。

2.4.1 问题描述

如图2.11所示,拉伸/压缩弹簧设计问题的目的是在满足最小挠度、震动频率和剪应力的约束下,最小化拉压弹簧的重量。该问题由3个连续的决策变量组成,即弹簧线圈直径( d x 1 )、弹簧簧圈直径( D x 2 )和绕线圈数( P x 3 )。数学模型表示公式如下。

图2.11 拉伸/压缩弹簧设计问题示意图

最小化:

约束条件为:

变量范围:

0.05≤ x 1 ≤2

0.25≤ x 2 <1.3

2≤ x 3 ≤15

2.4.2 适应度函数设计

在该问题中,变量范围的约束条件如下:

0.05≤ x 1 ≤2

0.25≤ x 2 <1.3

2≤ x 3 ≤15

可以通过设置哈里斯鹰个体的边界条件进行设置。即设置哈里斯鹰个体的上边界为 ub =[2,1.3,15],哈里斯鹰个体的下边界为 lb =[0.05,0.25,2]。针对约束 g 1 ( X )− g 4 ( X ),在适应度函数中进行处理。针对不满足约束条件的情况,采用增加惩罚数的方式对适应度进行求解,当满足约束条件时,不增加惩罚数,反之增加。使得不满足条件个体的适应度比较大,竞争力减弱。定义不满足约束条件的个数为 n ,惩罚系数为 P ,惩罚数的计算如下:

V = n × P

适应度的计算如下:

fitness = f ( x )+ V

定义适应度函数fun如下:

%% 适应度函数
function [fitness,g] = fun(x)
    P=10E4;%惩罚系数
    x1=x(1);
    x2=x(2);
    x3=x(3);
    f=(x3+2)*x2*x1^2;
    %约束条件计算
    g(1)=1-(x2^3*x3)/(71785*x1^4);
    g(2)=(4*x2^2-x1*x2)/(12566*(x2*x1^3-x1^4))+1/(5108*x1^2)-1;
    g(3)=1-(140.45*x1)/(x2^2*x3);
    g(4)=(x1+x2)/1.5-1;

    V = P*sum(g>0);%惩罚数计算
    fitness=f + V;%计算适应度
end

2.4.3 主函数设计

通过上述分析设置哈里斯鹰优化算法参数如下。

设置哈里斯鹰种群数量 pop 为30,最大迭代次数 maxIter 为100,个体维度 dim 为3(即 x 1 x 2 x 3 ),个体上边界 ub =[2,1.3,15],个体下边界 lb =[0.05,0.25,2]。

哈里斯鹰优化算法求解拉伸/压缩弹簧设计问题的主函数main设计如下:

%% 基于哈里斯鹰优化算法的拉伸/压缩弹簧设计
clc;clear all;close all;
%参数设定
pop = 30;%种群数量
dim = 3;%变量维度
ub = [ 2,1.3,15];%个体上边界信息
lb = [0.05,0.25,2];%个体下边界信息
maxIter = 100;%最大迭代次数
fobj = @(x) fun(x);%设置适应度函数为fun(x)
%哈里斯鹰优化算法求解问题
[Best_Pos,Best_fitness,IterCurve] = HHO(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(Best_Pos(3))]);
disp(['最优解对应的函数值为:',num2str(Best_fitness)]);
%计算不满足约束条件的个数
[fitness,g]=fun(Best_Pos);
n=sum(g>0);%约束的值大于0的个数
disp(['违反约束条件的个数',num2str(n)]);

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

图2.12 程序运行结果

运行结果如下:

求解得到的x1为:0.061677
求解得到的x2为:0.64799
求解得到的x3为:3.8189
最优解对应的函数值为:0.014343
违反约束条件的个数0

从收敛曲线上看,适应度函数值随着迭代次数不断减小,表明哈里斯鹰优化算法不断地对参数进行优化。最后,在约束条件范围内,得到了一组满足约束条件的参数,对拉伸/压缩弹簧的优化设计具有指导意义。 uIP3cHXN5A1W66ToI9VAvCD3JzkE0IUKDV+hrNdE0UvunpG71qXqLsmXnviWEWO9

点击中间区域
呼出菜单
上一章
目录
下一章
×