NETLOGO: сохранение и использование значения переменной за последние 3 такта

#netlogo #agent-based-modeling

#netlogo #моделирование на основе агентов

Вопрос:

Я пытаюсь смоделировать фондовый рынок. Я пытаюсь дать агентам определенный тип поведения, на основе которого они будут прогнозировать цены. Таким образом, по сути, каждый агент прогнозирует цену акции. В процедуре настройки каждому агенту назначается случайная прогнозируемая цена. По прошествии времени прогнозируемая цена должна быть рассчитана следующим образом: общая сумма прогнозируемых цен за последние 3 периода / 3

Я не знаю, как подойти к этой проблеме. Я пытался использовать последнюю команду, но она не работает. Я думал о создании своего рода вектора, но я не мог этого сделать. Есть зацепки?

Это то, что я пробовал до сих пор:

 ask turtles [
set pre-price (pre-price   last [pre-price] of turtles   last [last [pre-price] of turtles] of turtles) / 3 ]
end
  

Последняя команда работает не так, как я хочу, чтобы она работала, потому что я пытался вручную вычислить результаты, и они не согласуются с этой командой. Есть идеи о том, как это сделать?

Спасибо!

Ответ №1:

На самом деле это очень интересная ошибка.

Проблема в том, что внутри вашего черепашьего вызова вы предполагаете, что все черепашьи «предварительные цены» являются статическими; однако для каждого агента они присваивают переменную.

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

Комментарии:

1. Есть идеи о том, как использовать матрицу? Ожидаемая цена — это функция, и оператор матрицы ожидает в ней буквальное значение?

2. Я предположил, что цена — это число. Матрица работает только с числами. Похоже, что эти параметры недопустимы. Вместо этого вы можете просто создать вложенный список с задачей для каждого элемента. Однако я не думал, что ваша цена — это функция, которая меняется со временем (т. Е. Среднее значение за последние 3 тика может измениться на среднее значение за последние 5 тиков). Почему бы просто не сохранить результаты применения функции в списке вложений? Таким образом, каждый внутренний список представляет предварительные цены для определенного тика для каждого агента.

3. по сути, предварительная цена — это переменная, которая будет меняться на каждом тике, поскольку она усредняет свои значения за последние 3 периода. Итак, если предварительная цена в 1-м периоде была 0, во 2-м периоде — 2, а в 3-м периоде — 6, то в 4-м периоде она должна быть 8/3. Я также не уверен, как использовать списки для этого. Команда list не допускает функций, и я не могу ввести в нее определенные числа? :/