智能优化算法:乌燕鸥优化算法-附代码

2019智能优化算法:乌燕鸥优化算法


摘要:乌燕鸥优化算法是由 G. Dhiman 和 A.Kaur于 2019 年针对工业工程问题提出的一种新的优化算法,其灵感来源于海鸟在自然界中觅食的行为,乌燕鸥是杂食性鸟类,以蚯蚓、昆虫、鱼等食物为生。这种算法具有很强的全局搜索能力,精度也较高。

1.算法原理

1.1 迁移行为(全局探索)

迁移行为,也就是探索部分,主要分为三个部分:冲突避免,聚集和更新。

(1)冲突避免:
c s t = S A ∗ P s t ( Z ) (1) c_{st} = S_A*P_{st}(Z) \tag{1} cst=SAPst(Z)(1)
其中, p s t p_{st} pst表示乌燕鸥的当前位置, c s t c_{st} cst表示的是在不与其他乌燕鸥碰撞的情况下应当处于的位置, S A S_A SA代表了一个避免碰撞的变量因素,用来计算避免碰撞后的位置,它的约束条件如公式(2)
S A = C f − ( Z ∗ ( C f / M a x i t e r a t i o n s ) ) (2) S_A=C_f-(Z*(C_f/Max_{iterations}))\tag{2} SA=Cf(Z(Cf/Maxiterations))(2)
其中, C f C_f Cf是用来调整 S A S_A SA的控制变量, Z Z Z表示当前迭代次数,因此 S A S_A SA C f C_f Cf到 0 线性递减。本文中 C f C_f Cf的值设置为 2,因此, S A S_A SA将从 2 到 0 逐渐减小。

(2)聚集

聚集是指在避免冲突的前提下向相邻乌燕鸥中最好的位置靠拢,也就是向最优解的位置靠拢,其数学表达式如下:
m s t = C B ∗ ( p b s t ( Z ) − p s t ( Z ) ) (3) m_{st}=C_{B}*(p_{bst}(Z)-p_{st}(Z))\tag{3} mst=CB(pbst(Z)pst(Z))(3)
其中 m s t m_{st} mst表示在不同位置的 p s t p_{st} pst最优解的位置 p b s t p_{bst} pbst移动的过程,
C B C_B CB是一个使探索更加全面的随机变量,按照以下公式变化:
C B = 0.5 ∗ R r a n d (4) C_{B}=0.5*R_{rand}\tag{4} CB=0.5Rrand(4)
其中, R r a n d R_{rand} Rrand是 0 到 1 之间的随机数。

(3) 更新

更新是指在朝向最优解的位置更新轨迹,其轨迹 d s t d_{st} dst的数学表达式为:
d s t = c s t + m s t (5) d_{st}=c_{st}+m_{st}\tag{5} dst=cst+mst(5)

1.2 攻击行为(局部探索)

在迁移过程中,乌燕鸥可以通过翅膀提高飞行高度也可以调整自身的速度和攻击角度,在攻击猎物的时候,它们在空中的盘旋
行为可定义为以下数学模型:
x ′ = R ∗ s i n ( i ) (6) x'=R*sin(i) \tag{6} x=Rsin(i)(6)

y ′ = R ∗ c o s ( i ) (7) y'=R*cos(i)\tag{7} y=Rcos(i)(7)

z ′ = R ∗ i (8) z' = R*i\tag{8} z=Ri(8)

R = u e k v (9) R = ue^{kv}\tag{9} R=uekv(9)

