Сравнительный анализ распределительных алгоритмов в среде агентного моделирования Netlogo
Рассмотрение предметной области распределенных систем и имитационного моделирования. Анализ сред имитационного моделирования среди программ AnyLogic, Repast и NetLogo. Реализация моделей разных волновых алгоритмов с пошаговым пояснением действий.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 27.08.2020 |
Размер файла | 4,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Рисунок 10 Работа кнопки «Setup»
В данном случае все 8 созданных агентов наслоены друг на друга и выглядят, словно был создан только один агент. Поэтому необходимо задать агентам изначальное положение, чтобы они не «налезали» друг на друга. Код показан на рисунке 11.
Рисунок 11 Добавлена функция в кнопку «Setup»
Строка layout-circle turtles (world-width / 2 - 10) задаёт положение агентам. Теперь они расположены на равном расстоянии и формируют круг. На рисунке 12 показано как теперь они расположены.
Рисунок 12 Новое расположение агентов
Можно заметить, что в модели появилось 8 агентов (как и было задано с помощью «рычажка», а также теперь агенты формируют круг.
Далее необходимо написать функцию, которая будет визуально связывать агентов между собой с помощью линий. В той же функции «setup» описываем код, который показан на рисунке 13.
Рисунок 13 Добавление переменных и цикла для связки агентов
На рисунке 13 была объявлена глобальная переменная b, чтобы хранить число, которое будет отвечать в цикле за номер агента. Также turtles были заменены на класс «nodes». Класс nodes объявляется с помощью строки breed [nodes node], также классу «nodes» было присвоено переменная «state», которая отвечает за текущее состояние агента.
Цикл задаётся через «repeat» и принимает в себя количество повторений (в нашем случае num - 1). Далее обращаемся к агенту с номером b (изначально 0), которое увеличивается на 1, когда цикл проходит один раз. В цикле используется функция «create-link-with», которая осуществляет связь между двумя агентами (с номером b и b + 1). Также в данном цикле переменная state принимает в себя состояние с помощью переменной b.
Далее необходимо связать первого агента с последним, чтобы алгоритм имел структуру кольца, где каждый агент связан с агентом перед ним и после. Также необходимо показать, что первый агент алгоритма является распространителем информации и ему необходимо задать начальные параметры (state и красный цвет). Код реализации этих задач показан на рисунке 14.
Рисунок 14 Соединение первого и последнего агента и задание параметров для первого агента
На рисунке 15 показана модель, которая создаётся при нажатии кнопки «setup».
Рисунок 15 Обновленная модель после нажатия кнопки «setup»
Теперь необходимо показать, как передаётся информация внутри модели. Это показано так, что первый агент (красный) передаёт информацию следующему по номеру агенту, значит второй агент принимает красный цвет. Тот агент, который передавал информацию перекрашивается в серый цвет, что показывает, что он передал информацию следующему.
Для того, чтобы реализовать данную функцию необходимо создать кнопку «go» с параметрами, которые показаны на рисунке 16.
Рисунок 16 Параметры кнопки «go»
В параметрах необходимо поставить галочку у пункта «Выключить до начала тиков», чтобы кнопка была заблокирована перед тем, как была бы нажата кнопка «setup».
Теперь во вкладке «Код» необходимо создать функцию «go» и задать ей передачу данных от одного агента к другому. На рисунке 17 показан код данной функции.
Рисунок 17 Код кнопки «go»
Данная кнопка предназначена для передачи информации между агентами путём их перекрашивания. При одном нажатии данной кнопки первый агент передаёт данные второму и меняет свой цвет с красного на серый. Второй агент принимает информацию и из синего цвета (то есть ещё не был задействован) переходит в состояние, когда принял информацию и перекрашивается в красный цвет. После этого программа засчитывает 1 тик (функцией tick в конце «go»). Если хочется проследить полное действие алгоритма путём нажатия одной кнопки, необходимо в параметрах кнопки «go» поставить галочку напротив параметра «Всегда». Действие алгоритма после одного тика показано на рисунке 18.
Рисунок 18 Действие алгоритма после одного тика
После ещё одного нажатия кнопки «go» второй агент передаст данные третьему и примет серый цвет, а третий агент примет информацию и перекрасится из синего цвета в красный. Действие алгоритма после второго тика показано на рисунке 19.
Рисунок 19 Второй тик алгоритма
Последний тик, когда последний агент кольцевого алгоритма принял информацию показан на рисунке 20.
Рисунок 20 Последний тик выполнения алгоритма
Древесный алгоритм
Древесный алгоритм - это алгоритм из семейства волновых алгоритмов. Его смысл в том, что все листья, то есть процессы, которые являются вершинами дерева, запускают алгоритм и являются инициаторами. Все остальные процессы являются неактивными (неинициаторы).
Алгоритм начинается с того, что все листовые процессы отправляют сообщение вверх остальным неактивным процессам в дереве. Те процессы, что были неактивны и получили сообщение, становятся активными и тем самым становятся инициаторами, чтобы передавать сообщение дальше. И так далее волнами каждый процесс в дереве получает сообщение и после этого алгоритм завершает свою работу.
Древесный алгоритм используется для древесной сети. Этот же алгоритм можно использовать и для произвольной сети, если иметь доступ к остовному дереву этой сети. Предполагается, что все листья сети запускают наш алгоритм. Каждый процесс отправляет в точности одно сообщение на протяжении работы алгоритма. Если процесс уже получил сообщение по каждому из инцидентных ему каналов, кроме одного (это условие первоначально верно для листьев), то он отправляет сообщение по оставшемуся каналу. Если процесс уже получил сообщение по всем инцидентным ему каналам, то он принимает решение.
Описание алгоритма
Этап 1. Создание модели
Breed [nodes node] задать класс nodes которые будут иметь в себе всех агентов
Присвоить классу nodes состояния state
Задать необходимый фон (pcolor = white), размер и цвет агентам (nodes)
Этап 2. Соединение агентов
Создать соединительные линии между nodes с помощью create-link-with
Задать каждому node свой state и номер (n), который обращается к node
Создать переменную num, которая принимает количество nodes
Создать функцию «go» которая выполняет 1 действие алгоритма (1 tick)
Этап 3. Функция «GO»
If n < num ask nodes:
При условии if (color = red) and (state = num) [ set color grey ] заменяется цвет
Внутри этого условия обращение к ближайшим агентам: ask link-neighbors [if color = blue [set color red] ]
Уменьшение num на 1.
Node со state = задействованный меняет цвет на серый и меняет state (информацию получил и передал) и передать красный цвет следующим агентам, с которыми связан (то есть передать информацию)
Блок-схема
Блок-схема древесного алгоритма
Инструкция по написанию кода
После открытия программы необходимо создать кнопку «setup», которая будет создавать желаемое количество агентов для демонстрации древесной сети. То есть данная кнопка создаёт древесную сеть для её демонстрации. Созданная кнопка показана на рисунке 1.
Рисунок 1 Создана кнопка «setup»
Далее необходимо задать начальные данные кнопке «setup». Для начала необходимо изменить рабочую поверхность модели на белый и написать код, который бы при нажатии данной кнопки обнулял все тики и чистил все проделанные действия. Код показан на рисунке 2.
Рисунок 2 Начальный код кнопки «setup»
Рабочая панель модели, которая теперь создаётся показана на рисунке 3.
Рисунок 3 Рабочая панель модели при нажатии кнопки «setup»
Далее необходимо создать 15 агентов, которые будут образовать древесную сеть. Также нужно задать их начальные данные (цвет и размер). Код показан на рисунке 4.
Рисунок 4 Обновлённый код кнопки «setup»
Теперь кнопка создаёт 15 агентов, которые имеют форму кружков, синий цвет и размер 2. Также агентам был задан класс «nodes», через который можно к ним обращаться.
То, что создаёт кнопка «setup» показано на рисунке 5.
Рисунок 5 Модель после нажатия кнопки «setup»
Далее необходимо связать агенты между собой и задать сети форму. Код, который это реализует показан на рисунке 6.
Рисунок 6 Соединение агентов и задание формы сети
После того как были созданы связи между агентами необходимо использовать функцию layout-radial nodes links (node 0), которая формирует сеть вокруг одного агента с номером 0. Теперь в самом центре модели стоит агент 0, к которому в итоге можно дойти от каждого агента. На рисунке 7 показано как выглядит модель теперь.
Рисунок 7 Созданная модель из 15 агентов
Далее необходимо выделить агентов, которые будут передавать информацию, то есть они являются инициаторы. Необходимо поменять их цвет на красный. Код показан на рисунке 8.
Рисунок 8 Код заменяющий цвет инициаторов на красный
Была создана глобальная переменная n через функцию «globals [n]» и с помощью функции «repeat», которая повторяет действия заданное количество раз, цвет инициаторов был заменён на красный. Получившаяся модель показана на рисунке 9.
Рисунок 9 Созданная модель
Теперь необходимо создать кнопку, которая будет показывать один шаг действия алгоритма. То есть все инициаторы принимают неактивный вид (цвет становится серым) и передают данные следующим агентам, тем самым «перекрашивая» их в красный цвет. Кнопка с названием «go» создаётся также как и кнопка «setup», только напротив параметра «выключить до начала тика» необходимо поставить галочку для того, чтобы кнопка была не задействована перед тем, как была нажата кнопка «setup». Параметры кнопки показаны на рисунке 10.
Рисунок 10 Параметры кнопки «go»
Далее необходимо написать сам алгоритм, который будет передавать информацию внутри сети. То есть инициаторы будут задавать неинициаторам красный цвет, а сами переходить в состояние, когда они передали информацию и принимать серый цвет. Для этого нам необходимо задать классу две переменные, которые называются «state» (состояние) и «num» (заданное число). Это делается с помощью функции nodes-own [state num]. Далее необходимо задать всем агентам state 3 и num 3. Кроме того, агенту с номером 0 необходимо задать state 0, агентам 1 и 2 state 1, а агентам 3, 4, 5 и 6 state 2. Далее описываем кнопку «go» следующим образом как показано на рисунке 11.
Рисунок 11 Код кнопки «go»
На рисунке 12 показана модель без нажатия кнопки «go».
Рисунок 12 Модель без изменений
На рисунке 13 показана модель после одного нажатия кнопки «go».
Рисунок 13 Модель после одного нажатия «go»
На рисунке 14 показана модель после второго нажатия кнопки «go».
Рисунок 14 Второе нажатие кнопки «go»
На рисунке 15 показано третье нажатие кнопки «go».
Рисунок 15 Третье нажатие кнопки «go»
На рисунке 16 показано четвертое и последнее нажатие кнопки «go».
Рисунок 16 Четвертое нажатие кнопки «go»
Как было видно из рисунков 12-16 алгоритм выполнился. Нулевой агент получил информацию от всех агентов в сети и закончил выполнение алгоритма.
Код алгоритма
breed [nodes node]
globals [n]
nodes-own [state num]
to setup
clear-all
reset-ticks
ask patches [set pcolor white]
set-default-shape nodes "circle"
create-nodes 15 [
set color blue
set size 2
set state 3
set num 3
]
ask node 0 [
create-link-with node 1
create-link-with node 2
set state 0
]
ask node 1 [
create-link-with node 3
create-link-with node 4
set state 1
]
ask node 2 [
create-link-with node 5
create-link-with node 6
set state 1
]
ask node 3 [
create-link-with node 7
create-link-with node 8
set state 2
]
ask node 4 [
create-link-with node 9
create-link-with node 10
set state 2
]
ask node 5 [
create-link-with node 11
create-link-with node 12
set state 2
]
ask node 6 [
create-link-with node 13
create-link-with node 14
set state 2
]
layout-radial nodes links (node 0)
set n 7
repeat 8 [
ask node n [set color red]
set n (n + 1)
]
end
to go
ask nodes [
if (color = red) and (state = num)
[
set color grey
ask link-neighbors [if color = blue [set color red] ]
]
set num (num - 1)
]
tick
end
Алгоритм Эха
Алгоритм эха -- это централизованный волновой алгоритм в сетях с произвольной топологией. Смысл данного алгоритма в том, что инициатором служит один процесс, а все остальные процессы являются неактивными.
Алгоритм начинается с того, что инициатор начинает отправку сообщения всем соседним процессам, которые находятся в состоянии неактивности. Посредством волн инициаторы передают сообщение всем своим соседям кроме процесса, который передал этот сигнал или уже является активным. После неопределенного числа волн сообщение получает каждый процесс и алгоритм заканчивает свою работу.
Данный алгоритм наводняет сообщениями tok все процессы, выделяя таким образом остовное дерево. Инициатор отправляет сообщение всем своим соседям. После получения первого сообщения всякий неинициатор переправляет сообщения всем своим соседям, за исключением того, от которого было получено это сообщение. Как только неинициатор получит сообщения от всех своих соседей, он отправляет эхо родительскому процессу. Как только инициатор получит сообщения от всех своих соседей, он принимает решение.
Описание алгортима
Этап 1. Создание модели
Breed [nodes node] задать класс nodes которые будут иметь в себе всех агентов
Присвоить классу nodes состояния state
Задать необходимый фон (pcolor = white), размер и цвет агентам (nodes)
Этап 2. Соединение агентов
Создать соединительные линии между nodes с помощью create-link-with
Задать каждому node свой state и номер (n), который обращается к node
Создать переменную num, которая принимает количество nodes
Создать функцию «go» которая выполняет 1 действие алгоритма (1 tick)
Этап 3. Функция «GO»
If n > num ask nodes:
При условии if (color = red) and (state = num) [ set color grey ] заменяется цвет
Внутри этого условия обращение к ближайшим агентам: ask link-neighbors [if color = blue [set color red] ]
Увеличение num на 1.
Node со state = задействованный меняет цвет на серый и меняет state (информацию получил и передал) и передать красный цвет следующим агентам, с которыми связан (то есть передать информацию)
Блок-схема
Блок-схема алгоритма эха
Инструкция по написанию кода
Построение модели алгоритма эха очень похоже на древесный алгоритм, так что необходимо воссоздать модель, которая была показана на рисунке 7 в инструкции по написанию кода для древесного алгоритма. Для этого необходимо создать кнопку «setup», задать ей создание 15 агентов с синим цветом и размером 2, а также прописать строку кода «layout-radial nodes links (node 0)», чтобы расположить агентов на модели в виде дерева. На рисунке 1 показан код.
Рисунок 1 Код для создания дерева с агентами
Далее необходимо создать кнопку «go» с параметрами, показанными на рисунке 2.
Рисунок 2 Параметры кнопки go
Далее необходимо выделить инициатора данного алгоритма. В алгоритме эха инициатором является агент, который находится в центре дерева, то есть в нашем случае таким инициатором будет являться агент с номером 0. Для этого необходимо написать следующую строку: «set color red» при этом обратившись к агенту с номером 0. Код показан на рисунке 3.
Рисунок 3 Выделение инициатора в алгоритме
Получившаяся модель при нажатии кнопки «setup» показана на рисунке 4.
Рисунок 4 Модель алгоритма эха с инициатором
После этого необходимо написать код для кнопки «go», который бы заставлял инициаторов в алгоритме передавать информацию. То есть инициатор, как и в прошлых алгоритмах принимает красный цвет, а после того, как передаст информацию «перекрашивается» в серый цвет. Также агенты, которые принимают информацию от инициаторов «перекрашиваются» из синего цвета в красный. Для этого необходимо добавить состояния для всех агентов. Агент 0 будет иметь state равным 0, агенты 1 и 2 имеют state 1, агенты 3, 4, 5 и 6 state 2, а все остальные state 3. Кроме того, необходимо присвоить классу nodes переменные state (состояние) и num (заданное число). Код представлен на рисунке 5. В модели ничего не поменяется, но при этом каждый агент теперь имеет своё начальное состояние.
Рисунок 5 Добавлены состояния
Осталось написать код для кнопки «go». Он показан на рисунке 6. При этом необходимо задать начальное состояние переменной «num» равной 0.
Рисунок 6 Код кнопки «go»
Теперь необходимо проследить работу алгоритма. На рисунке 7 показана модель после нажатия кнопки «setup».
Рисунок 7 Изначальный вид модели
На рисунке 8 показана модель после первого нажатия кнопки «go»
Рисунок 8 Первое нажатие кнопки «go»
На рисунке 9 показана модель после второго нажатия кнопки «go».
Рисунок 9 Второе нажатие кнопки «go»
Третье нажатие кнопки «go» показано на рисунке 10.
Рисунок 10 Третье нажатие кнопки «go»
Конечный вид модели показан на рисунке 11.
Рисунок 11 Конечный вид модели
Код данного алгоритма
breed [nodes node]
globals [n]
nodes-own [state num]
to setup
clear-all
reset-ticks
ask patches [set pcolor white]
set-default-shape nodes "circle"
create-nodes 15 [
set color blue
set size 2
set state 3
set num 0
]
ask node 0 [
set color red
create-link-with node 1
create-link-with node 2
set state 0
]
ask node 1 [
create-link-with node 3
create-link-with node 4
set state 1
]
ask node 2 [
create-link-with node 5
create-link-with node 6
set state 1
]
ask node 3 [
create-link-with node 7
create-link-with node 8
set state 2
]
ask node 4 [
create-link-with node 9
create-link-with node 10
set state 2
]
ask node 5 [
create-link-with node 11
create-link-with node 12
set state 2
]
ask node 6 [
create-link-with node 13
create-link-with node 14
set state 2
]
layout-radial nodes links (node 0)
end
to go
ask nodes [
if (color = red) and (state = num)
[
set color grey
ask link-neighbors [if color = blue [set color red] ]
]
set num (num + 1)
]
tick
end
Фазовый алгоритм
Фазовый алгоритм является децентрализованным алгоритмом, который подходит для сетей, в которых используется произвольная топология. Такой алгоритм подходит для ориентированных сетей.
В данном алгоритме необходимо, чтобы каждый агент или процесс располагал данными о длине сети. Алгоритм может работать при условии, что все процессы будут использовать константу, которая превышает диаметр (или длину) самой сети.
Данный алгоритм применяется для любой ориентированной сети, данные в которой передаются в одну сторону. В таком случае соседями любой вершины будут как инициаторы, так и неинициаторы. Также по каждому каналу должно передаваться такое количество сообщений, которое не превышает длину сети. Двунаправленные связи тоже могут присутствовать, но они должны быть заданы парой параллельных встречных однонаправленных каналов.
Описание алгоритма
Этап 1. Создание модели
Breed [nodes node] задать класс nodes которые будут иметь в себе всех агентов
Nodes-own [state] Присвоить классу nodes состояния state
Задать необходимый фон (pcolor = white), размер и цвет агентам (nodes)
Этап 2. Задание агентам связей и параметров
Создать соединительные линии между nodes с помощью create-link-with
Задать каждому node свой state и номер (n), который обращается к node
Создать переменную num, которая принимает количество nodes
Создать функцию «go» которая выполняет 1 действие алгоритма (1 tick)
Этап 3. Функция «Go»
If n<num если n меньше num выполнить:
Node со state = задействованный меняет цвет на серый и меняет state (информацию получил и передал) и передать красный цвет следующим агентам, с которыми связан (то есть передать информацию)
Блок-схема
Блок-схема фазового алгоритма
Инструкция по написанию кода
Для начала необходимо создать кнопку «setup», которая будет создавать модель. Для данного алгоритма подойдёт форма положения агентов в виде круга. Сначала была создана кнопка «setup» и написан стандартный код для очищения тиков и всех действий, а также фон заменен на белый. Данный код представлен на рисунке 1.
Рисунок 1 Код стандартных функций кнопки «setup»
Модель, полученная вышеописанным кодом, показана на рисунке 2.
Рисунок 2 Модель с белым фоном и очищенными данными
Далее необходимо создать необходимое число агентов (пусть будет 4), а также разместить их в форме круга. Также начальные параметры необходимо задать как синий цвет, форма кружка и размер 3. Данный код показан на рисунке 3.
Рисунок 3 Код для создания агентов
На рисунке 4 показана модель, которая появляется при нажатии кнопки «setup».
Рисунок 4 Созданная модель кнопкой «setup»
Далее необходимо составить цепочку между агентами, то есть создать связи между ними. С помощью строчки «set-default-shape links “small-arrow-links”» задаётся вид связи (стрелочка). Код показан на рисунке 5.
Рисунок 5 Код для связей агентов
На рисунке 6 показана получившаяся модель.
Рисунок 6 Модель со связями для алгоритма
Далее необходимо задать инициатора в алгоритме. Пусть агент с номером 0 будет являться инициатором и иметь красный цвет. Это реализует код «ask node 0 [set color red]». Также добавим кнопку «go» для того, чтобы по её нажатии проходило действие алгоритма. Результат показан на рисунке 7.
Рисунок 7 Получившаяся модель
Далее необходимо написать код, который будет соответствовать алгоритму. Он показан на рисунке 8. Данный код передаёт цвет от одного агента к другому, при этом инициатор является красным, затем переходит в неактивное состояние, а агент, который принял сообщение «загорается» красным, то есть становится активным. Этот алгоритм проходит до тех пор, пока один из агентов не передаст сообщение количество (n-4) раз. То есть на один меньше, чем количество агентов в цепочке.
Рисунок 8 Код передачи информации
На рисунке 9 показан второй этап выполнения алгоритма.
Рисунок 9 Второй этап выполнения алгоритма
На рисунке 10 показан третий этап выполнения алгоритма.
Рисунок 10 Третий этап
На рисунке 11 показан четвертый этап выполнения алгоритма.
Рисунок 11 Четвёртый этап
На рисунке 12 показан пятый этап выполнения алгоритма.
\
Рисунок 12 Пятый этап
На рисунке 13 показан шестой этап выполнения алгоритма.
Рисунок 13 Шестой этап
На рисунке 14 показан седьмой этап выполнения алгоритма.
Рисунок 14 Седьмой этап
На рисунке 15 показан седьмой этап выполнения алгоритма.
Рисунок 15 Восьмой этап
На рисунке 16 показан девятый этап алгоритма.
Рисунок 16 Девятый этап
На рисунке 17 показан десятый этап выполнения программы
Рисунок 17 Десятый этап
После данного этапа алгоритм закончен, так как нижний агент принял и передал 3 сообщения.
Код данного алгоритма
breed [nodes node]
to setup
clear-all
reset-ticks
ask patches [set pcolor white]
set-default-shape turtles "circle"
create-nodes 4 [
set color blue
set size 3
]
ask node 0 [
create-link-to node 1
create-link-to node 2
]
ask node 1 [ create-link-to node 3]
ask node 2 [create-link-to node 3]
ask node 3 [create-link-to node 0]
layout-circle turtles (world-width / 2 - 10)
end
to go
ask node 1 [set color red]
ask node 0 [set color gray]
tick
ask node 3 [set color red]
ask node 1 [set color gray]
tick
ask node 0 [set color red]
ask node 3 [set color gray]
tick
ask node 2 [set color red]
ask node 0 [set color gray]
tick
ask node 3 [set color red]
ask node 2 [set color gray]
tick
ask node 0 [set color red]
ask node 3 [set color gray]
tick
ask node 1 [set color red]
ask node 0 [set color gray]
tick
ask node 3 [set color red]
ask node 1 [set color gray]
tick
ask node 0 [set color red]
ask node 3 [set color gray]
tick
end
Алгоритм Финна
Алгоритм Финна -- это волновой алгоритм, который используется для произвольных ориентированных сетей. Диаметр сети не обязательно должен быть известен заранее, но этот алгоритм опирается на однозначную идентифицируемость процессов. В сообщениях процессы обмениваются отличительными признаками, что в итоге приводит к тому, что битовая сложность данного алгоритма оказывается довольно велика.
В процессе р формируются два множества отличительных признаков Incp, и Nincp,. Если говорить неформально, то Incp обозначает множество таких процессов q, что некоторое событие в q предшествует самому последнему событию, случившемуся в р, a Nlncp обозначает множество таких процессов q, что у каждого соседа г процесса q какое-нибудь событие в г предшествует самому последнему событию, случившемуся в р.
Описание алгоритма
Этап 1. Создание модели
Breed [nodes node] задать класс nodes которые будут иметь в себе всех агентов
Nodes-own [state] Присвоить классу nodes состояния state
Задать необходимый фон (pcolor = white), размер и цвет агентам (nodes)
Этап 2. Задание агентам связей и параметров
Создать соединительные линии между nodes с помощью create-link-with
Задать каждому node свой state и номер (n), который обращается к node
Создать переменную num, которая принимает количество nodes
Создать функцию «go» которая выполняет 1 действие алгоритма (1 tick)
Этап 3. Функция «Go»
If n<num если n меньше num выполнить:
Node со state = задействованный меняет цвет на серый и меняет state (информацию получил и передал) и передать красный цвет следующим агентам, с которыми связан (то есть передать информацию)
Блок-схема
Блок-схема алгоритма Финна
Инструкция по написанию кода
Для начала необходимо создать кнопку сетап и так же, как в фазовом алгоритме задать стандартные параметры для неё. То есть сделать фон белым, занулить все действия до нажатия кнопки и задать количество тиков равным нулю. Данный код показан на рисунке 1.
Рисунок 1 Код, очищающий все действия и задающий белый фон
Далее необходимо добавить код, который будет создавать агентов, которые имеют размер 3, синий цвет и форму кружков. Также необходимо с помощью команды «layout-circle turtles (world-width / 2 - 10)» расположить их по кругу. Данный код показан на рисунке 2.
Рисунок 2 Код, создающий агенты
На рисунке 3 показано как создаются агенты после нажатия кнопки «setup».
Рисунок 3 Созданная модель с агентами
Далее необходимо задать связь между агентами. Также необходимо связи между агентами визуализировать в виде стрелочек (через set-default-shape links «small-arrow-links», чтобы было понятно направление передачи информации/сообщения, а также необходимо задать начальный инициатор (агент с нулевым номером). Код показан на рисунке 4.
Рисунок 4 Создание связей между агентами
Далее необходимо написать код для кнопки «go», который бы передавал данные между агентами по цепочке. Так как расположены связи (в таком же порядке).
Код показан на рисунке 5.
Рисунок 5 Код алгоритма передачи данных
Алгоритм закончен, изначально модель выглядит следующим образом, показанным на рисунке 6.
Рисунок 6 Начальное состояние модели
На рисунке 7 показан второй этап выполнения алгоритма.
Рисунок 7 Второй этап выполнения алгоритма
На рисунке 8 показан третий этап выполнения алгоритма
Рисунок 8 Третий этап
На рисунке 9 показан четвёртый этап выполнения алгоритма.
Рисунок 9 Четвёртый этап
На рисунке 10 показан пятый этап.
Рисунок 10 Пятый этап
На рисунке 11 показан шестой и последний этап выполнения алгоритма.
Рисунок 11 Последний этап
Агент 3 остался активным, так как было получено сообщение от агента 0. Процесс 2 остаётся активны и отсылает данные, которые полностью определены агенту 0, который являлся изначальным инициатором. Произошло оповещение всех агентов (процессов) в сети. Алгоритм завершил свою работу.
Код
breed [nodes node]
to setup
clear-all
reset-ticks
ask patches [set pcolor white]
set-default-shape turtles "circle"
create-nodes 4[
set size 3
set color blue
]
ask node 0 [create-link-to node 3 set color red]
ask node 1 [create-link-to node 0 create-link-to node 3]
ask node 2 [create-link-to node 0 create-link-to node 1]
ask node 3 [create-link-to node 2]
layout-circle turtles (world-width / 2 - 10)
end
to go
ask node 0 [set color gray]
ask node 3 [set color red]
tick
ask node 3 [set color gray]
ask node 2 [set color red]
tick
ask node 2 [set color gray]
ask node 1 [set color red]
ask node 0 [set color red]
tick
ask node 1 [set color gray]
ask node 3 [set color red]
ask node 0 [set color red]
tick
ask node 0 [set color gray]
ask node 2 [set color red]
end
Размещено на Allbest.ru
...Подобные документы
Обзор средств компьютерного имитационного моделирования по созданию веб-приложения для визуализации имитационных моделей. Система имитационного моделирования AnyLogic, Arena, SimuLab. Серверная, клиентская часть. Модель работы отдела банка и участка цеха.
дипломная работа [3,3 M], добавлен 25.05.2015Теоретические основы моделирования систем в среде имитационного моделирования AnyLogic. Средства описания поведения объектов. Анимация поведения модели, пользовательский интерфейс. Модель системы обработки информации в среде компьютерного моделирования.
курсовая работа [1,5 M], добавлен 15.05.2014Создание библиотеки классов имитационного моделирования и реализация алгоритма имитационного моделирования системы массового обслуживания "Модель комиссионного магазина". Использование для разработки среды программирования C++. Словарь предметной области.
курсовая работа [581,0 K], добавлен 23.01.2013Основы систематизации языков имитационного моделирования, моделирование систем и языки программирования. Особенности использования алгоритмических языков, подходы к их разработке. Анализ характеристик и эффективности языков имитационного моделирования.
курсовая работа [1,4 M], добавлен 15.03.2012Особенности моделирования биологических систем с использованием программы "AnyLogic". Влияние различных факторов на популяции жертв и хищников. Принципы имитационного моделирования и его общий алгоритм с помощью ЭВМ. Анализ результатов моделирования.
курсовая работа [922,2 K], добавлен 30.01.2016Создание систем имитационного моделирования AnyLogic, Arena, SimuLab, Simbigraph и Forio. Серверная и клиентская часть. Разработка модели работы отдела банка, участка цеха, движения автобуса по маршруту и социальной сети. Описание web-приложения.
дипломная работа [3,4 M], добавлен 25.05.2015Концептуальная модель процесса обслуживания покупателей в магазине. Описание системы моделирования GPSS. Разработка моделирующей программы на специализированном языке имитационного моделирования в среде AnyLogic. Результаты вычислительных экспериментов.
курсовая работа [906,9 K], добавлен 12.07.2012Характеристика основных методов и средств моделирования мультиагентных систем. Ознакомление с результатами экспериментального тестирования и отладки программного комплекса. Рассмотрение методов оценки качества разработанного программного продукта.
дипломная работа [3,1 M], добавлен 27.10.2017Основы технологии моделирования Arena. Построение простой имитационной модели. Моделирование работы системы обслуживания покупателей на кассе супермаркета. Построение модели IDEF3. Анализ результатов имитационного моделирования и аналитического решения.
курсовая работа [659,1 K], добавлен 24.03.2012Характеристика функций имитационного моделирования. Знакомство с особенностями имитационного моделирования агрегированной системы массового обслуживания. Анализ программы GPSSWorld: рассмотрение возможностей, способы составления имитационной модели.
курсовая работа [1,6 M], добавлен 27.05.2013Основные характеристики и алгоритмы настройки виртуальной локальной вычислительной сети VLAN, протоколов маршрутизации, системы доменных имен и трансляции сетевых адресов с целью разработки корпоративной сети в среде имитационного моделирования.
курсовая работа [556,1 K], добавлен 23.04.2011Разработка имитационной модели функционирования кладовой на промышленном предприятии с использованием имитационного метода в среде GPSS World. Экспериментальное исследование результатов моделирования. Выработка предложений по оптимизации работы системы.
курсовая работа [183,1 K], добавлен 27.08.2012Особенности систем массового обслуживания и сущность имитационного моделирования с использованием GPSS. Структурная схема модели системы и временная диаграмма. Сравнение результатов имитационного моделирования и аналитического расчета характеристик.
курсовая работа [214,2 K], добавлен 23.06.2011Сущность концептуального и физического моделирования. Описание графической среды AnyLogic как единственного инструмента имитационного моделирования. Основные этапы создания модели, позволяющей наглядно проанализировать влияние рекламы на покупателей.
курсовая работа [690,2 K], добавлен 30.05.2014Автоматизация технологических процессов. Написание имитационных моделей систем с дискретными событиями. Модели систем массового обслуживания в общецелевой системе GPSS. Логическая схема алгоритмов и схема программы. Математическая модель и ее описание.
курсовая работа [1,4 M], добавлен 29.06.2011Понятие компьютерной и информационной модели. Задачи компьютерного моделирования. Дедуктивный и индуктивный принципы построения моделей, технология их построения. Этапы разработки и исследования моделей на компьютере. Метод имитационного моделирования.
реферат [29,6 K], добавлен 23.03.2010Анализ методов и средств моделирования мультиагентных схем. Тестирование лабораторных работ "Climatechange", "ElFarol" и "Pagerank". Экспериментальное тестирование и отладка программного комплекса. Оценка качества разработанного программного продукта.
дипломная работа [4,5 M], добавлен 12.08.2017Центральные магистрали передачи данных. Улучшение параметров мультисервисной сети за счет использования имитационного моделирования. Сети с трансляцией ячеек и с установлением соединения. Коммутация в сети Ethernet. Многоуровневая модель протоколов.
курсовая работа [2,3 M], добавлен 25.06.2014AnyLogic как инструмент компьютерного моделирования нового поколения. Процесс разработки моделей и реализация имитационных моделей для распространения эпидемического заболевания. Разработка систем обратной связи (диаграммы потоков и накопителей).
контрольная работа [1,8 M], добавлен 21.07.2014Математическое описание имитационной модели. Описание блок-схемы алгоритма. Анализ полученных результатов имитационного моделирования. Сопоставление полученных результатов для разработанных моделей. Математическое описание аналитического моделирования.
курсовая работа [306,5 K], добавлен 25.03.2015