Соотношение СД и агентных моделей
 

Для начала покажем, как “конвертировать” существующую СД-модель в эквива-лентную агентную модель, а затем – как можно развить последнюю, чтобы учесть бо-лее сложную динамику реальной системы. Для понимания материала будет полезна следующая справка.

Карты состояний (statecharts). В консалтинговой практике мы часто используем карты со-стояний для описания поведения агентов. Карта состояний (рис. 8) – это, фактически, тот же конечный автомат с несколькими удобными дополнениями, предложенными Давидом Ха-релом, принятыми мировым моделирующим сообществом и вошедшими в стандартный UML (The Unified Modeling Language, [15]). Карты состояний позволяют графически опре-делить возможные состояния агента, переходы между ними, события, вызывающие эти пе-реходы, временные задержки и действия, совершаемые агентом на протяжении своей жизни. Такие конструкции, как вложенные состояния, позволяют задавать режимы функционирова-ния агента. Агент может иметь несколько параллельно активных и взаимодействующих карт состояний, каждая из которых отвечает за какой-либо аспект его жизни: например, образо-вание и семейное положение.


Будет уместно отметить следующее: в то время, как традиционные подходы в имитационном моделировании вроде СД или ДС практически не получили существенного развития на протяжении последних десятилетий, в технологии разработки программного обеспечения произошли революционные открытия, в корне изменившие принципы работы со сложными системами. Значительная часть этого опыта была аккумулирована в UML. И, хотя UML сам по себе не может использоваться как язык имитационного моделирования (в частности, не у всех конструкций есть чёткая семантика), многие его принципы, например, разделение структуры и поведения, объектная ориентированность (концепция классов и объектов, инкапсуляция) и т.п. могут сэкономить аналитику огромное количество времени и усилий при разработке имитационной модели.

Рассмотрим СД-модель как цепочку накопителей и потоков и множество “пра-вил”, контролирующих эти потоки (рис. 9). Ключевым начальным действием будет “деагрегировать” накопители, т.е. представить их не как “ёмкости с жидкостью”, а как, например, “ящики с шариками”. Эти шарики и станут агентами. Мысленно помес-тите теперь себя в такой шарик и посмотрите на происходящее. Вы увидите, что у вас два возможных состояния State A и State B, соответствующие тому накопителю (ящи-ку), в котором вы находитесь, и если вы находитесь в State A, то когда-нибудь перейдё-те в State B. Момент времени, когда это произойдёт, очевидно, зависит от интенсивно-сти потока. Агентная модель, которая ведёт себя так же, как эта СД-модель, будет со-стоять из (Stock A + Stock B) агентов, каждый из которых “выполняет” такую вот карту состояний. Переход между состояниями может быть реализован несколькими способа-ми (два из них показаны на рис. 9): синхронно, когда решение о переходе принимается на каждом временном шаге dt, и асинхронно, когда время перехода рассчитывается за-ранее при входе в State A и может пересчитываться потом при изменении Rate. Заме-тим, что в последнем случае понятие временного шага в модели в принципе отсутству-ет. Асинхронные агенты могут быть гораздо более эффективны вычислительно и проще в реализации, чем синхронные. В последующих примерах будем использовать асинхронные агенты везде, где это возможно.

