Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги / 514.pdf
Скачиваний:
1
Добавлен:
07.06.2023
Размер:
4 Mб
Скачать

2.На вкладкеДополнительныеокнаСвойства,установитефлажокСтоп по времени.

Вполередактированиясправавведите8.Модельостановитсяпослетого,

какистекут8единицмодельноговремени.

1.7 Запуск модели

ПостройтеВашпроектспомощьюкнопкипанелиинструментовПостроить . Есливпроектеестькакие-нибудь ошибки,топостроениенебудетзавершено,и появитсяокноВыводсоспискомвсехошибок,обнаруженныхвпроекте.Двойны

м

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

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

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

108

можетеуправлятьвыполнениеммодели,строитьграфики переменных,

динамическиизменятьзначенияпараметров,ит.д.

109

1.8

Изучениединамикипроцесс

а

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

числапотребителей ипотенциальных потребителей продукта.

►Создайтедиаграмму

1.Подготовьтемоделькзапуску,щелкнувмышьюпокнопкепанели

инструментовВыполнитьшаг .

2.ЩелкнитемышьюпокнопкепанелиинструментовНоваядиаграмма .

Появитсяокноновойдиаграммы.

3.Выберитепеременные,которыедолжныбытьотображенынадиаграмме.

Щелкнитеправойкнопкоймышипоокнудиаграммы ивыберитеСодержимое диаграммы…изконтекстногоменю.ПоявитсядиалоговоеокноСодержимо

е диаграммы.

4.Добавьтепеременнуюpotential_adopters,сделавдвойнойщ елчок мышьюпозначкупеременнойroot.potential_adoptersв

списке Переменные,параметры,наборыданных.

110

5.Аналогичнымспособомдобавьтепеременнуюroot.adopters.

6.ЩелкнитемышьюпокнопкеOK.

►Изменитепараметрыдиаграммы

1.Подготовьтемоделькзапуску,щелкнувмышьюпокнопкепан ели инструментовВыполнитьшаг .

2.Щелкнитеправойкнопкоймышипоокнудиаграммы ивыберитеПараметрыдиаграммы…изконтекстногоменю.Впоявившем сядиалоговом окнезадайте временнойдиапазондиаграммы:

111

Теперьперезапуститемодель,поочереднощелкнувмышьюпокнопкампанели инструментов Перезапустить и Запустить . Диаграмма показывает, как

изменяются переменные potential_adopters и

adopters во

время

 

модели

ровани

я.

112

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels

\ ProductLifeCycle1-Simplemodel.alp.

113

1.9 Учетвлиянияобщениялюдей

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

Чтобыучестьвлияниеобщения людей,мыдолжнывнестивнашумодель небольшиеизменения.

►Изменитестейтчарт

1.Откройтедиаграммустейтчартаadoption,сделавдвойнойщелч окмышью поэлементуadoptionв окнеПроект.

2.Добавьтев состояниеAdopterвнутреннийпереход.

ДляэтогощелкнитемышьюпокнопкепанелиинструментовПереход ,

114

затемпоочереднощелкнитеполюбымдвумсторонамсостоянияAdopter.

115

3.Задайтетаймаут,покоторомупроисходитпереход:

Этотпереходбудетмоделироватьпокупкупродуктазнакомымэтого человека.То,насколькобыстроэтотвладелецпродуктасумеетубедить своегознакомогов необходимостипокупки,будетзависетьотсилы

убежденияэтогочеловекаиоттого,сколькознакомыхонвстречаетзагод.

4.ЗадайтеДействиеперехода:

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

й

покупкупродуктаэтимзнакомым.

СигналгенерируетсяпутемвызоваметодастейтчартаfireEvent(

),

описаниеэтогометодаклассаStatechartBaseВыможетенайтив

Справочникеклассов).

116

5.ДобавьтеещеодинпереходизсостоянияPotentialAdopterв состояние

Adopter:

Этотпереходбудетсрабатыватьпосигналу,которыйбудетгенерироваться

внутреннимпереходомсостоянияAdopter.

6.На страницесвойствперехода,в полеПроисходитвыберитеПо сигналу,и задайтевидСигнала:

117

