Системная динамика в агентных и процессных моделях

AnyLogic является единственным инструментом имитационного моделирования, который позволяет комбинировать в одной модели системную динамику с агентным и дискретно-событийным подходами. Эта интеграция может быть реализована различными способами. Например, вы можете моделировать рынок потребителей с помощью системной динамики и цепочки поставок с помощью агентов. Население в городе может быть смоделировано агентным подходом, а экономика или инфраструктура города может задаваться системной динамикой. Вы можете задавать поведение агента диаграммами системной динамики: например, системной динамикой можно моделировать процесс производства внутри компании, которая задана агентом. В плане элементов, которые "принадлежат" разным подходам, все тоже просто: некоторые переменные системной динамики могут быть использованы для задания логики агента или как параметры диаграммы процесса, а в диаграмме процесса может задаваться значение переменной системной динамики.

Вы можете изучить эту демонстрационную модель, в которой показан один из способов связать компонент модели, выполненный в системной динамике, с другим, дискретно-событийным, компонентом. В этом примере модели у нас задана очень простая диаграмма системной динамики: один накопитель и один входящий в него поток, который постоянно его наполняет. Событие, которое выполняется при выполнении условия, ожидает, когда уровень наполненности накопителя достигнет 100 единиц, и в этот момент перекрывает поток. 

Демонстрационная модель: Event Triggered by Stock Reaching Threshold

Оптимизация выполнения многоподходных моделей с компонентами системной динамики

Если ваша модель содержит и уравнения системной динамики, и агентные или дискретно-событийные компоненты, вы можете значительно улучшить производительность модели, выполняя ее в специальном режиме "игнорирования событий". 

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

Вы можете программно переключить модель, содержащую уравнения системной динамики и частные дискретные события, в режим более высокой производительности. В этом режиме решатель уравнений системной динамики не будет останавливаться на каждом дискретном событии.

Используйте следующую функцию исполняющего модуля AnyLogic:

getEngine().setEventAwareSolver(boolean EventAwareSolver) - Если аргумент функции равен false, исполняющий модуль AnyLogic включает режим "игнорирования событий", ускоряя таким образом выполнение многоподходной модели с системной динамикой и агентным или дискретно-событийным подходом. В противном случае модель выполняется в обычном режиме (который является режимом по умолчанию).

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

Если аргумент равен false, уравнения системной динамики будут решаться с фиксированным шагом, вне зависимости от возникновения событий. В результате событие будет оперировать последними (не обязательно актуальными на момент возникновения события) значениями непрерывных переменных, которые будут соответствовать последним результатам шага численной интеграции. В худшем случае значения будут устаревшими на htol единиц времени. Также в этом режиме формулы системной динамики не пересчитываются после каждого выполнения события, это происходит лишь на каждом шаге решателя. 


См. также

 Системная динамика