边境牧羊犬优化算法,原理详解,MATLAB代码免费获取

server/2024/12/22 22:19:08/

边境牧羊犬优化算法(Border Collie Optimization,BCO)是一种受自然启发的群智能优化算法。该算法是通过模仿边境牧羊犬的放牧风格来开发的。本文成功地采用了边境牧羊犬从正面和侧面的独特放牧风格。在这个算法中,整个种群被分成两部分,即狗和羊。这样做是为了同时关注搜索空间的探索和利用。边境牧羊犬使用一种叫做“注视”的掠食动作。狗的这种技术被用来防止算法陷入局部最优。利用Sobol的灵敏度指标进行了灵敏度分析,该算法与蚁群算法、差分算法、遗传算法、灰狼优化器、哈里斯鹰优化器、粒子群优化器和鲸鱼优化算法等7种最先进的算法相比,该算法具有很强的竞争力。

1fd2c6b0db56e97f3c92633dc0bccbe8.png

该成果于2020年发表在知名SCI期刊“IEEE access”上,目前被引高达71次。

9b56cb63505163ae5b28cf8e2092f60b.png

边界牧羊犬优化中,考虑了一个由三只狗和一只羊组成的种群。在现实生活中,一只狗就足以控制兽群。然而,由于不同优化问题的搜索空间可能很大,因此考虑了三个狗。在启动算法时,一个由三只狗和一只羊组成的群体被可视化。羊出去到不同的方向吃草,狗负责把它们带回农场。狗和羊的位置用随机变量初始化。狗分为领头狗、左狗和右狗是根据它们的位置来命名的。领头的狗从前面控制兽群。因此,在每次迭代中,具有最佳适应度的个体被指定为领头狗或羊群前面的狗。他们主要负责采集。

10a048a82ff84b0e7b514e8bb26e4f7d.png

1、算法原理

(1)狗的速度 三只狗在时刻(t +1)的速度用下面的公式计算。

式中,Vf(t + 1)、Vri(t + 1)和Vle(t + 1)分别表示领头犬、右犬和左犬在(t + 1)时刻的速度。同理,Vf(t)、Vri(t)和Vle(t)分别表示导犬、左犬和右犬在t时刻的速度。Accf(t)、Accri(t)和Accle(t)分别表示导犬、右犬和左犬在t时刻的加速度。Popf(t)、Popri(t)和people (t)分别为时间(t)时领头狗、右狗和左狗的位置。

(2)羊的速度 利用三种放牧技术更新羊的速度。羊群聚集:离领头狗较近的羊群,向领头狗的方向移动。因此,这些羊只被收集起来。他们的选择是基于他们的健康值。

其中,dg的值为正,说明羊离领头狗更近。在这种情况下,羊的速度使用以下公式更新。

式中,羊群的速度Vsg直接受到时刻(t + 1)领头狗的速度和时刻(t)领头狗的加速度的影响。Popsg为待聚集羊群的当前位置。

跟踪:靠近左狗和右狗的羊,需要从两侧跟踪,以保持它们的轨道。这些羊是Dg值为负的羊。这些羊的速度更受左右狗的速度的影响。被跟踪的羊的速度更新方程如下所示。

式中,被跟踪的羊的速度,Vss取决于左右狗的速度。当狗从侧面引导羊群时,因此取随机穿越角的正切值θ1和θ2。θ1的取值范围为(1 ~ 89)度,θ2的取值范围为(91 ~ 179)度。θ1和θ2是随机选择的。

观察:那些完全误入歧途的羊是需要观察的。当在连续迭代中,个体的适应度没有提高时,实现了瞄准。在这种情况下,最不适合的狗被认为走在羊后面,给它们看一眼。因此,假设它们经历了发育迟缓,这可以用下面提到的方程来表示。

式中,Vle(t +1)和Accle(t)为左狗的速度和加速度,此时左狗在3只狗中适应度最差,Vri(t+1)和Accri(t)为右犬的速度、加速度,此时右犬在3只狗中适应度最小。Popse是要聚集的羊的当前位置。考虑最不适合的狗,因为假设这只狗离羊最近。

(3)狗和羊的加速度

加速度更新的方程来源于物理学中最常用的方程,如下所述。

所有狗和羊的加速度,即Accf(t + 1), Accri(t + 1), Accri(t + 1), Accsg(t + 1), Accss(t + 1)和Accse(t)使用(11)进行更新。I∈{f, le, ri, sg, ss至se}。

(4)狗和羊的时间

使用以下等式更新每个个体的遍历时间(T)。

其中,每个个体的平均遍历时间为维度(d)。

(5)狗的种群更新 使用位移的基本物理方程更新狗的位置。

在迭代过程中,下一次迭代的解用 表示,当前迭代的位置用Xi(t)表示。参数a计算为 ,其中randn表示正态分布中的随机数。N表示总体规模,Dim表示所考虑问题的维度。

公式更新了领头狗的位置,而左狗和右狗的位置使用(14)和式(15)更新。

(6)羊的种群更新 当羊属于聚集和跟踪群体时,使用以下公式更新羊的位置。

对于被注视的羊,使用下面提到的等式。

0d31a6e7a780ef6c6d87a5b10e354fc5.png

