我有许多通过网络链接的代理商,现在我正在尝试绘制随机对的代理商。最终结果应该是二进制矩阵(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,我会通过消除未链接的代理对来获得随机绘制的对的矩阵。但是,在这种情况下,我最终会得到极少数对......
是否有一种方法可以在代理之间的链接上绘制对?
答案 0 :(得分:0)
这是为了什么目的?找到最大可能数量的对是很重要的吗?基本上,您描述的内容与图表中匹配的概念有关(http://en.wikipedia.org/wiki/Matching_%28graph_theory%29)。 “最大匹配”和“最大匹配”之间存在区别。
第一个很容易找到(并且可能是你尝试做的。这样做的“技巧”是选择边缘而不是图形中的节点(代理)。从随机边缘开始(增加你的第一对)然后删除连接到这些代理的所有边缘,并从剩余边缘中选择(随机)边缘。重复该过程直到没有边缘。这是“最大”,因为你不能添加到它还有更多配对。但是,你可能仍然只能使用有限数量的配对。
要获得给定图表可能的最大对数,您需要更加努力工作(请参阅维基百科链接了解一些资源),但这是您真正想要的吗? (注意:与任何易于查找的最大匹配匹配相比,最大匹配绝不会大得多。
你可能想看一下igraph包,里面有几个处理匹配的函数(尤其是二分图)。但可能的是,为了您的目标,需要一个更简单的算法(研究文献中充满了特殊情况下的匹配算法)。
我希望这会有所帮助。