Модель Bass Diffusion – агентная версия. Теперь проиллюстрируем технику перехода от CD к АМ на классической модели распространения инновации из знамени-того учебника Штермана по СД [3], приведённой выше (рис. 10).
Шаг 1. Для двух накопителей создаём два состояния агента: Potential Adopter и Adopter.
Шаг 2. Две составляющие Adoption Rate будут моделироваться отдельно. Для влияния рекламы Adoption from Advertising создаём переход из состояния Potential Adopters в состояние Adopters, который срабатывает по истечении экспоненциально распределённого (среди всех агентов) времени со средним значением Advertising Effec-tiveness. Это моделирует постоянный процент людей, становящихся клиентами под влиянием рекламы.
Шаг 3. Для “устной рекламы” Adoption from Word of Mouth добавляем цикличе-ский переход, периодически срабатывающий у клиентов. Этот переход будет модели-ровать их контакты с другими людьми, происходящие с интенсивностью Contact Rate. При каждом контакте агент-клиент будет посылать сообщение «хорошая вещь – купи!» (“Good stuff – Buy it!”) другому агенту. В случае, если этот другой ещё не клиент, т.е. находится в состоянии Potential Adopter, он станет клиентом (перейдёт в состояние Adopter) с соответствующей вероятностью, отсюда появляется второй переход из Poten-tial Adopter в Adopter. Клиенты же такое сообщение будут игнорировать. Приведённая реализация оптимизирована: мы моделируем только успешные контакты (поэтому ин-тенсивность циклического перехода сразу умножена на вероятность Adoption Fraction, а эффект всегда гарантирован).

СД-модель порождает хорошо известную S-образную кривую, и подобную же кривую даёт агентная модель. Если число агентов невелико, дискретная (и, таким об-разом, более реалистичная) природа модели хорошо просматривается на графике; при увеличении числа агентов кривая будет приближаться к гладкому решению СД-модели.

Количество моделируемых агентов зависит от программного и аппаратного обеспечения, но практически важнее определить, сколько агентов действительно нужно моделировать. Например, если вас интересует динамика населения страны (300 000 000 человек) не нужно имитировать 300 000 000 агентов. Существуют различные методы уменьшения числа агентов, делающие моделирование вычислительно эффективным и при сохранении коррект-ных результатов.

Процедура “конвертации” или, скорее, изменения концепции модели, которая была только что рассмотрена, имеет практический смысл только в том случае, если планируется развивать полученную агентную модель далее, например, учитывать ин-дивидуальную память агентов, их пространственное положение и т.д. Если же объек-ты, находящиеся в накопителях СД-модели, пассивны и неразличимы, то смысла в та-кой конвертации нет. Например, когда в СД-модели рассматриваются денежные сред-ства, нам не интересна индивидуальная история каждого доллара, а доллары сами по себе не проявляют активности (по крайней мере, в смысле данного исследования).
Теперь поменяем в модели некоторые предположения. Пусть эффективность устной рекламы конкретного клиента (вероятность, с которой он обращает в клиентов тех, с кем общается) зависит от того, как давно он сам приобрёл продукт. Предполо-жим, что сразу после покупки это влияние велико, а затем оно постепенно уменьшается и стабилизируется на некотором уровне (рис. 11).
Для того чтобы это учесть, в агент добавляется переменная Time Purchased, в ко-торой запоминается время покупки (см. действия на обоих переходах из состояния Po-tential Adopter), а также используется табличная функция Influence вместо константы Adoption Fraction. Естественно, полученная кривая отличается от предыдущих из-за другой, более низкой эффективности устной рекламы.
Возможно ли учесть те же предположения в СД-модели? Теперь доля каждого клиента в общей скорости распространения продукта (диффузии) Adoption Rate различна, к тому же она меняется со временем. Поэтому агрегирование клиентов в одном (или любом разумном числе) накопителе неизбежно приводит к искажению результатов.

Частичное решение (а точнее, “обход”) этой проблемы состоит в замене одного накопителя массивом ёмкостей, так что объекты с близкими свойствами попадают в одну ёмкость и перемещаются в другую при изменении этих свойств. Предположим, однако, что параметров, влияющих на свойства, не один, а несколько. Тогда массив становится многомерным, и при увеличении сложности модели ёмкостей, элементов накопителя, может стать больше, чем собственно моделируемых объектов [14]. Такая СД-модель, естественно, бессмысленна, в то время как агентная модель будет всегда содержать ровно столько агентов, сколько запланировано.

Хищники – жертвы (Predator Prey) – агентная версия.

