算法应用:基于蜣螂优化(DBO)算法的工程优化设计(含MATLAB代码)

 先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。 

这一期是利用蜣螂优化(DBO)算法去求解工程领域中的实际问题。文献[1]设计的DBO算法是2022年11月27日提出的,到现在才一个多月时间。这里先放一个DBO算法的链接,不清楚DBO算法的,可以先看我往期的推送,了解它的算法原理和计算流程。

01
优化问题模型

工程领域有许多优化设计问题,今天先介绍6种:压力容器设计、滚动轴承设计、拉伸/压缩弹簧设计、悬臂梁设计、轮系设计、三杆桁架设计。这些优化设计都是在满足各种约束条件下,使得材料花销最少、或质量最小、或体积最小等。因此,它们的数学模型都是单目标或多目标的约束优化模型。今天介绍的6个问题都属于单目标约束优化。

1.1 压力容器设计

在该设计问题中,目标函数为压力容器的总成本,包括材料、成形和焊接成本。如图1所示,压力容器的两端都有盖子封顶,头部一端的封盖为半球状。该优化问题包括4个决策变量:容器壁的厚度(Ts)、半球头部的厚度(Th)、内半径(R)、和圆柱截面的长度(L)。

图1 压力容器设计

其数学模型如下:


1.2 滚动轴承设计

滚动轴承优化设计的目标是使得滚动轴承的动态承载能力最大,有10个决策变量和10个约束条件。如图2所示,10个决策变量包括五个设计变量和五个设计参数来优化滚动轴承的承载能力。这些设计变量分别是节径Dm、球径Db、滚道内外曲率系数(fofi)以及球的总数Z,设计参数分别是e、ε、ζ、KDmax和KDmin,仅在约束条件上出现。10个约束条件都是基于制造和运动学因素的非线性约束。注意,这是一个最大化问题,算法求解时,将其处理成最小化问题。

图2 滚动轴承设计

其数学模型如下:

1.3 拉伸/压缩弹簧设计

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

图3 拉伸/压缩弹簧设计

其数学模型如下:

1.4 悬臂梁设计

悬臂梁包括5个截面为方形的空心单元。从图4中可以看出,每个单元由一个变量定义,而厚度是恒定的,因此共有5个结构参数,即5个决策变量。悬臂梁优化设计的目标是将横梁的重量减到最小,约束条件是满足一个垂直位移约束。

图4 悬臂梁设计

其数学模型如下:

1.5 轮系设计

轮系设计问题旨在使图5所示的轮系的传动比成本最小化。这个问题有四个整数决策变量,其中𝑇𝑎、𝑇𝑏、𝑇𝑑、𝑇𝑓分别代表四个不同齿轮的齿数。

图5 轮系设计

其数学模型如下:

1.6 三杆桁架设计

三杆桁架设计问题的目的是通过调整横截面积(x1和x2)来最小化三杆桁架的体积。该三杆式桁架在每个桁架构件上受到应力(σ)约束,如图6所示。该优化问题具有一个非线性适宜度函数、3个非线性不等式约束和两个连续决策变量。

图6 三杆桁架设计

其数学模型如下:

02
约束条件处理

DBO算法本身是针对无约束优化问题提出的。因此,将DBO算法用于求解约束优化问题时,需要对约束条件进行处理。根据进化计算中约束处理方法的研究进展,约束处理方法主要分为3类:罚函数方法、可行规则方法和多目标方法。

因原理简单和易于实现,罚函数方法是目前应用广泛的约束处理方法之一。罚函数方法是在目标函数中加入一个惩罚函数将约束问题转换成一个无约束问题,该方法的难点在于罚函数的选择。常用的罚函数方法主要有3种:死罚函数方法、静态罚函数方法和自适应罚函数方法。

可行规则方法建立在可行解要优于不可行解的偏好基础上,3条比较规则为:可行解要优于不可行解;当两个都是可行解时,选择目标函数值小的解;当两个都是不可行解时,选择违反约束小的解。

近年来,多目标概念已经越来越多地用于进化计算中的约束处理问题,其思想是将约束转换成一个或多个目标。根据处理约束的不同原则,有两类多目标方法:一类是有两个目标的,如源目标函数和所有约束违反程函数;另一类是将每个约束看成一个目标。因此,对于有m个约束的约束问题来说,总共有m+1个目标函数。