BCO优化算法的伪代码如下

d30ccc6625d1f6ab981d3d9ba67d98b8.png

2、结果展示

c2f02d76098de18dc7fe1c4673e44fdf.png

8951a256d768cd54265588bb16190d39.png

55d4624d289dfa0d090e37ba0099aa0a.png

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 边境牧羊犬优化算法(BCO)
%Border Collie Optimization
clear all;
%Population size
n=30;
%maximum no. of iterations
gen=200;
%Optimization function name
fname='func19';
%Retrieve function details(fobj), dimension(L), lower bound(lb) and upper bound(ub) of
%function
[lb,ub,L,fobj]=Func_details(fname);
%Intialize the population(initP-Population,acc-acceleration of each individual)
[initP,acc]=Generate(n,L,ub,lb);
%Vt=velocity of each individuals
Vt=(zeros(n,L));
%t=time of each individual
t=rand(n,1);
%Max. Fitness values
fopt=inf;
%Variable to store fitness
fit=zeros(1,n);
pop=initP;
%k=counter variable for iterations required for Eyeing mechanism
k=1;
fopt1=zeros(gen,1);
for g=1:gen%Calculate fitness of individuals[fit,maxf,pos]=Fitness(pop,n,L,ub,lb,fobj);eye=0;if g==1fopt=maxf;end%finding the optimum fitness valueif fopt>maxffopt=maxf;endfopt1(g)=fopt;if(g>1)if(fopt1(g)>fopt1(g-1))k=k+1;if (k>5)eye=1;k=0;endendend%Sorting the dogs and sheep[pop,Vt,fit,acc,t]=Herding(pop,Vt,fit,n,L,acc,t);%Updating velocity, acceleration and time of the population[Vt,acc,t,r1,l1,tempg,temps]=UpdateV(Vt,n,L,acc,t,pop,fit,eye);%Updating positions of population[pop]=Update(pop,Vt,t,acc,n,L,eye);%Checking the range of the population is maintained[pop,acc,t,Vt]=check(pop,n,L,ub,lb,acc,Vt,t);fprintf('\n\nfopt %f\t maxf %f\tgen %d',fopt,maxf,g);
end

参考文献

[1]Dutta T, Bhattacharyya S, Dey S, et al. Border collie optimization[J]. IEEE access, 2020, 8: 109177-109197.


完整代码获取

后台回复关键词:

TGDM833


http://www.ppmy.cn/server/46870.html

相关文章

html前端怎么赚钱:探索多元盈利途径

html前端怎么赚钱:探索多元盈利途径 在数字化时代,HTML前端技能成为越来越多人追求的职业方向。然而,仅仅掌握HTML前端技能并不足以确保稳定的收入来源。那么,HTML前端如何赚钱呢?本文将从四个方面、五个方面、六个方…

带交互的卡尔曼滤滤波|一维滤波|源代码

背景 一维卡尔曼滤波的MATLAB例程,​背景为温度估计。 代码介绍 运行程序后,可以自己输入温度真实值: 以20℃为例,得到如下的估计值​: 滤波前的值和滤波后的值分别于期望值(真实值)作差…

Mysql学习经验总结(一)

Mysql的简介: MySql是一个开源的关系型数据库管理系统,广泛应用于Web应用程序的数据存储和管理。它支持多用户并发访问,具有高性能、稳定可靠、易于使用和管理的特点。 MySql官网提供了详细的文档、下载、社区等资源,官网的地址…

React@16.x(12)ref 转发-forwardRef

目录 1,介绍2,类组件如何使用4,应用场景-高阶组件HOC 1,介绍 上篇文章中提到,ref 只能对类组件使用,不能对函数组件使用。 而 ref 转发可以对函数组件实现类似的功能。 使用举例: import Re…

MFC工控项目实例之二添加iPlotx控件

承接专栏《MFC工控项目实例之一主菜单制作》 在WIN10下使用Visual C 6.0 (完整绿色版)添加iPlotx控件的方法。 1、在资源主对话框界面点击鼠标右键如图选择插入Active控件点击进入。 2、选择iPlotx Contrlolh点击确定。 3、在对话框界面插入iPlotx控件。…

【ECMAScript 详解:现代 JavaScript 的核心】

ECMAScript 详解 ECMAScript 是 JavaScript 的官方标准,它定义了 JavaScript 的核心语法和功能。在这篇文章中,我们将深入探讨 ECMAScript 的各个方面,包括历史背景、语言特性、新功能和未来发展趋势。 目录 介绍 什么是 ECMAScript&#x…

linux 查看 线程名, 线程数

ps -T -p 3652 ps H -T <PID> ps -eLf | grep process_name top -H -p <pid> 查看进程创建的所有线程_ps 显示一个进程的所有线程名字-CSDN博客

使用Bash脚本确保定时任务的单例执行

简介&#xff1a; 在Linux系统中&#xff0c;定时任务是自动化运维的重要组成部分。然而&#xff0c;有时候我们可能需要确保某个定时任务在任何给定时间点只运行一次&#xff0c;以避免资源冲突或数据不一致。本文将介绍如何使用Bash脚本和文件锁来实现单例定时任务。 什么是…