Я не хочу моделировать буферную очередь в качестве агентов
Почему?
Я уверен, что у вас есть свои причины, но их стоит пересмотреть.
Всякий раз, когда я вижу имена переменных, такие как q-1
, q-2
... q-n
, я в ужасе отскакиваю.Вы пытаетесь смоделировать нечто, концептуально представляющее собой коллекцию вещей.Отдельные переменные предназначены для ссылки на отдельные вещи.Языки программирования имеют структуры данных, предназначенные для представления коллекций вещей, и, как правило, они являются подходящим инструментом для работы.
В NetLogo такими структурами данных являются (в основном) наборы агентов и списки.
MyИнтуиция говорит мне, что правильным подходом было бы моделировать очереди в виде черепах, владеющих переменной списка, но если вы действительно не хотите этого делать, вы всегда можете использовать глобальный список списков для хранения своих очередей.Вот пример:
globals [ queues ]
to setup
clear-all
set queues n-values 3 [ (list) ] ; create three empty queues
add-to-queue 0 "A"
add-to-queue 0 "B"
add-to-queue 1 "X"
print queues
print poll-from-queue 0
print queues
end
to add-to-queue [ queue-index new-item ]
let old-queue item queue-index queues
let new-queue lput new-item old-queue
set queues replace-item queue-index queues new-queue
end
to-report poll-from-queue [ queue-index ]
let old-queue item queue-index queues
let polled-item first item queue-index queues
let new-queue but-first old-queue
set queues replace-item queue-index queues new-queue
report polled-item
end
В вашей модели, конечно, очереди будут хранить участки вместо строк.