惩罚函数是最流行的约束处理方法,因为它简单且易于实现。为了简单起见,这里使用文献[2]中的惩罚方法来处理这些工程优化设计问题的约束条件,这是一种常见的罚函数:

G𝑖(𝒙)是不等式约束,H𝑗(𝒙)是等式约束,𝑝是不等式约束的数量,𝑞是等式约束的数量,𝑎𝑖和𝑏𝑗是正的常数,𝜂和𝜆等于1或2。对于这种惩罚方法,当候选解违反任何约束时,目标函数值都会增加,将种群从不可行解推入可行域内。

这里是采用了文献[2]中一个比较经典的罚函数方法,旨在做简单的演示。实际上,大家也可以改用其他的罚函数方法,例如文献[3]中提出的Oracle罚函数方法,或者使用其他的约束处理技术。此外,利用智能优化算法求解约束优化问题时,除了算法上的改进外,也可以在约束条件的处理技术上做创新。比如文献[4]在文献[3]的基础上提出了一种改进的Oracle罚函数方法,并嵌入到差分进化(DE)算法中。文献[5]在算法和约束处理上都做了改进。

03
实验结果

将约束处理后的数学模型,利用DBO算法进行求解。为了对比性能,这里随便选了近期推送的两种算法来进行对比。这里将DBO算法的求解效果与哈里斯鹰优化(HHO)算法和白鲸优化(BWO)算法进行对比。不了解HHO算法或者BWO算法的朋友可以翻看往期推送。

由于DBO算法的种群规模只能是30的倍数,为了保证实验的科学性,三种算法的种群规模均为30,最大迭代次数为1000。取10次运行中最优的一次结果及其对应的决策变量值进行展示。对比结果如表1~表6所示,其中,最优结果用粗体表示;收敛曲线如图7~图12所示。这里就不再进一步做分析和讨论了。

表1 DBO、HHO和BWO在压力容器设计问题上的最优结果对比
算法TsThRL最优值
DBO0.79847790.39468841.37191185.85245920.96187173
HHO0.84107990.407297942.69365169.3986084.66482009
BWO0.8877040.42701644.27818179.40467017.42355547
表2 DBO、HHO和BWO在滚动轴承设计问题上的最优结果对比
算法DmDbZfifo
DBO125.719121.42559110.5150.5150005
HHO126.618720.04402110.5150.5862558
BWO125.977320.20524110.51546840.541816
KDminKDmaxεeζ最优值
0.4422510.62392870.30.062458710.710656985549.23863792
0.42028820.62008770.32675170.063550810.663395275976.24424012
0.4376480.66341330.30734890.034835460.6531876142.46689560

(这里需要注意的是,滚动轴承设计是最大化问题,在算法求解时将其处理成了最小化问题。因此最优值要取一个负号才是实际问题的最优结果,包括收敛曲线的绘制也要取反。)

表3 DBO、HHO和BWO在拉伸/压缩弹簧设计问题上的最优结果对比
算法dDP最优值
DBO0.05058050.330629130.01268813
HHO0.0545730.4301580.01281078
BWO0.05210580.364712110.01287256

表4 DBO、HHO和BWO在悬臂梁设计问题上的最优结果对比
算法x1x2x3x4x5最优值
DBO6.01915.30994.49113.50582.14791.33996061
HHO5.9715.21634.58463.48762.22661.34073305
BWO5.38645.06014.77834.97332.25151.40086059
表5 DBO、HHO和BWO在轮系设计问题上的最优结果对比
算法TaTbTdTf最优值
DBO431916492.7009E-12
HHO491619432.7009E-12
BWO341320532.3078E-11
表6 DBO、HHO和BWO在三杆桁架设计问题上的最优结果对比
算法x1x2最优值
DBO0.788770.40798263.89585015
HHO0.792940.39633263.90899011
BWO0.792860.3981264.06448937

图7 DBO、HHO和BWO在压力容器设计问题上的收敛曲线

图8 DBO、HHO和BWO在滚动轴承设计问题上的收敛曲线

图9 DBO、HHO和BWO在拉伸/压缩弹簧设计问题上的收敛曲线

图10 DBO、HHO和BWO在悬臂梁设计问题上的收敛曲线

图11 DBO、HHO和BWO在轮系设计问题上的收敛曲线

图12 DBO、HHO和BWO在三杆桁架设计问题上的收敛曲线
 

