BSO讲解https://www.zhihu.com/video/1252605855767736320

B站搜索:随心390,同步观看视频

各位小伙伴可在闲鱼搜索 优化算法交流地,即可搜索到官方闲鱼账号,谨防上当受骗

hello,大家好,我记得有一位小伙伴很久很久之前就在后台私信我说:想让我们出一期关于头脑风暴优化算法的推文。所以,今天我们讲解一下头脑风暴优化(BSO)算法

一 | 头脑风暴法简介

顾名思义,头脑风暴优化算法的名字中包含头脑风暴这四个关键字,所以BSO的灵感应该来源于头脑风暴法。不知道各位有没有参加过头脑风暴会议,头脑风暴会议的目的就是收集参会人员提出的很多新观点和解决方案。

下面给出头脑风暴算法的定义(此处可忽略不看):

头脑风暴法可以由一个人或一组人进行。参与者围在一起,随意将脑中和研讨主题有关的见解提出来,然后再将大家的见解重新分类整理。在整个过程中,无论提出的意见和见解多么可笑、荒谬,其他人都不得打断和批评,从而产生很多新观点问题解决方法

从上述定义中可以看出,头脑风暴法是有一定的原则的,具体的原则如下(此处可忽略不看):

1.庭外判决原则(延迟评判原则)。对各种意见、方案的评判必须放到最后阶段,此前不能对别人的意见提出批评和评价。认真对待任何一种设想,而不管其是否适当和可行。2.自由畅想原则。欢迎各抒己见,自由鸣放,创造一种自由、活跃的气氛,激发参加者提出各种荒诞的想法,使与会者思想放松,这是智力激励法的关键。3.以量求质原则。追求数量。意见越多,产生好意见的可能性越大,这是获得高质量创造性设想的条件。4.综合改善原则。探索取长补短和改进办法。除提出自己的意见外,鼓励参加者对他人已经提出的设想进行补充、改进和综合,强调相互启发、相互补充和相互完善,这是智力激励法能否成功的标准。

二 | 初探头脑风暴优化算法

在对头脑风暴法有一个直观的了解后,接下来就进入今天的正题——头脑风暴优化算法。个人认为BSO与遗传算法很相似,相似的是BSO也是一种群体智能优化算法,不同的是BSO更新解的方式与遗传算法不同。

既然BSO是群体智能优化算法,那么也一定有一个种群(PS:BSO中种群的概念来源于就和头脑风暴法中每一轮产生的观点),BSO中的种群和遗传算法中的种群并没有区别敲黑板,划重点,接下来,就是BSO的核心部分——如何更新解

假设现在种群数目为n,那么BSO关键的一步就是将这n个个体分为m类。

01 | 如何分类?

基本的BSO采用的是k-means聚类,对应matlab中的kmeans函数。各位如果想深入学习k-means聚类,可查看[DM]聚类这篇推文进行学习。各位如果仅想使用这个方法,那么可以学习一下kmeans这个函数的使用方法

[

其中输入数据:X——一个N行D列的矩阵,N是数据个数,D是数据维数

K——将X划分为几类

Distance——选择计算一个个体与聚类中心之间距离的方式(默认为sqeuclidean)

cityblock——计算一个个体与聚类中心之间距离的一种方式

MaxIter——最大迭代次数(默认为100)

Replicates——使用新的初始群集质心位置重复群集的次数(默认为1)

输出数据:

idx——N行1列的矩阵,存储的是每个点的聚类标号

C——K行D列的矩阵,存储K个聚类中心

sumD——K行1列的矩阵,存储当前聚类中,所有点与这个聚类中心的距离之和

D——N行D列的矩阵,存储每个点与所有聚类中心的距离

02 | 将n个个体分成m类以后,有什么用呢?

首先,将这m类中的每一类中的个体按照目标函数值进行排序,并将每一类中目标函数值最优的那个个体作为聚类中心(PS:虽然在k-means聚类的时候已经选好聚类中心,但是我们并没有使用,而是重新选择聚类中心),同时存储排序后每一类中的个体及其对应的目标函数值

其次,以一定的概率随机从m个聚类中心中选择一个聚类中心,并用一个新产生随机解更新这个被选中的聚类中心

然后,遍历这n个个体,想办法使这个n个个体目标函数值更好的方向更新。通过刚才的学习,我们知道,每一类的聚类中心是这一类中目标函数值最好的个体,所以对个体的更新一定离不开聚类中心

假设现在m=5,即有5个聚类,我们并不是同时使用这5个聚类,而是随机选择1个2个聚类。

在介绍更新方法,先进行定义。

rand——0~1之间的随机数

p_one——选择1个聚类的概率,0~1之间的数

p_two——选择2个聚类的概率,p_two=1-p_one

p_one_center——选择1个聚类中聚类中心的概率,0~1之间的数

p_two_center——选择2个聚类中聚类中心的概率,0~1之间的数

Xselect——选出的个体

omega1——0~1之间的数

omega2——0~1之间的数

因此,更新这n个个体的方法有两种

如果rand<p_one

1)随机选择1个聚类:

