Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио. |
Модель функционирования направления связи
Модель направления связи в AnyLogic
Поскольку методика построения модели в AnyLogic существенным образом отличается от методики построения в GPSS World, выделим в модели функционирования направления связи следующие сегменты:
- исходные данные;
- источники сообщений;
- буфер, основной и резервный каналы связи;
- имитатор отказов основного канала;
- результаты моделирования.
Исходные данные
Для ввода исходных данных используем элементы Параметр и Бегунок. В данной модели мы оставим элемент Бегунок, хотя знаем, что можно обойтись и без него.
- Выполните команду Файл/Создать/Модель на панели инструментов.
- В поле Имя модели диалогового окна Новая модель введите Направление связи. Выберите каталог, в котором будут сохранены файлы модели. Щелкните кнопку Далее.
- На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
- Полагаем, что все сегменты модели мы сможем разместить так, что они будут видны в ходе работы модели. В Палитре выделите Презентация.
- Перетащите элемент Скругленный прямоугольник в нужное место для размещения элементов исходных данных.
- Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные.
- В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их и дайте имена так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.1.
- В Палитре выделите Элементы управления. Перетащите элементы Бегунок на элемент с именем Исходные данные. Разместите их так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.2.
Параметр | ||
---|---|---|
Имя | Тип | Значение по умолчанию |
интер_сообщ_потока1 | double | 180 |
интер_сообщ_потока2 | double | 240 |
ёмкость_буфера | int | 5 |
время_передачи_осн_кан | double | 120 |
время_передачи_рез_кан | double | 180 |
время_вкл_рез_кан | double | 10 |
время_нараб_отказ_осн_кан | double | 900 |
время_восстан_осн_кан | double | 120 |
Бегунок | ||
---|---|---|
Связать с | Минимальное значение | Максимальное значение |
интер_сообщ_потока1 | 1 | 300 |
интер_сообщ_потока2 | 1 | 300 |
ёмкость_буфера | 1 | 25 |
время_передачи_осн_кан | 1 | 200 |
время_передачи_рез_кан | 1 | 300 |
время_вкл_рез_кан | 0,1 | 20 |
время_нараб_отказ_осн_кан | 1 | 2000 |
время_восстан_осн_кан | 1 | 500 |
Вывод результатов моделирования
Для вывода результатов моделирования используем элемент Простая переменная.
- В Палитре выделите Презентация. Перетащите элемент Скругленный прямоугольник для размещения элементов Простая переменная.
- Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Результаты моделирования.
- В Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их и дайте им имена так, как показано на рис. 3.2. Тип всех переменных double, кроме переменной - текущей емкости буфера. Её тип - int.
Построение событийной части модели
В событийную часть модели, к построению которой мы приступаем, включим указанные ранее три сегмента (кроме исходных данных и результатов моделирования).
- В Палитре выделите Презентация. Перетащите три элемента Прямоугольник и разместите так, как на рис. 3.3.
- Перетащите также три элемента text и на странице Основные панели Свойства в поле Текст: каждого элемента введите названия элементов, показанные на рис. 3.3.
Источники сообщений
Данный сегмент предназначен для имитации поступления сообщений, счета суммарного количества поступающих сообщений на направление связи и по потокам 1 и 2.
- В Палитре выделите Enterprise Library.
- Перетащите два объекта source на диаграмму класса Main и разместите в прямоугольнике с именем Источники сообщений.
- Для записи и хранения параметров сообщений в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Message.
- В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
- Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Message.
- В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее.
- Появится вторая страница Мастера создания Java класса. Добавьте следующее поле Java класса, которое потребуется в дальнейшем для разделения переданного направлением потока сообщений на поток 1 и поток 2:
int numPotok;
- Оставьте выбранными флажки Создать конструктор и Создать метод toString().
- Щелкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
- Выделите последовательно объекты sourсe. На странице Основные панели Свойства установите как в табл. 3.3.
Буфер, основной и резервный каналы
Сегмент предназначен для приёма поступающих сообщений, имитации передачи их, счета переданных и потерянных сообщений, расчета вероятности передачи сообщений.
- В Палитре выделите Основная библиотека.
- Перетащите на диаграмму класса Main и разместите в прямоугольнике с именем Буфер, основной и резервный каналы объекты, показанные на рис. 3.4. Соедините их между собой, а также с объектами сегмента Источники сообщений.
Таблица 3.3. Свойства объектов source Имя Свойства Значения Поток_1 Отображать имя Установите флажок Класс заявки Message Заявки прибывают согласно Времени между прибытиями Время между прибытиями exponential(1/интер_сообщ_потока1) Количество заявок, прибывающих за один раз 1 Новая заявка new Message() Действие при выходе entity.numPotok = 1; поступило_сообщ_потока1 ++; всего_сообщ_поступило ++; Поток_2 Отображать имя Установите флажок Класс заявки Message Заявки прибывают согласно Времени между прибытиями Время между прибытиями exponential(1/интер_сообщ_потока2) Количество заявок, прибывающих за один раз 1 Новая заявка new Message() Действие при выходе entity.numPotok = 2; поступило_сообщ_потока2 ++; - Эти объекты вам известны, кроме объекта hold из библиотеки Enterprise Library. Он блокирует/разблокировывает поток заявок на определенном участке блок-схемы. Если объект находится в заблокированном состоянии, то заявки не будут поступать на его входной порт, и будут ждать, пока объект не будет разблокирован. Состоянием объекта можно управлять программно с помощью метода setBlocked(). Блокирует входной порт, если в качестве значения аргумента передано true, и разблокировывает его при передаче аргумента false.
- Метод isBlocked() возвращает true, если входной порт заблокирован. Если порт не заблокирован - возвращает false.
- Последовательно выделите объекты и установите им свойства согласно табл. 3.4.
Свойства | Значение |
---|---|
Имя | Буфер |
Отображать имя | Установить флажок |
Класс заявки | Message |
Вместимость | ёмкость_буфера |
Действие при входе | текущая_емкость_буфера++; |
Действие при выходе | текущая_емкость_буфера--; |
Разрешить вытеснение | Установить флажок |
Имя | hold1 |
Отображать имя | Установить флажок |
Класс заявки | Message |
Изначально заблокирован | Установить флажок |
Имя | hold |
Класс заявки | Message |
Имя | потер_сообщ_буфер |
Отображать имя | Установить флажок |
Класс заявки | Message |
Действие при входе | if (entity.numPotok == 1) |
потеряно_сообщ_потока1 ++; | |
if (entity.numPotok == 2) | |
потеряно_сообщ_потока2 ++; | |
всего_потеряно_сообщ ++; | |
Имя | основной_канал |
Отображать имя | Установить флажок |
Класс заявки | Message |
Задержка задается | Явно |
Время задержки | exponential(1/время_передачи_осн_кан) |
Вместимость | 1 |
Включить сбор статистики | Установить флажок |
Имя | резерв_канал |
Отображать имя | Установить флажок |
Класс заявки | Message |
Вместимость | 1 |
Задержка задается | Явно |
Время задержки | exponential(1/время_передачи_рез_кан) |
Вместимость | 1 |
Действие при входе | if (а==0) |
в = время_передачи_рез_кан; | |
if (а==1) | |
{в = время_передачи_рез_кан + | |
время_вкл_рез_кан; | |
а=0;} | |
Действие при выходе | if (hold.isBlocked()== true) |
hold1.setBlocked(false); | |
Включить сбор статистики | Установить флажок |
Имя | sink |
Отображать имя | Установить флажок |
Класс заявки | Message |
Действие при входе | if (entity.numPotok == 1) |
{передано_сообщ_потока1 ++; | |
вероятность_передачи_сообщ_потока1 = передано_сообщ_потока1 /поступило_сообщ_потока1;} | |
if (entity.numPotok == 2) | |
{передано_сообщ_потока2 ++; | |
вероятность_передачи_сообщ_потока2 = передано_сообщ_потока2 /поступило_сообщ_потока2;} | |
всего_передано_сообщ ++; | |
вероятность_передачи_сообщ = | |
всего_передано_сообщ | |
/всего_сообщ_поступило; | |
вероятность_потери_сообщ = 1- | |
вероятность_передачи_сообщ; |