04
MATLAB代码

MATLAB代码请关注GZH:启发式算法讨论。其中,main.m是主函数,直接运行即可;DBO.m是算法的代码;Problem_range.m是6个工程优化设计问题的基本性质,规定了问题的维度、各决策变量的取值范围;Problem_models.m是6个工程优化设计问题的数学模型,即目标函数、约束条件,以及使用罚函数处理的过程;Bound_limit.m是边界约束处理,保证解的决策变量不超出取值范围。

其他:

哈里斯鹰优化(HHO)算法在工程优化设计中的应用

白鲸优化(BWO)算法在工程优化设计中的应用

蛇优化(SO)算法在工程优化设计中的应用

金豺优化(GJO)算法在工程优化设计中的应用

05
参考文献

[1] Xue J, Shen B. Dung beetle optimizer: a new meta-heuristic algorithm for global optimization[J]. The Journal of Supercomputing, 2022: 1-32.

[2] Coello C A C. Theoretical and numerical constraint-handling techniques used with evolutionary algorithms: a survey of the state of the art[J]. Computer methods in applied mechanics and engineering, 2002, 191(11-12): 1245-1287.

[3] Dong, M., Wang, N., Cheng, X., & Jiang, C.: Composite differential evolution with modified oracle penalty method for constrained optimization problems. Mathematical problems in engineering, 2014, 1-15 (2014).

[4] 汪逸晖, 高亮. 乌鸦搜索算法的改进及其在工程约束优化问题中的应用[J]. 计算机集成制造系统, 2021, 27(07): 1871-1883.

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
好的,根据您提供的信息,三杆桁架设计问题需要通过调整三个杆的横截面积来使三杆桁架的体积最小,并且在每个桁架构件上受到应力的约束。为了解决这个问题,可以采用遗传算法来进行优化。 以下是基于 MATLAB 的遗传算法实现三杆桁架设计问题的示例代码: 首先,需要定义目标函数,即体积的计算方法。由于三个杆的横截面积相等,因此只需要计算一个杆的体积即可。假设三个杆的横截面积分别为 $A$,则杆的体积可以表示为: ```matlab function V = volume(A, L) rho = 7800; % 材料密度 V = A * L * rho; end ``` 其次,需要定义约束条件。根据题目要求,在每个桁架构件上受到应力的约束,可以得到约束条件为: ```matlab function [c, ceq] = stress_constraints(A, L, P, sigma_max) F = P / 3; % 每个杆的受力 stress = F ./ (A / 1000); % 计算应力,A 单位为 mm^2,需转换为 m^2 c = stress - sigma_max; % 约束条件为应力不超过最大值 ceq = []; % 无等式约束 end ``` 其中,$P$ 是每个桁架构件上的受力,$\sigma_{max}$ 是最大应力。 最后,可以使用 MATLAB 自带的遗传算法函数 `ga` 来进行优化。以下是完整的代码: ```matlab % 定义目标函数 function V = volume(A, L) rho = 7800; % 材料密度 V = A * L * rho; end % 定义约束条件 function [c, ceq] = stress_constraints(A, L, P, sigma_max) F = P / 3; % 每个杆的受力 stress = F ./ (A / 1000); % 计算应力,A 单位为 mm^2,需转换为 m^2 c = stress - sigma_max; % 约束条件为应力不超过最大值 ceq = []; % 无等式约束 end % 定义遗传算法参数 nvars = 1; % 决策变量个数 lb = [1, 1, 1]; % 决策变量下限 ub = [1000, 1000, 1000]; % 决策变量上限 P = [1000, 1000, 1000]; % 每个桁架构件上的受力 sigma_max = 100000000; % 最大应力 options = gaoptimset('Display', 'iter', 'Generations', 100, 'PopulationSize', 50); % 运行遗传算法 [A, fval] = ga(@(A) volume(A, 10), nvars, [], [], [], [], lb, ub, @(A) stress_constraints(A, 10, P, sigma_max), options); ``` 其中,`nvars` 是决策变量个数,`lb` 和 `ub` 分别是决策变量的下限和上限,`P` 是每个桁架构件上的受力,`sigma_max` 是最大应力。 运行代码后,可以得到最优的横截面积和体积。需要注意的是,由于本问题是多目标优化问题,因此可能会存在多组最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

algorithmzzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值