Я пытаюсь создать кластерную (или деревенскую) структуру социальной сети с num-nodes
и clique-size
в качестве основных переменных. В моем коде я создаю num-nodes / clique-size
узлов, которые являются начальными узлами в кластере. После этого я прошу эти узлы заштриховать другие узлы рядом с ними. Однако, поскольку все узлы одновременно просят штриховать, общее количество узлов превысит переменную num-nodes
. Следовательно, мне нужно, чтобы узлы штриховали последовательно. Как я могу этого добиться? В настоящее время мой код выглядит так:
to create-new-nodes [n]
clear-all
ask patches [ set pcolor white ]
create-nodes n [
set color red
set shape "circle"
]
reset-ticks
end
to setup
clear-all
ask patches [ set pcolor white ]
setup-clusters
reset-ticks
end
to setup-clusters
create-new-nodes (num-nodes / clique-size)
ask nodes [set leader 1]
ring-layout
ask nodes [set groupid groupid + who]
while [count nodes < num-nodes] [
ask turtles with [leader = 1] [ hatch 1 ]]
end
Как мне продолжить? Есть ли способ встроить функцию [stop], если who> = num-nodes? Или есть способ лучше?
Чтобы прояснить: я хочу, чтобы узлы штриховались последовательно в зависимости от принадлежащего им groupid. Итак, сначала узел вылупится в группе 0, затем в группе 1 и т. Д. До тех пор, пока черепахи больше не вылупятся из-за count nodes = num-nodes
. Это несколько отличается от моего другого вопроса.
Я переписал свой код на это, но получаю ошибки:
;;ticker is a global variable
to setup-clusters
create-new-nodes (num-nodes / clique-size)
ask nodes [set leader 1]
ring-layout
ask nodes [set groupid groupid + who]
loop [
if count nodes >= num-nodes [stop]
ask n-of 1 nodes with [groupid = ticker] [ hatch 1 [set group-membership groupid ]]
ifelse ticker = (num-nodes / clique-size)
[set ticker 0]
[set ticker ticker + 1]
]
Спасибо!