无标度网络生成算法之简单轮盘算法

简单轮盘算法

简单轮盘生成算法将轮盘赌算法和BA无标度网络结合,生成无标度网络。

轮盘赌基本原理

参考:http://blog.sina.com.cn/s/blog_67c17d1c01017hyt.html

轮盘赌算法:

轮盘赌算法的基本思想是 个体被选中的概率与其适应度函数值成正比;

设群体大小为nnn,个体iii的适应度为FiF_{i}Fi​,则个体被选中遗传到下一代群体的概率为

Pi=Fi/∑i=1nFiP_{i}=F_{i} / \sum\limits_{i=1}^{n} F_{i}Pi​=Fi​/i=1∑n​Fi​

其工作过程:设想群体全部个体的适当性分数可以用一张饼图来表示,群体中的每一个染色快指定饼图中的一个小块;块的大小与染色块的适应性函数成比例,适应性函数越高,其相应在饼图中的小块所占面积也越大。

为了选取饼图中的一个染色块,可以旋转这个轮子,直到轮盘停止时,看指针停止的位置。指针停止在哪一块,就选择与之对应的那个染色块。

具体操作:

  1. 计算出群体中每个个体的适应度Fi,i=1,2,⋯,MF_{i},i=1,2,\cdots,MFi​,i=1,2,⋯,M,其中MMM是群体大小;

  2. 计算出每一个个体被遗传到下一代群体中的概率:

    Pi=Fi/∑i=1nFiP_{i}=F_{i} / \sum\limits_{i=1}^{n} F_{i}Pi​=Fi​/i=1∑n​Fi​

  3. 计算出每个个体的累计概率:
    qi=∑j=1iP(xj)q_{i}=\sum\limits_{j=1}^{i} P\left(x_{j}\right) qi​=j=1∑i​P(xj​)

  4. 在区间[0,1][0,1][0,1]内产生一个均匀分布的伪随机数rrr;

  5. 若r<qir<q_{i}r<qi​,则选择个体iii;否则,选择个体kkk,使得q[k−1]<r≤q[k]q[k-1]<r\le q[k]q[k−1]<r≤q[k] 成立;

  6. 重复步骤4,5 共MMM次;

例如,以下表为例,采用轮盘赌选择法的选择概率计算:

个体 1 2 3 4 5 6 7 8 9 10 11
适应度 2.0 1.8 1.6 1.4 1.2 1.0 0.8 0.6 0.4 0.2 0.1
选择概率 0.18 0.16 0.15 0.13 0.11 0.09 0.07 0.06 0.03 0.02 0.0
累计概率 0.18 0.34 0.49 0.62 0.73 0.82 0.89 0.95 0.98 1.00 1.00

如果产生的随机数是0.81,则6号个体被选中。

我们可以明显地看出

  1. 从个体选择概率理解,适应度数值越高,它被选中的概率就越大。

  2. 累积概率把各个个体的概率使用不同长度的线段来表示,这些线段组合成一条直线,直线的长度为1(各个个体概率之和),这样在该直线中,某段的线段最长,就代表该个体被选中的概率越大。

    注意:

    (一)任意选择所有个体的一个排列序列(这个序列可以随便排,因为是某线段之间的长度为代表某个体的选择概率)
    (二)任意个体的累积概率为该个体对应的前几项数据的累加和。

    这样,如果某个个体的适应度数值高,它所对应的个体选择概率就会越大,通过累积概率转换后对应的线段会越长。

  3. 对于适应度值较大的个体,对应的线段长度会长,这样随机产生的数字落在此区间的概率就大,该个体被选中的概率也大。同时,对于适应度较小的个体,线段长度会相对较短,随机数字在该区间的概率相对较小,但是也有被选中的可能,避免了适应度数值较小的个体被直接淘汰的问题。

我们从中也可以看出,轮盘赌算法与个体的排列顺序有关。

C++代码实现:

int RouletteWheelSelection(){srand(0);//定义randdouble m = rand()/double(RAND_MAX);//产生一个[0,1)的随机值int Probability_Total = 0;int Selection = 0;for(int i = 0;i < SIZE; i++){//SIZE是个体数量的大小Probability_Total = Probability_Total + Probability[i];if(Probability_Total >= m){Selection = i;break;}   }return Selection;
}

轮盘赌小结

轮盘赌的核心在于两个该概率和个体选择策略:

(1) 个体选择概率

(2) 累计概率

(3) 如何选择某个个体

  1. 个体选择概率:适应度值越高,其被选择的概率就越大.
  2. 累计概率:线段表示
  3. 选择:生成[0,1][0,1][0,1]区间的随机数,看看该数字落在那个区间。

