Ю. Карпов - Иммитационное моделирование систем с AnyLogic 5 (1124147), страница 69
Текст из файла (страница 69)
Дополнения в активном объекте УасЫпе В основной алгоритм вносится одно изменение: в соответствии с третьим правилом алгоритма, машина, получившая базовое сообщение, становится черной. Поэтому на переходах с и ез в стейтчарте пигп добавлено это действие. Активный объект наоььпе будет также оперировать и с токенами. Токен имеет свой счетчик и цвет.
Именно эти параметры определены в новом классе сообщений токег. АКтИВНЫй ОбЪЕКт Иасъьпе будЕт ИМЕТЬ даа дОПОЛНИтЕЛЬНЫХ ПОрта, 1п И осе, через которые по кольцу передается токен. Потому тип сообщений, передаваемых через эти порты, определен как токеп. Машина имеет два дополнительных параметра, еокеп типа токеп для хранения полученного по кольцу токена и еаоььпеео1ог, КОтОрЫй ХраНИт паст МашИНЫ В соотвстетаин с этиМ алгоритмом.
Определим машину-лидер как машину с номером О. Именно эта машина будет инициировать запуск токена и анализировать его по получении. Все остальные экземпляры машин будут только передавать токен по кольцу. Часть К П нмвры модвлейдляразличныхобластей и именения Алгоритм распределенного завершения выражается стейтчартом. Этот стейтчарт реализован как две независимые ветви; одна из которых осушествляет алгоритм лидера, а другая — алгоритм обычной машины в кольце. Выбор нужной части стейтчарта в каждой машине выполняется из начального состояния твгсьв1 по номеру машины.
Алгоритм лидера состоит в том, что после некоторой постоянной задержки порождается новый токен и посылается по сети (через порт сне). Далее в состоянии нвьсиутсхвв лидер ждет получения этого токена. После его ПОЛУЧЕНИЯ ИЗ ПОРта Ьл ЛИДЕР ПЕРЕХОДИТ В СОСТОЯНИЕ нвгехссьчвпввбвх, токен при этом сохраняется в локальной переменной сохни. В этом состоянии лидер находится до тех пор, пока его состояние не станет пассивным. При выходе из состояния (когда лидер стал пассивным) производится анализ выполнения четвертого правила алгоритма Дейкстры с помошью алгоритмиЧЕСКОй фуНКцИИ СвхтяСснбгегсв.
ЕСЛИ УСЛОВИЕ ПраВИЛа ВЫПОЛНяЕтСя, ЛИдЕр переходит в состояние зесрл1яс .гсь1я, в котором работа модели останавливается (рис. )9.3). Если условие не выполняется, работа лидера возобновляется с шага порождения нового токена. Рис. 19.3. Ствйтчврт алгоритма обнаружения завершения Глава (9. Информатика и коммуникация Алгоритм обычной машины в кольце тоже прост (правая ветвь стейтчарта рис. 19.3). Находясь в состоянии иа)етокелвхопвьлд, машина ожидает токен, передаваемый по кольцу. Дождавшись токена из порта ъл, машина задерживает его на небольшое время (только для визуального эффекта в анимации), нахолясь в состоянии ркссввв).одтоквл.
Дождавшись, когда она в базовых вычислениях станет пассивной (это определяется условием таъл.ъвэсасвлсс).чв(иаьл.ы1в)), машина передает токен через порт осе предварительно увеличив его значение на величину счетчика с данной машины и перекрасив токен в темный цвет„если это нужно в соответствии с третьим правилом алгоритма. Дополнения в корневом активном объекте Здесь добавлены только связи экземпляров машин по портам ) о и осе. Машины должны быть связаны в кольцо. Для того чтобы это сделать, в окне структуры активного объекта иовв1 порты реплицированного экземпляра объекта масьълв связаны соединителем, и в окне свойств этой связи выбраны нужные варианты соединения. Для начальных точек соединения это порты оос машины (ъ+т); конечная точка связывает порты ъл машины (ъ).
Кроме этой связи нужно замкнуть кольцо. Для этого в поле Двяалиительвый код класса окна Кпд объекта иос)в1 введена функция оосквасв() с единственным оператором: тасьгле.ъсеп(0).оие.соопесе(тасьъпе.геев(таси).пе.вазе()-1).)п)р Дополнения в анимации Поскольку каждая машина участвует в двух разных вычислениях (в базовых и обмене токенами), в анимации она представлена прямоугольником, разделенным на две части. Нижняя половина отражает динамику базового алгоритма, верхняя половина отражает работу алгоритма распределенного завершения. В эту верхнюю половину помещено также изображение токена кружком, меняющим цвет от светло-серого к темно-серому в соответствии с алгоритмом. Токен включает накопленное значение соквл.соиле при движении токена по кольцу.
Видимость изображения токена определяется булевой переменной ьавтоквл, которая устанавливается в свив при получении машиной токена. На рис. 19.4 показано состояние системы машин, при котором токен находится в машине 4. Будучи порожденным машиной-лидером с номером О, токен прошел в последнем цикле по крайней мере одну черную машину„ поэтому сам стал черным. К текущему моменту он накопил число 7 при движении па кольцу, суммируя значения счетчиков базовых сообщений всех машин. 34х Часть У.
Примеры моделей для различных областей применения Рис. 19.4. Анимация работы алгоритма распределенного завершения Если по получении токена машина-лидер обнаружит, что: П сама эта машина белая, П полученный токен белый„ гз сумма значений токена и счетчика с машины О равна О, то машина принимает решение о том, что состояние завершения распределенных вычислений достигнуто. При обнаружении этой ситуации машина- лидер переходит в заключительное состояние зсорл1яоггсьы, булева переменная ггптвьеа устанавливается в схце, и модель останавливается. Информация об обнаружении завершения появляется в поле анимации.
19.2. Заключение Предоставляемые АпуЕоя1с визуальные средства разработки моделей параллельных и распределенных систем, удобная интеграция визуальной разработки с фрагментами кода на языке Заза для выражения алгоритмов, а также возможность визуализации функционирования параллельных систем делают АпуЕорс весьма привлекательным инструментом для построения моделей сложных протоколов коммуникации.
Трудоемкость разработки таких моделей сравнительно невелика. Например, разработка модели алгоритма распределенного завершения заняла менее одного рабочего дня. Глава 20 Модели коллективного поведения В этой главе представлены две классические широко известные модели коллективного поведения объектов в искусственном мире: синхронизация цепи стрелков и модель неве ваяв (Тепловые жуки). Эти модели приведены здесь для того, чтобы показать, насколько проста реализация моделей искусственной жизни в среде Апу1оя1с.
20.1. Задача о синхронизации цепи стрелков (Нг1пд Зциаб РгоЫегп) Эта классическая проблема синхронизации коллектива взаимодействующих объектов была поставлена Дж. Майхиллом в 1957 г. и опубликована в 1ЕМб2]. Данной проблеме посвящено болыиое количество литературы. На русском языке обсуждение проблемы было опубликовано в книге 1ММ711 20.2.
Постановка проблемы Проблема состоит в следующем. Дана цепочка стрелков конечной но произвольной длины. Каждый стрелок может находиться в одном из конечного числа состояний. Все стрелки должны одновременно произвести залп, т. е. перейти в одно и то же закл|очительное состояние после команды, принятой на одном конце цепочки крайним стрелком. Стрелки не уме|от считать, они общаются только со своими соседями. На каждом шаге по времени состояние каждого из стрелков может измениться как функция его собственного состояния на предыдущем шаге и предыдущего состояния двух его соседей.
На одном краю цепочки находится Генерал, который в начальный момент переходит в состояние приготовиться. Тем самым он подает команду, т. к. его новое состояние воспримется на следующем шаге по времени его соседом — крайним стрелком. На другом конце цепочки находится Сержант. Алгоритмы Генерала и Сержанта могут отличаться от алгоритма функционирования Часть и Примеры моделей для реэличных областей применения стрелков, которые все одинаковы. Этот алгоритм функционирования стрелков и нужно построить. 20.3. Идея решения Основная идея решения заключается в посылке по цепи стрелков сигналов, распространяюшихся с разной скоростью. Очевидно, что самая большая скорость распространения сигнала по цепи — один стрелок в единицу времени. Если один сигнал распространяется втрое медленнее другого, то два этих сигнала могут встретиться на середине цепочки после того, как более медленный сигнал отразится от края цепи.
Сигнал в нашем случае — это изменение состояния элемента цепи — стрелка. Пример распространения сигналов представлен на рис. 20.1. Каждая строка отражает состояния стрелков цепочки на очередном шаге по времени. В каждой строке прямоугольники представляют стрелков, цвет прямоугольников показывает состояние стрелка. Крайний левый прямоугольник — Генерал, крайний правый прямоугольник — Сержант. В приведенном здесь решении моделируется работа алгоритма из 13 состояний, число шагов которого о (и), и всегда меньше зп, где и — число стрелков. Рис. 20.1. Распространение волн сигналов в цепочке стрелков со временем в модели Глава ЯО.
Марели коллективного поведения 20.4. Описание модели Модель въхтпд вдова ввоыеа находится в папке Моде! Ехашр!еа1рап У. Она содержит три активных объекта, которые моделируют поведение Генерала, Сержанта и стрелка. Модель собирается в корневом объекте аоос, который включает одного Генерала, массив стрелков и одного Сержанта. 20.4Л. Модель Генерала МОДЕЛЬ ГЕНЕраяа (Сепета1) СОдЕржИт ВНутрЕННЮЮ ПЕрЕМЕННуЮ в~уаеаее типа сват и две интерфейснь|е переменные того же типа, еировеиудсасе и ладье. Кроме того, обьект содержит стейтчарт и два статических таймера (рис.
20.2). йио. 20.2. Класс Сепепа1 Переменная вудское принимает значение текущего состояния этого активного объекта. Состояния объектов в модели обозначаются символами. Выходная интерфейсная переменная называется ехровеиувсасе, она передает состояние данного активного объекта тем переменным, которые будут с нею связаны. Входная интерфейсная переменная т1дьс будет показывать состояние соседа справа. Начальные значения этих переменных неважны. Стейтчарт с именем па1п содержит три состояния, начальное с именем л, состояние готов с именем к, и состояние сереляй с именем в.
В нашей модели активные объекты переходят из состояния в состояние синхронно, каждую единицу модельного времени, но только в том случае, если выполнены условия перехода — в частности, соседи находятся во вполне определенных состояниях. Самое простое решение смоделировать такие переходы — зто выполнять их по сигналу с учетом защиты (спите). Сигналом. по которому разрешен переход, является получение любого объекта типа Часть (ь' Примеры мсделей для различных областей применения Оьбеов, этот сигнал периодически будет посылаться стейтчарту таймером вупсьго.
Переход из состояния л в состояние к осушествляется, как только такое событие произойдет, потому что Генерал делает первый шаг, выдавая кОманду приготови ься независимО От каких-либо условий с самого начала функционирования системы. Переход Генерала из состояния к в закл(очительное состояние э требует, чтобы состояние его правого соседа было тоже готов, т. е. имело имя к. При входе в каждое состояние переменной вуувсвсе присваивается значение, соцтветствуюшее этому состоянию, например, при входе в состояние с именем к выполняется оператор иуэсвсе= к . "Жизнь" этому объекту придает таймер вупспго, который периодически каждую единицу модельного времени генерирует событие, направленное непосредственно стейтчарту с именем пвъп. Это описывается вызовом функции гъгекуепв с передачей произвольного объекта базового типа оубесс у стейтчарта: ввтп.гъгекуепс( пеи Оьбесс(( ] Аргументом у функции еъгекуепс() может быть, в частности, объект любого типа, а переход стейтчарта может быть определен, если объект именно этого класса получен.