Как указано ранее, более адекватные и информативные модели системной динамики можно строить, не только учитывая дополнительные факторы, но и с помощью более детального анализа самих потоков. Рассмотрим эту возможность подробнее.
В своем классическом подходе к построению моделей системная динамика абстрагируется от отдельных объектов, от их индивидуальных характеристик. Все индивидуальные объекты слиты в одно "сообщество" и представлены одним значением: общим количеством параметра (ресурса), который используется в системе, общим числом членов популяции и т. п. В то же время существует множество ситуаций, в которых важно представить отдельные объекты или их подгруппы и анализировать поведение всей системы как интегральный результат поведения ее компонентов. Например, существенную роль в поведении популяции могут играть отдельные члены
популяции и взаимодействие между ними, что невозможно представить в рамках парадигмы системной динамики. Модели, позволяющие учесть эти особенности, строятся на совершенно других принципах, в рамках другой парадигмы, которая называется агентным моделированием. Эту парадигму мы рассмотрим в главе 15. В то же время в арсенале системной динамики существуют средства, позволяющие структурировать емкости и потоки, выделяя части этих потоков, если они существенно отличаются своими характеристиками. Для популяции это, например, различные возрастные группы. Рассмотрим такие средства на примере моделей роста популяции.
Нет сомнений, что для модели развития популяции интенсивности рождения и смертности для различных возрастных групп населения существенно различаются. Потому более адекватная модель популяции может рассматривать отдельные возрастные группы в составе всей популяции. Рассмотрим
модель ДИНаМИКИ ПОПУЛЯЦИИ (Population With Arrays), Которая учитывает
и возрастные группы, и миграцию (рис. 13.20). За единицу модельного времени здесь принят год. Все население разделено в модели на четыре возрастные группы: до 12 лет молодежь (youth), следующие 25 лет взрослые (Adult), следующие 20 лет — это люди среднего возраста (MiddleAge) и, наконец, пожилые (old). Кроме того, будем считать, что население проживает в двух областях: Юг (south) и Север (North).
Для представления популяции в нашей усложненной модели будем использовать двумерный гипермассив рис. 13.20. Каждая размерность гипермассива должна быть задана с помощью перечисления. Одна размерность будет называться Age, другая — Region (рис. 13.21).
Четыре элемента размерности Age именуются Youth, Adult, MiddieAge И old, два элемента размерности Region именуются south и North.
Основным количеством, которое интересует нас при разработке модели, является численность населения, структурированная с помощью представления его в виде гипермассива. В окне свойств этой переменной она описана как массив с двумя размерностями: Age и Region. Начальное значение этого гипермассива задается непосредственно:
{ {1000, 800}, {950, 750}, {900, 700}, {400, 1000} }
Такое задание определяет, например, что начальное значение population
ДЛЯ Age=Youth равно паре {1000, 800}.
Динамика населения, представленного в виде гипермассива, определена в модели как интеграл:
d(population)/dt=shiftedAging()+mask *births.sum(Age) - deaths -stabilityFactor* population^2
Рассмотрим члены в правой части этого соотношения по очереди. Фактор стабильности — stabilityFactor — это коэффициент замедления роста популяции, рассмотренный ранее. Он является скаляром, который действует на все группы популяции. В соответствии с выражением:
stabilityFactor*populationA2
указанном в окне свойств переменной population, будет построен двумерный гипермассив, элементы которого получаются покомпонентным выполнением операций возведения в квадрат, а затем каждый компонент будет умножен на вещественную величину stabilityFactor, что соответствует семантике действия этого фактора.
Переменная deaths определена как гипермассив той же структуры, что и population формулой deathRate*population. Интенсивность смертности в этой модели зависит от возраста, но не зависит от района проживания. Поэтому переменная deathRate определена как одномерный массив с индексом Age. Произведение гипермассивов с разными размерностями определяется так:
death[Youth, North] =deathRate [Youth] *population [Youth, North]; death[Youth, South]=deathRate[Youth]*population[Youth, South]; death[Adult, North] =deathRate [Adult] *population [Adult, North],-
и т. д.
Такая семантика операции полностью соответствует тому, что интенсивность смертности по четырем возрастным группам населения различна и не зависит от региона.
Рассмотрим теперь переменную aging. Это гипермассив той же структуры. Он показывает, сколько людей в единицу модельного времени (в год) в каждой возрастной группе и в каждом регионе переходит в следующую возрастную группу. Очевидно, что это количество получается покомпонентным делением численности населения в каждой группе на интервал (в годах) возраста каждой группы. Формула
aging = population / ageGroupDuration
соответствует этому определению. Данная переменная используется в алгоритмической функции shiftAging, возвращающей гипермассив, в котором для каждой возрастной группы подсчитывается разница между числом людей, вошедших в нее за единицу времени и числом людей, вышедших из нее по возрасту. Здесь используются методы: next () для переменной типа перечисление (чтобы последовательно переходить от индекса к индексу), get и set для получения элемента гипермассива и записи элемента в гипермассив.
Наконец, последнее слагаемое mask*births.sum(Age) учитывает интенсивность рождений в выражении для подсчета изменения величины population во времени. Гипермассив birth определяет для каждой возрастной группы и каждого из районов число новорожденных birth=population*birthRate, где birthRate — одномерный гипермассив, определяющий интенсивность новорожденных в год для каждой возрастной группы населения. Метод sum гипермассива birth подсчитает сумму новорожденных для всех возрастных групп для каждого региона. Наконец, произведение гипермассива mask, индексируемого перечислением Age, и гипермассива births, sum (Age), индексируемого перечислением Region, дает гипермассив, индексируемый обоими этими перечислениями, с числом новорожденных по районам в первой возрастной группе.
Изменения численности населения в каждой возрастной группе и каждом регионе выведены в виде столбцовых индикаторов в анимации модели.
Практическое значение рассмотренных здесь системно-динамических моделей развития популяции состоит в том, что они дают предварительное количественное представление об изучаемых процессах. Используемые в них параметры (например, скорость размножения) имеют определенный биологический смысл, и это позволяет проверить соответствие модели тому реальному процессу, который, как предполагается, она описывает. На основании полученных данных можно калибровать модель — вычислить значения параметров модели и затем использовать эту модель как основу для дальнейшего исследования.
Заключение
Системная динамика подходит к моделированию сложных систем на самом высоком уровне агрегирования. В основе нее лежит представление о системе как совокупности взаимозависимых потоков (денежных, продукции, людских и т. п.), изменяющихся во времени. При построении таких моделей делается ряд предположений и упрощений. Во-первых, модели системной динамики абстрагируются от индивидуальных характеристик и поведений объектов системы и даже от самих индивидуальных объектов (будь то документы, персонал, животные и т. п.). Во-вторых, в этих моделях обычно абстрагируются от физических характеристик среды, в которой протекают процессы. В-третьих, все переменные, даже если они характеризуют дискретные количества (например, популяцию или количество покупателей), рассматриваются как непрерывные. Наконец, здесь не выделяются отдельные события в системе, все процессы рассматриваются протекающими в непрерывном времени (например не выделяется смена поколений в популяции или дни для продаж продукта).
Несмотря на такие упрощения, модели системной динамики оказались весьма продуктивными для исследования многих сложных проблем. Малое число сравнительно простых структурных элементов, повторяющееся использование которых позволяет строить модели бизнес-процессов и развития города, модели производства и динамики популяции, модели экологии и развития эпидемии. Все это позволяет говорить о системной динамике как об очень эффективной, универсальной парадигме исследования сложных систем с помощью имитационного моделирования.
Поскольку AnyLogic содержит все структурные элементы, необходимые для построения системно-динамических моделей, эта платформа может рассматриваться как эффективная универсальная среда для разработки моделей и анализа сложных систем. В реальных исследованиях для повышения адекватности и точности моделей может быть применен метод структуризации накопителей, как это было сделано в последней модели динамики развития популяции.
Глава 14