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

Задача 1

Условие задачи

Магистраль передачи данных состоит из двух каналов (основного и резервного) и общего накопителя. При нормальной работе сообщения передаются по основному каналу за 7 ± 3 с В основном канале происходят сбои через интервалы времени 200 ± 35 с Если сбой происходит во время передачи, то за 2 с. запускается запасной канал, который передает прерванное сообщение с самого начала. Восстановление основного канала занимает 23 ± 7 с После восстановления резервный канал выключается и основной канал продолжает работу с очередного сообщения. Сообщения поступают через 9 ± 4 с и остаются в накопителе до окончания передачи. В случае сбоя передаваемое сообщение передается повторно по запасному каналу. 

Немного обсудим

Для начала будет полезно составить схему нашей задачи, чтобы визуально посмотреть с чем мы имеем дело.

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

В модели должно будет быть 3 канала, основной, резервный и канал который будет 2 с. удерживать транзакт, пока включается резервный канал. Условие определяющие недоступность основного канала(Если не доступен, то уходим на резервный). Создадим бесконечный накопитель, в котором заявки будут хранится всё время, что находятся в системе. Так-же посчитаем число сбоев. Модель будет работать 3600 с., работать будет 1 час.

Код

    	GENERATE 9,4; генерация сообщений
    	QUEUE NAK1; вход в очередь
    	GATE FV KAN1,MET2 ; проверка на недоступность
    	SEIZE KAN1; вход в 1-й канал
    	ADVANCE 7,3; отправка сообщения по 1-му каналу
    	RELEASE KAN1; выход из 1-го канала
    	DEPART NAK1; выход из очереди
    	TERMINATE ; удаление транзакта

MET2 	SEIZE KAN2; вход во 2-й канал
    	ADVANCE 7,3; отправка сообщения по 2-му каналу
    	RELEASE KAN2; выход из 2-го канала
    	DEPART NAK1; выход из очереди
    	TERMINATE ; удаление транзакта

ERRGEN	GENERATE 200,35; генерация ошибки
    	; установка недступности 1-го канала и перенос транзакта в мет3
    	; в котором производится задержка в 2с перед запуском
    	FUNAVAIL KAN1,RE,MET3
    	ADVANCE 23,7; время удаления ошибки
    	FAVAIL KAN1 ; Снятие недступности с 1-го канала
    	TERMINATE ; удаление транзакта

MET3	RELEASE KAN1; выход из канала 1
    	SAVEVALUE CHPRSOOBSH+,1 ; подсчёт кол-ва прерванных сообщений
    	SEIZE KAN3; вход в канал 3
    	ADVANCE 2;задержка 2с
    	RELEASE KAN3; выход из канала 3
    	TRANSFER,MET2; переход на MET2

    	;генератор работы СМО в течение 3600 с часа
    	GENERATE 3600
    	TERMINATE 1
    	START 1

Всё прокомментировано, мне кажется смысла в доп. комментариях нет.

Результаты

Всего было создано 17 ошибок и 17 сообщений прервали, значит прерывание каждый раз случалось во время передачи сообщения. Если рассуждать об этой модели, как о реальной системе, то наверное вообще вероятность прерывания сообщения не есть хорошо, особенно, если сбой всегда будет прерывать сообщение. Что можно выделить хорошего, дк это то, что максимальное число сообщений в накопителе - 3, даже беря с огромной погрешностью, при работе данной магистрали, накопителя на 10 сообщений вполне хватит.

Задача 2

Условие задачи

Распределенный банк данных системы сбора информации организован на базе ЭВМ, соединенных. Поступающий запрос обрабатывается на первой ЭВМ и с вероятностью 50 % необходимая информация обнаруживается на месте. В противном случае необходима посылка запроса во вторую ЭВМ. Запросы поступают через 10 ± 3 с, первичная обработка запроса занимает 2 с, выдача ответа требует 8 ± 2 с, передача по каналу связи занимает 3 с. Временные характеристики второй ЭВМ аналогичны первой.

Немного обсудим

У нас в системе есть 2 ЭВМ, сначала запрос поступает на первый ЭВМ, там обрабатывается 2 с, если необходимая информация найдена то выводится ответ, занимающий в среднем 8 секунд, иначе передаётся на второй ЭВМ, что займёт 3 с и обрабатывается на нём ещё 2 с, потом уже выводится ответ. У каждого ЭВМ будет свой накопитель. Для передачи сообщения свободны должны быть оба ЭВМ.

