在我的代码中,所有海龟都拥有 n - 由 n - 元组代表的功能( a 1 ,一个<子> 2 子>,...,一 <子>名词子>)。其中每个 a i 可以取值0或1。 我在海龟之间建立了一些联系。如果两只海龟共享 k - 特征(坐标方式匹配)并且它们之间存在链接,那么我们将链接称为 k -link。
如何找到每个 k (0到 n 之间)总共有多少 k -links?
答案 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}}中的相同功能的数量;
还有很多其他方法可以做到这一点(效率更高一些),但这个方法很简洁。