Здесь добавлены только связи экземпляров машин по портам in и out. Машины должны быть связаны в кольцо. Для того чтобы это сделать, в окне структуры активного объекта Model порты реплицированного экземпляра объекта Machine связаны соединителем, и в окне свойств этой связи выбраны нужные варианты соединения. Для начальных точек соединения это порты out машины [i+1]; конечная точка связывает порты in машины [i]. Кроме этой связи нужно замкнуть кольцо. Для этого в поле Дополнительный код класса окна Код объекта Model введена функция oncreate () с единственным оператором: machine.item(0).out.connect(machine.itern(machine.size()-1).in);
Дополнения в анимации
Поскольку каждая машина участвует в двух разных вычислениях (в базовых и обмене токенами), в анимации она представлена прямоугольником, разделенным на две части. Нижняя половина отражает динамику базового алгоритма, верхняя половина отражает работу алгоритма распределенного завершения. В эту верхнюю половину помещено также изображение токена кружком, меняющим цвет от светло-серого к темно-серому в соответствии с алгоритмом. Токен включает накопленное значение token.count при движении токена по кольцу. Видимость изображения токена определяется булевой переменной hasToken, которая устанавливается в true при получении машиной токена.
На рис. 19.4 показано состояние системы машин, при котором токен находится в машине 4. Будучи порожденным машиной-лидером с номером 0, токен прошел в последнем цикле по крайней мере одну черную машину, поэтому сам стал черным. К текущему моменту он накопил число 7 при движении по кольцу, суммируя значения счетчиков базовых сообщений всех машин.
Если по получении токена машина-лидер обнаружит, что:
- сама эта машина белая,
- полученный токен белый,
- сумма значении токена и счетчика с машины 0 равна 0,
то машина принимает решение о том, что состояние завершения распределенных вычислений достигнуто. При обнаружении этой ситуации машина-лидер переходит в заключительное состояние stopAlgorithm, булева переменная finished устанавливается в true, и модель останавливается. Информация об обнаружении завершения появляется в поле анимации.
Заключение
Предоставляемые AnyLogic визуальные средства разработки моделей параллельных и распределенных систем, удобная интеграция визуальной разработки с фрагментами кода на языке Java для выражения алгоритмов, а также возможность визуализации функционирования параллельных систем делают AnyLogic весьма привлекательным инструментом для построения моделей сложных протоколов коммуникации. Трудоемкость разработки таких моделей сравнительно невелика. Например, разработка модели алгоритма распределенного завершения заняла менее одного рабочего дня.
Глава 20
Модели
Коллективного поведения
В этой главе представлены две классические широко известные модели коллективного поведения объектов в искусственном мире: синхронизация цепи стрелков и модель Heat Bags (Тепловые жуки). Эти модели приведены здесь для того, чтобы показать, насколько проста реализация моделей искусственной жизни в среде AnyLogic.
Задача о синхронизации