当前位置: 首页 > news >正文

基于群智能的路径规划算法(四)------人工蜂群算法

   本系列文章主要记录学习基于群智能的路径规划算法过程中的一些关键知识点,并按照理解对其进行描述和进行相关思考。

   主要学习资料是来自 小黎的Ally 的 《第2期课程-基于群智能的三维路径规划算法》,视频链接如下(点击链接可跳转):

   https://space.bilibili.com/477041559/channel/seriesdetail?sid=863038

   本篇文章是本系列的第四篇文章 :人工蜂群算法


   一、人工蜂群算法简介

   Karaboga在2005年为解决多变量函数优化问题,提出了人工蜂群算法模型( Artificial Bee Colony ,ABC)。

   蜜蜂是一种群居昆虫,自然界中的蜜蜂总能在任何环境下以极高的效率找到优质蜜源,且能适应环境的改变。蜜蜂群的采蜜系统主要由蜜源、采蜜蜂、跟随蜂、侦查蜂等组成(某些资料有雇佣蜂、非雇佣蜂之分)∶
   蜜源:蜜源就是待求优化问题的可行解,是人工蜂群算法中所要处理的基本对象。蜜源的优劣用实际问题的适应度(目标函数)来评价。

   采蜜蜂:采蜜蜂采用贪婪准则,比较记忆中的最优解和邻域搜索解,当搜索解优于记忆最优解时,替换记忆解;反之,保持不变。在所有的采蜜蜂完成邻域搜索后,采蜜蜂回蜂房跳摆尾舞与跟随蜂共享蜜源信息。

   跟随蜂:根据采蜜蜂的蜜源信息以一定概率选择采蜜源,蜜量大的采蜜蜂吸引跟随蜂的概率大于蜜量小的采蜜蜂。同样,跟随蜂在采蜜源附近邻域搜索,采用贪婪准则,比较跟随蜂搜索解与原采蜜蜂的解,当搜索解优于原采蜜蜂的解时,替换原采蜜蜂的解,完成角色互换;反之,保持不变。

   侦查蜂:若某处蜜源陷入局部最优,采用侦查蜂大步长搜索的方式探索最优解。


   二、将蚁群算法应用于路径规划


   三、算法流程

   ① 初始化:在搜索空间中随机生成S、个蜜源位置,这些位置也就代表了第一代的采蜜蜂的最优位置

   ② 采蜜蜂在蜜源位置附近寻找新的蜜源:xij= +rand * (xij-xkj) 式中,j代表解的某一维度,在路径规划中也就是x、y、z的坐标,i代表目前的采蜜蜂,k是除了i之外的某个采蜜蜂编号。

   ③ 采蜜蜂回到蜂巢跳摆尾舞与跟随蜂共享蜜源信息,每一只跟随蜂根据蜜源适应度,以一定概率(轮盘赌法)选择具体的蜜源,并在周围采蜜。

   ④ 另外,若某处的蜜源在经历了设定的最大次数后仍未找到邻近更优的蜜源,此时考虑已经陷入局部最优,则调用侦查蜂采用较大步长的方式随机生成新的蜜源位置。xjj= xij+rand * map(j)


   四、轮盘选择法

   轮盘赌的核心思想就是对于每个待选择的点,其对应的概率越大,被选中的可能性就越大,通过将每个点对应的概率除以所有点对应概率之和的方式来对每个点对应的概率进行处理,处理后,每个点对应的概率相加即为1,然后将这些点依次摆放在0~1的一维数轴上,其概率值越大,所占用的数轴长度就越大(注意跟摆放位置无关,可任意摆放),摆放完成后每个点也就对应于0 ~ 1数轴上一个小区间,比如第1个点的概率是0.05,第2个点的概率是0.03,第3个点的概率是0.1 … …,则第1个点对应的区间为0 ~ 0.05,第2个点对应的区间为0.05 ~ 0.08 ,第3个点对应的区间率为0.08 ~ 0.18,以此类推,这样我们随机产生一个0 ~ 1之间的随机数,该随机数落在那个区间,那个点即为被选中的点。


   五、编程实现思路

   对 小黎的Ally 提供的程序 的实现思路总结如下:

   首先初始化第一代蜜源的位置,按照正态分布随机生成每个采蜜蜂的蜜源位置,即代表路径的关键点位置。然后使用B样条曲线由关键点生成路径,并计算每个采蜜蜂对应的蜜源也就是路径的适应度,路径越短,适应度越低(越好),然后更新全局最优。

   开始按照设定的迭代次数,进行循环迭代,在每一次迭代中,先让采蜜蜂在其当前蜜源位置附近寻找新的蜜源,对于每个采蜜蜂,首先随机选择一个其他采蜜蜂k,然后按照公式xij= +rand * (xij-xkj) ,更新当前采蜜蜂的蜜源位置,也就是代表路径的关键点的位置,然后计算新生成的蜜源位置的适应度,判断新蜜源与之前蜜源的适应度大小,若当前的蜜源位置更优,则对当前采蜜蜂的蜜源位置进行更新,若之前的更优,则将当前蜜蜂判断陷入局部最优的累加值加一(当累加达到设定的界限时,便认为当前采蜜蜂陷入了局部最优),然后判断是否更新种群最优。

   对于每个采蜜蜂均完成以上操作后,程序的第一阶段就完成了,采蜜蜂回到蜂巢跳摆尾舞与跟随蜂共享蜜源信息,每一只跟随蜂根据蜜源适应度,以按照轮盘赌的方式选择具体的蜜源,并根据其选择的蜜源,每只跟随蜂执行上面介绍的跟采蜜蜂一样操作。执行完后,程序的第二阶段完成了。

   注意:采蜜蜂跟跟随蜂最大的区别在于,每个采蜜蜂对应一个不同的蜜源,而跟随蜂的蜜源是根据采蜜蜂蜜源的适应度采用轮盘赌的方式选择的,也就是适用度好的蜜源可能对应多个跟随蜂,而适应度差的蜜源可能没有跟随蜂,这样更多的跟随蜂前往了适应度好的蜜源,并在其周围搜索新的蜜源,更容易找到更优的解(如果存在的话)

   开始执行第三部分,若某处的蜜源陷入了局部最优,则调用侦查蜂生成随机位置,并计算新位置的适应度,并判断是否更新全局最优,并重置该蜜源的陷入局部最优的标志位。

   第三部分介绍后,本轮迭代结束,开始进行下一次迭代 ,直至完成设定的迭代次数。

   注意:该程序中,并没有体现三种蜜蜂之间的身份转换


   六、运行效果示例:

在这里插入图片描述



   上面的示例中100次迭代后的适应度为161.81,而理论最优适应度为160.75,100次迭代耗时达到了3分20秒,规划效率不理想,规划质量还可以。


相关文章:

  • 一.无人车导航:CMU团队开源自主导航和规划算法框架
  • 【node进阶】深度解析express框架---编写接口|解决跨域问题
  • 史上最简单的TinkerBoard 2s RK339 GPIO 按键驱动以及嵌入式linux中断编程入门
  • 基于Matlab在以地球为中心的场景中模拟和跟踪航路飞机仿真(附源码)
  • TYUT太原理工大学2022需求工程考试填空题
  • Flink 成长之路简介
  • 软件测试面试,如何自我介绍?如何介绍项目?如何介绍个人技术?(提供面试话术)
  • Vue2 之 Vuex - 状态管理
  • 一篇带你走进Vue+阿里云的uni-app开发(HBuilder X开发版)
  • 高蛋白饮食≠健康 多组学分析揭示植物高蛋白对血糖和肝脏脂质代谢的影响
  • 【HTML+CSS+JS表白网站搭建】520七夕到了,快搭个漂亮的表白网站送给TA吧
  • 【云原生】Elasticsearch + kibana on k8s 讲解与实战操作
  • 10月计算机类SCI合集来了,多领域极速审稿,想要快速录用吗?
  • (9)目标检测_SSD的原理
  • Java反射小练之手写BeanUtils的copyProperties(Upgrade)
  • 【技术性】Search知识
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • ES6核心特性
  • HashMap剖析之内部结构
  • Java Agent 学习笔记
  • JavaScript DOM 10 - 滚动
  • java第三方包学习之lombok
  • Node 版本管理
  • Travix是如何部署应用程序到Kubernetes上的
  • 百度小程序遇到的问题
  • 从零开始在ubuntu上搭建node开发环境
  • 分类模型——Logistics Regression
  • 基于游标的分页接口实现
  • 看域名解析域名安全对SEO的影响
  • 前端面试之CSS3新特性
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何设计一个微型分布式架构?
  • 如何使用 JavaScript 解析 URL
  • 实现简单的正则表达式引擎
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 异常机制详解
  • 责任链模式的两种实现
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 进程与线程(三)——进程/线程间通信
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #每天一道面试题# 什么是MySQL的回表查询
  • (MATLAB)第五章-矩阵运算
  • (Matlab)使用竞争神经网络实现数据聚类
  • (rabbitmq的高级特性)消息可靠性
  • (初研) Sentence-embedding fine-tune notebook
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)elasticsearch 源码之启动流程分析
  • (一)Linux+Windows下安装ffmpeg
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据