来自同一只乌龟的列表中出现的次数

问题描述 投票:0回答:1

我想知道如何在列表中找到项目的“来源”。我为此任务需要考虑的操作如下:

1)在由乌龟创建的列表中添加了一个项目;

2)因为每只乌龟都有自己的列表,其中包含由不同的乌龟创建的物品,所以我想设置一个计数器,说明该乌龟多久选择一次甲龟的物品。

方法和代码:

这段代码在所选乌龟的列表中添加了一个名为'this_item'的项(局部变量):

ask one-of turtles [

              set archive fput this_item archive
]

以及此其他代码将相同的项目添加到邻居的列表中:

 ask in-link-neighbors [
              set archive fput this_item archive
]

我将设置一个局部变量,例如从列表中选择的第一项。

let picked first archive

要查找该项目的来源,我想使用who。但是,who用于将乌龟提取后添加到自己的列表中的乌龟。

print (word "Source: " who " has this list " list " after added item " picked)

[如果我在乌龟创建新项目时使用自己将变量source定义为项目的来源,则此报告仅报告源(学生)的品种,而不报告源的相应乌龟(例如学生2)。这使得无法计算选择一个来源项目的次数。

问题:

如何计算同一只乌龟选中一个项目的时间?

谢谢您的帮助和建议。

netlogo
1个回答
1
投票

我想到的最简单的方法是让每个this-item是一个由两个元素组成的列表,项目0是“项目”本身,项目1是源乌龟。然后用[>]由乌龟创建this-item

set this-item list x self

((请注意,“ item”本身是一个保留关键字,所以我的“ item”是x。)任何将this-item放在列表中的乌龟都会知道item 0 this-item是事物本身,item 1 this-item是它来自的乌龟。要计算列表中指定条目(例如archive)的条目数量,该列表由给定龟(例如turtle 1)拥有,给定的龟(例如turtle 3)可以使用

ask turtle 1 [show length filter [a -> item 1 a = turtle 3] archive]

如果需要turtle 3在所有海龟档案中进行记录的次数,则可以分步进行。首先创建所有存档列表的列表。

let all-archives [archives] of turtles

然后使用地图遍历该列表,以列出每个档案中的条目数列表并对该列表求和。

show sum map [t -> length filter [a -> item 1 a = turtle 3] t ] all-turtles

((我现在无法测试,因此请检查语法。)当然,turtles可以是所有海龟的子集。

希望这会有所帮助,查尔斯

© www.soinside.com 2019 - 2024. All rights reserved.