Файл: Практикум Моделирование систем в среде AnyLogic 8.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.02.2024

Просмотров: 369

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Оглавление

Введение

1. Событийное моделирование

1.1. Моделирование колебательного процесса

1.2. Контрольные задания

1.3. Модель «Жизнь»

1.4. Контрольное задание «Фигуры»

1.5. Анимация поведения агента

Контрольные вопросы

2. Реагирующие системы

2.1. Модель светофора для управления движением

2.2. Модель пешеходного перехода

2.3. Контрольное задание “Переход, управляемый пешеходом”

2.4. Контрольное задание “Модель кодового замка”

2.5 Модель трех разрядного счетчика

2.6. Контрольное задание «Запуск события при получении контрольного значения»

Контрольные вопросы

3. Моделирование элементов цифровых систем управления

3.1. Семи сегментный дисплей.

3.2. Модели элементарных логических операций

3.3. Полный сумматор

Контрольные вопросы

4. Системная динамика

4.1. Модель реализации продукта по Бассу

4.2. Контрольное задание «Учет повторных покупок»

4.3. Контрольное задание «Модель распространения эпидемии»

4.4. Взаимодействие активных классов

4.5. Контрольное задание «Визуализация модели динамики численности населения»

Контрольные вопросы

5. Агентное моделирование

5.1. Популяция агентов

5.2. Поведение агентов

5.3. Учет влияния общения между потребителями

Контрольные вопросы

6. Задания для самостоятельной работы

Приложение

Основные сведения о языке программирования Java

Классы Java

Типы данных Java

Присваивание значений в выражениях В общем виде оператор присваивания имеет вид:v=результат_выражения;v – переменная определенного типа.При выполнении присваивания нужно учитывать правила приведения типов. Если тип переменной в левой части и тип результата выражения совместны, то происходит автоматическое преобразование типов. Такое преобразование возможно, если выполнено два условия:два типа совместимы;тип, к которому выполняется приведение, обладает большей разрядностью, чем исходный. При выполнении этих условий говорят расширяющем преобразовании. Например, к типу int (разрядность 32) возможно преобразование типа byte (8 разрядов).В языке Java определены следующие правила расширения:если операнды в выражении относятся к типам byte и short то они автоматически расширяются до типа int перед проведением вычислений; если один операнд имеет тип long, тип целого выражения расширяется до long; если один операнд – типа float, то тип всего вы­ражения расширяется до float;если тип любого из операндов – double, то тип результата – также double.Результат деления целых чисел дает вещественное значение.При преобразовании переменных несовместимых типов используется явное приведение типов:v=(type) результат_выражения;Где: type тип переменной в левой части оператора присваивания.Преобразование такого типа бывает:Сужающим – когда выполняется приведение от типа с большей разрядностью к типу с меньшей разрядностью.Усеченным – когда вещественный тип преобразуется к целому при этом дробная часть числа отбрасывается. Операции Java Основные арифметические операции сведены в таблицу 2.Таблица 2 Арифметические операции Операция Назначение + Сложение - Вычитание * Умножение / Деление % Получение остатка от деления ++ Инкремент += Присваивание со сложением -= Присваивание с вычитанием *= Присваивание с умножением /= Присваивание с делением %= Присваивание с модулем(остаток от деления) -- Декремент Кроме арифметических операций в языке Java определены битовые – поразрядные операции. Они применимы к переменным типа long, int, byte, char, short (см. таблицу 3).Таблица 3. Поразрядные операции Операция Назначение Отрицание & Конъюнкция (И) | Дизъюнкция (ИЛИ) ^ Исключающее ИЛИ >> Правый сдвиг >>> Сдвиг в право с заполнением старшего бита нулем << Левый сдвиг &= Присваивание И |= Присваивание ИЛИ ^= Присваивание с исключающим ИЛИ >>= Присваивание с правым сдвигом >>>= Присваивание со сдвигом вправо, старший бит заполняется нулем <<= Присваивание со сдвигом влево При составлении условий используются логические операции из таблицы 4.Таблица 4Операции отношения Операция Назначение == Сравнение != Не равно > Больше < Меньше >= Больше, либо равно <= Меньше, либо равно Результат логической операции – значение типа boolean. Результаты выполнения логических операций можно использовать в логических выражениях. Такие выражения составляют с помощью булевых операций таблицы 5.Таблица 5Булевы операции Операция Назначение ! Отрицание && Логическая операция И || Логическая операция ИЛИ ^ Логическая операция исключающее ИЛИ 1   ...   11   12   13   14   15   16   17   18   19