Код

    	GENERATE 10,3; генерируем транзакт
    	QUEUE NAK1; заходим в первый накопитель
    	SEIZE EVM1; занимаем первый ЭВМ
    	ADVANCE 2; обрабатываем транзакт
    	TRANSFER.5,MET1,MET2; с вероятностью 50% находим ответ

MET1	ADVANCE 8,2; если нашли, то печатаем ответ
    	RELEASE EVM1; освобождаем первый ЭВМ
    	DEPART NAK1; уходим из накопителя
    	TERMINATE; удаляем транзакт

MET2	QUEUE NAK2; заходим во второй накопитель
        SEIZE EVM2; занимаем второй ЭВМ
    	SEIZE TRANS; занимаем канал передачи
    	ADVANCE 3; передаём транзакт на второй ЭВМ
    	RELEASE TRANS; освобождаем канал передачи
    	RELEASE EVM1; освобождаем первый ЭВМ
    	DEPART NAK1; уходим из накопителя
    	ADVANCE 2; обрабатываем транзакт
    	ADVANCE 8,2; выводим ответ
    	RELEASE EVM2; Освобождаем второй ЭВМ
    	DEPART NAK2; уходим из накопителя
    	TERMINATE; удаляем транзакт
    
    	;генератор работы СМО в течение 1 часа
    	GENERATE 3600
    	TERMINATE 1
    	START 1

Всё прокомментировано, мне кажется смысла в доп. комментариях нет.

Результаты

Среднее время нахождение транзакта во втором ЭВМ, значительно больше, чем в первой - это связанно с тем, что в нём гарантированно нужно выводить ответ, в отличии от первого. Так же можно заметить, что первый ЭВМ, загружен 91% времени, что не является хорошим показателем, но т.к. это всё таки компьютер, а не человек, является допустимым. Особо большие накопители не понадобятся и в этой задаче, для обоих ЭВМ подойдут накопители, способные хранить 10 транзактов.

Заключение

Ну вот мы немного и вспомнили старый, добрый GPSS, сгенерировали 2 модели и немного проанализировали их. В целом GPSS очень мощный инструмент для моделирования, его до сих пор можно считать актуальным и продолжать делать на нём какие-то модели, не смотря на то, что ему уже больше 20 лет.

Комментарии (12)


  1. Lev3250
    11.07.2023 10:58
    +4

    Ох GPSS! Хоть глаз и дёргается от воспоминаний лабораторных, но инструмент действительно крутой! Спасибо за статью


    1. piplofen
      11.07.2023 10:58
      +3

      да, глаз действительно дергается) особенно от разработки модели завода)


    1. IsaacBlog Автор
      11.07.2023 10:58
      +1

      Пожалуйста, на такой же волне настольгии и написал


  1. Hlad
    11.07.2023 10:58
    +1

    Лень ковырять остальное, но вот прямо в первой же строчке первой задачи очень мощное упрощение. GENERATE c такими параметрами задаёт равномерное распределение, в реальной жизни оно очень редко встречается. По хорошему надо бы распределение функцией задать, не помню только, как это делается (помню только, что можно).

    P.S. Страшный язык. Почти четверть века прошла с изучения, а глаз всё равно задёргался...


    1. kgenius
      11.07.2023 10:58

      Тем, кто писал на GPSS - никакой другой язык не страшен!
      :-)))


    1. IsaacBlog Автор
      11.07.2023 10:58

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


  1. kgenius
    11.07.2023 10:58
    +1

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

    Приятно было вспомнить, спасибо!


    1. IsaacBlog Автор
      11.07.2023 10:58

      Интересно было бы посмотреть диссертацию, если где-то есть????


      1. kgenius
        11.07.2023 10:58

        160 листов в Word было :-)


  1. itHauntsMe
    11.07.2023 10:58

    Подскажите, что пришло на смену GPSS в современном мире?


    1. IsaacBlog Автор
      11.07.2023 10:58

      Я слышал что есть Anulogic и Arena, самый их не смотрел, но довольно часто используют их.


      1. kgenius
        11.07.2023 10:58

        AnyLogic только