zl程序教程

您现在的位置是:首页 >  后端

当前栏目

智能优化算法应用:基于麻雀搜索算法的积分计算 -附代码

算法应用计算智能代码 基于 优化 积分
2023-09-14 09:06:11 时间

智能优化算法应用:基于麻雀搜索算法的积分计算


摘要:本文提出了一种基于麻雀搜索算法的积分计算算法。该方法的基本思路是: 先在积分区间内产生一些随机分割点( 不一定是等距分割点),然后用麻雀优化算法对这些分割点进行优化,将优化后得到的最优分割点从小到大排序并作为该区间的分割点,这些分割点结合 Simpson3/8 积分公式进行数值计算。

1.麻雀优化算法

麻雀搜索算法具体原理请参照:https://blog.csdn.net/u011835903/article/details/108830958

2.基于麻雀搜索算法的积分计算原理和步骤

提出的基于麻雀算法求任意函数数值积分算法流程可归结如下:

Step1:初始化麻雀搜索算法相关参数,如种群数量,搜索维度等。在被积区间内[a,b]​随机生成初始种群
X = ( X 1 , X 2 , . . . , X N ) (1) X = (X_1,X_2,...,X_N) \tag{1} X=(X1,X2,...,XN)(1)
其中: X i = ( X i 1 , X i 2 , . . . , X i n ) ; X i k ∈ [ a , b ] X_i=(X_{i1},X_{i2},...,X_{in}); X_{ik}\in [a,b] Xi=(Xi1,Xi2,...,Xin);Xik[a,b]表示第 k k k 个节点, n n n表示积分区间内的节点数。

Step2:计算适应度并进行排序。先将随机产生的每个个体置于积分区间的左右端点之间,并按照升序排列,这样就得到 n + 2 n+2 n+2个节点和 n + 1 n+1 n+1 小段,再分别计算这 n + 2 n + 2 n+2 个节点相邻节点之间的距离 d j , j = 1 , 2 , … , n + 1 d_j,j=1,2,…,n+1 dj,j=1,2,,n+1及这 n + 2 n+2 n+2个节点对应的函数值和每小段中点对应的函数值,确定每小段左右端点和中间点的 3个函数值中,记下最大函数值$max,Y_j
$ 、最小函数值 m i n   Y j , j = 1 , 2 , … , n + 1 min\,Y_j,j = 1,2,…,n +1 minYj,j=1,2,,n+1. 并定义适应度为:
f j = ∑ j = 1 n + 1 ∣ m a x Y j − m i n Y j ∣ d j (2) f_j=\sum_{j=1}^{n+1}|maxY_j-minY_j|d_j\tag{2} fj=j=1n+1maxYjminYjdj(2)
越小表明分割方法越好。

Step3:根据计算的适应度

Step4:根据麻雀算法位置更新公式更新位置

Step5:计算适应度值,并更新最优位置

Step6:若未达到最大迭代次数 T m a x T_{max} Tmax ,则返回步骤4;否则,输出全局最优位置;

Step7:计算定积分值。将所求的最优分割点 [ a , x 1 , . . . , x n , b ] [a,x_1,...,x_n,b] [a,x1,...,xn,b],分别代入数值积分式进行计算 ( a = x 0 , b = x n + 1 ) (a = x_0,b=x_{n+1}) (a=x0,b=xn+1),得出:
J 1 = ∑ j = 0 n + 1 { f ( x j + 1 ) + f ( x j ) } ∗ d j / 2 (3) J_1 = \sum_{j=0}^{n+1}\{f(x_{j+1}) + f(x_j)\}*d_j/2 \tag{3} J1=j=0n+1{f(xj+1)+f(xj)}dj/2(3)

J 2 = ∑ j = 0 n + 1 { f ( x j + 1 ) + 4 f ( x j + 1 + x j 2 ) + f ( x j ) } ∗ d j / 6 (3) J_2= \sum_{j=0}^{n+1}\{f(x_{j+1}) + 4f(\frac{x_{j+1}+x_j}{2})+f(x_j)\}*d_j/6 \tag{3} J2=j=0n+1{f(xj+1)+4f(2xj+1+xj)+f(xj)}dj/6(3)

J 3 = ∑ j = 0 n + 1 { f ( x j + 1 ) + 3 f ( 2 x j + 1 + x j 3 ) + 3 f ( x j + 1 + 2 x j 3 ) + f ( x j ) } ∗ d j / 8 (4) J3 =\sum_{j=0}^{n+1}\{f(x_{j+1}) + 3f(\frac{2x_{j+1}+x_j}{3})+3f(\frac{x_{j+1}+2x_j}{3})+f(x_j)\}*d_j/8 \tag{4} J3=j=0n+1{f(xj+1)+3f(32xj+1+xj)+3f(3xj+1+2xj)+f(xj)}dj/8(4)

3.算法实验

为了验证本文提出算法的有效性和正确性,选取了几个典型的数值积分函数。取 N= 20,D = 60,分别计算 6 个函数的在[0,2]的积分值。函数信息如下:
f 1 = x 2 (5) f1 = x^2 \tag{5} f1=x2(5)

f 2 = x 4 (6) f2 = x^4 \tag{6} f2=x4(6)

f 3 = 1 + x 2 (7) f3 = \sqrt{1+x^2}\tag{7} f3=1+x2 (7)

f 4 = 1 x + 1 (8) f4 =\frac{1}{x+1}\tag{8} f4=x+11(8)

f 5 = s i n ( x ) (9) f5=sin(x)\tag{9} f5=sin(x)(9)

f 6 = e x (10) f6 = e^x\tag{10} f6=ex(10)

名称f1f2f3f4f5f6
理论精确解2.6676.4002.9581.0991.4166.389
麻雀计算法得到的J12.66746.4042.95811.09871.41586.3896
麻雀计算法得到的J22.66676.4002.95791.09861.41616.3891
麻雀计算法得到的J32.66676.4002.95791.09861.41616.3891

收敛曲线如下图所示:
在这里插入图片描述

4.参考文献:

[1]黄基诞.基于改进灰狼优化算法的积分计算实验[J].实验室研究与探索,2020,39(11):16-19+66.

5.Matlab代码

个人资料介绍