如果rand<p_one_center

a)Xselect=这个聚类中的聚类中心

否则

b) Xselect=从这个聚类中随机选出一个个体

否则

2)随机选择2个聚类:

如果rand<p_two_center

a)Xselect=omega1*聚类1中的聚类中心+omega2*聚类2中的聚类中心

否则

b) Xselect=omega1*聚类1中随机选出的个体1+omega2*聚类2中随机选出的个体2

经过上述选择过程后,得到Xselect,然后使用如下公式对进行Xselect更新。

其中D表示的是数据的维数normrnd在matlab中是产生正太分布的随机数的函数,logsig在matlab中是逻辑回归中的sigmoid函数。

03 | 当遍历到第i个个体时,得到Xnew后,此时并没有更新第i个个体,所以还需要做什么呢?

此时需要将Xnew个体i进行比较,如果Xnew的目标函数值优于个体i的目标函数值,则更新个体i=Xnew。否则,不更新个体i。

04 | 终止条件?

上述过程只是迭代一次的示例,当迭代到最大迭代次数后,迭代过程终止。

三 | 头脑风暴优化算法伪代码

伪代码引用于:

Shi, Yuhui. “Brain Storm Optimization Algorithm.” ICSI’11 Proceedings of the Second International Conference on Advances in Swarm Intelligence - Volume Part I, 2011, pp. 303–309.

1. Randomly generate n potential solutions (individuals);

2. Clusternindividuals intomclusters;

3.Evaluatethe n individuals;

4.Rankindividuals in each cluster andrecordthebest individualascluster centerineach cluster;

5.Randomlygenerate a value between 0 and 1;

a) If the value is smaller than a pre-determined probabilityp5a,

i.Randomlyselect acluster center; ii.Randomlygenerateanindividualtoreplacetheselected cluster center;

6.Generatenew individuals a)Randomlygenerate a value between 0 and 1;

b) If the value is less than a probabilityp6b,

i. Randomly selectaclusterwith a probabilityp6bi;

ii. Generate a random value between 0 and 1;

iii. If the value issmallerthan a pre-determined probabilityp6biii,

1) Select thecluster centerand add random valuesto it to generate new individual.

iv. Otherwiserandomlyselectan individualfrom thisclusterand add randomvalueto the individual togeneratenew individual.

c) Otherwise randomly selecttwoclustersto generate new individual

i. Generate a random value;

ii. If it is less than a pre-determined probabilityp6c, thetwo cluster centers arecombinedand then added withrandom valuestogenerate new individual;

iii. Otherwise,two individualsfrom each selected cluster arerandomlyselected to becombinedand added withrandomvaluestogeneratenewindividual.

d) The newly generated individual iscomparedwith theexisting individualwith the same individual index,thebetteroneis kept andrecordedas thenew individual;

7. If n new individuals have been generated, go to step 8; otherwise go to step 6;

8.Terminateif pre-determined maximum number of iterations has been reached; otherwise go to step 2.

四 | 头脑风暴优化算法MATLAB代码

代码链接:https://www.researchgate.net/publication/322959536_Codes_in_MATLAB_for_Brain_Storm_Optimization

五 | 参考

1. Shi, Yuhui. “Brain Storm Optimization Algorithm.” ICSI’11 Proceedings of the Second International Conference on Advances in Swarm Intelligence - Volume Part I, 2011, pp. 303–309.

2. https://www.researchgate.net/publication/322959536_Codes_in_MATLAB_for_Brain_Storm_Optimization

