热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Barabási–Python中的阿尔伯特模型

我正在尝试使用

我正在尝试使用Barabási–Albert model生成综合网络。
我不想使用任何“固定”库函数,因为稍后我打算修改所涉及的数学表达式。

吸引的概率为:Π(ki)= ki / ∑j kj。以下代码似乎在m = 1时有效:

if random.uniform(0.0,1.0) <= p and t not in neighbours_per_node[i]:
currentDegree[t] += 1
currentDegree[i] += 1

我的问题是将上面的代码推广到更大的m值,其中m是每个新节点的链接数。


在使用if t not in neighbors_per_node[i]:条件之前,先使用if t in neighbors_per_node[i]:,再使用random.uniform(0.0,1.0)并绘制一个新的概率直到t not in neighbors_per_node[i]

如果有帮助,我在C ++中的代码是:

for(int i = 0; i ini:
prob_sorteio = (double) rand() / RAND_MAX;
// ... code
if(t already has the connection) { goto ini; }
}
// goto ini: return to calculate a new probability.

,

主要问题是随机生成QueryBuilder query = QueryBuilders.boolQuery()
.filter(QueryBuilders.termQuery("REQ_ID.keyword","1574778361496"))
.filter(QueryBuilders.termQuery("CATEGORY.keyword","WARNING"));
个节点的子集,其中每个节点都有希望的(非均匀)被选择概率。

一种整洁的方法是将权重列表映射到samples from exponential distributions列表,然后选择m最低的数字。可以使用random.expovariate函数来完成。根据需要,将选择权重为m的节点,而不是权重为w_1的权重为w_2的节点。

此解决方案被称为“ Algorithm A-Res”,这归因于Efraimidis and Spirakis。

w_1 / (w_1 + w_2)

示例:

import random
def random_subset_with_weights(weights,m):
mapped_weights = [
(random.expovariate(w),i)
for i,w in enumerate(weights)
]
return { i for _,i in sorted(mapped_weights)[:m] }
def barabasi_albert(n,m):
# initialise with a complete graph on m vertices
neighbours = [ set(range(m)) - {i} for i in range(m) ]
degrees = [ m-1 for i in range(m) ]
for i in range(m,n):
n_neighbours = random_subset_with_weights(degrees,m)
# add node with back-edges
neighbours.append(n_neighbours)
degrees.append(m)
# add forward-edges
for j in n_neighbours:
neighbours[j].add(i)
degrees[j] += 1
return neighbours

要通过更改用于计算权重的公式来调整算法,只需使用自己的公式来计算权重列表,然后使用该列表代替>>> from pprint import pprint
>>> pprint(barabasi_albert(30,3))
[{1,2,3,4,5,7,8,17},{0,12,15,16,17,23},1,6,9,11,13,14,18,19,20,22,24,26,27},10,23,25,21},29},{10,4},21,28},{8,5},{21,6},{2,25},{1,14},20},12},{19,7},{24,13},2},15},{29,22},{27,{16,3},{3,{9,28,{20,7}]

集合理解degrees返回{ i for _,i in sorted(mapped_weights)[:m] }中最低数字m的一组索引。对列表进行排序需要O(n log n)时间;因此,在mapped_weights顶点上生成图的整体复杂度为O(n²log n)。

如果要生成大图,则使用优先级队列或quickselect算法来选择n最低数字会更有效;在这种情况下,整体复杂度将为O(n²)。


推荐阅读
  • oracle主键和唯一索引,Oracle 主键、唯一键与唯一索引的区别
    如果我们让主键约束或者唯一键约束失效,Oracle自动创建的唯一索引是否会受到影响?SQLdroptabletestpurge;Tabledroppe ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • 无处不在,详解iOS集成第三方登录(SSO授权登录<无需密码>)
    1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例。这是上次写的iOS第三方社交分享:http:www.cnblogs.comqingchep3727559.html ... [详细]
  • 一.元祖类型 (tuple)1.什么是元祖?用途:用于存放多个值,当存放的多个值只有读的需求没有改变的需求时,用元祖最合适.定义方式:在()内用逗号分隔开的多个任意类型的值t(1, ... [详细]
  • 引子:Question:CanyoutellmewhatthedifferenceoftwoSQLstatementsatperformanceofexecution ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文整理了Java中org.apache.activemq.util.ByteArrayInputStream.<init>()方法的一些代码示例,展示了 ... [详细]
  • 集合set集合是可变的容器集合内的数据对象都是唯一的(不能重复多次的)集合是无序的存储结构,集合中的数据没有先后关系集合内的元素必须是不可 ... [详细]
  • CF809A:Do you want a date?(数学  思维)
    A.Doyouwantadate?timelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputo ... [详细]
author-avatar
鲁弗斯ll
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有