ЗапуститемодельщелчкоммышипокнопкепанелиинструментовЗапустить . Диаграммабудетиметьтакойвид:

ГрафикипеременныхпредставляютсобойклассическиеS-образныекривые.

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels

\ ProductLifeCycle2-Word of

mouth.alp.

1.10 Моделированиеповторныхпокупок

Созданнаямодельнеучитывает того,чтосовременемпродуктможетбыть израсходован или прийти в негодность, что вызовет необходимость его повторногоприобретения.Мыпромоделируемповторныепокупки,полагая,что потребителипродуктасновастановятсяпотенциальнымипотребителями,когда продукт,которыйониприобрели,становитсянепригоден.

Вначалемызададимсрокслужбыпроду кта.

►Задайтесреднийсрокслужбыпродукта

118

1.ОткройтеструктурнуюдиаграммуклассаMain,сделавдвойнойщелчок мышьюпоэлементуМainв окнеПроект.

119

2.СоздайтепараметрDiscard_Time.Пустьсреднийсрокслужбынашего продуктаравенодномугоду.Сделайтепараметрглобальным.

►Изменитестейтчарт

1.Откройтедиаграммустейтчартадвойнымщелчкоммышипоэлементу adoptionв окнеПроект.

2.ДобавьтепереходизсостоянияAdopterв состояниеPotentialAdopter.

120

121

3.Задайтеследующиесвойстваперехода:

Мы закончилимоделированиеповторныхпокупокпродукта.Запуститемодель щелчком мышипо кнопке панелиинструментовЗапустить и с помощью

диаграммыпроследитединамикуизменениячислапотребителейпродукта.

Мы видим,что насыщение рынка в модели с повторными покупками не достигается.

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels \ ProductLifeCycle3-Replacementpurchases.alp.

122

1.11 Созданиепространственноймодели

Теперь мы хотим сделать модель пространственной,

чтобы задать места проживаниялюд

►Задайтекоординатылюдейв пространстве

1.ОткройтеструктурнуюдиаграммуклассаPerson,сделавдвойнойщ елчок мышьюпоэлементуPersonв окнеПроект.

2.Создайтепеременныеxиyтипаreal.Дляобеихпеременныхзадайте

Начальноезначение:

С помощьюфункцииравномерногораспределенияuniform() мы помещаемчеловекав точкусослучайновыбраннымикоординатамиот0до 300.

►Создайтефункцию,вычисляющуюрасстояниемеждулюдьми

1.ВокнеПроект,щелкнитеправойкнопкоймышипоэлементуP

ersonи

выберитеНоваяматематическаяфункция…изконтекстногоме ню.В

появившемсядиалоговомокнезадайтеимяфункции:distan

ce.

2.ВокнеСвойства,оставьтевыбранныйпоумолчаниютипвозвращае мого значенияфункции.

123

124

3.Задайтеаргументы,передающиефункциикоординатыдругого человека:

4.Задайтевыражениефункции:

Функцияsqrt()являетсяпредопределеннойфункциейAnyLogicTM. Выможетепросмотретьсписок всехпредопределенныхфункций (sin(),cos(),exp()и т.д.)спомощьюМастераФункций.Дляэтого щелкнитемышьювполевводавыражения,азатемщелкнитемышью покнопкеМастер.ПоявитсяокноМастераФункцийсоспискомвсех функцийи переменныхмодели. Чтобыдобавитьфункциюили переменнуюввыражение,прокрутитесписоккее имениисделайтепо немудвойнойщелчокмы

шью.

Детальноеописаниефункций иихпараметровВы

можететакженайти в Руководстве пользователя илиСправочнике

классов (нужно смотреть

методыклассаFunc).

125

►Изменитестейтчарт

1.Откройтедиаграммустейтчартаadoption,сделавдвойнойщелчокмы шью поэлементуadoptionв окнеПроект.

126

2.ВыделитещелчкоммышивнутреннийпереходсостоянияAdopterи

изменитеДействиеперехода:

Людибудутобщатьсянеслюбымисвоимизнакомыми,внезависимостиот местаихпроживания, а толькостеми,ктоживетпоблизости.

ЗапуститемодельщелчкоммышипокнопкепанелиинструментовЗапустить и изучитеееповедение.

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels

