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

news2024/12/28 18:53:29

边境牧羊犬优化算法(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==1
        fopt=maxf;
    end
    %finding the optimum fitness value
    if fopt>maxf
        fopt=maxf;
    end
    fopt1(g)=fopt;
    if(g>1)
        if(fopt1(g)>fopt1(g-1))
            k=k+1;
            if (k>5)
                eye=1;
                k=0;
            end
        end
    end
    %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.coloradmin.cn/o/1704652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现 Vue 标签页切换效果的组件开发

在本次开发中,我们将实现一个 Vue 组件,用于展示和切换标签页。 背景有移动动画效果 该组件将具有以下功能: 标签页左右滚动点击标签页切换内容关闭指定标签页支持多种标签页风格 以下是实现该组件的具体步骤: 创建 Vue 组件…

esp8266的rtos和nonos区别

https://bbs.espressif.com/viewtopic.php?t75242#p100294 https://blog.csdn.net/ydogg/article/details/72598752

Function Calling学习

Function Calling第一篇 Agent:AI 主动提要求Function Calling:AI 要求执行某个函数场景举例:明天上班是否要带伞?AI反过来问你,明天天气怎么样? Function Calling 的基本流程 Function Calling 完整的官…

【传知代码】私人订制词云图-论文复现

文章目录 概述原理介绍核心逻辑1、选取需要解析的txt文档2、选取背景图明确形状3、配置停用词4、创建分词词典,主要解决新的网络热词、专有名词等不识别问题 技巧1、中文乱码问题,使用的时候指定使用的文字字体2、更换背景图3、词库下载以及格式转换方式…

数组单调栈-901. 股票价格跨度、leetcode

单调栈作为一种数据结构在求解类递增、递减方面的题目中有较为广泛的应用,在以往的leetcode中所见到的相关单调栈的题目均为单一元素,今天刷到901题目时,想到了将数组元素作为单调栈中元素的方法进行求解。 题目链接及描述 901. 股票价格跨…

C++ | Leetcode C++题解之第108题将有序数组转换为二叉搜索树

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums, 0, nums.size() - 1);}TreeNode* helper(vector<int>& nums, int left, int right) {if (left > right) {return nu…

Python 全栈体系【四阶】(五十四)

第五章 深度学习 十二、光学字符识别&#xff08;OCR&#xff09; 3. 文字识别技术 3.1 CRNNCTC(2015) CRNN&#xff08;Convolutional Recurrent Neural Network&#xff09;即卷积递归神经网络&#xff0c;是DCNN和RNN的组合&#xff0c;专门用于识别图像中的序列式对象。…

计算机组成原理易混淆知识点总结(持续更新)

目录 1.机器字长&#xff0c;存储字长与指令字长 2.指令周期,机器周期,时钟周期 3.CPI,IPS,MIPS 4.翻译程序和汇编程序 5.计算机体系结构和计算机组成的区别和联系 6.基准程序执行得越快说明机器的性能越好吗? 1.机器字长&#xff0c;存储字长与指令字长 不同的机器三者…

VMware ESXi 兼容性查询

官网兼容性查询地址&#xff1a;https://www.vmware.com/resources/compatibility/search.php

Android Studio自带Profiler工具进行CPU资源及线程问题分析步骤

1、运行需要检测CPU资源问题与线程问题的程序 这里以“com.example.opengltest”程序为例。 2、点击Profiler按钮 3、点击SESIONS ""号按钮选择设备&#xff0c;选择对应设备下的应用或进程 4、双击CPU区块 5、选择Trace config选项&#xff0c;选择“Java/Kotli…

Reader类的使用方法和技巧,你掌握了吗?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

raft 协议和etcd实战

文章目录 leader选举日志复制安全性preVote 阶段preVote 投票阶段preVote阶段的作用 集群成员变更etcd raft实践etcd raft写流程时序图问题如何保障消息的幂等性&#xff0c;不能重复提交如何保障消息的原子性&#xff0c;不能提交一半raft wal日志的作用是MVCC方式的作用etcd …

瑞吉外卖项目学习笔记(一)

项目展示&#xff1a; 一、软件开发整体介绍 1.1 软件开发流程 作为软件开发人员&#xff0c;我们的主要工作是在 编码阶段 1.2 角色分工 1.3 软件环境 二、瑞吉外面项目介绍 2.1 项目介绍 系统管理后台页面&#xff1a; 移动端页面&#xff1a; 2.2 产品原型展示 产品原型是…

2024 年科技裁员综合清单

推荐阅读&#xff1a; 独立国家的共同财富 美国千禧一代的收入低于父辈 创造大量就业机会却毁掉了财富 这四件事是创造国家财富的关键 全球财富报告证实联盟自始至终无能 美国人已陷入无休止债务循环中&#xff0c;这正在耗尽他们的财务生命 2024 年&#xff0c;科技行业…

二分例题(D.负重越野,I.路径规划)

这两天的训练赛都有一道二分的题&#xff0c;但是都没往二分上面想&#xff0c;同样不知道怎么二分。 D. Fast and Fat 思路 二分的关键也就是check函数怎么写了&#xff0c;求队伍最大速度&#xff0c;可以分为速度>mid和<mid两部分&#xff0c;再判断&#xff0c;能不…

课时138:变量进阶_变量实践_综合案例

2.1.3 综合案例 学习目标 这一节&#xff0c;我们从 免密认证、脚本实践、小结 三个方面来学习 免密认证 案例需求 A 以主机免密码认证 连接到 远程主机B我们要做主机间免密码认证需要做三个动作1、本机生成密钥对2、对端机器使用公钥文件认证3、验证手工演示 本地主机生成…

dolphinscheduler standalone安装

官方文档&#xff1a;https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone 1.安装&#xff08;以放在/home为例&#xff09; 下载见&#xff1a;https://download.csdn.net/download/taotao_guiwang/89311365 tar -xvzf apache-dolphinsche…

《中国改革报》的发行范围有哪些?

《中国改革报》是国家发展和改革委员会主管的全国性综合类报纸&#xff0c;其发行范围广泛&#xff0c;涵盖了全国各地。 该报在全国范围内公开发行&#xff0c;读者群体包括政府部门、研究机构、企业界、学术界以及关注中国改革与发展的社会各界人士。 它通过订阅、零售等多…

力扣hot100学习记录(十)

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 题意 将两个有序列表合并 思路 用两个指针分别指向两个链表最开始&#xff0c;每次把较小的拿出来&#xff0c;相应指针后移&#xff0c;直到一个链表…

Java 多线程(01)

运行一个 Java 程序就是跑一个 Java 进程&#xff0c;该进程至少有一个线程即主线程&#xff0c;而 main 方法就是主线程的入口&#xff1b; 一、常见多线程名词解释 并发&#xff1a;一个 CPU 核心上&#xff0c;通过快速轮转调度的方式&#xff0c;执行多个进程&#xff0c…