我有两种代理人类型,男孩和女孩。
breed [boys boy]
breed [girls girl]
每只乌龟都有一个来自数据集的年龄。当一个经纪人是男孩时,它的男孩呢?是真的,如果是女孩,女孩?是的。
turtles-own [
age
boy?
girl?
]
它们通过一些随机链接连接。现在我想要每个男孩,我可以访问它的女孩邻居,并计算他们的年龄之间的差异。换句话说,两个不同品种的年龄差异。我写了这个,但它不起作用。
ask boys [
ask link-neighbors with [girls? = true]
[
set Gage age]
let H abs(item 0 age - item 0 Gage)
]
修改当我使用ask link-neighbors with [girls? = true]
时,邻居被认为是一起的,而我希望他们逐个被认为可以比较他们的年龄差异并以此为基础做其他一些事情。
有什么建议?
感谢
答案 0 :(得分:2)
这是未经测试的,但我希望它足够接近,如果它不正确就会让你到那里。
首先,你对你的品种和海龟自己的性别指标有些困惑。拥有一个或另一个会容易得多。完全废弃你的海龟自己的陈述并简单地测试breed
,因为那时你不能引入错误(例如)你有旗帜(女孩?或男孩?)与品种不一致,或两者兼而有之设置为TRUE或其他。你设置它的方式,有可能有一个品种的乌龟,但不小心设置其变量男孩?为假。根本不需要这些变量,breed
是一个自动变量(如用{t}创建的who
数字或size
),您可以直接测试该品种。 / p>
找到你的实际错误,你要求link-neighbors
设置他们的变量Gage,而不是设置正在进行询问的原始乌龟的值(即,作为这个自我中心的乌龟)网络)。
从评论中更新,你希望男孩有一个列表(下面称为年龄差异),表明他自己和他所有的女孩之间的年龄差异。原始map
用于从列表中减去常量,并要求变量值of
和agentset构造这些值的列表。
boys-own [age-diff]
ask boys
[ let my-girls link-neighbors with [breed = girls]
if any? my-girls
[ set age-diff map [ x -> abs (x - age) [age] of my-girls ] ]
]