\ ProductLifeCycle4-Spatial model.alp.

Созданиеанимации

Теперь мы хотим создать наглядную визуализациюисследуемого процесса. AnyLogicTMпозволяетсоздаватьинтерактивнуюанимацию свозможностью измененияпараметровсистемыпоходумоделированияпроцесса.

Вначалемысоздадимпеременную,котораяпонадобитсянамдляанимацииаген та.

►Создайтеновуюпеременную

1.ОткройтеструктурнуюдиаграммуклассаPerson,сделавдвойнойщ елчок мышьюпоэлементуPersonв окнеПроект.

1.СоздайтепеременнуюcolorтипаColor.Color

этоклассJavaTM,

позволяющийиспользоватьчастоиспользуемыецвета(черный,с иний, красный,голубой,желтыйит.д.),а такжесоздаватьлюбыедругие.1Эта

127

1ЧтобыпросмотретьсписокцветовклассаColorиметодовкласса,позволяющихсоздават ьдругие цвета,зайдитепо адресуhttp://java.sun.com/j2se/1.4.2/docs/api/java/awt/Color.html.

128

переменнаябудетопределятьцвет,которымагентбудетотображатьсян а анимации.

АнимациявAnyLogicTMрисуетсянаанимационнойдиаграмме.

►Создайтеанимационнуюдиаграмму

1.ЩелкнитеправойкнопкоймышипоэлементуMainв деревемодели и выберитеНоваяанимация…изконтекстногоменю.Впоявившемся

диалоговомокнезадайтеимяанимацииВашеймодели:animation.

Автоматическипоявитсяокноредактораанимации.

Пунктирная рамка на анимационной

диаграмме задает

область анимации

области.

 

 

 

 

 

►Изменитеразмеранимации

1.Передвиньтерамкуанимационнойобласти,чтобыонаимелакоординаты (-20,-20),и измените ееразмерна(520,340).

МожетесделатьэтоизменениемсвойствX,Y,Ширина,Высотаили

перетаскиваниемграницрамкимышью(координатыкурсорамыши показываютсявстрокесостояния).Аналогичнымспособом Выможете

передвигать иизменятьразмерывсеханимационныхфигур.

Теперьмынарисуеманимациюнаподобиепоказаннойнарисункениже.

129

Мыхотимпоказатьнаанимациилюдей,проживающихвисследуемойобласти. Мы будем отображать их точками разных цветов, в зависимостиот того, приобрелилионипродукт,илиещенет.

►Нарисуйтеграницуисследуемойобласти

1.ЩелкнитемышьюпокнопкепанелиинструментовПрямоугольник .

2.Щелкнителевойкнопкоймыширядомсточкой(-10,-

10)и,неотпуская кнопку,переместитемышьв точку(310,310).

►Нарисуйтена анимацииагентовспомощьюмаленькихпрямоугольников

1. ЩелкнитемышьюпокнопкепанелиинструментовПрямоугольник

.

2.ВокнеСвойства,задайтеИмяпрямоугольника:

130

3.Задайтеразмерпрямоугольника:

131

4.ЗадайтеКоличествоанимационныхобъектов:

Мыдолжнынарисоватьстолькожеточек,сколькоагентоввнашей модели.Дляэтогомыпользуемсяфункцией size(),которая возвращаетчислоэлементовреплицированногообъектаpeople– то естьчислоагентовв модели.

5.Задайтеместоположениефигурагентовнаанимации:

Координаты фигурызадаютсяотдельнодлякаждогоагентав соответствиисо значениямиего переменных xи y. Поочередный доступковсемагентамосуществляется спомощьюфункции agentObject.item(index),гдеagentObject

имяобъектамодели, которыймоделируетаг ентов.

6.Задайтецветфигурыспомощьюследующеговыражения:

Этовыражение проверяет,являетсяличеловеквладельцемпродукта (анализируетсязначениебулевскойпеременнойisAdopter).Еслида,то этотчеловекбудетотображатьсянаанимациисинейточкой,еслинет–то серой.

Теперь мы добавим на анимациюиндикаторы,с помощью которых будем отслеживать,скольколюдейприобрелопродукт,а сколько– нет.

