Подсчитать количество вхождений в списке из той же черепахи - PullRequest
2 голосов
/ 16 января 2020

Я хотел бы знать, как найти «источник» элемента в списке. Ниже перечислены действия, которые мне необходимо рассмотреть для выполнения этой задачи:

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). Это делает невозможным подсчитать, сколько раз был выбран один элемент источника.

ВОПРОС:

Как подсчитать, сколько раз предмет был выбран той же черепахой?

Заранее благодарим за вашу помощь и предложения.

1 Ответ

2 голосов
/ 17 января 2020

Самый простой способ, которым я могу придумать, это сделать каждый this-item списком из двух элементов, элемент 0 - это сам элемент, а элемент 1 - исходная черепаха. this-item тогда будет создан черепахой с

set this-item list x self

(обратите внимание, что сам "элемент" является зарезервированным ключевым словом, поэтому мой "элемент" - это х.) Любая черепаха, которая помещает 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

Затем используйте map для go через этот список, чтобы составить список из числа записей в каждом архиве и суммировать этот список.

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

(я не могу проверить это сейчас, поэтому проверьте синтаксис.) Конечно, turtles может быть подмножеством всех черепах, если хотите.

Надеюсь, это поможет, Чарльз

...