Главная страница

А.Е.Осоргин_-_AnyLogic_6_Лабораторный_практикум. Министерство образования и науки российской федерации федеральное государственное образовательное учреждение среднего профессионального образования Поволжский государственный колледж


Скачать 3.11 Mb.
НазваниеМинистерство образования и науки российской федерации федеральное государственное образовательное учреждение среднего профессионального образования Поволжский государственный колледж
Дата11.11.2022
Размер3.11 Mb.
Формат файлаpdf
Имя файлаА.Е.Осоргин_-_AnyLogic_6_Лабораторный_практикум.pdf
ТипПрактикум
#783062
страница9 из 10
1   2   3   4   5   6   7   8   9   10
12.2. МОДЕЛЬ
Создайте новую модель Сегрегация на основе шаблона Агентное моделирование.
Начальное количество агентов установите
9000
. Выберите тип пространства
Дискретное
, остальные параметры оставьте без изменения.
12.2.1. КЛАСС АКТИВНОГО ОБЪЕКТА – PERSON
Откройте диаграмму класса
Person
, вы увидите небольшой квадратик в начале координат. Увеличьте масштаб для упрощения работы и выделите мышью этот квадрат.
Во вкладке Дополнительные панели свойств укажите расположение по осям X и Y: 0 и 0, а ширину и высоту: 3 и 3, соответственно.
Перейдите на вкладку Динамические и в поле Цвет заливки напишите: color
Теперь, нужно объявить этот параметр color типа
Color со значением по умолчанию: randomTrue( 0.5 ) ? Color.blue : Color.green
Как Вы помните, это условное выражение присвоит начальное значение параметру color, с вероятностью 50%, либо синий, либо зеленый цвет.
Из постановки проблемы видно, что каждый агент может быть «счастлив» и оставаться на месте, или «несчастлив» и стремиться переехать в другое место. Поэтому, в классе
Person нужно объявить простую переменную счастье типа boolean
. На этом с агентом пока закончим и перейдем к конструированию класса
Main
12.2.2. КЛАСС АКТИВНОГО ОБЪЕКТА – MAIN
Откройте диаграмму класса
Main
, вы увидите вложенный реплицированный объект people, объект environment и вложенную презентацию (небольшой квадрат), рис. 12.1.
В свойствах вложенного объекта people мы увидим, что он связан со средой environment и, что в его основе лежит класс
Person.
Количество агентов можно изменить в поле Количество.
В свойствах вложенного объекта environment, на вкладке Основные, следует поставить галочку в поле Выполнять шаги. На вкладке Дополнительные мы увидим, что наше пространство Дискретное2D, ширина, высота, число строк и столбцов – в соответствии с выбранными параметрами шаблона. Тип соседства
Мурово
, то есть соседями считаются

87
агенты, располагающиеся в 8 соседних ячейках, в отличие от соседства
Евклидово
, где соседями считаются агенты, располагающиеся в 4 соседних ячейках.
Объявим параметр порог
, который будет управлять допустимым процентом соседей, принадлежащих к той же социальной группе, со значением по умолчанию
0,7
Для наглядного представления процесса сегрегации создайте презентацию модели, как показано на рис. 12.2. Размер прямоугольника презентации 500 на 650, цвет – зеленый.
Размер прямоугольника рабочего поля
402 на 402, расположение
48 по осям X и
Y, цвет – blanchedAlmond
Для того, чтобы расположение агентов совпало с рабочим полем, переместите презентацию агента
(небольшой квадрат) в позицию 50 по осям X и Y.
Рис. 12.1
Для управления параметром порог создайте слайдер в нижней части презентации, установите пределы регулировки от 0 до 1. Для дополнительного удобства добавим кнопки, передвигающие бегунок слайдера на 1% вверх или вниз. В поле Действие: кнопки
«–» впишите следующий код: порог = limitMin( 0, порог - 0.01 ); setControlValueToDefault( slider ); для кнопки «+» первая строка должна выглядеть иначе:
порог = limitMax( порог + 0.01, 1 );
Здесь метод limitMin возвращает порог - 0.01
, если он больше или равен 0, соответственно limitMax возвращает порог + 0.01
, если он меньше или равен 1.
Метод setControlValueToDefault устанавливает бегунок слайдера в соответствии с измененным параметром порог.

