Опубликован: 15.02.2013 | Доступ: свободный | Студентов: 256 / 0 | Длительность: 16:52:00
ISBN: 978-5-9556-0146-5
Лекция 4:

Модель функционирования направления связи

< Лекция 3 || Лекция 4: 123 || Лекция 5 >

Модель направления связи в AnyLogic

Поскольку методика построения модели в AnyLogic существенным образом отличается от методики построения в GPSS World, выделим в модели функционирования направления связи следующие сегменты:

  • исходные данные;
  • источники сообщений;
  • буфер, основной и резервный каналы связи;
  • имитатор отказов основного канала;
  • результаты моделирования.

Исходные данные

Для ввода исходных данных используем элементы Параметр и Бегунок. В данной модели мы оставим элемент Бегунок, хотя знаем, что можно обойтись и без него.

  1. Выполните команду Файл/Создать/Модель на панели инструментов.
  2. В поле Имя модели диалогового окна Новая модель введите Направление связи. Выберите каталог, в котором будут сохранены файлы модели. Щелкните кнопку Далее.
  3. На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  4. Полагаем, что все сегменты модели мы сможем разместить так, что они будут видны в ходе работы модели. В Палитре выделите Презентация.
  5. Перетащите элемент Скругленный прямоугольник в нужное место для размещения элементов исходных данных.
  6. Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные.
  7. В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их и дайте имена так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.1.
  8. В Палитре выделите Элементы управления. Перетащите элементы Бегунок на элемент с именем Исходные данные. Разместите их так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.2.
Замечание. В данной модели (а это возможно и в любых других моделях) все идентификаторы на русском языке.
Размещение элементов для ввода исходных данных

Рис. 3.1. Размещение элементов для ввода исходных данных
Таблица 3.1.
Параметр
Имя Тип Значение по умолчанию
интер_сообщ_потока1 double 180
интер_сообщ_потока2 double 240
ёмкость_буфера int 5
время_передачи_осн_кан double 120
время_передачи_рез_кан double 180
время_вкл_рез_кан double 10
время_нараб_отказ_осн_кан double 900
время_восстан_осн_кан double 120
Таблица 3.2.
Бегунок
Связать с Минимальное значение Максимальное значение
интер_сообщ_потока1 1 300
интер_сообщ_потока2 1 300
ёмкость_буфера 1 25
время_передачи_осн_кан 1 200
время_передачи_рез_кан 1 300
время_вкл_рез_кан 0,1 20
время_нараб_отказ_осн_кан 1 2000
время_восстан_осн_кан 1 500

Вывод результатов моделирования

Для вывода результатов моделирования используем элемент Простая переменная.

  1. В Палитре выделите Презентация. Перетащите элемент Скругленный прямоугольник для размещения элементов Простая переменная.
  2. Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Результаты моделирования.
  3. В Палитре выделите Основная. Перетащите элементы Простая переменная. Разместите их и дайте им имена так, как показано на рис. 3.2. Тип всех переменных double, кроме переменной - текущей емкости буфера. Её тип - int.

Построение событийной части модели

В событийную часть модели, к построению которой мы приступаем, включим указанные ранее три сегмента (кроме исходных данных и результатов моделирования).

  1. В Палитре выделите Презентация. Перетащите три элемента Прямоугольник и разместите так, как на рис. 3.3.
  2. Перетащите также три элемента text и на странице Основные панели Свойства в поле Текст: каждого элемента введите названия элементов, показанные на рис. 3.3.
Размещение элементов для вывода результатов моделирования

Рис. 3.2. Размещение элементов для вывода результатов моделирования
Элементы для размещения сегментов событийной части

Рис. 3.3. Элементы для размещения сегментов событийной части
Источники сообщений

Данный сегмент предназначен для имитации поступления сообщений, счета суммарного количества поступающих сообщений на направление связи и по потокам 1 и 2.

  1. В Палитре выделите Enterprise Library.
  2. Перетащите два объекта source на диаграмму класса Main и разместите в прямоугольнике с именем Источники сообщений.
  3. Для записи и хранения параметров сообщений в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Message.
  4. В панели Проект щелкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
  5. Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Message.
  6. В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щелкните кнопку Далее.
  7. Появится вторая страница Мастера создания Java класса. Добавьте следующее поле Java класса, которое потребуется в дальнейшем для разделения переданного направлением потока сообщений на поток 1 и поток 2:
    int numPotok;
  8. Оставьте выбранными флажки Создать конструктор и Создать метод toString().
  9. Щелкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
  10. Выделите последовательно объекты sourсe. На странице Основные панели Свойства установите как в табл. 3.3.
Буфер, основной и резервный каналы

Сегмент предназначен для приёма поступающих сообщений, имитации передачи их, счета переданных и потерянных сообщений, расчета вероятности передачи сообщений.

  1. В Палитре выделите Основная библиотека.
  2. Перетащите на диаграмму класса 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 ++;
  3. Эти объекты вам известны, кроме объекта hold из библиотеки Enterprise Library. Он блокирует/разблокировывает поток заявок на определенном участке блок-схемы. Если объект находится в заблокированном состоянии, то заявки не будут поступать на его входной порт, и будут ждать, пока объект не будет разблокирован. Состоянием объекта можно управлять программно с помощью метода setBlocked(). Блокирует входной порт, если в качестве значения аргумента передано true, и разблокировывает его при передаче аргумента false.
  4. Метод isBlocked() возвращает true, если входной порт заблокирован. Если порт не заблокирован - возвращает false.
    Объекты двух сегментов модели

    Рис. 3.4. Объекты двух сегментов модели
  5. Последовательно выделите объекты и установите им свойства согласно табл. 3.4.
Таблица 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-
вероятность_передачи_сообщ;
< Лекция 3 || Лекция 4: 123 || Лекция 5 >
Алексей Гроссман
Алексей Гроссман

Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио.

Елена Блинаева
Елена Блинаева