其中, R R R表示每个螺旋的半径, i i i 表示 [ 0 , 2 π ] [0,2\pi] [0,2π]之间的变量。 u u u v v v 是定义其螺旋形状的常数,在本文中均设定为 1, e 则是自然对数的基底。乌燕鸥的位置将按照下面的公式不断更新:
p s t ( Z ) = ( d s t ∗ ( x ′ + y ′ + z ′ ) ) ∗ p b s t ( Z ) (10) p_{st}(Z)=(d_{st}*(x'+y'+z'))*p_{bst}(Z) \tag{10} pst(Z)=(dst(x+y+z))pbst(Z)(10)
算法流程:

Step1. 初始化算法参数,迭代次数,种群数量等等。

Step2.计算适应度值。

Step3.乌燕鸥进行迁移操作

Step4.乌燕鸥进行攻击操作

Step5.乌燕鸥更新位置

Step6.计算适应度值,并记录全局最优值

Step7.判断是否达到结束条件,如果没有则重复步骤Step2-Step7,否则输出最终结果。

2.实验结果

在这里插入图片描述

3.参考文献

[1] Dhiman G, Kaur A. STOA: A bio-inspired based optimization algorithm for industrial engineering problems. Engineering Applications of Artificial Intelligence, 2019, 82:148-174.

[1]贾鹤鸣,李瑶,孙康健.基于遗传乌燕鸥算法的同步优化特征选择[J/OL].自动化学报:1-18[2020-12-29].https://doi.org/10.16383/j.aas.c200322.

4.Matlab代码

5.python代码

上述代码见个人资料介绍

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
乌燕鸥算法(Swiftlet Algorithm)是一种基于鸟群行为的优化算法,其灵感来源于乌燕鸥群体的觅食行为。该算法具有全局收敛性和较快的收敛速度,在多个优化问题中表现出色。 关于乌燕鸥算法的Matlab代码,您可以在网上找到相关的资源,例如Github上有一些开源项目提供了乌燕鸥算法的Matlab实现。这些代码通常包含算法的基本框架、参数设置和优化目标函数等部分,您可以根据自己的需求进行调整和修改。 下面是一份乌燕鸥算法的Matlab示例代码,供您参考: ``` % Swiftlet Algorithm for optimization problems % Author: Zhijun Li (leezhijun@cumt.edu.cn) % Date: 2021-06-01 % % Reference: % Li Z, Ding L, Li X, et al. Swiftlet algorithm: a novel swarm intelligence algorithm for global optimization[J]. Soft Computing, 2020, 24(14): 10069-10083. % Li Z, Ding L, Li X, et al. A novel swarm intelligence algorithm: swiftlet algorithm[C]//International Conference on Intelligent Computing. Springer, Cham, 2020: 425-436. % % Usage: % [x,f]=swa(fitfun,n,m,lb,ub,max_iter) % % Inputs: % fitfun - objective function handle % n - number of population % m - dimension of variables % lb - lower bound of variables % ub - upper bound of variables % max_iter - maximum number of iterations % % Outputs: % x - the best solution found % f - the best fitness value found function [x,f]=swa(fitfun,n,m,lb,ub,max_iter) %% Initialize parameters alpha=1; % weight coefficient beta=1; % weight coefficient gamma=0.1; % step size coefficient p=0.5; % probability parameter c1=2; % learning factor c2=2; % learning factor epsilon=0.01; % tolerance value max_turn=5; % maximum number of turns for each individual %% Initialize population x=lb+(ub-lb)*rand(n,m); v=zeros(n,m); %% Evaluate objective function value f=feval(fitfun,x); [fmin,idx]=min(f); gbest=x(idx,:); %% Main loop for t=1:max_iter %% Update velocity and position for i=1:n % Compute step size step_size=gamma/sqrt(t)*norm(randn(1,m)); % Compute velocity update v(i,:)=alpha*v(i,:)+beta*(gbest-x(i,:))+step_size*randn(1,m); % Compute position update x(i,:)=x(i,:)+v(i,:); % Boundary handling x(i,:)=max(x(i,:),lb); x(i,:)=min(x(i,:),ub); end %% Evaluate objective function value f_new=feval(fitfun,x); %% Update individual best and global best for i=1:n % Update individual best if f_new(i)<f(i) x(i,:)=x(i,:)+(f(i)-f_new(i))*v(i,:)/norm(v(i,:))^2; f(i)=f_new(i); end % Update global best if f_new(i)<fmin gbest=x(i,:); fmin=f_new(i); end end %% Update step size and probability parameter turn=zeros(n,1); for i=1:n % Compute turn number for each individual if f_new(i)>=f(i) turn(i)=turn(i)+1; end % Update step size for each individual if turn(i)>max_turn gamma=gamma/c1; else gamma=gamma*c2; end % Update probability parameter for each individual if f_new(i)<f(i) p=p+c1*(1-p)/t; else p=p-c2*p/t; end end %% Check convergence condition if gamma<epsilon && p<epsilon break; end %% Print iteration information fprintf('Iteration %d: Best fitness = %f\n',t,fmin); end end ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智能算法研学社(Jack旭)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值