Распределение черепах по группам по цветам - PullRequest
0 голосов
/ 09 октября 2019

Новое в Netlogo, Stackoverflow и программировании в целом. Я хочу назначить черепах группе, основываясь на их цвете, а затем сообщить о количестве черепах в этой группе. Я назначаю черепахам цвет таким образом:

установить цвет один из [13 14 15 23 24 25 43 44 45 63 64 65 93 94 95]

То, что я хочу, это то, чточерепахи в пределах 2 цифр друг от друга будут сгруппированы вместе, например черепахи с цветом 13, 14 и 15 будут в группе вместе. Я также хочу иметь возможность сообщать о количестве черепах в группе с помощью монитора на вкладке интерфейса.

1 Ответ

1 голос
/ 10 октября 2019

Расширение table имеет замечательный, супер полезный, table:group-agents примитив, который как раз то, что вам нужно в этом случае.

Вотпример того, как вы можете его использовать:

extensions [ table ]
globals [ groups ]

to setup
  clear-all
  create-turtles 100 [
    set color one-of [13 14 15 23 24 25 43 44 45 63 64 65 93 94 95]
  ]
  set groups table:group-agents turtles [ color - color mod 10 ]
  print groups
  foreach (range 10 100 10) [ g ->
    let turtles-in-group table:get-or-default groups g no-turtles
    print (word count turtles-in-group " turtles in group " g)
  ]
end

Ключевая строка здесь

set groups table:group-agents turtles [ color - color mod 10 ]

Часть color - color mod 10 - это всего лишь маленькая хитрость для преобразования цвета, подобного 23, в "круглый цвет, например, 20. Черепахи, которые имеют то же значение, что и выражение, помещаются в одну группуРезультат выполнения этого кода будет примерно таким:

{{table: [[60 (agentset, 19 turtles)] [10 (agentset, 32 turtles)] [90 (agentset, 19 turtles)] [20 (agentset, 20 turtles)] [40 (agentset, 10 turtles)]]}}
32 turtles in group 10
20 turtles in group 20
0 turtles in group 30
10 turtles in group 40
0 turtles in group 50
19 turtles in group 60
0 turtles in group 70
0 turtles in group 80
19 turtles in group 90

Как видите, можно извлечь всю необходимую вам информацию из таблицы. Стоит ознакомиться с тем, как работают столы, если вы раньше не играли с ними.

Я не знаю, что вы собираетесь делать с этим в конце, но, возможно, стоит создать my-groupпеременная для ваших черепах. Предположим, у вас есть

turtles-own [ my-group ]

в верхней части кода, вы можете сделать что-то вроде:

foreach table:keys groups [ g ->
  ask table:get groups g [
    set my-group table:get groups g
  ]
]

, что облегчает выполнение таких вещей, как:

ask one-of turtles [ create-link-with one-of other my-group ]

Ссылки, кстати, также полезны для ознакомления, если вы новичок в NetLogo.

Когда я работаю с черепахами, которые являются членами групп, я часто использую groups черепахупорода для представления группы и создания связей между отдельными черепахами и группой, к которой они принадлежат. Это особенно полезно, если у вас есть атрибуты «группового уровня», которые необходимо отслеживать. Я был бы рад остановиться на этом, но я думаю, что это выходит за рамки этого конкретного ответа ...

...