无标度网络生成算法之简单轮盘算法
无标度网络生成算法之简单轮盘算法
简单轮盘算法
简单轮盘生成算法将轮盘赌算法和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∑nFi
其工作过程:设想群体全部个体的适当性分数可以用一张饼图来表示,群体中的每一个染色快指定饼图中的一个小块;块的大小与染色块的适应性函数成比例,适应性函数越高,其相应在饼图中的小块所占面积也越大。
为了选取饼图中的一个染色块,可以旋转这个轮子,直到轮盘停止时,看指针停止的位置。指针停止在哪一块,就选择与之对应的那个染色块。
具体操作:
计算出群体中每个个体的适应度Fi,i=1,2,⋯,MF_{i},i=1,2,\cdots,MFi,i=1,2,⋯,M,其中MMM是群体大小;
计算出每一个个体被遗传到下一代群体中的概率:
Pi=Fi/∑i=1nFiP_{i}=F_{i} / \sum\limits_{i=1}^{n} F_{i}Pi=Fi/i=1∑nFi
计算出每个个体的累计概率:
qi=∑j=1iP(xj)q_{i}=\sum\limits_{j=1}^{i} P\left(x_{j}\right) qi=j=1∑iP(xj)在区间[0,1][0,1][0,1]内产生一个均匀分布的伪随机数rrr;
若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] 成立;
重复步骤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(各个个体概率之和),这样在该直线中,某段的线段最长,就代表该个体被选中的概率越大。
注意:
(一)任意选择所有个体的一个排列序列(这个序列可以随便排,因为是某线段之间的长度为代表某个体的选择概率)
(二)任意个体的累积概率为该个体对应的前几项数据的累加和。这样,如果某个个体的适应度数值高,它所对应的个体选择概率就会越大,通过累积概率转换后对应的线段会越长。
对于适应度值较大的个体,对应的线段长度会长,这样随机产生的数字落在此区间的概率就大,该个体被选中的概率也大。同时,对于适应度较小的个体,线段长度会相对较短,随机数字在该区间的概率相对较小,但是也有被选中的可能,避免了适应度数值较小的个体被直接淘汰的问题。
我们从中也可以看出,轮盘赌算法与个体的排列顺序有关。
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) 如何选择某个个体
- 个体选择概率:适应度值越高,其被选择的概率就越大.
- 累计概率:线段表示
- 选择:生成[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=1kdeg(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∑kp(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=1kdeg(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∑iwj
小结
在轮盘中取样过程分为两步:
- 首先,产生一个随机数 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 来代替节点的度的优势在于:
在某个节点被选中并更新节点的概率密度的过程中,部分节点的累计概率密度并没有变,因而不需要重复计算。
无标度网络生成算法之简单轮盘算法相关推荐
- 常见网络模型——BA无标度网络(使用轮盘赌算法)(python)
之前记录了一下,常见的四种网络模型--ER.BA.WS.规则图,以及如何使用python实现,具体请移步: https://blog.csdn.net/un357951/article/details ...
- BA无标度网络(一):规则网络生成
在讨论BA网络的生成时,涉及到初始网络的选择,理论上当然可以选择只之前已近提及的ER随机网络模型或者WS小世界网络等等,但是如果初始规模较小,这些网络的的特性并不能很好的体现,所以我在生成BA无标度网 ...
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.7 - 图生成 无标度网络
1.概述 Barabási和Albert(1999)的"富者更富"(Rich get richer)生成模型(BA模型)最被熟知的无标度网络子集的生成模型.它让每个网页根据一个非均 ...
- 复杂性思维第二版 四、无标度网络
四.无标度网络 原文:Chapter 4 Scale-free networks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本章中,我们将处理来自在线社交网络的数据,并使 ...
- 级联失效matlab,加权无标度网络的级联失效模型
社交网.交通网.通信网等领域均呈现无标度特性[, 是复杂网络中常见的一种现象, 不同网络中的节点和边都承载着不同形式的负载, 且负载的承受能力是有限的.加权无标度网络是指节点和边根据权值构建成的网络[ ...
- 复杂网络之无标度网络与小世界网络生成程序
近日需要用到无标度网络与小世界网络,早上用matlab写了这两种网络的matlab程序,放在这,有用者可以拿去用,请自己验证正确性后使用. 共有三个文件,swnet.m 是sw小世界模型 ...
- 网络模型 - 随机网络,无标度网络,分层网络
转自: http://www.flickr.com/photos/caseorganic/4510691991/in/set-72157624621620243 小图 大图 Network Model ...
- networkx 标签_networkx绘制BA无标度网络
step1: 导入networkx复杂网络库.matplotlib.pyplot.pandas import networkx as nximport matplotlib.pyplot as plt ...
- 从零认识 无标度网络
喜欢的话请关注我们的微信公众号~<你好世界炼丹师>. 公众号主要讲统计学,数据科学,机器学习,深度学习,以及一些参加Kaggle竞赛的经验. 公众号内容建议作为课后的一些相关知识的补充,饭 ...
- 无标度网络/幂律分布、小世界网络
无标度网络.幂律分布这两个概念都是指复杂网络中的度 分布不均匀 通俗点说就是80/20原则,枢纽节点很少,但是却连接着大量的节点,而大量的非枢纽节点却只有不多的几个连接. 小世界网络: 虽然有50个节 ...
最新文章
- linux定时任务crontab 时间,shell后台定时任务时crontab的用法
- Jmeter也能IP欺骗!
- Python 【企鹅号、QQ看点】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、视频号等平台的视频自动化同步发布
- PHP 设计模式之迭代器模式
- 第83天:jQuery中操作form表单
- mapper注入失败,NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.XxxMapper] found for d
- 消逝波(表面波)Evanescent Wave
- Xamarin.Android MVP模式
- fpga驱动oled iic显示代码_Arduino提高篇02—OLED屏汉字显示
- 【机器学习】一些模型的位置总结
- 32点亮8个呼吸灯_艾扬格瑜伽32 个经典体式 amp; 2 大呼吸法经典示范图(收藏级)...
- Python 学习笔记 (1)输出语句
- java dem数据格式解析_【转载】DEM数据的介绍,获取,处理
- RLC电阻电感电容取值标准
- 冒泡排序(Java)
- centos6.6搭建LANP环境(yum)
- uniapp实现微信公众号登录获取openid
- 看电子巨头的那些分分合合
- Oracle数据库Clob类型Blob类型与String互转
- CDOJ1323柱爷的下凡