Matlab中的优先附着,复杂网络

时间:2017-05-03 09:13:07

标签: algorithm matlab complex-networks

大家好!

我现在正在研究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,我将得到一个&#34;度数之和&#34;当在以下时间步骤中添加节点6时,= 12 那意味着连接概率为:1 / 6,1 / 6,1 / 6,1 / 6和1/3。

如何在MATLAB中进行设置?我的问题是,我通常在纸上写下这些东西以便更好地理解,如果有随机化我只是模拟&#34;将它与简单的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. 在为其余节点添加第一个连接后,如何更改概率,假设它只能连接到每个节点一次? (这可能是一个我必须承认的更具数学性的问题......)
  3. 我很抱歉,这个问题看起来很混乱,但我希望有人可以给我一些关于此实施的提示。
    提前谢谢!

1 个答案:

答案 0 :(得分:0)

我会做以下事情......

拥有邻接矩阵

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

和度数矩阵

>> D = sum(A)

在每次迭代中,任何顶点i的度数为D(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]

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

r

使用范围<0,1>中的随机标量数i,您可以选择随机选择的顶点的索引>> i = find([-1 P]<r, 1, 'last')

j

要将索引为A的新顶点推送到i,将其连接到旧顶点>> A(i, j) = 1 >> A(j, i) = 1 ,您只需

 public interface IEmployeeService : IService<Employee>
      {
          IEnumerable <Employee> GetEmployees(string name = null);
           Employee GetEmployee(string name);
           Employee GetEmployee(int id);
           void CreateEmployee(Employee employee);
           void SaveEmployee();

       }

现在你只需将所有内容都包含在loop中,然后解决问题就解决了;]