Приоритет в выражениях Операции в выражениях выполняются в соответствии с определенным приоритетом таблицы 6.Таблица 6 Приоритеты Приоритет Операции 1 ++,--,,! 2 *,/,% 3 +,- 4 >>,>>>,<< 5 >,>=,<,<= 6 ==,!= 7 & 8 ^ 9 | 10 && 11 || Для изменения приоритета в выражениях используются круглые скобки. Управляющие операторы Условный оператор.if (условие) {//Операторы при условии = true}else {//Операторы при условии = false}условие – логическое выражение. Допускается не использовать ветку else «иначе». Многозвенный оператор ветвления.if(условие){}else if (условие1) {}else if (условие2) {}else {}Операторы if выполняются последовательно сверху вниз. Как только одно из условий становится равным true, то выполняется оператор, связанный с этим if, а остальные проверки условий пропускаются. Если ни одно из условий не даст значение true, то будет выполнен последний оператор else. Заключительная часть else действует как условие по умолчанию, если все другие условные проверки не успешны. Оператор селектор.switch (условие) {case значение_1:{//операторыbreak}case значение_2:{//операторыbreak}…Default:{//операторы}}Здесь условие – селектор переменная или выражение, которое должно возвращать значение типа byte, int, short, char. Выполняется та часть блока case, где значение совпадет с селектором, оператор break, завершает работу оператора switch. Если совпадений нет, то выполняются операторы блока default. Этот блок может отсутствовать.Оператор цикла while:while (условие) {//операторы}Выполняется до тех пор, пока условие равно true.Оператор цикла do while.do {//операторы}while (условие);Такой цикл выполняется всегда один раз.Цикл типа for.for (exp1;exp2;exp3){//операторы}Используется для выполнения тела цикла определенное число раз.Где:exp1 – начальное значение счетчика цикла;exp2 – условие выхода из циклы;exp3 – выражение для изменения счетчика цикла.Для управления работой циклов используются операторы: break и continue.Первый оператор позволяет прервать работу цикла. Для передачи управления на заданный оператор используется формат оператора с меткой break метка_оператора; Метка оператора должна заканчиваться двоеточием. Второй оператор служит для перехода к следующему шагу – итерации цикла. Все операторы лежащие «ниже» его в теле цикла пропускаются. В циклах while и do while выполнение оператора приводит к передаче управления условию, а в цикле for выражению, которое изменяет счетчик цикла. Оператор может быть использован с меткой. Метка должна помечать оператор цикла, которому передается управление. Такая форма используется при создании вложенных циклов.Оператор break используется также для завершения работы оператора ветвления с передачей управления на определенный помеченный оператор.Оператор return. Оператор используется для принудительного завершения работы метода класса. Если метод возвращает значение, то оператор должен содержать аргумент, тип которого совпадает с типом возвращаемого значения: return аргумент; В языке Java нет оператора goto.1   ...   11   12   13   14   15   16   17   18   19

Массивы и их задание

Обработка строк

Класс Math. Математические функции

Обработка исключительных ситуаций

Цвет и его кодирование

Элементы управления и фигуры презентации

Текстовое поле

Элемент слайдер

Командная кнопка

Элемент «Текст»

Элемент «Прямоугольник»

Ординарные события AnyLogic

Динамические события AnyLogic

Список литературы

1.4. Контрольное задание «Фигуры»


Дополните модель двумя кнопками с пиктограммами, для начала моделирования с фигур, показанных на рисунке 1.35.

Вариант а

Вариант б





Рис. 1.35. Фигуры начального состояния решетки

1.5. Анимация поведения агента


Поведение агента в процессе моделирования можно визуально представить с помощью визуального компонента «Изображение». Этот компонент находиться в палитре «Презентация».

Создадим модель таймера. Таймер должен позволять задавать заданный интервал в секундах. Агент таймер показан на рисунке 1.36.



Рис. 1.36. Интерфейс агента

С помощью ползунка задается заданный интервал работы таймера. Это значение отображается в текстовом поле рядом с ползунком. При нажатии кнопки «>» таймер начинает свою работу. Текущее время будет отображаться в верхнем дисплее.

Что создать модель таймера нужно создать новую модель ModelTimerPicture. Модельное время – секунды. Затем следует создать агент – таймер. Вызовите контекстное меню модели «Создать» (рисунок 1.37).



Рис. 1.37. Создание агента

С помощью команды «Тип агента» создайте нового агента TimerSec (рисунок 1.38). В окне задания имени агенту нажмите кнопку «Готово»



Рис. 1.38. Задание имени агенту

В результате в составе модели появится новый агент TimerSec (рисунок 1.39) . Откройте поле – презентацию этого агента.



Рис. 1.39. Новый агент в составе модели

Создайте интерфейс агента в соответствии с рисунком 1.40. На рисунке показаны визуальные компоненты, из которых создан интерфейс агента. Для удобства размещения элементов рекомендуется предварительно отключить привязку визуальных компонентов к разметочной сетки поля презентации агента. Для этого используйте команду
«Включить/Отключить сектку» из панели инструментов окна программы. Интефейс создается из компонентов разных палитр (таблица 1.1).


Рис. 1.40. Интерфейс агента; 1 ­– «Бегунок»; 2 – «Кнопка»; 3 – «Текст», 4 – «Прямоугольник»; 5,6 – «Изображение»

Таблица 1.1

Компоненты, палитра

Компонент

Палитра

Бегунок

Элементы управления

Кнопка

Элементы управления

Текст

Презентация

Прямоугольник

Презентация

Изображение

Презентация

При размещении прямоугольника нужно задать свойство компонента «Цвет заливки» как «Нет цвета». Порядок размещения наложенных элеметнов друг на друга можно менять с помощью команды (Переместить) панели инсрументов меню программы.

Настройка текстового элемента показана на рисунке 1.41. Компоненту присвойте имя textSetTime.



Рис. 1.41. Настройка элемента «Текст»; значение по умолчанию 00

Кнопке задайте метку «>».

Что бы агент отображал текущее время нужно в папку модели скопировать набор файлов модели отображающих десятичные цифры от 0 до 9. Затем следует задать имя компонентам «Изображение». Левый элемент imageL, правый элемент imageR. Затем следует открыть эти элементы и разместить в них коллекцию изображений цифр с посощью кнопки «Добавить» (рисунок 1.42).



Рис. 1.42. Размещение изображений цифр; размещено две цифры

В неотображаемой области агента нужно разместить три элемента, показанные на рисунке 1.43.



Рис. 1.43. Элементы агента

Элемент event – «Событие». Событие используется для выполнения кода, управляющего отображением цифр в дисплее агента.



Выполнение события планируется программным способом, рисунок 1.44. Период исполнения события равен одной секунде. Параметр целого типа paramTime. Значение параметра по умолчанию равно нулю. Этот параметр содержит интервал времени, на который будет настроен таймер. Изменяется значение параметра при выполнении события (рисунок 1.45).



Рис. 1.44. Событие



Рис. 1.45. Изменение параметра таймера

Что бы можно было задать интервал работы таймера, нужно с параметром связать бегунок, задав его настройки в соответствии с рисунком 1.46.

В поле «Действие» бегунка нужно разместить код textSetTime.setText(value); для отображения выбранного интервала в текстовом элементе.


Рис. 1.46. Настройка таймера

Что бы таймер начал свою работу в соответствии с выбранным интервалом в свойство «Действие» кнопки нужно задать код запуска события event.restart();

Функция funDispTime. Функция не возвращает значения и не имеет формальных параметров. Она содержит код управляющий отображением цифр в компонентах «Изображение» (рисунок 1.47).



Рис. 1.47. Код отображения цифр

Отображаемое число хранится в параметре paramTime. В зависимости от значения этого параметра выполняется обращение к определенному компоненту «Изображение».

Компонент «Изображение» при работе модели будет отображать ту картинку, которая является в данный момент текущей, т.е. стоит в коллекции изображений на первом месте. Для смены текущего изображения используется метод void setIndex(int idx) компонента. Здесь idx номер изображения в коллекции, которое нужно показать визуально. Следует иметь в виду, что изображения в коллекции индексируются начиная с нуля.

Если параметр содержит значение в интервале от 0 до 10, то левый компонент отображает ноль, а правый цифру. Если параметр содержит число кратное десяти, следует выделить из значения параметра цифру старшего разряда путем его деления на 10. Левый компонент будет отображать эту цифру, а правый ноль.


В остальных случаях нужно выделить из двухзначного целого числа старший и младший разряды и установить изображение цифры в компонентах «Изображение». Для выделения старшего разряда значение параметра нужно разделить на 10, а для выделения младшего разряда нужно вычислить остаток от деления значения на 10.



Рис. 1.48. Получение экземпляра агента

Далее следует настроить элементы интерфейса таким образом, что бы они визуально были связаны с экземпляром агента. У всех компонентов интерфейса должно быть активно свойство «Значок» (рисунок 1.40). У управляющих компонентов это свойство находится внутри раздела «Специфические».

Откройте презентацию агента Main. Переместите в поле агента с помощью мыши агент TimerSec, рисунок 1.48. В результате будет получен экземпляр агента таймера. У полученного экземпляра отключите показа имени, свойство «Отображать имя».


Рис. 1.49. Модель в работе, таймер установлен на 30 секунд, прошло 16 секунд

Выполните предварительную компиляцию модели с помощью инструмента меню программы (Построить модель). Если ошибок в модели нет, то выполните ее запуск (рисунок 1.49).

Контрольные вопросы


  1. Какую структуру имеет модель AnyLogic?

  2. Какими основными свойствами обладает простая переменная?

  3. Для чего используются параметры в моделях AnyLogic?

  4. Что такое область просмотра?

  5. Как выполняется управление программным кодом областями просмотра?

  6. Дайте классификацию событий AnyLogic.

  7. Дайте развернутую классификацию событий происходящих по таймауту.

  8. Как выполняется настройка простых событий модели?

  9. Какие методы системного класса Event используются для программного управления событиями.

  10. Чем отличается простое событие от динамического события?

  11. Как выполняется планирование и обслуживание динамических событий?

  12. Как выполняется настройка простого эксперимента AnyLogic?

  13. Что такое агент модели и какова его структура?

  14. Как выполняется обслуживание программным кодом текстового поля?

  15. Как программируется доступ к статическому тексту?

  16. Как используется и обслуживается программным кодом элемент слайдер?

  17. Как выполняется обслуживание программным кодом командных кнопок?

2. Реагирующие системы

2.1. Модель светофора для управления движением


Требуется разработать конечный автомат, который моделирует работу светофора, управляющего движением автотранспорта.

Чтобы построить конечный автомат, нужно создать стейтчарт AnyLogic с помощью инструментов палитры «Диаграмма состояний» (рисунок 2.1). Либо использовать палитру «Агент», секция «Диаграмма состояния».



Рис. 2.1. Инструменты для создания диаграммы состояний

Для создания диаграммы нужно использовать три основных инструмента:

«Начало диаграммы состояний» - отмечает начальную точку обработки стейтчарта.

«Состояние» - задает состояние диаграммы.

«Переход» - используется для соединения состояний.

«Указатель начального состояния» - служит для отметки состояния