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

时间:2014-03-05 12:06:21

标签: r social-networking sample

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

这是我到目前为止所做的。首先,我绘制随机对

library(sna,dummies)
pairs  = matrix(sample(1:10,10,replace=F), ncol=2)

然后我将其转换为矩阵

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)

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

nw = rgraph(10, mode = "graph", tprob = 0.5)

如果我乘以和nw,我会通过消除未链接的代理对来获得随机绘制的对的矩阵。但是,在这种情况下,我最终会得到极少数对......

是否有一种方法可以在代理之间的链接上绘制对?

1 个答案:

答案 0 :(得分:0)

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

第一个很容易找到(并且可能是你尝试做的。这样做的“技巧”是选择边缘而不是图形中的节点(代理)。从随机边缘开始(增加你的第一对)然后删除连接到这些代理的所有边缘,并从剩余边缘中选择(随机)边缘。重复该过程直到没有边缘。这是“最大”,因为你不能添加到它还有更多配对。但是,你可能仍然只能使用有限数量的配对。

要获得给定图表可能的最大对数,您需要更加努力工作(请参阅维基百科链接了解一些资源),但这是您真正想要的吗? (注意:与任何易于查找的最大匹配匹配相比,最大匹配绝不会大得多。

你可能想看一下igraph包,里面有几个处理匹配的函数(尤其是二分图)。但可能的是,为了您的目标,需要一个更简单的算法(研究文献中充满了特殊情况下的匹配算法)。

我希望这会有所帮助。