В результате наших обратных комментариев, позвольте мне попробовать то, что вы ищете. Я предполагаю, что вы хотите создать leadvisitors
в начале цикла, а затем добавить два visitors
на тик по мере выполнения цикла. Если это так, то ваша setup
процедура будет выглядеть примерно так:
globals [num-visitors-created]
to setup
clear-all
set num-visitors-created 0
create-leadvisitors num-of-pedestrians * 0.1 [
set demand-type "none"
set color black
set size 1
setxy 0 16
set heading 180
set pen-size 1
set destination one-of patches
set wait-time -1
set demand-lvl 0
set num-visitors-created num-visitors-created + 1
]
reset-ticks
end
, создавая leadvisitors
, но не visitors
. Обратите внимание, что глобальная переменная num-visitors-created
отслеживает количество созданных leadvisitors
и visitors
, увеличиваясь на единицу каждый раз, когда создается leadvisitor
или visitor
.
В вашем go
процедуры, вы будете создавать по два посетителя каждый тик, пока общее число visitors
и leadvisitors
созданных не достигнет num-of-pedestrians
. (Если есть место только для одного нового посетителя, хотите ли вы, чтобы только один был создан, или они должны быть созданы в парах? Я предполагаю последнее.) Поскольку вы не хотите, чтобы смерть посетителя освободите место для нового, мы проверим созданный номер, а не номер, который еще жив.
to go
if turtles = 0 [ stop ]
; create a new pair of visitors if there is room.
if num-visitors-created <= (num-of-pedestrians - 2)
create-visitors 2 [
set demand-type 0
set size 1
set heading 180
set pen-size 1
setxy 0 16
set destination one-of patches
set wait-time -1
set demand-lvl 1
set attracted? false
set num-visitors-created num-visitors-created + 1
]
ask turtles
[
set-demand-type
have-demand
]
if ticks > 100 [ stop ]
tick
display-labels
end
(Поскольку, похоже, что leadvisitors
может d ie, вы хотите сохранить определенное минимальное число или пропорция leadvisitors
? Если это так, вы должны открыть новый вопрос.)
Приведенный выше код создаст пару новых visitors
на patch 0 16
на каждом тике. Однако, если вы хотите, чтобы новый visitors
был создан на другом патче, скажем, одном из красных, вы могли бы в своей процедуре go
иметь этот патч sprout
для новых посетителей.
ask one-of patches with [pcolor = red] [
sprout-visitors 2 [
set demand-type 0
set size 1
set heading 180
set pen-size 1
set destination one-of patches
set wait-time -1
set demand-lvl 1
set attracted? false
set num-visitors-created num-visitors-created + 1
]
]
Обратите внимание, что здесь координаты xy новых посетителей не установлены, поэтому они начинаются с патча, который их вырастил.
Надеюсь, это поможет, Чарльз