轮盘生成算法

模拟轮盘赌:穿行创建有n个节点的无标度幂律图

给定一个包含kkk个节点的集合{v1,v2,…,vk}\left\{v_{1}, v_{2}, \ldots, v_{k}\right\}{v1​,v2​,…,vk​},当产生了一个新节点v(k+1)v_{(k+1)}v(k+1)​,这个节点需要与{v1,v2,…,vk}\left\{v_{1}, v_{2}, \ldots, v_{k}\right\}{v1​,v2​,…,vk​}中的mmm个节点建立连接,对于这个新节点需要建立的每一条连接,都与现有网络中的节点的概率成正比。

p(vi)=deg⁡(vi)∑i=1kdeg⁡(vi)p\left(v_{i}\right)=\frac{\operatorname{deg}\left(v_{i}\right)}{\sum_{i=1}^{k} \operatorname{deg}\left(v_{i}\right)}p(vi​)=∑i=1k​deg(vi​)deg(vi​)​

简单轮盘算法(Simple Roulette Wheel, Simple-RW)采用优先连接机制来选择目标节点。该算法随机选择一个节点的主要思想如下:一个轮盘即为一系列具有一定选择概率的节点。随机选择一个节点时,首先需要产生一个0 到 1 之间的随机数, 然后选择一个累计概率满足不等式 P(vk−1)<x≤P(vk)P\left(v_{k-1}\right)<x \leq P\left(v_{k}\right)P(vk−1​)<x≤P(vk​) 的节点 vkv_{k}vk​ 进行连接操作。其中P(vk)P\left(v_{k}\right)P(vk​)表 示 该 节点的累计概率密度,满足公式 。
P(vk)=∑i=1kp(vi)P\left(v_{k}\right)=\sum_{i=1}^{k} p\left(v_{i}\right) P(vk​)=i=1∑k​p(vi​)
当网络中需要添加一个新的节点时,与这个网络对应的轮盘也要相应的增加节点。所以,无论何时在网络中加入一条边,这条边两端的节点的概率都会随其度的增加而相应的增加,而且为了保证整体的概率为 1 ,这个轮盘中的所有节点的概率都需要进行更新。因此,在每次的选择之后轮盘都需要进行调整,累计概率 PPP 也需
要在每次循环后重新计算。由于公式p(vi)=deg⁡(vi)∑i=1kdeg⁡(vi)p\left(v_{i}\right)=\frac{\operatorname{deg}\left(v_{i}\right)}{\sum_{i=1}^{k} \operatorname{deg}\left(v_{i}\right)}p(vi​)=∑i=1k​deg(vi​)deg(vi​)​中的分母是常量,为了去除该分母以避免对 p(vi)p\left(v_{i}\right)p(vi​) 的重复计算,可以将轮盘中的节点的概率 p(v1),…,p(vn)p\left(v_{1}\right), \ldots, p\left(v_{n}\right)p(v1​),…,p(vn​) 转换为节点对应的权值 w1,…,wnw_{1}, \ldots, w_{n}w1​,…,wn​, 其中,wi=deg⁡(vi)=Sn×p(vi)w_{i}=\operatorname{deg}\left(v_{i}\right)=S_{n} \times p\left(v_{i}\right)wi​=deg(vi​)=Sn​×p(vi​) 。同理可知,可以通过计算每个节点对应的部分和 σ1,…,σn\sigma_{1},\ldots,\sigma_{n}σ1​,…,σn​ 来代替累计概率 P(vi)P(v_{i})P(vi​) ,其中
σi=Sn×P(vi)=∑j=1iwj\sigma_{i}=S_{n} \times P\left(v_{i}\right)=\sum_{j=1}^{i} w_{j} σi​=Sn​×P(vi​)=j=1∑i​wj​

小结

在轮盘中取样过程分为两步:

  • 首先,产生一个随机数 r∈[1,Sn]r \in\left[1, S_{n}\right]r∈[1,Sn​];
  • 然后,从轮盘中选择一个节点 vkv_{k}vk​ , 其中 vkv_{k}vk​ 满足 σ(k−1)<r≤σk\sigma_{(k-1)}<r \leq \sigma_{k}σ(k−1)​<r≤σk​

采用节点权值 www 来代替节点的度的优势在于:

在某个节点被选中并更新节点的概率密度的过程中,部分节点的累计概率密度并没有变,因而不需要重复计算。