►Добавьтеиндикаторчислапотенциальныхпотребителейпродукта

132

1.ЩелкнитемышьюпокнопкепанелиинструментовСтолбцовыйиндикатор .

133

2.Поместитеиндикаторнаанимацию,щелкнувмышьюсправа от прямоугольникаисследуемойобласти.

3.На вкладкеОбщиеокнаСвойства,изменитеразмериндикатора:

4.На вкладкеСтолбцовыйиндикаторокнаСвойства,выберитепеременную,

которуюбудетотображатьэтотиндикатор:

5.ЗадайтемаксимальноеотображаемоезначениевполеМаксимум,измените

цветиндикации исбросьтефлажокОтображатьшкалу.

►Добавьтеиндикаторчислапотребителей

1.Щелкнитеправойкнопкоймышипосозданномунакопителю ивыберите

Копироватьизконтекстногоменю.

2.Щелкнитеправойкнопкоймышиподиаграмме ивыберитеВставитьиз контекстногоменю.Новыйиндикаторпоявитсянадиаграмме.Расположи те егоправееиндикаторачисленностипотенциальныхпотребителейпродукт а.

3.Выберитеadoptersв

134

качествепеременной,которуюОтображаетиндикатор иизменитецветиндикации.

135

►Добавьтеподписик индикаторам

1.ЩелкнитемышьюпокнопкепанелиинструментовТекст .

2.Поместитетекстовуюметкунадиаграмму,щелкнувмышьюподлевым индикатором.

3.Задайтетекст,которыйбудетотображатьсяв

текстовомполе.Вполе редактированияТекст,расположенномнавкладкеТекстокнаСвойс

тва, введитеPotentialAdopters.

4.Изменитешрифттекста.ЩелкнитемышьюпокнопкеВыбрать,ив

появившемсядиалоговомокнеустановитешрифтTimesNewRomanра змером8.

5.АналогичнопоместитеметкуAdoptersподправыминдикатором.

Теперьмысделаемнашуанимациюинтерактивной,добавивэлементуправления,с

помощьюкоторогобудемизменятьсрокслужбыпродукта.

►Добавьтеэлементуправления

1.ЩелкнитемышьюпокнопкепанелиинструментовБегунок .

2.Поместитебегунокнадиаграмму,щелкнувмышьюнадиндикаторами.

3.На вкладкеОбщиеокнаСвойства,изменитеразмерэлементауправления:

4.На вкладкеБегунококнаСвойства,выберитепеременную,значениекоторой

мы будемизменятьспомощьюэтогоэлементауправления:

5.Задайтеминимальныеимаксимальные значениябегунка:

136

6.Поместитенаанимациютриметки:DiscardTime

подбегунком,0.5у левогокраябегункаи2.5– управого.

Теперьмыхотимисследоватьмоделируемыйпроцессвтечениеболеедлительног о времени,поэтомусделаемтак,чтобынашамодельработалабесконечно.

►Удалитеусловиеостановкимодели

1.ВокнеПроект,щелкнитемышьюпоэлементуSimulation.

2.На вкладкеДополнительныеокнаСвойства,сбросьтефлажокСтоп по времени.

Мызакончилисоздание анимации.Запуститемодельщелчкоммышипокнопке

Запустить .Выувидитеанимациюнаподобиепоказаннойнарисункениже:

Чтобы анимацияотображалась быстрее, закройте остальные окна: диаграмму переменныхиокнакорневогообъектамоделиroot.

137

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

повышенияскоростивыполнениямодели.

►Включитережимсглаживания

1. ЩелкнитемышьюпокнопкепанелиинструментовНастройкианимации…

.Впоявившемсядиалоговомокне,установитефлажокСглаживание.

Выможетеизменятьскоростьвыполнениямоделиспомощьюкнопокпанели

инструментовУменьшитьскорость иУвеличитьскорость .

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels

\ ProductLifeCycle5-Animation.alp.

138

2. Улучшенная модель жизненного циклапродукта

Вэтойглавемыизменимнашумодель,добавив некоторыеранеенеучтенные

деталиипоказавновыевозможностиAnyLogicTM.

2.1 Моделированиерекламныхкампаний

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

