построить элемент в списке, который постоянно обновляется в Netlogo

Я определил набор атрибутов для некоторых агентов-производителей в интерфейсе как глобальные переменные, а затем назначил их списку (в настройках), который также является глобальным, и агенты будут использовать его содержимое.

Проблема в том, что я не могу их построить.

Определяются в интерфейсе как глобальные переменные: p1-size = 9, p2-size = 13, p3-size = 14.5, p1-rate = 80, p2-rate = 50, p3-rate = 98

to setup

  ca  ; clear-all
  reset-ticks
  file-close-all
  setup-patches
  create-prod ; create producers
  set size-set ((list p1-size p2-size p3-size))
  set rate-set ((list p1-rate p2-rate p3-rate)) 

Я хочу построить график и отслеживать, как меняются ставки, и я сталкиваюсь с ошибкой, определив это:

plot item  0 size-set

Size-set является глобальным, но ошибка говорит: «ITEM должен быть строкой или списком, но вместо этого получил число 0.

Буду признателен за любую помощь в этом.

Спасибо,


person user710    schedule 09.10.2017    source источник


Ответы (1)


Побочным эффектом примитива reset-ticks является обновление графиков. В вашем коде вы вызываете reset-ticks перед установкой значения size-set, поэтому в то время, когда ваш график вызывает plot item 0 size-set, ваш глобальный size-set по-прежнему имеет значение по умолчанию 0.

Два возможных решения:

  • Переместите reset-ticks в конец вашей setup процедуры. Таким образом, size-set будет правильно инициализирован при обновлении вашего графика. Если у вас нет особой причины поступать иначе, это решение, которое вы должны выбрать. Стандартом NetLogo является вызов reset-ticks только в конце setup.

  • Вы не должны этого делать, если у вас нет веских причин, но вы также можете иметь какое-то «защитное условие» в вашем графическом операторе: if is-list? size-set [ plotxy ticks item 0 size-set ]. Обратите внимание на использование plotxy вместо plot, чтобы убедиться, что вы по-прежнему рисуете в правильном положении x даже если ваше состояние защиты заставляет вас пропустить несколько тиков.

person Nicolas Payette    schedule 09.10.2017