Netlogo - динамически выбирайте разные глобальные переменные - PullRequest
0 голосов
/ 12 декабря 2018

Я моделирую складскую систему массового обслуживания.Основными агентами являются посылки и сортировочные машины.Посылки извлекаются из определенной именованной буферной очереди (например, q-1, q-2, q-3 ... qn) сортировочными машинами для сортировки.Я не хочу моделировать буферную очередь в качестве агентов, вместо этого я хотел бы представлять их как переменные глобального списка.

Проблема заключается в том, как я мог настроить сортировочные машины так, чтобы они могли динамически идентифицировать различные глобальные переменные (q-1, q-2 ... qn) и работать с ними?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я не хочу моделировать буферную очередь в качестве агентов

Почему?

Я уверен, что у вас есть свои причины, но их стоит пересмотреть.

Всякий раз, когда я вижу имена переменных, такие как 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

В вашей модели, конечно, очереди будут хранить участки вместо строк.

0 голосов
/ 12 декабря 2018

Возможно, у вас есть переменная, которую вы добавляете для создания строкового представления переменной, а затем сохраняете глобальную переменную внутри локальной переменной после выполнения строки:

Я не проверял ее, ноэто должно работать:

let parcel-number 2
let parcel run-result (word "q-" parcel-number)

В качестве альтернативы

run (word "let parcel q-" 2)

Для получения дополнительной информации см. здесь: https://ccl.northwestern.edu/netlogo/docs/dictionary.html#run

...