AnyLogic позволяет не только разделить структуру сложной модели на секторы, но и предоставляет все преимущества объектно-ориентированного подхода в Системной динамике. Вы можете создавать сложные модели с внутренней иерархией, помещая логически обособленные части диаграммы потоков и накопителей в различные типы агентов и вынося в интерфейс объекта лишь определенный набор переменных, которые будут связывать эти отдельные части.
Компоненты Системной динамики можно поместить в типы агентов AnyLogic, параметризовать, сделать их частью более сложных структур и многократно использовать при необходимости.
Демо-модель: Population Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.На примере модели ниже видно, как можно иерархически структурировать модель в системной динамике.
В этой модели две логические части, каждая из которых сфокусирована на определенном аспекте: жилищный сектор и население. Для каждой части в отдельных типах агентов нарисованы отдельные диаграммы потоков и накопителей в разных типах агентов: HousingSector и PopulationSector.
В AnyLogic вы можете разделить модель на части по принципу объектно-ориентированного моделирования, используя агентов, в интерфейс которых вынесены динамические входные и выходные переменные.
«Интерфейсом» для двух секторов выступают две переменные:
- Накопитель Houses из сектора Housing используется в секторе Population
- Переменная HouseholdsToHousesRatio из сектора Population используется в секторе Housing
Для каждой такой переменной существует «оригинальный» элемент в одном из секторов и «копия» в других секторах.
Давайте посмотрим, как создавались эти переменные.
Создание «выходной» интерфейсной переменной для Houses
- Добавьте элемент Динамическая переменная из палитры Системная динамика на диаграмму HousingSector.
- Назовите эту переменную HousesOut.
- В Свойствах этой переменной установите флажок для параметра Отображается на верхнем агенте. Таким образом мы объявляем эту переменную интерфейсной переменной, которая будет видна в агенте, который соединяет две части (на диаграмме Main).
- В поле HousesOut= укажите Houses в качестве значения переменной. Таким образом мы говорим переменной взять значение накопителя Houses (и поместить его в интерфейс агента).
Создание копии переменной для HouseholdsToHousesRatio
- Перетащите элемент Копия из палитры Системная динамика на диаграмму HousingSector.
- Выберите из списка «оригинальную» переменную HouseholdsToHousesRatio.
Создайте интерфейс жилищного сектора
- Нарисуйте иконку для этого типа агента с помощью фигур презентации.
- В свойствах всех фигур нарисованной иконки установите флажок напротив Значок.
- Поместите переменную HousesOut на границу иконки.
- Нарисуйте связь от Houses к HousesOut.
- Переместите «оригинальную»s переменную HouseholdsToHousesRatio на границу иконки.
- В свойствах этой переменной выберите опцию Отображается на верхнем агенте, чтобы вынести эту переменную на интерфейс агента.
- Установите флажок напротив Зависимая. Таким образом мы сообщаем этой переменной, что значение она будет получать «извне», в нашем случае — от внешней интерфейсной переменной сектора Population, которая будет связана с ней на диаграмме Main.
- Перенесите связь с этой переменной на ее копию, <HouseholdsToHousesRatio>, чтобы диаграмма потоков и накопителей хорошо выглядела.
То же самое проделайте с диаграммой PopulationSector.
Затем перетащите оба агента (HousingSector и PopulationSector) из дерева Проекты на диаграмму Main и соедините их интерфейсные переменные соединителями, как показано ниже.
Изображение демонстрирует, как значения передаются из одного сектора в другой с помощью интерфейсных переменных, которые мы создали.
Демо-модель: Population Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.-
Как мы можем улучшить эту статью?
-