Ю. Карпов - Иммитационное моделирование систем с AnyLogic 5 (1124147), страница 32
Текст из файла (страница 32)
Обращение к переменным и параметрам объекта пз включающего класса: х = адепп.воет(0).аде; Этот код, записанный в классе иоо)е1, при выполнении модели вызовет присвоение переменной х объекта хоос значения переменной аде экземпляра реплицированного объекта класса лдепп, включенного с номером О в объект хооп. адепс.)сее(О).аде = 0; адепп. Рсее(0).ееснос)).рвес)П; Этот код, также записанный в классе мое(е1, не только изменяет значение переменной аде в объекте адепс.).сее(о), но также вызывает и пересчет всех условий (например, условия срабатывания перехода в стейтчарте), которые зависят в этом объекте от переменной аде и могут влиять на его будущее поведение. адепТ.
воет(0) . аеп рахат(25); Этот код, записанный в классе нос(е1, при выполнении модели вызовет присвоение параметру рагае объекта адепп.ъпее(о) значения 25, после чего будет вызвана Функция опсьапде рахат, этого объекта. Эта функция может быть определена разработчиком в классе лдепс, для возможного изменения состояния экземпляров данного класса при изменении параметра реха . Если такая функция разработчиком не определена, по умолчанию выполнится подобная функция с пустым телом. Часть И. Средства дл тс для имитационного моделирования систем Доступ к объекпвп включающего класса: моае1 в = (иаае1)дееситтех() т ((в.адепх).хаос)ов()).аде = 35т Пусть эти операторы определены в классе хдепх.
Первый оператор обьявляет переменную в типа моае1, значение которой устанавливается как объект типа мсае1, включающий данный обьскт. Второй оператор увеличивает на ) переменную х во включающем объекте, т. е. в объекте хоох. Третий оператор случайно выбирает одного из агентов, вклточенных в класс мзе1 (т. с. находящихся в обьекте хаос), 'и переменную аде этого объекта устанавливает в 35. Поскольку операция "точка" левоассоциативна, то есть а.ь.с.т) понимается как ( (а. и) .
с) . т), то третий оператор можно записать без скобок: в.адепе.хапт)ов().аде = 35; Уничтожение элемента ренлицированного набора объектов с именем аявлп т)хвроае адепе( <улаляеннй алемене насснна аделси ) 7.8. Заключение Приведенные здесь сведения по языку тата являются, конечно, недостаточными, чтобы читатель овладел существенной частью его возможностей. Однако использование даже некоторых средств языка позволяет качественно увеличить возможности построения моделей на АпуЕойтс. Примеры таких моделей мы рассмотрим в следующей главе.
Глава 8 Примеры моделей, разработанных с использованием языка дача Как уже говорилось, использование программного кода совместно в базовыми срслствами визуальной разработки моделей в АпуЕорс существенно расширяет возможности разработчика. В данной главе подробно описаны две модели, в которых включение фрагментов программного кода позволяет эффективно реализовать сложные структуры данных и алгоритмы поведения обьсктов, которые невозможно описать с помощью одних только визуальных средств.
8.1. Игра "Жизнь" (Ые) В этом разделе мы последовательно, шаг за шагом построим модсль широко известной игры ьагв. Модель включает логику, которая должна выражаться программным кодом. 8Л Л. Постановка задачи Игра "Жизнь" — это нс игра в обычном смысле слова. В ней нет игроков, нет выигравших или проигравших. Игра состоит в том, что на двумерной решетке, разделенной на ячейки, каждая ячсйка может быть в двух состояниях, живая либо мертвая. Состояния всех ячеек решетки меняются синхронно, по шагам.
На каждом следующем шаге состояние ячейки зависит от сс состояния на предыдущем шаге и состояний восьми соседей в сс окружснии также на предыдущем шаге. В зависимости от количества живых соседей, на очередном шаге ячейка становится живой или мертвой в соответствии со следующими правилами: П мертвая ячейка, имеющая ровно три живых соседа, становится живой (рождсние); С3 живая ячейка, имеющая два или три живых соседа, остается живой (вы- живает); Часть!Ъ Средства дпу1 оус дпя имитационного моделирования систем ь? во всех остальных случаях ячейка умирает (умирает от перенаселения либо от одиночества) или остается мертвой.
Двумерная решетка из ячеек может быть бесконечной либо представлять собой тор. 8.1.2. Построение модели Наиболее просто построить визуализацию модели как состоящую из нхн квадратных ячеек, цвет каждой из которых определяется злементом двумерного булева массива той же размерности ихн.
Шаги выполнения модели удобно задавать с помощью циклического таймера, каждое срабатывание которого вызовет функцию, которая подсчитает живых соседей всех ячеек и при необходимости изменит их состояния. Именно эта функция, которая реализует логику поведения модели, должна быть определена как лополнительный код на алгоритмическом языке вместе с необходимыми структурами данных. В Апу? о81с определите новый проект ьъгеаа а. Введите в него новую анимацию, в которой установите следующие параметры штриховой рамки, ограничивающей поле изображения в работающей модели: Х = — 420, Ъ' = — 50, Ширина = 890, Высота = 570. Анимация: прямоугольный массив ячеек В какое-либо место поля анимации введите прямоугольник с именем се11 шириной и высотой по 10 (пикселов), которая булет представлять ячейку игры "Жизнь".
В поле Количество этих прямоугольников установите н*н, (статическое) значение цвета прямоугольника может быть произвольным. Определенный так набор реплицированных (размноженных) объектов (прямоугольников) составляет одномерный вектор из и*и фигур с номерами объектов от о до лт*н-т. Определим в корневом активном объекте маът целый параметр н со значением 45. Этот параметр устанавливает размер решетки. Изменение состояний ячейки в игре "Жизнь" происходит в зависимости от количества окружавших ее живых ячеек, если они расположены в двумерной решетке.
Однако определенный нами набор прямоугольников является одномерным — именно так представляется реплицированный объект в Апу(.о81с. Для связи злементов одномерного вектора прямоугольников с двумерной решеткой в анимации будем считать, что в решетке первый индекс (будем его для определенности всегда обозначать ъ) пробегает значения от а до н-1 по оси ?'вниз в координатах поля анимации, а второй индекс (булем его лля определенности обозначать 5) пробегает значения от о до и-т по оси Х вправо в координатах поля анимации (рис.
8.1). Глава 9. Примеры моделей, раэработаннык с использованием языка )аьа 159 о ( г ! (у-1 и-( )кис. 8.1. Соотношение одномеоного индекса и индексов двумерной оешетки Если номер прямоугольника в перечислении этих прямоугольников как одномерного массива графических объектов есть 1пг)ех, то пара координат (1, з ) этого прямоугольника в двумерной решетке может быть подсчитана так: 1=1пг)ех/н з=ъпоехвн По умолчанию ьпаех — имя переменной в Апу1 од[с, пробега(ошей все значения номеров реплицированного объекта в окне его свойств.
Поскольку мы определили размеры прямоугольника )Ох[О, то координаты прямоугольников в псле анимации легко определить так: Х= 10*(1пг[ехви] у= 1О* (тпг)ехуи) Именно эти значения слелует установить в поле динамических значений КООРДИНат К И )' ПРЯМОУГОЛЬНИКОВ С ИМЕНЕМ Се11 В аНИМаЦИИ. ВСЕ Н*Н ПРЯ- моугольников расположатся в плоскости поля анимации вплотную друг к другу в двумерной структуре. По оси К расположатся н первых прямоугольников, ниже расположатся н вторых и т. п. Откомпилируйте модель. Сравните ее с моделью ьтгеаеое1 папки Моде! Ехаптр]аз~рад П. 8.1.3. Дополнительные переменные и функции Определите двумерный массив булевских значений, показывающих состояние прямоугольников решетки.
Для этого в поле Дополнительный код класса окна Код корневого обьекта мего введите объявление этого двумерного массива: Ьоо1еап [) [) е11ое †" пен Ьоо1ееп [Н] [Н] г Если а11ое[1) Ц ] ИетИнио, то будем считать, что ячейка с индексами (',з) находится в состоянии "живая", если а11ое [1) ц) ложно, то будем считать, Часть!(.
С дотла Дпу1одк для имитационного моделирования систем что соответствуюшая ячейка "мертвая". Состояния ячеек будем отражать на анимации цветом прямоугольников, значение которого надо задать в поле динамическою значения цвета. Запустите модель со1отмоае1 и подберите два цвста — один для состояния живой ячейки„другой — лля состояния мертвой ячейки. Например, для живой ячейки можно выбрать цвет с параметрами (<л>,<о>,<в>), равными (50, 10,255>, а для мертвой ячейки — равнЫми (30,100,130>. Чтобы графические обьекты — прямоугольники — были в анимации закрашены в цвет, соответствуюший их состоянию, в поле динамического значения ЦВЕта ЗаЛИВКИ ПРЯМОУГОЛЬНИКа Се> 1 В ОКНЕ СВОйСтВ ЭТОГО ГРафИЧЕСКОГО ЭЛЕ- мента в анимации введите условное выражение: а11ззе [1поех>Н] [1пс]ех/Н] т пеи Со1от(50,210, 255):пеи Со1от(30, 100, 130> Начальные состояния прямоугольников (живой-мертвый) можно задавать разными способами.