88
В нижней части презентации напишите текст:
Предпочтение иметь соседей того же самого цвета:
, а немного правее введите текст, показывающий значение параметра порог.
Для этого во вкладке Динамические в поле Текст: введите: format(порог * 100) + "%" - это позволит избавиться от десятичных значений и добавит знак процентов к числу.
Для того чтобы презентация открывалась в окне, совпадающем по размерам с нашей презентацией, откройте свойства эксперимента
Simulation и на вкладке Окно измените ширину и высоту на значения
500
и
650
, соответственно. На вкладке Презентация выберите режим
Виртуальное время
– модель будет выполняться с максимальной скоростью.
12.2.3. ФУНКЦИОНИРОВАНИЕ МОДЕЛИ
Для того чтобы наша модель работала, нужно написать, что делать агентам на каждом шаге. Откройте свойства класса активного объекта
Person и перейдите на вкладку Агент.
В поле Действие перед выполнением шага напишите следующий код на языке Ява:
int
рядом = 0;
Agent[] соседи = getNeighbors();
// строим массив агентов - соседей
if
( соседи ==
null
) { счастье =
true
;
// нет соседей - это тоже хорошо
return
;}
// выход
for
( Agent a : соседи )
// перебираем весь массив соседей
if
(((Person)a).color == color)
//сравниваем цвет соседа со своим рядом++;
// если цвет совпал - суммируем
//счастлив, если процент того же цвета больше/равен заданному порогу: счастье = (рядом >= get_Main().порог * соседи.length);
В поле Действие на шаге напишите следующий код на языке Ява:
if
(!счастье && randomTrue(0.3))
//если не счастлив, то с вероятн. 0,3
jumpToRandomEmptyCell();
// переход на другую свободную клетку
Комментарии можно не вводить.
12.2.4. СБОР СТАТИСТИКИ
Реплицированные объекты поддерживают удобный способ сбора статистики.
Поддерживаются следующие типы функций сбора статистики:
• количество,
• сумма,
• среднее,
• минимальное,
• максимальное.

89
Откройте свойства реплицированного объекта people и перейдите на вкладку
Статистика. Нажмите на кнопку Добавить ф-ю сбора статистики. В появившиеся поля введите:
• Имя: people_Сч
• Тип: кол-во
• Условие: item.счастье
Текущий элемент реплицированного объекта (т.е. тот, по которому в текущий момент проходит итерационный цикл функции сбора статистики) доступен в этих полях как item
В приведенном примере мы будем подсчитывать число
«счастливых» людей, т.е. агентов у которых переменная счастье имеет значение true
Заданную функцию сбора статистики можно будет вызывать, как и любую другую функцию: написав ее имя, после которого должны следовать круглые скобки. То есть, чтобы произвести сбор статистики с помощью заданной выше функции, нужно будет написать people_Сч().
Аналогичным образом добавьте функцию сбора статистики people_Не для
«несчастных» людей.
Рис. 12.2
Для отображения статистических данных можно использовать элементы из палитры
Статистика. Перенесите на презентацию элемент Круговая диаграмма. В свойствах на вкладке Основные нажмите на кнопку Добавить элемент данных и в появившиеся поля введите:

90
• Заголовок:
Несчастливы
• Значение: people.people_Не()
• Цвет на Ваше усмотрение
Добавьте аналогичным образом еще один элемент данных для «счастливых» людей и перейдите на вкладку Внешний вид. Здесь выберите Расположение легенды справа от диаграммы, а Цвет текста: желтый, рис. 12.2.
Запустите модель, изучите ее поведение и выполните необходимые доработки в соответствии с заданием.
12.3. КОНТРОЛЬНЫЕ ЗАДАНИЯ
Для выполнения задания необходимо использовать справочную систему AnyLogic, в частности статьи: Агенты, Дискретное пространство, Среда и д.р.
1. Доработайте модель таким образом, чтобы переезд на другое место для 1-го типа происходил, если соседи справа-сверху и справа-снизу – другие, а для 2-го типа, если соседи слева-сверху и слева-снизу – другие. (5)
2. Доработайте модель таким образом, чтобы порог, сдерживающий людей от переезда на другое место, понижался в зависимости от времени проживания. После переезда порог – высокий, потом постепенно снижается и вынуждает к новому переезду. (5)
3. Доработайте модель таким образом, чтобы производился подсчет, и показывалось число неудовлетворенных агентов без использования функции сбора статистики. (5)
4. Добавьте в модель текстовое поле для выбора агента и флажок. При установленном флажке выбранный агент циклически перемещается на свободную ячейку. (5)
5. С помощью функции сбора статистики постройте временной график среднего времени «проживания» людей на одном месте. (5
)
6. С помощью функции сбора статистики постройте столбиковую диаграмму, показывающую в каждом столбце число агентов с определенным количеством соседей (от 0 до 8). (5
)
7. С помощью функции сбора статистики постройте столбиковую диаграмму, показывающую в каждом столбце число агентов с определенным количеством соседей того же типа (от 0 до 8). (5
)
8. С помощью функции сбора статистики постройте столбиковую диаграмму, показывающую в каждом столбце число агентов с определенным количеством соседей противоположного типа (от 0 до 8). (5
)
9. Доработайте модель таким образом, чтобы в моделировании участвовало 3 типа агентов, и на диаграмме показывалось сколько агентов имеют соседей только своего типа, сколько – одного другого, сколько двух других и сколько всех трех типов. (5)
10. Доработайте модель таким образом, чтобы переезд на другое место происходил, если сосед сверху – другой. (4)
11. Доработайте модель таким образом, чтобы переезд на другое место происходил, если сосед справа-сверху – другой. (4)
12. Добавьте в модель кнопку, при нажатии которой, случайно выбранный агент переедет на другое место. (4)
13. Доработайте модель таким образом, чтобы переезд на другое место происходил, если соседи справа-сверху и слева-сверху – другие. (4)
14. Доработайте модель таким образом, чтобы переезд на другое место происходил, если сосед справа – другой. (4)