dijkstra算法matlab代码_头脑风暴优化(BSO)算法(附MATLAB代码)相关推荐

  1. bp神经网络预测python代码_机器学习之多层神经网络(附Python代码和数据)

    1 引言 多层神经网络,Multiple-layers Perceptron (MLP),又被称为多层感知机,是机器学习中深度学习的典型算法.关于多层神经网络的算法原理,我们在Stata和R实现的文章 ...

  2. 数学建模python代码_主题模型 LDA 入门(附 Python 代码)

    一.主题模型 . m! g4 ~. ^3 |% A# f在文本挖掘领域,大量的数据都是非结构化的,很难从信息中直接获取相关和期望的信息,一种文本挖掘的方法:主题模型(Topic Model)能够识别在 ...

  3. OIF-BSO:一种用于多模优化问题的头脑风暴优化的优化识别框架

    OIF-BSO:一种用于多模优化问题的头脑风暴优化的优化识别框架 参考文献 <An optima-identified framework with brain storm optimizati ...

  4. MATLAB实战系列(二十九)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)-交叉算子

    前言 代码明细可参见 MATLAB实战系列(八)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)(附MATLAB代码) 交叉算子的实现机制 我们还是以求解TSP问题为例,8个城市的坐标如下所示. ...

  5. 【优化求解】基于头脑风暴优化算法BSO求解最优目标matlab源码

    1 简介 受人类创造性解决问题过程--头脑风暴会议的启发, 2011年史玉回老师 在第二次群体智能国际会议(The Second International Conference on Swarm I ...

  6. 基于头脑风暴优化的BP神经网络(预测应用) - 附代码

    基于头脑风暴优化的BP神经网络(预测应用) - 附代码 文章目录 基于头脑风暴优化的BP神经网络(预测应用) - 附代码 1.数据介绍 3.BSO优化BP神经网络 3.1 BP神经网络参数设置 3.2 ...

  7. 基于matlab的头脑风暴优化(Brain Storm Optimization Algorithm,BSO)的多目标优化仿真

    目录 1.算法概述 2.仿真效果 3.MATLAB仿真源码 1.算法概述 头脑风暴优化算法(Brain Storm Optimization Algorithm,简称 BSO 算法)作为一种新型的智能 ...

  8. BSO:头脑风暴优化算法-综述

    BSO:头脑风暴优化算法-综述 参考文献 <Brain storm optimization algorithm: a review> 一.介绍 群智能算法应具有两种能力:学习能力和开发能 ...

  9. 头脑风暴优化算法(Brain Storming Optimization Algorithm, BSO)

    头脑风暴优化算法(Brain Storming Optimization Algorithm, BSO) 一.算法灵感 二.算法介绍 2. 1 初始化 2. 2 聚类 2. 3 个体更新 2. 4 算 ...

最新文章

  1. 全国移动联通基站数据升级包(2013年1月基站升级包).rar
  2. 揭榜:2018中国AI英雄风云榜,年度10位杰出领军人物!
  3. iOS10 UI教程视图的生命周期
  4. 【数据结构】KMP算法(c语言)
  5. JS-循环清空对象 判断数据类型的5种常用方法
  6. android 页面标题,Android v4包下的PagerTitleStrip,ViewPager的页面标题
  7. 使用Blazor做个简单的时间戳在线转换工具
  8. C++课程上 有关“指针” 的小结
  9. micropython开发idethonny_Thonny 3.0 首个稳定版发布,一个面向初学者的 Python IDE
  10. 通过造车来了解软件开发模式
  11. Tensorflow Python3 做神经网络(视频教程)
  12. 写软件的需求分析全方位攻略
  13. 动态 | AI能看懂英文,阿里巴巴夺实体发现测评全球第一
  14. 329例精选matlab算法原理及源码详解——老生谈算法
  15. Mac最好用的SSH工具———SecureCRT使用以及下载
  16. windows环境如何测试端口
  17. 图像算法---头发检测算法研究
  18. 超级计算机深蓝比卡斯帕罗夫聪明吗,【图片】卡斯帕罗夫对深蓝棋谱及简析【国际象棋吧】_百度贴吧...
  19. 网站前端联系我们之点击自动打开qq/Tim对话窗口
  20. 微格教学c语言指针教案,小学微课程教案

热门文章

  1. 【Android工具】更新几个平台视频流媒体播放器测试情况
  2. 【迫零准则】基于迫零准则的自适应线性均衡器的MATLAB仿真
  3. CRC24循环冗余校验码的FPGA实现
  4. 五天带你学完《计算机网络》·第二天·数据链路层
  5. Cuckoo Hashing的应用及性能优化
  6. Django使用心得(二)
  7. MySQL主从复制-双主结构
  8. 玩转树莓派——安装系统
  9. directive多指令之间的异步调用
  10. 邮件办公系统Exchange