无标度网络生成算法之简单轮盘算法相关推荐

  1. 常见网络模型——BA无标度网络(使用轮盘赌算法)(python)

    之前记录了一下,常见的四种网络模型--ER.BA.WS.规则图,以及如何使用python实现,具体请移步: https://blog.csdn.net/un357951/article/details ...

  2. BA无标度网络(一):规则网络生成

    在讨论BA网络的生成时,涉及到初始网络的选择,理论上当然可以选择只之前已近提及的ER随机网络模型或者WS小世界网络等等,但是如果初始规模较小,这些网络的的特性并不能很好的体现,所以我在生成BA无标度网 ...

  3. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.7 - 图生成 无标度网络

    1.概述 Barabási和Albert(1999)的"富者更富"(Rich get richer)生成模型(BA模型)最被熟知的无标度网络子集的生成模型.它让每个网页根据一个非均 ...

  4. 复杂性思维第二版 四、无标度网络

    四.无标度网络 原文:Chapter 4 Scale-free networks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本章中,我们将处理来自在线社交网络的数据,并使 ...

  5. 级联失效matlab,加权无标度网络的级联失效模型

    社交网.交通网.通信网等领域均呈现无标度特性[, 是复杂网络中常见的一种现象, 不同网络中的节点和边都承载着不同形式的负载, 且负载的承受能力是有限的.加权无标度网络是指节点和边根据权值构建成的网络[ ...

  6. 复杂网络之无标度网络与小世界网络生成程序

    近日需要用到无标度网络与小世界网络,早上用matlab写了这两种网络的matlab程序,放在这,有用者可以拿去用,请自己验证正确性后使用. 共有三个文件,swnet.m 是sw小世界模型        ...

  7. 网络模型 - 随机网络,无标度网络,分层网络

    转自: http://www.flickr.com/photos/caseorganic/4510691991/in/set-72157624621620243 小图 大图 Network Model ...

  8. networkx 标签_networkx绘制BA无标度网络

    step1: 导入networkx复杂网络库.matplotlib.pyplot.pandas import networkx as nximport matplotlib.pyplot as plt ...

  9. 从零认识 无标度网络

    喜欢的话请关注我们的微信公众号~<你好世界炼丹师>. 公众号主要讲统计学,数据科学,机器学习,深度学习,以及一些参加Kaggle竞赛的经验. 公众号内容建议作为课后的一些相关知识的补充,饭 ...

  10. 无标度网络/幂律分布、小世界网络

    无标度网络.幂律分布这两个概念都是指复杂网络中的度 分布不均匀 通俗点说就是80/20原则,枢纽节点很少,但是却连接着大量的节点,而大量的非枢纽节点却只有不多的几个连接. 小世界网络: 虽然有50个节 ...

最新文章

  1. linux定时任务crontab 时间,shell后台定时任务时crontab的用法
  2. Jmeter也能IP欺骗!
  3. Python 【企鹅号、QQ看点】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、视频号等平台的视频自动化同步发布
  4. PHP 设计模式之迭代器模式
  5. 第83天:jQuery中操作form表单
  6. mapper注入失败,NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.XxxMapper] found for d
  7. 消逝波(表面波)Evanescent Wave
  8. Xamarin.Android MVP模式
  9. fpga驱动oled iic显示代码_Arduino提高篇02—OLED屏汉字显示
  10. 【机器学习】一些模型的位置总结
  11. 32点亮8个呼吸灯_艾扬格瑜伽32 个经典体式 amp; 2 大呼吸法经典示范图(收藏级)...
  12. Python 学习笔记 (1)输出语句
  13. java dem数据格式解析_【转载】DEM数据的介绍,获取,处理
  14. RLC电阻电感电容取值标准
  15. 冒泡排序(Java)
  16. centos6.6搭建LANP环境(yum)
  17. uniapp实现微信公众号登录获取openid
  18. 看电子巨头的那些分分合合
  19. Oracle数据库Clob类型Blob类型与String互转
  20. CDOJ1323柱爷的下凡

热门文章

  1. 微信 JSAPI 支付流程
  2. 中国天气网城市代码爬取
  3. 小米手机怎么删除桌面计算机,手机桌面图标怎么删除,小米手机怎样删除桌面图标-...
  4. 8.0版本jdbc驱动连接数据库
  5. 51单片机入门学习 第九天
  6. 三菱q系列c语言模块,【重磅干货】三菱Q系列串口模块QJ71C24的Modbus通信
  7. 16qam星座图 matlab,16QAM星座图
  8. 程序员面试中最常见的27个问题,拿走不谢
  9. java native 方法和修饰符
  10. 如何在Java项目中定义并调用自己编写的native方法?