2

大家好!

我现在正在 MATLAB 中研究优先附件模型,但在理解以下内容时遇到了一些麻烦:

假设我一开始有 4 个节点,连接如下:

time = 0  
1 <-----> 2  
3 <-----> 4 

在下一个时间步骤中,我添加一个节点和 4 个连接,然后添加另一个单个节点和 4 个连接。
我与节点 i 的链接概率的公式是:

P_link(i) = degree(i) / sum of all degrees at time-1

这导致第一步中每个节点 i = 1 到 4 的概率为 1/4,然后,将节点 5 连接到 1、2、3 和 4,我将有一个“度数总和”= 12 ,在以下时间步中添加节点 6 时。
这意味着链接概率是:1/6、1/6、1/6、1/6 和 1/3。

如何在 MATLAB 中进行设置?我的问题是,我通常将这些东西写在纸上以获得更好的理解,如果有随机化,我只是在纸上“模拟”它以将其与简单的 MATLAB 程序进行比较。

我现在要做的是:我取一个随机数,比如说 0.3045。
要将其添加到节点,它必须在

node1: [0.0000, 1/6],  
node2: [1/6, 1/3],  
node3: [1/3, 1/2],  
node4: [1/2, 2/3],  
node5: [2/3, 1.0000].  
---> CONNECT to node2

所以第一步我有一个想法,但现在我有两个不同的问题,我认为它们密切相关:

  1. 我如何在 MATLAB 中实现这一点,范围方法是个好主意吗?
  2. 假设每个节点只能连接一次,在添加第一个连接后概率如何变化?(我不得不承认这可能是一个更数学的问题......)

非常抱歉,这个问题看起来很乱,但我希望有人能给我一些关于这个实现的提示。
提前致谢!

4

1 回答 1

0

我会做以下...

拥有邻接矩阵

>> A = [0 1 0 0; 1 0 0 0; 0 0 0 1; 0 0 1 0]

和度矩阵

>> D = sum(A)

在每次迭代中,任何顶点的度数iD(i),总度数为

>> d = sum(D)

请注意,您希望d在第一次迭代之前获得,然后在迭代循环的最后再次获得,以便它保持为 的值time-1,在这种情况下,您可能希望P通过执行规范化

>> P = P ./ max(P)

然后计算选择任何顶点的概率(即您的范围方法简化)

>> P = cumsum(D ./ d)
ans = [0.2500, 0.5000, 0.7500, 1.0000]

并且使用rrange中的随机标量数,您可以通过以下方式选择随机选择的顶点的<0,1>索引i

>> i = find([-1 P]<r, 1, 'last')

并将带有索引的新顶点推j送到A,将其连接到旧顶点i,您只需

>> A(i, j) = 1
>> A(j, i) = 1

现在您只需将所有内容都包含在循环中,瞧,您的问题就解决了;]

于 2017-05-03T11:13:39.620 回答