计算不同链接的数量

时间:2014-08-30 16:06:28

标签: netlogo

在我的代码中,所有海龟都拥有 n - 由 n - 元组代表的功能( a 1 ,一个<子> 2 ,..., <子>名词)。其中每个 a i 可以取值0或1。 我在海龟之间建立了一些联系。如果两只海龟共享 k - 特征(坐标方式匹配)并且它们之间存在链接,那么我们将链接称为 k -link。

如何找到每个 k (0到 n 之间)总共有多少 k -links?

1 个答案:

答案 0 :(得分:1)

你没有告诉我们你如何构建你的代码,所以我假设你的 n -tuples是作为列表实现的(这在NetLogo中最有意义) )。

以下是一个完整的例子:

turtles-own [ a ]
links-own [ k ]
globals [ n ]

to setup
  ca
  set n 5
  crt 10 [ ; create turtles with random feature lists
    set a n-values n [ random 2 ]
  ]
  ask turtles [ ; make a full network
    create-links-with other turtles
  ]
  ask links [ ; calculate k for all links
    set k k-of-feature-lists ([a] of end1) ([a] of end2)
  ]
  foreach n-values (n + 1) [ ? ] [ ; display number of k-links
    show (word ? "-links: " count links with [ k = ? ])
  ]
end

to-report k-of-feature-lists [ a1 a2 ]
  report length filter [?] (map = a1 a2)
end

除了k-of-feature-lists之外,这是相当简单的代码。 k-of-feature-lists的作用是:

  • 将两个要素列表转换为一个包含true值的布尔列表,如果相应的元素在两个要素列表中相等,如果不相应则为false。这是使用map= true完成的;

  • concise task syntax布尔值列表仅保留a1值;

  • 报告该已过滤列表的filter,该列表等于a2和{{1}}中的相同功能的数量;

还有很多其他方法可以做到这一点(效率更高一些),但这个方法很简洁。