首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制链接在网络中的唯一代理对?

如何绘制链接在网络中的唯一代理对?
EN

Stack Overflow用户
提问于 2014-03-05 20:06:21
回答 1查看 85关注 0票数 1

我有许多通过网络链接的代理,现在我正在尝试绘制链接代理的随机对。最终结果应该是一个二进制矩阵(ncol = nrow =agent的数量)。在链接对中,每个代理只能出现一次。

这就是我到目前为止所做的。首先,我随机抽取一对

代码语言:javascript
复制
library(sna,dummies)
pairs  = matrix(sample(1:10,10,replace=F), ncol=2)

然后我把它转换成一个矩阵

代码语言:javascript
复制
meet = cbind(merge(c(1:10), pairs,  by.x = 1, by.y = 1, all.x = TRUE),
merge(c(1:10), pairs,  by.x = 1, by.y = 2, all.x = TRUE))
meet[,2] = ifelse(is.na(meet[,2]), meet[,4], meet[,2])
meet = meet[,-c(3,4)]
meet = data.matrix(dummy.data.frame(meet, names = "V2"))
meet = meet[,-1]
colnames(meet) = c(1:10)

假设代理通过以下网络链接

代码语言:javascript
复制
nw = rgraph(10, mode = "graph", tprob = 0.5)

如果我将相遇和nw相乘,则通过消除未链接的代理对来获得随机抽取的对的矩阵。然而,在这种情况下,我最终得到了非常少的配对...

有没有办法以智能体之间的链接为条件来绘制配对?

EN

回答 1

Stack Overflow用户

发布于 2014-03-06 06:15:49

这样做的目的是什么?找到最大可能数量的配对很重要吗?基本上,您所描述的内容与图中匹配(http://en.wikipedia.org/wiki/Matching_%28graph_theory%29)的概念有关。“最大匹配”和“最大匹配”是有区别的。

第一个很容易找到(也可能是你想要做的。这样做的“诀窍”是在你的图中选择边而不是节点(代理)。从随机边开始(这会添加第一对代理),然后删除连接到这些代理的所有边,并(随机)从其余边中选择一条边。重复此过程,直到没有剩余的边。这是“最大的”,因为你不能添加更多的对。但是,您最终可能仍然会得到有限数量的对。

要获得给定图可能的最大配对数量,您需要更加努力(请参阅wikipedia链接以获取有关此方面的一些资源),但这真的是您想要的吗?(注意:与任何容易找到的最大匹配匹配相比,最大匹配永远不会太大。

您可能想看看igraph包,它有几个处理匹配(特别是二分图)的函数。但是,对于您的目标,可能需要一个简单得多的算法(研究文献中充满了在特殊情况下进行匹配的算法)。

我希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22197261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档