►Создайтеновыепеременные

1.ОткройтедиаграммуклассаMainдвойнымщелчкоммышипоэлементуMain

вокнеПроект.

2.СоздайтепеременнуюadXтипаreal.

3.СоздайтепеременнуюadYтипаreal.

4.СоздайтепеременнуюadTimeтипаreal.ЗадайтеНачальноезначение:-1.

5.СоздайтепеременнуюadRangeтипаreal.ЗадайтеНачальноезначение:50.

Мыбудеммоделироватьпроведениерекламныхкампанийспомощьютаймера. ТаймерыиспользуютсявAnyLogicTMдляпланированиясобытий.

►Создайтетаймер

1.ОткройтедиаграммуклассаMainдвойнымщелчкоммышипоэлементуMain

вокнеПроект.

2.ЩелкнитепокнопкепанелиинструментовТаймер ,а затемподиаграмме класса.НазовитетаймерadTimer.

3.Намнужно,чтобытаймерсрабатывалнесколькораз,поэтомупроверьте,

чтобыбылустановленфлажокЦиклический.

139

4.ЗадайтеТаймаут:

5.ЗадайтеДействиепри срабатывании:

Этоткодпроизводитциклическийпереборвсехагентовмодели.Уагентов, попавшихв областьпроведениякампании(в кругсрадиусомadRange), генерируетсясобытиестейтчарта,в результатечегосрабатываетпереход стейтчарта,моделирующийпокупкупродукта.

Посколькутеперь покупкимоделируютсяс помощьютаймера,нужно удалить переходстейтчарта,которыймоделируетпокупкупродуктаподвлияниемрекламы.

►Изменитестейтчарт

1.Откройтедиаграммустейтчартадвойнымщелчкоммышипоэлементу adoptionвокнеПроект.

2.УдалитепереходизсостоянияPotentialAdopterвсостояниеAdopt er

140

(переходстаймаутомexponential(adEffect)),выделивегощелч ком мышиинажавDelete.

141

Теперь внесем небольшие измененияв анимацию.Мы будем подсвечивать

областипроведениярекламныхкампанийнаанимациисиреневымикругами.

►Нарисуйтекруг

1.Откройтеанимационнуюдиаграммудвойнымщелчкоммышипоэлементу animationдеревамодели.

2.ЩелкнитемышьюпокнопкепанелиинструментовОвал ,затем

щелкнитепоанимационнойдиаграмме.Задайтеследующиесвойс тва фигуры:

МестоположениекруганадиаграммеопределяетсяпеременнымиadXиa

dY,

хранящимикоординатыцентраобластипроведениятекущейкампании.Кр уг будетвиденвтечение 0.2единицмодельноговременипослемомента

проведениякампании.

3.ЩелкнитепозакладкеОвалокнаСвойстваизадайтерадиусыова

142

лас помощьюсозданнойранеепеременнойadRange:

143

ЗапуститемодельщелчкоммышипокнопкепанелиинструментовЗапустить .

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels

\ ProductLifeCycle6-

Advertisingcampaigns.alp.

2.2

Изучениераспространениянесколькихп

родуктов

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

распространениесразунесколькихразличныхпродуктов.

Вначалемысоздадимпеременную,котораябудетопределятьтипрекламируемого

продукта.

►Создайтевспомогательнуюпеременную

1.ОткройтеструктурнуюдиаграммуклассаMainдвойнымщелчкоммышипо элементуMainвокнеПроект.

2.СоздайтепеременнуюadColorклассаColor.

Теперьмыдолжнывнестинебольшиеизмененияванимациюмодели.Мыхотим

различатьпродуктыпоцвету:владельцеводногопродуктамыбудем

отображатьна

анимациисинимиточками,авладельцевдругого–красными.Областипроведения

рекламных кампанийтакже будут отображаться

различнымицветамив

144

зависимостиотрекламируемогопродукта.

145

►Изменитеанимацию

1.Откройтеанимационнуюдиаграмму,сделавдвойнойщелчокмышьюп о элементуanimationвокнеПроект.

2.Щелкнитемышьюполиловомукругунаанимационной диаграмме и выберитепеременнуюadColorвкачестве

