Ю. Карпов - Иммитационное моделирование систем с AnyLogic 5 (1124147), страница 70
Текст из файла (страница 70)
Поскольку здесь важен лишь факт получения события, использована передача объекта класса о(обесв, и в зашите соответству(ошего перехода получение обьекта именно этого класса проверяется. Второй таймер с именем съвег — тоже периодический. Он разрешает передачу значения текушего состояния в интерфейсную переменную еировеиувсвсе. Такая передача не может быть осуществлена в тот же самый момент, в который состояние объекта изменилось, потому что принятие решения о переходах всех активных объектов производится на основании состояний соседей на предыдущем такте. Поэтому измененное состояние объекта передается в интерфейсную переменную тоже периодически, но с небольшим сдвигом по времени.
Такой сдвиг позволяет передачу состояния соседям осуществить только после того, как все объекты установят свое новое состояние в соответствии с предыдущим состоянием соседей. 20.4.2. Модель Сержанта Модель Сержанта (эегдевпв) строится полностью аналогично модели Генерала. Исключение составляет только то, что начальное состояние Сержанта помечено меткой и и переход из этого состояния в состояние к (состояние Готов) осуществляется, только если выполняется некоторое условие, отражаюшее состояние его левого соседа.
Глава 20. Модели коллективного поведения 20.4.3. Модель стрелка Модель стрелка (воыгеь) аналогична моделям предыдущих двух типов. У стрелка два соседа, и переходы между состояниями стрелок осуществляет, только если эти соседи находится во вполне определенных состояниях. Построение системы переходов и нахождение этих условий и составляет проблему синхронизации автоматов. Некоторые переходы очевидны. Например, если стрелок находится в состоянии готов (к), то он может перейти в заключительное состояние огонь (а), только если оба его соседа тоже находятся в этом состоянии. 20.4.4. Корневой объект Корневой обьект с именем коос включает один объект типа Генерал, один объект типа Сержант и массив стрелков.
Массив стрелков задается тем, что в поле Количество объектов для введенного а окно коос объекта ьоыъеь устанавливается параметр и. Этот параметр задается как параметр объекта коос. Объекты, введенные в поле редактора объекта коое, имеют интерфейсные переменные, и их нужно соединить подходящим образом. Такое соединение двух объектов может быть выполнено графически в поле графического редактора проведением соединительной линии (коннектора), однако в данной модели мы должны соединить переменное число объектов (в массиве стрелков их количество задается параметром). Альтернативная возможность соединения — использовать библиотечную функцию соединения, которая, собственно, и порождается для каждого коннектора при трансляции графического изображения структуры активного объекта в соответствующий код на языке Зауа.
Соединение нужно выполнить до начала работы модели, поэтому соответствующий код записывается в пале Код инициализации окна Код объекта косе. Сначала двумя операторами связывается выходная переменная ехроьеиуясасе Генерала с входной переменной 1егс самого левого стрелка, а также входная переменная:дье этого стрелка с входной переменной ехроьенуасасе Генерала: депеьа1. ьеь ехпоьеиувьаее.ооппеоь( ьоЫЬеь.вье~п( 0 ). ьеь 1еть ); яепеьат. лей ьз".дне.ооппеос) ьо1Иеь.ьсее) 0 ). пей ехРоьеиувеаье )) Далее в цикле связываются между собой стрелки, а последней парой операторов крайний правый стрелок связывается с Сержантом. Корневой объект включает статический таймер с)ьаивеаееь, которь)й периодически строит в поле анимации визуальное представление состояния всей системы в текущий момент времени. Сделать это удобно после того, как все элементы системы установили свои состояния, т. е. с некоторым сдвигом Часть )т.
Примеры моделей для различных областей применения аьбесе, этот сигнал периодически будет посылаться стейтчарту таймером ауасьга. Переход из состояния л в состояние в асушествляегся, как только такое событие произойдет, потому что Генерал делает первый шаг, выдавая команду прнгаеоаиться независимо ат каких-либо условий с самого начала функционирования системы. Переход Генерала из состояния в в заключительное состояние э требует, чтобы состояние его правого соседа было тоже гатов, т. е.
имело имя в. При входе в каждое состояние переменной п~уэсаее присваивается значение, соответствующее этому состоянию, например, при входе в состояние с именем в выполняется операторпуэееее= в . "Жизнь" этому объекту придает таймер ауасьта, который периодически каждую единицу модельного времени генерирует событие, направленное непосредственно стейтчарту с именем еаге. Это описывается вызовом функции 1).тевчеег.
с передачей произвольного обьекта базового типа аьбест у стейтчарта: ваге. т(.ееечеаь( пеи аьбесе() ) Аргументом у функции текел тепе() может быть, в частности, объект любого типа, а переход стейтчарта может быть определен, если объект именно этого класса получен. Поскольку здесь важен лишь факт получения события, использована передача абьекта класса аьзесс, и в защите соатветствуюшего перехода получение объекта именно этога класса проверяется. Второй таймер с именем егеег — тоже периодический. Он разрешает передачу значения текущего состояния в интерфейсную переменную ехрааеиуэеаее. Такая передача не может бить осуществлена в тот же самый момент, в который состояние объекта изменилось, потому что принятие решения о переходах всех активных объектов производится на основании состояний соседей на предыдущем такте. Поэтому измененное состояние объекта передается в интерфейсную переменную тоже периолически, но с небольшим сдвигом по времени.
Такой сдвиг позволяет передачу состояния соседям осуществить только после тога, как все объекты установят свое новое состояние в соответствии с предыдущим состоянием соселей. 20.4.2. Модель Сержанта Модель Сержанта ~эетдеаае) строится полностью аналогично модели Генерала. Исключение составляет только то, что начальное состояние Сержанта помечено меткой н и переход из этого состояния в состояние в (состояние Готов) осуществляется, только если выполняется некоторое условие, отражающее состояние его левого соседа. Глава Эт'. Модели коллективного поведения 20.4.3. Модель стрелка Модель стрелка (всыаех) аналогична моделям предыдущих двух типов.
У стрелка два соседа, и переходы между состояниями стрелок осуществляет, только если эти соседи находятся во вполне определенных состояниях. Построение системы переходов и нахождение этих условий и составляет проблему синхронизации автоматов. Некоторые переходы очевидны. Например, если стрелок нахолится в состоянии готов (я), то он может перейти в заключительное состояние ого ь (э), только если оба его соседа тоже находятся в этом состоянии, 20.4.4.
Корневой объект Корневой объект с именем вссх включает один объект типа Генерал, один объект типа Сержант и массив стрелков. Массив стрелков задается тем, что в поле Количество объектов для введенного в окно яссе объекта асыгех устанавливается параметр и. Этот параметр задается как параметр объекта Бсос. Объекты, введенные в поле редактора объекта яссе, имеют интерфейсные переменные, и их нужно соединить подходящим образом. Такое соединение двух объектов может быть выполнено графически в поле графического редактора проведением соединительной линии (коннектора), однако в данной модели мы должны соединить переменное число объектов (в массиве стрелков их количество задается параметром). Альтернативная возможность соединения — использовать библиотечную функцию соелинения, которая, собственно, и порождается для каждого коннектора при трансляции графического изображения структуры активного объекта в соответствующий код на языке гаага.
Соединение нужно выполнить до начала работы модели, поэтому соответствующий код записывается в поле Кпд инициализации окна Код объекта ясст.. Сначала двумя операторами связывается выходная переменная скрсапиуэсат е Генерала с входной переменной 1агх самого левого стрелка, а также входная переменная х'дьх этого стрелка с входной переменной ехрспемуэхате Генерала: депехаг. хех екросенуэсасе.ссппесс! пс1с1гех.гхес~ О 1.
хсх 1еехх ); депеха1. хех хздпх.соппесх( аоГсьех.Геев( 0 ). хех ехрслемуяхате ); Далее в цикле связываются между собой стрелки, а последней парой операторов крайний правый стрелок связывается с Сержантом. Корневой объект включает статический таймер ахаиэхахеп, который периодически строит в поле анимации визуальное представление состояния всей системы в текущий момент времени.
Сделать это удобно после того, как все элементы системы установили свои состояния, т. е. с некоторым сдвигом Часть К Лримеры моделей для различных областей применения молельного времени относительно целых его значений. Здесь это слелано со сдвигом на 0.5. В поле Действие при срабатывании этого таймера выполняются операторы, выполняющие визуализацию. 20.4.5. Визуализация поведения цепи стрелков Чтобы визуально проследить изменение состояний всех стрелков со временем, удобно через каждую единицу модельного времени выводить состояния всей цепочки стрелков, Генерала слева и Сержанта справа.
Самое простое— это выводить в журнал строку состояний объектов. Состояния всех объектов находятся в их переменных мувеаее символьного типа. Именно это делается последовательностью функций стасе, указанных в поле Действие при срабатывании таймера атаывгасев. Для более наглядной анимации поведения системы требуются чуть более сложные операции, которые выполняются здесь же при вызове функции орс)ьгеялзгпьезоп. Если состояние хотя бы одного из объектов — заключительное, выполнение модели останавливается — вызывается функция епязпе.лсор.