Ю. Карпов - Иммитационное моделирование систем с AnyLogic 5 (1124147), страница 61
Текст из файла (страница 61)
15.б). Глава (о. Мнсгоагентные системы Рис. 16.6. Агенты в двумерном дискретном упорядоченном пространстве ПуСтЬ СНОВа ВКЧЮЧаЮщнй аГЕНтОВ аКтт(ВНЫй ОбЪЕКт ИМЕЕТ ИМя Впчъгоптяепе. Каждая клетка с точки зрения модели — это контейнер произвольного числа агентов, причем количество агентов в клетке может меняться динамически, в процессе работы мололи.
Такой тип ланных языка ]ача нами был рассмотрен в главе 7, это класс чессок. Класс чессок имеет несколько полезных методов. Пусть сеп. — объект типа чессок. П Получить число элементов вектора: се11.ваке(); (:] Добавить объект адепта в вектор сеп.: се11.асЫ( адепт (з Выбросить объект адепсх из вектора сеп.: се11.кепоче( вдепед ); П Получить 1-й элемент вектора: (Хдепе) се11.дев( 1 Этот последний случай следует прокомментировать. Вектор в языке (ача может содержать объекты любого типа, он рассматривает их все как экземпляры наиболее абстрактного типа о)озесс.
Поэтому и возвращаемый методом дес объект будет иметь тип о) бесс. Чтобы его привести к тому типу. с которым мы работаем, т. е. типу лдепс, нужна операция кастинга, приведения типов. Для того чтобы инициализировать массив векторов-клеток с именем се11в размером пхт во включающем агентов объекте (каждая клетка — это вектор объектов типа лдепс), нужно записать: се11в = пеи Чесеок(п](п]; Еок( ьпе к=о; к<п„- кее ) Часть бв Современные парадигмы в имитационном моделировании 1ог( тпс с=от с<пт с++ ] се11я[г)[с] = пеы Нессог() Пусть в активном объекте )(депо определен указатель на этот массив векторов С ТЕМ ЖЕ ИМЕНЕМ се11в.' Чессог[)[) се11я = ((Епчтгоптпепс)детсыпег()).се11ят Приведем несколько полезных функций, которые могут использоваться при моделировании движения агентов в таком пространстве.
Пусть в агенте определены две целых переменных г, с„которые задают номер клетки, в которой находится этот агент. (з Найти случайную клетку и поместить в эту клетку себя: г = нпттогттт дзясг(о,п-1); с = оптгоглт т)тясг(О,лт-1)т се11я[г) !с] .а<И( с)ття ) т 0 Переместиться вправо на ! клетку, удалив себя из текущей клетки: се11я [г] [с++] .
гетлаче( Гъвв ) т ое11я[г] [с] .асЫ( Гъвв ); П Найти количество агентов в клетке снизу: тпг н = се11я[г+1] [с].ятяе() т [з Найти случайного агента в данной клетке с индексал(и г, с. тпс Х = ипттоттп т[тясг(О,се11я[г][с].язве()-1)т // случайный номер йдепс а = (Адепс)се11я[г][с].дес( )< )т Поскольку в этой операции используется метод дег класса чесгог, то здесь также необхолнма операция кастинга, т. е. приведение возвращенного этим методом объекта типа оьзесг к типу лдепг, объекты которого запомнены в векторе.
Рассмотрим теперь случай, когда в модели агенты функционируют в среде, которая разбита на несколько локальных районов, в каждом из которых может находиться некоторое число агентов. При этом в модели неважно физическое расстояние как между районами, так и между агентами, находящимися в одном районе (рис. ]5.7). Пусть в редакторе опрелелен реплицированный объект — вектор агентов с именем адепс, которые все являются экземплярами класса лдепс (рис. ]5.7). Пусть также этот вектор вложен в класс (активный объект) впчтгоптьепс, и в этом классе определен вектор с именем 1осагтопя. Кажлый элемент этого вектора может хранить любое число экземпляров агентов, т. е.
1осастоп(т) является '-м "местом", в которое может быть помещено произвольное число агентов. Для того чтобы инициализировать этот массив "мест" в среде, следует в активном объекте впчтгоплтепг сначала создать массив указателей на вектора, например, нз 25 штук: чесгог [ ] 1ооастопя = пеы чесгог[25]т Глава (б. Многоагентныв системы Еяч(гопевп! (.") уес(ог( ) !освгопв е. е Рис. 16.7. Агенты в дискретном неупорядоченном пространстве Рассмотрим теперь, что может делать агент, если в классе, в который он бу- дет вложен, определен массив таких "мест". Во-первых, в агенте следует иметь указатель на включающий объект.
Назовем его епч: Теперь из агента доступ к массиву векторов получить просто — это епч.1осаегопв. ПуетЬ В аГЕНтс ОПИСаНа ПсрЕМЕННая 1осаеъоп тИПа чессог (рис. (5.7). Приведем примеры операций, которые можно выполнить в агенте. (") Поместить себя в случайное "место" в среде: ъпс К = ипъггоп дзвск( О, 1осасгопв.1епдс)т-1 ) 1асасгоп = епч.1оса! топе( К )! 1осасъоп.асы( сьзв )г ( ) Удалить себя из текущего "места": 1осасгоп.кееоче( с)тзв ) ! (з Найти количество агентов в том "месте", в которое помещен агент: ъпе Н = 1осае1оп.в1ве()! (".) Найти случайного агента в том "месте", в которое помещен агент: 1пе К = ип1тков дьвсг( О, 1асас1опв.1епде)т-1 ) Адепт а = (Адепс)1осасзоп.дес( к ) ЗЛЕСЬ СНОВа ИСПОЛЬЗУЕТСЯ МЕТОД дее КЛаССа Уесеок, ПОЭТОМУ ВОЗВРащаЕМЫй этим методом объекта типа оьб асс приводится к типу Адепт.
адеп(* Ов Уев(ог (осв(гоп а потом созлать сами объекты — пустые вектора: ток( зпс 1=0! 1<25! 1е+ ) 1осае1опв(1) = пои уессог()! Епчзкогппепе епч = ( (Епчгпопвет!С) деесчпек() ); 'е а' 'е е е'*' ,'Ф Часть Ф Современные парадигмы в имитационном моделировании 15.8.
Пример агентной модели: Инфицированные муравьи Инфицированные муравьи (солевдъоцв хлев) — это агентная модель искусственной жизни, в которой реализовано простое коллективное повеление активных объектов. В молели агенты-муравьи двигаются в ограниченном двумерном пространстве, стараясь избегать столкновений друг с другом и "отражаясь" от стенок. Кроме того, каждый муравей выступает и в другой роли: он может быть инфицирован либо с некоторой вероятностью спонтанно, либо встретив инфицированного муравья. Он может вылечиться либо сам по прошествии некоторого времени. либо встретив на своем пути муравья специального типа, которого назовем доктором.
Определив индивидуальное поведение каждого из многих активных объектов независимо, мы можем затем наблюдать в агентной модели, как коллективное поведение всей системы порождается из этих индивидуальных поведений и как характеристики этого коллективного поведения зависят от индивидуальных параметров членов коллектива. Это именно то, что дает агентное моделирование. Наблюдение модели Модель находится в папке Моде! Ехашр(ез~рап!Ч, Откройте и запустите модель. Анимации модели представлена на рис. )5.8.
В окне анимации вы видите поле анимации, на котором хаотично движутся и иногда останавливаются муравьи. Некоторые из них красные — они инфицированы. Некоторые — черные, это доктора. Динамика этой популяции представлена в двух независимых активностях. Первая активность — это движение. При движении муравьи отражаются от стен и стараются не сталкиваться с лругими муравьями.
Для того чтобы избежать столкновения, муравей при встрече с другим муравьем останавливается и ждет некоторое время, причем на время ожидания он сворачивается. Затем он продолжает движение в случайно выбранном направлении. Траектория движения некоторых случайно выбранных муравьев отслеживается, эти муравьи отмечены зеленым кружком, траектория их движения рисуется за ними. Вторая активность в популяции — это распространение инфекции.
Муравьи инфицируются случайно, при этом они окрашиваются в красный цвет. Инфицированные муравьи излечиваются (опять становятся синими) либо спонтанно, сами по себе, через некоторый интервал времени, либо при встрече с доктором. Черные муравьи (доктора) не меняют свой цвет— предполагается, что доктора умеют уберечь себя от заражения. Глава 15.
Гиногоагентные системы Рис. 16.В. Анимация модели "Инфицированные муравьи" Описание модели Модель содержит два активных обьекта. Один молелирует поведение муравья (ллс), другой — корневой объект моое1„моделирует среду, в которой перемещаются агенты-муравьи. Он включает множество муравьев с именем алса (реплицированный экземпляр активного объекта лог). Число этих объектов задается параметром оциллса и в процессе функционирования модели является статическим, не изменяется. Вначале все муравьи располагаются случайно в прямоугольнике с координатами Х от 0 до пехх, ) от 0 до паху, их начальные скорости по координатам в любом направлении случайны и ограничены величиной тахуе1ооьсу.
Величины ыахх, тяаху и иахче1осьсу также являются параметрами модели. Перемещение муравьев происходит синхронно при получении периодического сигнала из среды. Активный обьект Ал1 (муравей) Каждый муравей выступает в двух ролях: как движущийся в замкнутом пространстве объект, избегающий столкновений с другими объектами той же природы, и как инфицированный либо неинфицированный объект. Поэтому Часть дт. Соврвмвнныв парадигмы в имитационном моделировании модель муравья содержит два независимых стейтчарта, каждый из которых описывает свою активность. Стейтчарт еаьс служит для описания правил дВИжЕНИЯ МУРаВЬЯ, СтсйтЧаРт Неа1СЬ ОПИСЫВаст СОСтсяНИЕ ЕГО ЗдОрОВЬЯ: КаК инфицированного либо неинфицированного обьекта (рис.
г5.9). Рис. 15.9. Активный объект все Переменные. У муравья шесть переменных. Переменные х и у — текущие координаты объекта, сх, су — его текущие скорости по координатам, переМЕННая оЬвеьс1е СОдсржИт уКаэатЕЛЬ На ТОГО МураВЬя, КОтОрЫй СтОИт На Пути движения данного муравья. Переменная е будет указывать на объект, включающий данный экземпляр муравья. То, что скорость муравья определена парой составляющих по координатам Х и ); дает возможность работать с ней как с вектором, определяя и направление движения муравья.
Координаты х, у и скорости ух,уу — это вещественные переменные, которые при порождении каждого объекта класса лат. принимают значения, установленные в поле Начальное значеиие окна свойств каждой из этих переменных. Для того чтобы расположить муравьев в начальный момент равномерно в поле анимации, начальное значение их координат задано как реализация случайной величины, равномерно распределенной от 0 до еахх для х и до тьа у для у. Чтобы начальные скорости всех порожденных экземпляров этого класса были бы случайными как по направлению, так и по величине, начальные значения скоростей по координатам также задаются как реализации равномерно распределенной случайной величины: ио1йокть! -пехуе1ос1Су, пахуе1ос1Су> Переменная оьвс1с1е (препятствие) имеет тип Асс — это встретившийся на пути данного муравья другой муравей, мешающий его движению.