Цветазаливкифигуры.

3.ЩелкнитемышьюнаанимационнойдиаграммепофигуреagentS

hape.В полеЦветзаливки,введитеpeople.item(index).color.

Теперьцветфигурыбудетзадаватьсязначениемпеременнойагента adColor.Потенциальныепокупателипродуктабудутотображатьсяс

ерым цветом,владельцы–краснымилисинимвзависимости

оттого,какой продуктониприобрели.

146

Теперь мы изменимкод, который выполняется при срабатываниитаймера,

моделирующегопроведениерекламныхкампаний.

►Изменитедействие таймера

1.ОткройтеструктурнуюдиаграммуклассаMainдвойнымщелчкоммышипо элементуMainвокнеПроект.

2.ЩелкнитемышьюпозначкутаймераadTimerнаструктурнойдиаграмме.

3.ИзменитеДействиепри

срабатываниитаймера.Добавьтевыделенныестроки:

adX = uniform( adRange, 300 -

adRange ); adY = uniform(

adRange, 300 - adRange ); adTime

= getTime();

adColor = uniform() > 0.5 ? Color.blue : Color.red;

for (int i=0;

i<people.size(); i++) {

Person p = people.item(i);

if( p.distance(adX,adY) < adRange )

147

p.adoption.fireEvent(a

dColor);

}

Теперьсравнойвероятностьюбудутрекламироватьсяразныепродукты.

148

►Изменитестейтчарт

1.Откройтедиаграммустейтчартадвойнымщелчкоммышипоэлементу

adoptionвокнеПроект.Нарисуйтеследующийстейтчарт:

2.Добавьтесложноесостояние,включающеевсебяоба состояниястейтчарта.

3.Сделайтеэтосостояниеначальным.Дляэтогодобавьтеуказательначаль ного

состояния,направленныйвэтосостояние.Щелкнитемышьюпокнопке

панелиинструментовУказательначальногосостояния

,потомщелкнитепо диаграммевначалечутьвышесостояния,а

затемпоегогранице.

4.УдалитепереходизсостоянияPotentialAdopterвсостояниеAdopter.

5.ИзменитеДействиевнутреннегопереходасостоянияAdopter

149

амените строкуp.adoption.fireEvent( "buy" );

настрокуp.adoption.fireEvent(color);

150

6.ДобавьтепереходизсложногосостояниявсостояниеAdopter.

ВокнеСвойства,задайтесвойстваперехода:переходдолженсрабатывать

По сигналуColorивыполнять Действиеcolor=(Color)getEvent();

7.ВыделитещелчкоммышисостояниеPotentialAdopter.

ДобавьтевДействияпривходестрокуcolor = Color.lightGray;

ЗапуститемодельщелчкоммышипокнопкепанелиинструментовЗапустить . Теперьмодельбудетизучатьраспространениесразудвухпродуктов.

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels

\ ProductLifeCycle7-

Multipleproducts.alp.

2.3 Моделированиепередвижениялюдей

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

151

►Создайтевспомогательныепеременные

1.ОткройтеструктурнуюдиаграммуклассаPersonдвойнымщелчко ммыши поэлементуPersonвокнеПроект.

2.Создайтепеременныеoldxиoldyтипаreal. ДляобеихпеременныхзадайтеНачальноезначение:

3.Создайтепеременнуюtmovedтипаreal. ЗадайтеНачальноезначение:

Мы промоделируемдвижениелюдейспомощьютаймера.

►Создайтетаймер

1.ОткройтеструктурнуюдиаграммуклассаPersonдвойнымщелчко ммыши поэлементуPersonвокнеПроект.

2.ЩелкнитепокнопкепанелиинструментовТаймер

потомподиаграмме класса.НазовитетаймерmoveTimer.

3.Намнужно,чтобытаймерсрабатывалнесколькораз,поэтомупроверьте,

чтобыбылустановленфлажокЦиклический.

4.ЗадайтеТаймаут:

152

5.ЗадайтеДействиепри срабатываниитаймера:

При срабатывании таймера текущее модельное время,возвращаемое функциейgetTime(), запоминаетсяпеременной tmoved. Переменные oldxи oldyзапоминаюттекущие координаты агента xи y. Новые координатыгенерируютсяпотреугольномузаконураспределения с

