Концептуальное проектирование систем в AnyLogic и GPSS World

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

Разбить на страницы
Показывать лекцию целиком

Постановка задачи

Направление связи состоит из двух каналов (основного и резервного) и общего входного буфера емкостью на Еmk сообщений.

На направление поступают два потока сообщений с экспоненциально распределенными интервалами времени, средние значения которых Т1 = 3 мин и Т2 = 4 мин. При нормальной работе сообщения передаются по основному каналу. Время передачи одного сообщения распределено по экспоненциальному закону со средним значением Т3 = 2 мин.

В основном канале происходят сбои через интервалы времени, распределенные по экспоненциальному закону со средним значением Т4 = 15 мин. Если сбой происходит во время передачи, то сообщение теряется. За время Т5 = 5 с запускается резервный канал, который передает сообщения, начиная с очередного. Время передачи одного сообщения распределено по экспоненциальному закону со средним значением Т6 = 3 мин.

Основной канал восстанавливается. Время восстановления канала подчинено экспоненциальному закону со средним значением Т7 = 2 мин. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения.

Необходимо разработать имитационную модель и провести исследование функционирования направления связи в течение 2 ч.

Определить:

  • рациональную емкость накопителя;
  • загрузку основного и резервного каналов связи;
  • вероятности передачи сообщений потока 1 и потока 2;
  • вероятность передачи сообщений направлением связи в целом.
  • Модель направления связи в GPSS World

    В модели сообщения следует представлять транзактами, основной и резервный канал - одноканальными устройствами (ОКУ), входной буфер (накопитель) - списком пользователя. В списке пользователя следует использовать дисциплину обслуживания FIFO.

    Для ввода исходных данных целесообразно использовать переменные пользователя. В этом случае можно проводить при необходимости встроенными средствами GPSS World дисперсионный и оптимизирующий эксперименты.

    Так как сообщения имеют одинаковые приоритеты, то для моделирования ОКУ нужно использовать блоки SEIZE и RELEASE. Моделирование отказов основного канала нужно произвести блоками FUNAVAIL и FAVAIL, а не блоками PREEMPT и RETURN в режиме абсолютного захвата. Тогда статистика ОКУ не будет искажена.

    Введем масштабирование: 1 единица модельного времени соответствует 1 с, то есть, например, время моделирования равно 2 часам, тогда 2*60*60 = 7200 единиц модельного времени. Аналогично Т1 = 120, Т2 = 240 и т.д.

    Декомпозиция системы и состав сегментов модели определяются разработчиком. Введем следующие сегменты:

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

    ; Модель функционирования направления связи
    ;Задание исходных данных
    Emk    EQU  5    ; Емкость накопителя
    VrMod  EQU  7200  ; Время моделирования
    T1      EQU  180  ; Среднее время поступления сообщений потока 1
    T2      EQU  240  ; Среднее время поступления сообщений потока 2
    T3      EQU  120  ; Среднее время передачи по OsnK
    T4      EQU  900  ; Средний интервал времени выхода из строя OsnK
    T5      EQU  10    ; Время включения Resk
    T6      EQU  180  ; Среднее время передачи по ResK
    T7      EQU  120  ; Среднее время восстановления OsnK
    ; Описание арифметических выражений
    ;  Вероятность передачи сообщений потока 1
    Ver1    VARIABLE  (N$Term1+N$Term3)/N$Soob1
    ;  Вероятность передачи сообщений потока 2
    Ver2    VARIABLE  (N$Term2+N$Term4)/N$Soob2
    ;  Вероятность передачи сообщений потоков 1 и 2
    Ver    VARIABLE  (V$Ver1+V$Ver2)/2
    ; Сегмент имитации сообщений потока 1
    GENERATE  (Exponential(12,0,T1))    ; Генератор сообщений потока 1
    Soob1  ASSIGN  1,1  ; Код 1 в P1 - сообщения потока 1
    TRANSFER  ,Nakop    ; Направить на OsnK
    ; Сегмент имитации сообщений потока 2
    GENERATE  (Exponential(15,0,T2))  ; Генератор
    сообщений потока 2
    Soob2  ASSIGN  1,2  ; Код 2 в P1 - сообщения потока 2
    ; Сегмент имитации работы накопителя и OsnK
    Nakop  GATE FV   OsnK,KRes    ;Доступен ли OsnK? Если нет, на Resk
    GATE NU   OsnK,Spis    ;Свободен ли OsnK? Если
    нет, в накопитель
    Prov3  SEIZE    OsnK      ; Занять OsnK
    ADVANCE  (Exponential(11,0,T3))  ; Обслуживание
    RELEASE    OsnK      ; Освободить OsnK
    UNLINK  Nak,Prov3,1  ; Вывод из накопителя 
    одного транзакта на OsnK
    TEST E  P1,1,Term2  ; Сообщение потока 1 или 
    потока 2 передано по OsnK?
    Term1  TERMINATE      ; Счет переданных сообщений потока 1 по OsnK
    Term2  TERMINATE      ; Счет переданных сообщений потока 2 по OsnK
    ;  Список пользователя Nak
    Spis    TEST L  CH$Nak,Emk,Term7  ; Есть ли место в накопителе?
    LINK    Nak,FIFO    ;Если да, поместить
    сообщение в накопитель
    Term7  TEST E   P1,1,Term6  ; Сообщение потока 1 или потока 2 было потеряно?
    Term5  TERMINATE  ; Счет потерянных сообщений потока 1
    Term6  TERMINATE  ; Счет потерянных сообщений потока 2
    ; Сегмент имитации работы Resk
    KRes    GATE NU  ResK,Spis  ; Свободен ли Resk? Нет, сообщение в накопитель
          TEST E    Kont,1,Prov1  ; Включить ResK
    ADVANCE    T5      ; Включение Resk
    SAVEVALUE  Kont,0  
    Prov1  SEIZE    ResK    ; Занять Resk
    ADVANCE  (Exponential(12,0,T6)); Передача
    RELEASE    ResK    ; Освободить Resk
    GATE FNV  OsnK,Prov2  ; Доступен ли OsnK?
    UNLINK  Nak,Prov1,1    ; Если нет, из буфера
    сообщение на Resk
    Prov2  TEST E  P1,1,Term4  ; Сообщение потока 1 или 2 передано по ResK?
    Term3  TERMINATE  ; Счет переданных сообщений потока 1
    Term4  TERMINATE  ; Счет переданных сообщений потока 2
    ; Сегмент имитации выхода из строя OsnK
          GENERATE  ,,,1
    Term8  ADVANCE    (Exponential(12,0,T4)); Расчет времени до следующего отказа
          FUNAVAIL  OsnK      ; Выход из строя OsnK
          SAVEVALUE  Kont,1
    ASSIGN    1,(Exponential(12,0,T7)); Расчет
    времени восстановления OsnK
    ADVANCE    P1    ; Имитация восстановления OsnK
    SAVEVALUE  VrOtk+,P1    ; Учет времени восстановления OsnK
    FAVAIL  OsnK    ; OsnK в доступное состояние
    UNLINK  Nak,Prov3,1  ; Сообщение на OsnK
          TRANSFER  ,Term8
    ; Сегмент задания времени моделирования
    ; и вычисления результатов моделирования
          GENERATE  VrMod
          TEST L  X$Prog,TG1,Met3
          SAVEVALUE  Prog,TG1
    Met3    TEST E  TG1,1,Met4  
    SAVEVALUE  Ver1,V$Ver1    ; Вероятность передачи
    сообщений потока 1
          SAVEVALUE  Ver2,V$Ver2    ; Вероятность передачи сообщений потока 2
          SAVEVALUE  Ver,V$Ver      ; Вероятность передачи сообщений направлением связи
          SAVEVALUE  VOtk,(1-V$Ver)    ; Вероятность отказа в передаче сообщений
          SAVEVALUE  VerOtk,((AC1-X$VrOtk)/AC1)  ; Вероятность безотказной работы OsnK
    Met4    TERMINATE  1
          START  10000

    Для определения вероятности безотказной работы суммируется в ячейке X$VrOtk время отказов направления связи, которое затем вычитается из абсолютного модельного времени AC1, а полученная разность делится на AC1.

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

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

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

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

  • Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Направление связи. Выберите каталог, в котором будут сохранены файлы модели. Щелкните кнопку Далее.
  • На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  • Полагаем, что все сегменты модели мы сможем разместить так, что они будут видны в ходе работы модели. В Палитре выделите Презентация.
  • Перетащите элемент Скругленный прямоугольник в нужное место для размещения элементов исходных данных.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их и дайте имена так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.1.
  • В Палитре выделите Элементы управления. Перетащите элементы Бегунок на элемент с именем Исходные данные. Разместите их так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.2.
  • Замечание. В данной модели (а это возможно и в любых других моделях) все идентификаторы на русском языке. (рис 3.1) Размещение элементов для ввода исходных данных
    Параметр
    Имя Тип Значение по умолчанию
    интер_сообщ_потока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.
  • (рис 3.2) Размещение элементов для вывода результатов моделирования (рис 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. Соедините их между собой, а также с объектами сегмента Источники сообщений.
    Свойства объектов 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) Объекты двух сегментов модели
  • Последовательно выделите объекты и установите им свойства согласно табл. 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.5. Идея его работы заключается в следующем. Генератор вырабатывает одну заявку, и становится неактивным. Заявка поступает на объект задержки, разыгрывающий время до очередного отказа. После этого заявка поступает на второй объект задержки, имитирующий время восстановления основного канала.

    C выхода второго объекта задержки заявка поступает опять на вход первого объекта задержки. Процесс имитации отказов повторяется в цикле.

    Аналогичным образом построен сегмент имитации отказов основного канала и в GPSS-модели (см. п. 3.2).

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

    Постройте сегмент имитации отказов основного канала связи.

  • Перетащите из библиотеки объекты, соедините их как на рис. 3.5.
  • Последовательно выделите и установите свойства объектов согласно табл. 3.5.
  • (рис 3.5) Сегмент имитации отказов основного канала связи
    Свойства Значение
    Имя source
    Отображать имя Установить флажок
    Класс заявки Entity
    Заявки прибывают согласно Интенсивности
    Интенсивность прибытия 1
    Ограниченное количество прибытий Установить флажок
    Количество заявок, прибывающих за один раз 1
    Имя розыгрыш_инт_до_отказа
    Отображать имя Установить флажок
    Класс заявки Entity
    Задержка задается Явно
    Время задержки exponential
    (1/время_нараб_отказ_осн_кан)
    Вместимость 1
    Действие при выходе hold.setBlocked(true);
    if (основной_канал.size()!=0)
    {основной_канал.remove((Message)
    основной_канал.get(0));
    всего_потеряно_сообщ ++;}
    hold1.setBlocked(false);
    а=1;
    Включить сбор статистики Установить флажок
    Имя имитация_восст_осн_кан
    Класс заявки Entity
    Задержка задается Явно
    Время задержки exponential
    (1/время_восстан_осн_кан )
    Вместимость 1
    Действие при выходе hold.setBlocked(false);
    hold1.setBlocked(true);
    Включить сбор статистики Установить флажок

    Обратим внимание на переменные а и в, предназначенные для организации включения резервного канала таким образом, чтобы время на включение учитывалось только при поступлении первого сообщения на резервный канал. При последующих поступлениях это время не учитывается. И это каждый раз повторяется при выходе из строя основного канала, так как после восстановления основного канала резервный канал выключается. Резервный канал выключается, но передача сообщения по нему, если это было в момент включения в работу основного канала, продолжается. Таким образом, какое-то время каналы работают параллельно. Потерь сообщений при выключении резервного канала нет.

    Также организовано и в GPSS-модели, но для этого использована сохраняемая ячейка Kont (см. п. 3.2).

    В модели AnyLogic после занятия сообщением резервного канала элемент hold1 блокируется. Может быть так, что в процессе передачи сообщения резервным каналом возобновит работу основной канал, то есть элемент hold будет разблокирован, и сообщения пойдут на основной канал. Чтобы такая ситуация учитывалась и в GPSS-модели, в нее добавлена команда

    UNLINK  Nak,Prov3,1

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

    Интерпретация результатов моделирования

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

  • Из палитры Основная перетащите три элемента Простая переменная на диаграмму класса Main в скруглённый прямоугольник с именем Результаты моделирования.
  • Разместите их в один столбец с простыми переменными вероятность_потери_сообщ, коэф_использ_осн_кан (см. рис. 3.2).
  • Выделите первый элемент Простая переменная. В поле имя введите коэф_использ_осн_кан. Оставьте тип double.
  • Выделите второй элемент. В поле имя введите коэф_использ_резерв_кан. Оставьте тип double.
  • Выделите третий элемент. В поле имя введите коэф_использ_резерв_кан. Оставьте тип double.
  • Выделите второй элемент Параметр. В поле имя введите коэф_безотк_раб_осн_кан. Оставьте тип double.
  • Выделите объект основной_канал. В поле Действие при выходе введите код:
    коэф_использ_осн_кан=
    основной_канал.statsUtilization.mean()
  • Выделите объект резерв_канал. В поле Действие при выходе к имеющемуся там коду добавьте внизу строку:
    коэф_использ_резерв_кан=
    резерв_канал.statsUtilization.mean()
  • Выделите объект имитация_восст_осн_кан. В поле Действие при выходе к имеющемуся там коду добавьте строку:
    коэф_безотк_раб_осн_кан=
    1-имитация_восст_осн_кан.statsUtilization.mean()
  • Во всех объектах установите флажок Сбор статистики.
  • Теперь вы сможете снимать значения этих коэффициентов, не отыскивая каждый раз нужные объекты и не используя при этом окна инспекта. Проведите моделирование в GPSS World и AnyLogic и сравните полученные результаты. Результаты наших экспериментов приведены в табл. 3.6.

    Всего выполнено 8 экспериментов. Здесь, напомним, как и в главе 2, первый эксперимент соответствует постановке задачи. В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте увеличена ёмкость входного буфера с 5 до 10 сообщений, а остальные параметры остались неизменными (табл. 3.6).

    Для получения результатов моделирования с точностью $$\varepsilon=0,01$$ и доверительной вероятностью $$\alpha=0,95$$ в GPSS World необходимо выполнить 9604 прогонов модели. В каждом эксперименте выполнялось 10 000 прогонов.

    Время моделирования в AnyLogic было увеличено в 10 000 раз и составляло 72 000 000 единиц модельного времени. Следует заметить, что если в GPSS World выполнить с этим же модельным временем один прогон, то результаты получаются такими же, что и при 10 000 прогонов модели.

    Согласно данным табл. 3.6 в первых трёх экспериментах вероятность передачи сообщений отличается на 0,015 … 0,022. В следующих пяти экспериментах вероятности передачи сообщений, полученные в GPSS World и AnyLogic, отличаются на 0,002 … 0,006, то есть на порядок меньше. Причём во всех экспериментах это отличие в большую сторону в AnyLogic-модели на $$\Delta_1…\Delta_8$$.

    Показатели функционирования направления связи
    ПоказателиGPSS WorldAnyLogic
    1) объем_буфера = 5
    вероятность_передачи_сообщ0,7520,773
    вероятность_передачи_сообщ_потока10,7520,772
    вероятность_передачи_сообщ_потока20,7530,773
    $$\Delta_1$$ вероятности_передачи_сообщ $$\Delta_1=0,022$$
    вероятность_потери_сообщ0,2480,227
    коэф_использ_осн_кан0,7770,757
    коэф_использ_рез_кан0,1520,222
    сум_коэф_использ_кан0,9290,979
    2) объем_буфера = 10
    вероятность_передачи_сообщ0,8290,861
    вероятность_передачи_сообщ_потока10,8290,861
    вероятность_передачи_сообщ_потока20,8290,862
    $$\Delta_2$$ вероятности_передачи_сообщ $$\Delta_2=0,032$$
    вероятность_потери_сообщ0,1710,139
    коэф_использ_осн_кан0,8610,841
    коэф_использ_рез_кан0,1570,25
    сум_коэф_использ_кан1,0181,091
    3) интер_сообщ_потока1 = 90, интер_сообщ_потока2 = 120
    вероятность_передачи_сообщ0,4380,454
    вероятность_передачи_сообщ_потока10,4380,454
    вероятность_передачи_сообщ_потока20,4380,453
    $$\Delta_3$$ вероятности_передачи_сообщ $$\Delta_3=0,015$$
    вероятность_потери_сообщ0,5620,546
    коэф_использ_осн_кан0,8820,882
    коэф_использ_рез_кан0,2090,266
    сум_коэф_использ_кан1,0911,148
    4) время_передачи_осн_кан = 60, время_нараб_отказ_осн_кан = 5000
    вероятность_передачи_сообщ0,8440,848
    вероятность_передачи_сообщ_потока10,8440,848
    вероятность_передачи_сообщ_потока20,8450,848
    $$\Delta_4$$ вероятности_передачи_сообщ $$\Delta_4=0,004$$
    вероятность_потери_сообщ0,1560,152
    коэф_использ_осн_кан0,9710,97
    коэф_использ_рез_кан0,0430,058
    сум_коэф_использ_кан1,0141,028
    5) время_передачи_рез_кан = 90, время_восстан_осн_кан = 60
    вероятность_передачи_сообщ0,8510,857
    вероятность_передачи_сообщ_потока10,8510,857
    вероятность_передачи_сообщ_потока20,8510,857
    $$\Delta_5$$ вероятности_передачи_сообщ $$\Delta_1=0,006$$
    вероятность_потери_сообщ0,1490,143
    коэф_использ_осн_кан0,9820,98
    коэф_использ_рез_кан0,0170,029
    сум_коэф_использ_кан0,9991,009
    6) интер_сообщ_потока1 = 45, интер_сообщ_потока2 = 60
    вероятность_передачи_сообщ0,430,432
    вероятность_передачи_сообщ_потока10,4310,432
    вероятность_передачи_сообщ_потока20,4290,431
    $$\Delta_6$$ вероятности_передачи_сообщ $$\Delta_2=0,002$$
    вероятность_потери_сообщ0,570,568
    коэф_использ_осн_кан0,9880,988
    коэф_использ_рез_кан0,0240,029
    сум_коэф_использ_кан1,0121,017
    7) время_передачи_осн_кан = 30, время_передачи_рез_кан = 45
    вероятность_передачи_сообщ0,850,853
    вероятность_передачи_сообщ_потока10,8510,853
    вероятность_передачи_сообщ_потока20,850,853
    $$\Delta_7$$ вероятности_передачи_сообщ $$\Delta_3=0,003$$
    вероятность_потери_сообщ0,150,147
    коэф_использ_осн_кан0,9820,982
    коэф_использ_рез_кан0,0150,021
    сум_коэф_использ_кан0,9971,003
    8) время_вкл_рез_кан = 1, время_восстан_осн_кан = 30
    вероятность_передачи_сообщ0,8510,855
    вероятность_передачи_сообщ_потока10,8510,855
    вероятность_передачи_сообщ_потока20,8510,855
    $$\Delta_8$$ вероятности_передачи_сообщ $$\Delta_4=0,004$$
    вероятность_потери_сообщ0,1490,145
    коэф_использ_осн_кан0,9880,987
    коэф_использ_рез_кан0,0080,015
    сум_коэф_использ_кан0,9961,002

    Коэффициенты использования основного канала в первых двух экспериментах в GPSS World-модели отличаются в большую сторону на 0,02, а в остальных - на 0,0 … 0,002.

    Коэффициент использования резервного канала и в целом суммарный коэффициент использования обоих каналов больше в AnyLogic-модели на 0,005 … 0,093 и 0,006 … 0,073 соответственно. Тем не менее, как видно, превышение вероятности передачи сообщений у AnyLogic-модели примерно в два раза ниже, чем превышение суммарного коэффициента использования обоих каналов.

    По результатам экспериментов можно сделать вывод о чувствительности модели к изменению параметров направления связи. Например, при увеличении ёмкости входного буфера с 5 до 10 сообщений вероятность передачи возрастает с 0,752 (0,772) до 0,829 (0,861).Уменьшение интервалов (увеличение интенсивности) поступления сообщений потоков 1 и 2 в два раза (90 и 120) снижает вероятности передачи сообщений с 0,829 (0,861) до 0,438 (0,434). В тоже время повышение скорости передачи основного канала в два раза (60) и увеличение не менее чем в 5 раз времени наработки на отказ основного канала приводит к возрастанию вероятностей передачи сообщений с 0,438 (0,434) до 0,844 (0,848).

    Машинное время выполнения модели в обеих системах практически одинаковое и составляет 5…7 сек (в AnyLogic в виртуальном режиме).

    Страницы:

    Постановка задачи

    Направление связи состоит из двух каналов (основного и резервного) и общего входного буфера емкостью на Еmk сообщений.

    На направление поступают два потока сообщений с экспоненциально распределенными интервалами времени, средние значения которых Т1 = 3 мин и Т2 = 4 мин. При нормальной работе сообщения передаются по основному каналу. Время передачи одного сообщения распределено по экспоненциальному закону со средним значением Т3 = 2 мин.

    В основном канале происходят сбои через интервалы времени, распределенные по экспоненциальному закону со средним значением Т4 = 15 мин. Если сбой происходит во время передачи, то сообщение теряется. За время Т5 = 5 с запускается резервный канал, который передает сообщения, начиная с очередного. Время передачи одного сообщения распределено по экспоненциальному закону со средним значением Т6 = 3 мин.

    Основной канал восстанавливается. Время восстановления канала подчинено экспоненциальному закону со средним значением Т7 = 2 мин. После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения.

    Необходимо разработать имитационную модель и провести исследование функционирования направления связи в течение 2 ч.

    Определить:

  • рациональную емкость накопителя;
  • загрузку основного и резервного каналов связи;
  • вероятности передачи сообщений потока 1 и потока 2;
  • вероятность передачи сообщений направлением связи в целом.
  • Модель направления связи в GPSS World

    В модели сообщения следует представлять транзактами, основной и резервный канал - одноканальными устройствами (ОКУ), входной буфер (накопитель) - списком пользователя. В списке пользователя следует использовать дисциплину обслуживания FIFO.

    Для ввода исходных данных целесообразно использовать переменные пользователя. В этом случае можно проводить при необходимости встроенными средствами GPSS World дисперсионный и оптимизирующий эксперименты.

    Так как сообщения имеют одинаковые приоритеты, то для моделирования ОКУ нужно использовать блоки SEIZE и RELEASE. Моделирование отказов основного канала нужно произвести блоками FUNAVAIL и FAVAIL, а не блоками PREEMPT и RETURN в режиме абсолютного захвата. Тогда статистика ОКУ не будет искажена.

    Введем масштабирование: 1 единица модельного времени соответствует 1 с, то есть, например, время моделирования равно 2 часам, тогда 2*60*60 = 7200 единиц модельного времени. Аналогично Т1 = 120, Т2 = 240 и т.д.

    Декомпозиция системы и состав сегментов модели определяются разработчиком. Введем следующие сегменты:

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

    ; Модель функционирования направления связи
    ;Задание исходных данных
    Emk    EQU  5    ; Емкость накопителя
    VrMod  EQU  7200  ; Время моделирования
    T1      EQU  180  ; Среднее время поступления сообщений потока 1
    T2      EQU  240  ; Среднее время поступления сообщений потока 2
    T3      EQU  120  ; Среднее время передачи по OsnK
    T4      EQU  900  ; Средний интервал времени выхода из строя OsnK
    T5      EQU  10    ; Время включения Resk
    T6      EQU  180  ; Среднее время передачи по ResK
    T7      EQU  120  ; Среднее время восстановления OsnK
    ; Описание арифметических выражений
    ;  Вероятность передачи сообщений потока 1
    Ver1    VARIABLE  (N$Term1+N$Term3)/N$Soob1
    ;  Вероятность передачи сообщений потока 2
    Ver2    VARIABLE  (N$Term2+N$Term4)/N$Soob2
    ;  Вероятность передачи сообщений потоков 1 и 2
    Ver    VARIABLE  (V$Ver1+V$Ver2)/2
    ; Сегмент имитации сообщений потока 1
    GENERATE  (Exponential(12,0,T1))    ; Генератор сообщений потока 1
    Soob1  ASSIGN  1,1  ; Код 1 в P1 - сообщения потока 1
    TRANSFER  ,Nakop    ; Направить на OsnK
    ; Сегмент имитации сообщений потока 2
    GENERATE  (Exponential(15,0,T2))  ; Генератор
    сообщений потока 2
    Soob2  ASSIGN  1,2  ; Код 2 в P1 - сообщения потока 2
    ; Сегмент имитации работы накопителя и OsnK
    Nakop  GATE FV   OsnK,KRes    ;Доступен ли OsnK? Если нет, на Resk
    GATE NU   OsnK,Spis    ;Свободен ли OsnK? Если
    нет, в накопитель
    Prov3  SEIZE    OsnK      ; Занять OsnK
    ADVANCE  (Exponential(11,0,T3))  ; Обслуживание
    RELEASE    OsnK      ; Освободить OsnK
    UNLINK  Nak,Prov3,1  ; Вывод из накопителя 
    одного транзакта на OsnK
    TEST E  P1,1,Term2  ; Сообщение потока 1 или 
    потока 2 передано по OsnK?
    Term1  TERMINATE      ; Счет переданных сообщений потока 1 по OsnK
    Term2  TERMINATE      ; Счет переданных сообщений потока 2 по OsnK
    ;  Список пользователя Nak
    Spis    TEST L  CH$Nak,Emk,Term7  ; Есть ли место в накопителе?
    LINK    Nak,FIFO    ;Если да, поместить
    сообщение в накопитель
    Term7  TEST E   P1,1,Term6  ; Сообщение потока 1 или потока 2 было потеряно?
    Term5  TERMINATE  ; Счет потерянных сообщений потока 1
    Term6  TERMINATE  ; Счет потерянных сообщений потока 2
    ; Сегмент имитации работы Resk
    KRes    GATE NU  ResK,Spis  ; Свободен ли Resk? Нет, сообщение в накопитель
          TEST E    Kont,1,Prov1  ; Включить ResK
    ADVANCE    T5      ; Включение Resk
    SAVEVALUE  Kont,0  
    Prov1  SEIZE    ResK    ; Занять Resk
    ADVANCE  (Exponential(12,0,T6)); Передача
    RELEASE    ResK    ; Освободить Resk
    GATE FNV  OsnK,Prov2  ; Доступен ли OsnK?
    UNLINK  Nak,Prov1,1    ; Если нет, из буфера
    сообщение на Resk
    Prov2  TEST E  P1,1,Term4  ; Сообщение потока 1 или 2 передано по ResK?
    Term3  TERMINATE  ; Счет переданных сообщений потока 1
    Term4  TERMINATE  ; Счет переданных сообщений потока 2
    ; Сегмент имитации выхода из строя OsnK
          GENERATE  ,,,1
    Term8  ADVANCE    (Exponential(12,0,T4)); Расчет времени до следующего отказа
          FUNAVAIL  OsnK      ; Выход из строя OsnK
          SAVEVALUE  Kont,1
    ASSIGN    1,(Exponential(12,0,T7)); Расчет
    времени восстановления OsnK
    ADVANCE    P1    ; Имитация восстановления OsnK
    SAVEVALUE  VrOtk+,P1    ; Учет времени восстановления OsnK
    FAVAIL  OsnK    ; OsnK в доступное состояние
    UNLINK  Nak,Prov3,1  ; Сообщение на OsnK
          TRANSFER  ,Term8
    ; Сегмент задания времени моделирования
    ; и вычисления результатов моделирования
          GENERATE  VrMod
          TEST L  X$Prog,TG1,Met3
          SAVEVALUE  Prog,TG1
    Met3    TEST E  TG1,1,Met4  
    SAVEVALUE  Ver1,V$Ver1    ; Вероятность передачи
    сообщений потока 1
          SAVEVALUE  Ver2,V$Ver2    ; Вероятность передачи сообщений потока 2
          SAVEVALUE  Ver,V$Ver      ; Вероятность передачи сообщений направлением связи
          SAVEVALUE  VOtk,(1-V$Ver)    ; Вероятность отказа в передаче сообщений
          SAVEVALUE  VerOtk,((AC1-X$VrOtk)/AC1)  ; Вероятность безотказной работы OsnK
    Met4    TERMINATE  1
          START  10000

    Для определения вероятности безотказной работы суммируется в ячейке X$VrOtk время отказов направления связи, которое затем вычитается из абсолютного модельного времени AC1, а полученная разность делится на AC1.

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

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

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

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

  • Выполните команду Файл/Создать/Модель на панели инструментов.
  • В поле Имя модели диалогового окна Новая модель введите Направление связи. Выберите каталог, в котором будут сохранены файлы модели. Щелкните кнопку Далее.
  • На открывшейся второй странице Мастера создания модели выберите Начать создание модели "с нуля". Щелкните кнопку Далее.
  • Полагаем, что все сегменты модели мы сможем разместить так, что они будут видны в ходе работы модели. В Палитре выделите Презентация.
  • Перетащите элемент Скругленный прямоугольник в нужное место для размещения элементов исходных данных.
  • Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Исходные данные.
  • В Палитре выделите Основная. Перетащите элементы Параметр на элемент с именем Исходные данные. Разместите их и дайте имена так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.1.
  • В Палитре выделите Элементы управления. Перетащите элементы Бегунок на элемент с именем Исходные данные. Разместите их так, как показано на рис. 3.1. Значения свойств установите согласно табл. 3.2.
  • Замечание. В данной модели (а это возможно и в любых других моделях) все идентификаторы на русском языке. (рис 3.1) Размещение элементов для ввода исходных данных
    Параметр
    Имя Тип Значение по умолчанию
    интер_сообщ_потока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.
  • (рис 3.2) Размещение элементов для вывода результатов моделирования (рис 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. Соедините их между собой, а также с объектами сегмента Источники сообщений.
    Свойства объектов 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) Объекты двух сегментов модели
  • Последовательно выделите объекты и установите им свойства согласно табл. 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.5. Идея его работы заключается в следующем. Генератор вырабатывает одну заявку, и становится неактивным. Заявка поступает на объект задержки, разыгрывающий время до очередного отказа. После этого заявка поступает на второй объект задержки, имитирующий время восстановления основного канала.

    C выхода второго объекта задержки заявка поступает опять на вход первого объекта задержки. Процесс имитации отказов повторяется в цикле.

    Аналогичным образом построен сегмент имитации отказов основного канала и в GPSS-модели (см. п. 3.2).

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

    Постройте сегмент имитации отказов основного канала связи.

  • Перетащите из библиотеки объекты, соедините их как на рис. 3.5.
  • Последовательно выделите и установите свойства объектов согласно табл. 3.5.
  • (рис 3.5) Сегмент имитации отказов основного канала связи
    Свойства Значение
    Имя source
    Отображать имя Установить флажок
    Класс заявки Entity
    Заявки прибывают согласно Интенсивности
    Интенсивность прибытия 1
    Ограниченное количество прибытий Установить флажок
    Количество заявок, прибывающих за один раз 1
    Имя розыгрыш_инт_до_отказа
    Отображать имя Установить флажок
    Класс заявки Entity
    Задержка задается Явно
    Время задержки exponential
    (1/время_нараб_отказ_осн_кан)
    Вместимость 1
    Действие при выходе hold.setBlocked(true);
    if (основной_канал.size()!=0)
    {основной_канал.remove((Message)
    основной_канал.get(0));
    всего_потеряно_сообщ ++;}
    hold1.setBlocked(false);
    а=1;
    Включить сбор статистики Установить флажок
    Имя имитация_восст_осн_кан
    Класс заявки Entity
    Задержка задается Явно
    Время задержки exponential
    (1/время_восстан_осн_кан )
    Вместимость 1
    Действие при выходе hold.setBlocked(false);
    hold1.setBlocked(true);
    Включить сбор статистики Установить флажок

    Обратим внимание на переменные а и в, предназначенные для организации включения резервного канала таким образом, чтобы время на включение учитывалось только при поступлении первого сообщения на резервный канал. При последующих поступлениях это время не учитывается. И это каждый раз повторяется при выходе из строя основного канала, так как после восстановления основного канала резервный канал выключается. Резервный канал выключается, но передача сообщения по нему, если это было в момент включения в работу основного канала, продолжается. Таким образом, какое-то время каналы работают параллельно. Потерь сообщений при выключении резервного канала нет.

    Также организовано и в GPSS-модели, но для этого использована сохраняемая ячейка Kont (см. п. 3.2).

    В модели AnyLogic после занятия сообщением резервного канала элемент hold1 блокируется. Может быть так, что в процессе передачи сообщения резервным каналом возобновит работу основной канал, то есть элемент hold будет разблокирован, и сообщения пойдут на основной канал. Чтобы такая ситуация учитывалась и в GPSS-модели, в нее добавлена команда

    UNLINK  Nak,Prov3,1

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

    Интерпретация результатов моделирования

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

  • Из палитры Основная перетащите три элемента Простая переменная на диаграмму класса Main в скруглённый прямоугольник с именем Результаты моделирования.
  • Разместите их в один столбец с простыми переменными вероятность_потери_сообщ, коэф_использ_осн_кан (см. рис. 3.2).
  • Выделите первый элемент Простая переменная. В поле имя введите коэф_использ_осн_кан. Оставьте тип double.
  • Выделите второй элемент. В поле имя введите коэф_использ_резерв_кан. Оставьте тип double.
  • Выделите третий элемент. В поле имя введите коэф_использ_резерв_кан. Оставьте тип double.
  • Выделите второй элемент Параметр. В поле имя введите коэф_безотк_раб_осн_кан. Оставьте тип double.
  • Выделите объект основной_канал. В поле Действие при выходе введите код:
    коэф_использ_осн_кан=
    основной_канал.statsUtilization.mean()
  • Выделите объект резерв_канал. В поле Действие при выходе к имеющемуся там коду добавьте внизу строку:
    коэф_использ_резерв_кан=
    резерв_канал.statsUtilization.mean()
  • Выделите объект имитация_восст_осн_кан. В поле Действие при выходе к имеющемуся там коду добавьте строку:
    коэф_безотк_раб_осн_кан=
    1-имитация_восст_осн_кан.statsUtilization.mean()
  • Во всех объектах установите флажок Сбор статистики.
  • Теперь вы сможете снимать значения этих коэффициентов, не отыскивая каждый раз нужные объекты и не используя при этом окна инспекта. Проведите моделирование в GPSS World и AnyLogic и сравните полученные результаты. Результаты наших экспериментов приведены в табл. 3.6.

    Всего выполнено 8 экспериментов. Здесь, напомним, как и в главе 2, первый эксперимент соответствует постановке задачи. В каждом следующем эксперименте параметры, установленные в предыдущем эксперименте, либо остаются неизменными, либо изменяются. Указываются только новые значения параметров в строке, предшествующей результатам следующего эксперимента. Например, во втором эксперименте увеличена ёмкость входного буфера с 5 до 10 сообщений, а остальные параметры остались неизменными (табл. 3.6).

    Для получения результатов моделирования с точностью $$\varepsilon=0,01$$ и доверительной вероятностью $$\alpha=0,95$$ в GPSS World необходимо выполнить 9604 прогонов модели. В каждом эксперименте выполнялось 10 000 прогонов.

    Время моделирования в AnyLogic было увеличено в 10 000 раз и составляло 72 000 000 единиц модельного времени. Следует заметить, что если в GPSS World выполнить с этим же модельным временем один прогон, то результаты получаются такими же, что и при 10 000 прогонов модели.

    Согласно данным табл. 3.6 в первых трёх экспериментах вероятность передачи сообщений отличается на 0,015 … 0,022. В следующих пяти экспериментах вероятности передачи сообщений, полученные в GPSS World и AnyLogic, отличаются на 0,002 … 0,006, то есть на порядок меньше. Причём во всех экспериментах это отличие в большую сторону в AnyLogic-модели на $$\Delta_1…\Delta_8$$.

    Показатели функционирования направления связи
    ПоказателиGPSS WorldAnyLogic
    1) объем_буфера = 5
    вероятность_передачи_сообщ0,7520,773
    вероятность_передачи_сообщ_потока10,7520,772
    вероятность_передачи_сообщ_потока20,7530,773
    $$\Delta_1$$ вероятности_передачи_сообщ $$\Delta_1=0,022$$
    вероятность_потери_сообщ0,2480,227
    коэф_использ_осн_кан0,7770,757
    коэф_использ_рез_кан0,1520,222
    сум_коэф_использ_кан0,9290,979
    2) объем_буфера = 10
    вероятность_передачи_сообщ0,8290,861
    вероятность_передачи_сообщ_потока10,8290,861
    вероятность_передачи_сообщ_потока20,8290,862
    $$\Delta_2$$ вероятности_передачи_сообщ $$\Delta_2=0,032$$
    вероятность_потери_сообщ0,1710,139
    коэф_использ_осн_кан0,8610,841
    коэф_использ_рез_кан0,1570,25
    сум_коэф_использ_кан1,0181,091
    3) интер_сообщ_потока1 = 90, интер_сообщ_потока2 = 120
    вероятность_передачи_сообщ0,4380,454
    вероятность_передачи_сообщ_потока10,4380,454
    вероятность_передачи_сообщ_потока20,4380,453
    $$\Delta_3$$ вероятности_передачи_сообщ $$\Delta_3=0,015$$
    вероятность_потери_сообщ0,5620,546
    коэф_использ_осн_кан0,8820,882
    коэф_использ_рез_кан0,2090,266
    сум_коэф_использ_кан1,0911,148
    4) время_передачи_осн_кан = 60, время_нараб_отказ_осн_кан = 5000
    вероятность_передачи_сообщ0,8440,848
    вероятность_передачи_сообщ_потока10,8440,848
    вероятность_передачи_сообщ_потока20,8450,848
    $$\Delta_4$$ вероятности_передачи_сообщ $$\Delta_4=0,004$$
    вероятность_потери_сообщ0,1560,152
    коэф_использ_осн_кан0,9710,97
    коэф_использ_рез_кан0,0430,058
    сум_коэф_использ_кан1,0141,028
    5) время_передачи_рез_кан = 90, время_восстан_осн_кан = 60
    вероятность_передачи_сообщ0,8510,857
    вероятность_передачи_сообщ_потока10,8510,857
    вероятность_передачи_сообщ_потока20,8510,857
    $$\Delta_5$$ вероятности_передачи_сообщ $$\Delta_1=0,006$$
    вероятность_потери_сообщ0,1490,143
    коэф_использ_осн_кан0,9820,98
    коэф_использ_рез_кан0,0170,029
    сум_коэф_использ_кан0,9991,009
    6) интер_сообщ_потока1 = 45, интер_сообщ_потока2 = 60
    вероятность_передачи_сообщ0,430,432
    вероятность_передачи_сообщ_потока10,4310,432
    вероятность_передачи_сообщ_потока20,4290,431
    $$\Delta_6$$ вероятности_передачи_сообщ $$\Delta_2=0,002$$
    вероятность_потери_сообщ0,570,568
    коэф_использ_осн_кан0,9880,988
    коэф_использ_рез_кан0,0240,029
    сум_коэф_использ_кан1,0121,017
    7) время_передачи_осн_кан = 30, время_передачи_рез_кан = 45
    вероятность_передачи_сообщ0,850,853
    вероятность_передачи_сообщ_потока10,8510,853
    вероятность_передачи_сообщ_потока20,850,853
    $$\Delta_7$$ вероятности_передачи_сообщ $$\Delta_3=0,003$$
    вероятность_потери_сообщ0,150,147
    коэф_использ_осн_кан0,9820,982
    коэф_использ_рез_кан0,0150,021
    сум_коэф_использ_кан0,9971,003
    8) время_вкл_рез_кан = 1, время_восстан_осн_кан = 30
    вероятность_передачи_сообщ0,8510,855
    вероятность_передачи_сообщ_потока10,8510,855
    вероятность_передачи_сообщ_потока20,8510,855
    $$\Delta_8$$ вероятности_передачи_сообщ $$\Delta_4=0,004$$
    вероятность_потери_сообщ0,1490,145
    коэф_использ_осн_кан0,9880,987
    коэф_использ_рез_кан0,0080,015
    сум_коэф_использ_кан0,9961,002

    Коэффициенты использования основного канала в первых двух экспериментах в GPSS World-модели отличаются в большую сторону на 0,02, а в остальных - на 0,0 … 0,002.

    Коэффициент использования резервного канала и в целом суммарный коэффициент использования обоих каналов больше в AnyLogic-модели на 0,005 … 0,093 и 0,006 … 0,073 соответственно. Тем не менее, как видно, превышение вероятности передачи сообщений у AnyLogic-модели примерно в два раза ниже, чем превышение суммарного коэффициента использования обоих каналов.

    По результатам экспериментов можно сделать вывод о чувствительности модели к изменению параметров направления связи. Например, при увеличении ёмкости входного буфера с 5 до 10 сообщений вероятность передачи возрастает с 0,752 (0,772) до 0,829 (0,861).Уменьшение интервалов (увеличение интенсивности) поступления сообщений потоков 1 и 2 в два раза (90 и 120) снижает вероятности передачи сообщений с 0,829 (0,861) до 0,438 (0,434). В тоже время повышение скорости передачи основного канала в два раза (60) и увеличение не менее чем в 5 раз времени наработки на отказ основного канала приводит к возрастанию вероятностей передачи сообщений с 0,438 (0,434) до 0,844 (0,848).

    Машинное время выполнения модели в обеих системах практически одинаковое и составляет 5…7 сек (в AnyLogic в виртуальном режиме).

    Вернуться к учебному плану