91 15. Как установить синхронизацию действий агентов? (3)
16. С помощью функции сбора статистики постройте график зависимости количества
«счастливых» и «несчастных» людей от времени. (3
)
17. Какие преимущества и недостатки дает объявление реплицированных объектов агентами? (3)

92
ЗАДАНИЯ 13-14
ENTERPRISE LIBRARY: МОДЕЛИРОВАНИЕ ТРАНСПОРТНЫХ
СИСТЕМ
ЦЕЛИ ЗАНЯТИЯ
• освоение методов дискретно-событийного моделирования;
• знакомство с библиотекой Enterprise Library;
• построение модели транспортной системы.
ФОРМА ОРГАНИЗАЦИИ ЗАНЯТИЯ
Фронтальная.
СТУДЕНТ ДОЛЖЕН ЗНАТЬ
ƒ
понятия: дискретно-событийная система, параметры объекта;
ƒ
интерфейс программы AnyLogic.
СТУДЕНТ ДОЛЖЕН УМЕТЬ
ƒ
создавать модели в программе AnyLogic,
ОБЕСПЕЧЕННОСТЬ
ƒ
компьютер с установленной программой AnyLogic версии 6,
ƒ
настоящий курс лабораторно-практических работ.
ПРАКТИЧЕСКОЕ ЗАДАНИЕ
О БИБЛИОТЕКЕ ANYLOGIC ENTERPRISE LIBRARY
Библиотека Enterprise Library подерживает дискретно-событийный подход моделирования.
С помощью объектов библиотеки можно моделировать системы реального мира, динамика которых представляется последовательностью операций (прибытие, задержка, разделение и т.п.) над некими сущностями, представляющими клиентов, документы, звонки, пакеты данных, транспортные средства и т.п.
Процессы задаются в форме потоковых диаграмм (блок-схем) в графическом представлении.
Объекты библиотеки Enterprise Library являются «кирпичиками» для построения блок- схемы, моделирующей процессы, происходящие с заявками.
13.1. ПОСТАНОВКА ЗАДАЧИ
Рассмотрим простую систему, предоставляющую собой транспортную развязку, например, перекресток. Через перекресток движутся потоки автомобилей. Для упорядочивания движения служит автоматический светофор или регулировщик. Наиболее типичной целью

93
исследования в подобных задачах является оценка эффективности системы, т.е. нахождение числовых значений характеристик, описывающих качество управления системой. Такими характеристиками могут быть, например, время, требуемое для проезда перекрестка, длина очереди перед светофором и др.
Требуется построить имитационную модель транспортной развязки по индивидуальному заданию и отобразить гистограмму времени её проезда.
13.2. МОДЕЛЬ
Создайте новую модель Дорога на основе шаблона Дискретно-событийное
моделирование. Поставьте галочки напротив выборов:
Добавить гистограмму распределения времени пребывания в системе, Добавить график,
а в
Анимации укажите
3D
. Пункт –
Использовать ресурсы выбирать не нужно.
AnyLogic создаст модель, как показано на рис. 13.1. В верхнем левом углу расположена потоковая диаграмма, состоящая из 4-х элементов: source, queue, delay и
sink
Рассмотрим их подробнее.
Рис. 13.1
Source
– создает заявки, в настраиваемые моменты времени. Объект
Source не разрешает заявкам храниться в буфере выходного порта, если они не могут покинуть объект. Поэтому в случае, когда за объектом source расположен объект, который по той или иной причине не может принять новую заявку, нужно между ними поставить специальный объект буферизации, например, queue