минимальнымзначениемравным0,средним– 150имаксимальным – 300. Теперьмысоздадимдвевспомогательныефункции,которыепомогутнамболее

плавноотрисовыватьдвижениелюдейнаанимации.

►Создайтеалгоритмическиеф ункции

1.ЩелкнитеправойкнопкоймышипоэлементуPersonвокнеПроекти

выберитеНоваяалгоритмическаяфункция…изконтекстногоменю.Назов

ите функциюanimationX.

2.ЗадайтеТело

функции:

3.АналогичносоздайтеалгоритмическуюфункциюanimationY:

153

Теперьнужновнестинебольшиеизмененияванимацию.

154

►Изменитеанимациюагента

1.Откройтеанимационнуюдиаграммудвойнымщелчкоммышипоэлементу animationвдереве проекта.

2.На анимационнойдиаграммещелкнитемышьюпопрямоугольнику

agentShapeизадайтеследующиесвойства:

Мы закончилимоделирование движениялюдей. Теперь Вы можете запустить модельщелчкоммышипокнопкепанелиинструментовЗапустить ипроследить за перемещениемлюдейспомощьюанимации.

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels \ ProductLifeCycle8-

Peoplemovement.alp.

2.4 Моделированиемиграциилюдей

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

Мы будеммоделироватьмиграциюспомощьютаймеров.

►Промоделируйтемиграциюлюдейв рассматриваемуюобласть

1.ОткройтеструктурнуюдиаграммуклассаMainдвойнымщелчкоммыш ипо элементуMainвокнеПроект.

2.ЩелкнитепокнопкепанелиинструментовТаймер ,а затемподиаграмме класса.НазовитетаймерinMigration.

155

3.Намнужно,чтобытаймерсрабатывалнесколькораз,поэтомупроверьте,

чтобыбылустановленфлажокЦиклический.

4.ЗадайтеТаймаут:

Всреднемвнашуобластьбудутприезжать20человек вгод(вкачестве аргументафункцииexponential()задаетсячастотапроисхождения события).

5.ЗадайтеДействиепри срабатывании:

Добавлениенового агента в модель производится путем вызова функции корневогообъектамоделиsetup_agentObject(), где agentObject–имяобъекта,моделирующегоагентов.Первыйаргумент функцииуказывает, что создается объект класса, который задает агентов в нашей модели – Person. Второй аргумент указывает позициюобъектаpeople,кудабудетдобавленэтотобъект

.

Теперьмыпромоделируемто,каклюдиуезжаютизнашейобласти.

►Промоделируйтемиграциюлюдейиз области

1.ОткройтеструктурнуюдиаграммуклассаPersonдвойнымщелчкомм ыши поэлементуPersonвокнеПроект.

2.ЩелкнитепокнопкепанелиинструментовТаймер ,а затемподиаграмме

156

класса.НазовитетаймерoutMigration.

157

3.Таймердолженсработатьтолькоодинраз,поэтомуустановитефлажок

Срабатываетодин раз.

4.ЗадайтеТаймаут:

5.ЗадайтеДействиепри срабатывании:

Удалениеагента

из

модели

производится

путем

вызовафункции

 

 

 

 

корневогообъектамоделиdispose_agentObject(),гдеagentObj

ect

имяобъекта,моделирующегоагентов.Аргументфункцииопредел яет, какой именно агент должен быть удален. Выражение

AgentClass.this,гдеAgentClass

имяклассаактивногообъекта, моделирующегоагентов,указывает,что будет удален

именноэтот

а

г

е

н

т

.

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

158

►Покажитечисложителейобласти

1.Откройтеанимационнуюдиаграммудвойнымщелчкоммышипоэлементу animationвдереве проекта.

2.Добавьтенаанимациютекстовуюметку,отображающуюследующийтекст:

159

Мы закончилисозданиемодели.Запуститемодельщелчкоммышипо кнопке

панелиинструментовЗапустить .

>Текущаяконтрольная модель:Examples\AgentBasedModelingTutorialModels \ ProductLifeCycle9-Peoplemigration.alp

160

Соседние файлы в папке книги