СД-модель ««хищники – жертвы» (рыси и зайцы) состоит из пары дифференциальных уравнений, которые описывают динамику популяций хищников и жертв (или паразитов – носителей) в её простейшем случае (одна популяция хищников, одна – жертв). Модель была предложена независимо Альфредом Лоткой и Вито Вольтеррой (Alfred Lotka и Vito Volterra) [4], [5] в 1920-х годах; она характеризуется колебаниями в размерах обеих популяций, при-чём пик количества хищников немного отстаёт от пика количества жертв. В модели приняты следующие упрощённые предположения: а) жертвы всегда имеют достаточное количество ресурсов и погибают только будучи съеденными хищниками; б) жертвы – единственный ис-точник пищи для хищников, и хищники умирают только от голода; в) хищники могут по-глощать неограниченное количество жертв и г) пространство обитания не имеет размерно-стей, т. е. любой хищник может встретить любую жертву (рис. 12).
На этот раз вместо конвертирования СД-модели агентная модель будет построе-на непосредственно “по постановке задачи” с предположениями даже более близкими к реальности, чем перечисленные выше. В агентной модели: а) зайцы (hares) и рыси (lynx) имеют конечную продолжительность жизни, т. е. они умирают также и от старости, а не только будучи съеденными или от голода; б) зайцы и рыси живут в двумерном пространстве (в терминологии агентного моделирования “space-aware”); в) плотность зайцев ограничена (например, неким пищевым ресурсом), так что зайцы размножаются, только если вокруг достаточно свободного места; г) рысь может поймать зайца только поблизости от места её обитания; д) рысь охотится периодически; е) если во время охоты заяц не пойман, рысь перемещается; и ж) если рысь так и не находит зайца в течение определённого времени, она умирает (рис. 13).

Агент-рысь и агент-заяц оба имеют переменные Location их текущего местопо-ложения; вначале оно случайное. Оно меняется при перемещении агентов и влияет на их поведение. У рысей и у зайцев с определённой частотой появляются рысята и зайча-та. Это моделируется циклическими «таймерами рождений» Births, которые создают новых агентов, причём в случае зайцев это зависит от их локальной плотности. Карта состояний зайца состоит всего из двух состояний: жив Alive и мёртв Dead и двух пере-ходов между ними, соответствующих двум различным причинам смерти: возраст и съе-дение рысью (последнее моделируется сообщением, которое рысь напрямую посылает зайцу). У рыси поведение более сложное. Рысь охотится через каждые Lynx Hunting Period и, если она не находит зайца (это вероятностно зависит от их локальной плотности), она перемещается (изменяет Location), оставаясь в голодном состоянии Hungry. В случае, если заяц убит (рысь посылает ему сообщение «я тебя съела!», “I ate you!”), она выходит и тут же входит опять в состояние Hungry, что (в соответствии с семантикой карт состояний) вызовет “перезапуск” «тайм-аута голодной смерти» Lynx Hunger Death Threshold. Таким образом, рыси нужен как минимум один заяц каждые Lynx Hunger Death Threshold единиц времени.
Имитация агентной модели даёт гораздо более богатый выход, чем СД. Дейст-вия разворачиваются на плоскости: видны атаки рысей, их вымирание там, где съедены все зайцы, и быстрое заполнение зайцами свободного от рысей пространства. На агрегатном (количественном) уровне модель показывает колебательное поведение, похожее на поведение СД-модели (пики популяции рысей следуют за пиками популяции зайцев). В зависимости от параметров рыси могут полностью вымереть (иногда вместе с зайцами), чего никогда не случается в СД-модели из-за её непрерывности. Осцилляции стохастичны из-за стохастического характера модели.

Один из часто задаваемых вопросов: как калибровать агентные модели? В СД зависимости переменных и параметров друг от друга явно определены, что позволяет более или менее понятным образом проводить калибровку. В агентных моделях параметры определены на локальном уровне, в то время как калибруют модель относительно глобальной статистики. Поэтому агентную модель можно калибровать как (стохастический) чёрный ящик, хотя на практике обычно понятно, какие из параметров на что влияют.
 
назад

вперед