94
Queue
– хранит заявки в определенном порядке. Моделирует очередь заявок, ожидающих приема объектами, следующими за ним в потоковой диаграмме.
Delay
– задерживает заявки на заданный период времени. Время задержки вычисляется динамически, может быть случайным или зависеть от каких-то других условий. Это время может вычисляться как длина фигуры анимации этого объекта, поделенной на "скорость" заявки.
Sink
– уничтожает поступившие заявки. Обычно используется в качестве конечной точки потока заявок.
Запустите модель и посмотрите, как она работает.
13.3. ПЕРЕКРЕСТОК
Автомобили подъезжают к перекрестку в произвольные моменты времени, поэтому объект source также должен создавать заявки в случайные моменты времени. Выделите объект source
, и в строке свойств Заявки прибывают согласно выберите
Времени между прибытиями
. В появившемся поле ввода времени между прибытиями запишите exponential(0.1)
. Функция exponential генерирует реализацию случайной величины с экспоненциальным законом распределения.
Остальные параметры этого объекта пока оставим без изменения.
В свойствах объекта queue следует удалить связь с анимацией: в поле Фигура анимации панели свойств, удалите ссылку на polyline.
Заявки, находящиеся в очереди, анимироваться не будут. Этот объект будет выполнять буферную функцию для предотвращения ошибки в момент, когда source создал заявку, а delay еще не готов ее принять.
В свойствах объекта delay следует сделать следующие изменения:
Задержка задается – укажите:
Как длина пути/скорость
,
Время задержки – исправьте на triangular(5., 10., 15.),
Вместимость – исправьте на
10,
Фигура анимации – исправьте на polyline,
Тип анимации – исправьте на
Путь
Изменим фигуру анимации, вместо человечка пусть будет автомобиль. Откройте палитру
3D Объекты и перенесите мышью объект Автомобиль на диаграмму класса
Main
. Этот элемент получит имя по умолчанию car
. В свойствах объекта source измените поле
Фигура анимации заявки на car и поставьте галочку в поле Разрешить вращение.
При запуске, модель должна выглядеть, как показано на рис. 13.2.
Подъехав к перекрестку, автомобили должны перестроиться в 3 потока для проезда прямо, и поворотов направо и налево. Смоделируем это действие.
Для разделения потока заявок служат объекты selectOutput и selectOutput5
Перенесите из палитры Enterprise Library на диаграмму класса
Main объект

95
selectOutput5 и поместите его между delay и
sink
, предварительно удалив связь между ними.
SelectOutput5 направляет входящие заявки в один из пяти выходных портов в зависимости от выполнения заданных условий. В свойствах этого объекта укажите Вероятность 0, Вероятность 1 и Вероятность 2 – равными
1/3.
, а Вероятность
4 и 5 сделайте равной 0.
Рис. 13.2
Двигаясь в 3 потока, автомобили должны останавливаться перед стоп-линией на красный сигнал светофора. Для моделирования движения с остановкой подходит объект
Conveyor
, который моделирует конвейер, который перемещает заявки по пути заданной длины с заданной скоростью (одинаковой для всех заявок), сохраняя их порядок и оставляя заданные промежутки между ними. Когда заявка достигает конца конвейера, но не может его покинуть, то она там и останется. Если конвейер – накапливающий, то он продолжит двигать заявки, которые имеют достаточно свободного места перед собой.
Перенесите из палитры Enterprise Library на диаграмму класса
Main три объекта conveyor и поместите их между selectOutput5 и
sink
. Так как в объекте selectOutput5 заявки не могут оставаться, а конвейер может оказаться не готовым их принять, нужно между ними добавить буферный объект queue
. Соедините объекты, как показано на рис. 13.3.
Для анимации движения заявок (автомобилей) по конвейеру (зоне остановки перед

96 светофором) нужно нарисовать три ломаных линии и связать их с соответствующим объектом conveyor.
Рис. 13.3
Чтобы не запутаться при построении модели, необходимо в названиях объектов, относящихся к одному потоку придерживаться следующих правил: объекты потока № 1 до разделения по направлениям нумеровать соответствующей цифрой, например: polyline1
,
delay1 и т.д.; объекты этого же потока после разделения по направлениям следует называть так: polyline11
для потока, движущегося через перекресток прямо, polyline1R1
и polyline1L1
для потоков, движущихся через перекресток соответственно направо и налево.
Рис. 13.4
Нарисуйте ломаные и переименуйте все объекты в соответствии с рис. 13.4.
В свойствах объектов conveyor следует сделать следующие изменения:
Длина задается – укажите:
Согласно пути
,
1   2   3   4   5   6   7   8   9   10


написать администратору сайта