Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КонтрРаботыСМО.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

Задание № 2 Изучение основных блоков в системе имитационного моделирования gpss World Теоретические сведения

По назначению блоки подразделяются на несколько групп.

  1. Блоки, осуществляющие модификацию атрибутов транзактов:

  • генерирование и уничтожение транзактов GENERATE, SPLIT, TERMINATE, ASSEMBLE;

  • временная задержка ADVANCE;

  • синхронизация движения двух MATCH и нескольких GATHER транзактов;

  • изменение приоритета транзакта PRIORITY;

  • изменение параметров транзактов ASSIGN, INDEX, MARK, PLUS.

  1. Блоки, изменяющие последовательность движения транзактов (блоки передачи управления): DISPLACE, TRANSFER, LOOP, TEST, GATE.

  2. Блоки, связанные с группирующей категорией: ADOPT, ALTER, EXAMINE, JOIN, REMOVE, SCAN.

  3. Блоки, описывающие объекты аппаратной категории:

  • одноканальные устройства (технические средства) SEIZE, RELEASE, PREEMPT, RETURN, FUNAVAIL, FAVAIL;

  • многоканальные устройства (памяти) ENTER, LEAVE, SAVAIL, SUNAVAIL;

  • ключи (логические переключатели) LOGIC.

  1. Блоки, сохраняющие необходимые значения для дальнейшего использования: SAVEVALUE, MSAVEVALUE.

  2. Блоки для получения статистических результатов:

  • очереди QUEUE, DEPART;

  • таблицы TABULATE.

  1. Блоки для организации списка пользователя: LINK, UNLINK.

  2. Блоки для организации ввода-вывода:

  • открытие/закрытие файла: OPEN / CLOSE;

  • считывание/запись в файл: READ / WRITE;

  • установка позиции текущей строки: SEEK.

  1. Специальные блоки: BUFFER, COUNT, EXECUTE, INTEGRATION, SELECT, TRACE, UNTRACE.

Создание и уничтожение Транзактов: блоки GENERATE и TERMINATE

Транзакт GPSS – это объект с набором атрибутов.

Каждый Транзакт различается по уникальному номеру Транзакта. Транзакты создаются в процессе моделирования и нумеруются последовательно, начиная с 1.

Можно изменять атрибуты, связанные с каждым Транзактом.

Атрибутами являются (по приоритету)

- запланированное время,

- сборочный комплект,

- параметры Транзакта, т.е. заданные пользователем (ASSIGN) названия или числа.

Параметры несут в себе информацию, которая уникальна только для данного Транзакта.

Окно Snapshot показывает значения параметров Транзакта.

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

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

Транзакты могут быть созданы при помощи Блока GENERATE в виде группы либо поодиночке через заданные интервалы.

Транзакты появляются не только в начале программы. Модель GPSS может иметь множество выражений GENERATE, каждое из которых создает множество Транзактов, содержащих маркер местоположения.

Все модели должны иметь как минимум один Блок GENERATE.

Описание параметров GENERATE дано в Приложении 1.

Пусть новый Транзакт создается каждые 60 моментов времени. Конкретное значение момента времени не важно, но важна только последовательность.

Создадим новую модель с именем Mod1 и добавим в неё блок

GENERATE 60 ;Создание нового Транзакта

Для определённости будем считать, что момент времени представляет собой секунду.

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

GENERATE 1

Кроме того, можно воспользоваться записью 1/60 минуты или 0.01666667. Если используется не число, а выражение, его следует заключить в круглые скобки.

В каждой конкретной модели представление времени надо делать наиболее осмысленным.

Блок TERMINATE удаляет Транзакты из модели. Когда Транзакт входит в Блок TERMINATE, он уничтожается.

Существует необязательный операнд, который уменьшит специальный счётчик, называемый «Количество завершённых Транзактов» (Termination Count).

Когда вводится

START 123

то счётчику присваивается значение 123.

Т.е. устанавливается контроль над тем, как долго сама по себе будет работать модель.

Если задать операнду A Блока TERMINATE значение 1, то каждый раз, когда Транзакт будет уничтожаться этим Блоком, счётчик Termination Count уменьшиться на 1.

Описание операндов TERMINATE дано в Приложении 1.

Когда счётчик достигнет значения 0 или меньше, моделирование прекратится и произойдет генерация стандартного отчета (если эта функция не была подавлена операндом B Блока START).

Счетчик Termination Count может достичь отрицательного значения в том случае, если операнд A Блока TERMINATE больше единицы.

Добавим Блок TERMINATE 1 в нашу модель, сохраним её.

Далее проследим наши 2 блока модели в окне Blocks:

ВЫБЕРИТЕ Command / Retranslate

Щелкните на заголовке окна Blocks.

Также открыть окно Blocks можно через команду Windows/Blocks.

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

До начала моделирования рассмотрим два списка Транзактов, называемых

- Цепь Текущих Событий (Current Events Chain, CEC),

- Цепь Будущих Событий (Future Events Chain, FEC).

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

Для этого служит Цепь Будущих Событий. Эта Цепь является хранилищем для Транзактов, которым предстоит сделать что-то в будущем.

Когда Транзакт попадает в Блок GENERATE, создается второй Транзакт.

Новый Транзакт не сразу попадает в Блок GENERATE. Вместо этого он помещается в Цепь Будущих Событий в соответствии со временем прибытия, заданным в Блоке GENERATE.

Цепь Текущих Событий создана для Транзактов, которым еще предстоит посетить Блоки в текущий момент системного времени.

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

Когда в Цепи Текущих Событий больше нет Транзактов, система GPSS World увеличивает системный таймер.

Рассмотрим эти цепи в нашей модели.

Сначала создадим условие Stop, которое будет вызывать остановку модели при каждой попытке входа в Блок.

ЩЕЛКНИТЕ на иконке Generate Blocks в окне Blocks.

Среди отладочных иконок на панели управления Debug в верхней части окна Blocks находится иконка Place в форме сигнала Stop.

ЩЕЛКНИТЕ на иконке Place

Это действие поместит условие STOP в Блок GENERATE. Моделирование будет приостановлено при попытке входа в Блок GENERATE.

Посмотрим, что происходит в цепях:

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

ВЫБЕРИТЕ Window / Simulation Snapshot / CEC Snapshot

В цепи CEC ничего нет, а в цепи FEC есть один Транзакт.

Это произошло потому, что Блок GENERATE создал свой первый Транзакт в тот момент, когда подана Команда STOP.

Как только подадим Команду START, Транзакт 1 будет перемещен в Цепь Текущих Событий, а модельное время будет выставлено в 60.

Закроем оба окна Snapshot.

Окна Snapshot являются статическим отображением текущего состояния модели и не изменяются в процессе моделирования.

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

Окно Journal сделаем полностью видимым. Щелкните на заголовке окна, если необходимо.

ВЫБЕРИТЕ Command / START

В диалоговом окне замените значение 1.

ВВЕДИТЕ 100

ВЫБЕРИТЕ OK

Данное действие устанавливает счётчик «Termination Count» в значение 100, перемещает Транзакт 1 в Цепь Текущих Событий и запускает процесс моделирования.

Но выставлено условие Stop. Поэтому моделирование будет приостановлено до того, как произойдет первый вход в Блок, а в окно Journal будет записано сообщение из 2-х строк.

Переместим Транзакт 1 в Блок GENERATE. Используем Команду STEP 1, которая назначена функциональной клавише [F5]:

НАЖМИТЕ [F5]

Смотрим Цепь Текущих Событий и Цепь Будущих Событий через команды Window / Snapshot Simulation.

Окна должны выглядеть следующим образом.

В цепи FEC временем является Время Ухода из Блока (Block Departure Time, BDT). Это время определяет, в какой момент Транзакты вернутся в модель.

Колонка Next показывает номер Блока, в который войдет каждая Транзакция. Блок 1 это Блок GENERATE, а Блок 2 – Блок TERMINATE.

Транзакт 2 ожидает входа в Блок GENERATE.

ЩЕЛКНИТЕ НА знаке + в окне CEC

Транзакт 1 вошел в Блок GENERATE, вызвав генерацию Транзакта 2, который был помещен в Цепь Будущих Событий.

Транзакт 1 находится в Цепи Текущих Событий, счетчик M1 отображает время входа в модель, равное 60 секундам, а Транзакт 2 находится в Цепи Будущих Событий, готовый войти в Блок GENERATE, когда таймер модельного времени достигнет значения 120 секунд.

Работой Блока GENERATE является вызов нового Транзакта каждые 60 секунд модельного времени.

Закроем окна Snapshots.

Смотрим текущее модельное время. Активируйте окно Journal, далее

ВЫБЕРИТЕ Command / SHOW

В диалоговом окне

ВВЕДИТЕ AC1

ВЫБЕРИТЕ OK

Атрибут AC1 возвращает абсолютное значение системного таймера.

Транзакт 1 переместится настолько далеко, насколько это возможно в текущей модели, в момент времени 60. Когда у него не будет возможности продвинуться дальше, он будет снят с Цепи Текущих Событий.

Назначим команду SHOW клавише [F8].

ВЫБЕРИТЕ Edit / Settings

Затем переместитесь на вкладку Function Keys окна настроек.

В поле F8

ВВЕДИТЕ SHOW AC1

ВЫБЕРИТЕ OK

Транзакт 1 будет уничтожен при входе в Блок TERMINATE.

НАЖМИТЕ [F5]

Транзакт переместится на один Блок в ответ на Команду STEP 1, вызванную одиночным нажатием горячей клавиши.

Следующим Транзактом, который будет перемещен по модели, является Транзакт 2, который как раз был снят из цепи FEC.

Транзакт 1 потерян навсегда.

Поскольку это событие очистило Цепь Текущих Событий, в момент времени 60 больше нечему было происходить. Поэтому система GPSS World изменила значение системных часов на время прибытия следующего Транзакта (120 секунд). Транзакт 2 был снят с Цепи Будущих Событий и помещён в Цепь Текущих Событий.

Цепь FEC теперь пуста. Тем не менее, Транзакт 2 готов войти в Блок GENERATE. Это приведёт к созданию Транзакта 3 и планированию его прибытия 60 секундами позднее. Затем Транзакт 2 пойдёт по намеченному пути.

Позволим Транзакту 2 войти в Блок GENERATE.

НАЖМИТЕ [F5]

Теперь смотрим цепи событий.

ВЫБЕРИТЕ Window / Simulation Snapshot / CEC Snapshot

и, сделав окно CEC Snapshot активным,

ЩЕЛКНИТЕ НА знаке +

Затем в основном окне

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

Поменяем размеры окон и расположим их одно под другим. Затем удлиняем их так, чтобы видеть всю информацию.

Транзакт 3 теперь находится в Цепи FEC с запланированным временем прибытия 180, а Транзакт 2 готов войти в Блок TERMINATE. Когда это произойдет, он будет уничтожен, и модели нечего будет больше делать в момент времени 120.

Когда Транзакт 1 уже вошел в Блок TERMINATE, счётчик Termination Count был уменьшен на единицу.

Проверим атрибут TG1, возвращающий текущее значение Termination Count.

В меню окна Model

ВЫБЕРИТЕ Command / SHOW

затем

ВВЕДИТЕ TG1

ВЫБЕРИТЕ OK

Значение будет записано в окно Journal, а так же в статусную строку главного окна.

Блок TERMINATE установлен на вычитание 1 из Termination Count каждый раз, когда в него входит Транзакт. Поскольку в него поступил только один Транзакт, значение счётчика в данный момент равно 99.

Если убрать условие Stop и запустить модель, то она автоматически остановится, когда Termination Count достигнет значения 0.

Самостоятельно. Ознакомиться с процессом создания и перемещения Транзактов по Цепи Текущих и Будущих Событий, выполняя пошаговое моделирование.

Использовать окна Snapshot, чтобы проследить происходящие изменения. После этого закрыть окна Snapshot.

Составить отчёт, в котором описать, как перемещаются Транзакты по цепям, как изменяется модельное время.

Теперь откроем окно Expression для системных часов, счётчика Termination Count и числа активных транзакций.

ВЫБЕРИТЕ Window / Simulation Window / Expression Window

В диалоговом окне, в поле Label

ВВЕДИТЕ Clock

а в поле Expression

ВВЕДИТЕ AC1

ЩЕЛКНИТЕ НА кнопке View

ЩЕЛКНИТЕ НА кнопке Memorize

Кнопка View позволяет видеть выражения в текущем окне Expression, а Memorize – сохранить с моделью, чтобы не пришлось вводить ее в следующий раз, когда надо отобразить эти показатели в окне Plot или Expression.

Можно вводить выражения, которые надо сохранить вместе с моделью, используя меню Edit / Settings, на вкладке Expressions.

Необходимо сохранить модель, чтобы введённые выражение были сохранены.

Добавим новое выражение. Заполним поля Label и Expression, удалив предыдущие значения.

ВВЕДИТЕ Act.Xact

и

ВВЕДИТЕ XN1

ЩЕЛКНИТЕ НА кнопке View

ЩЕЛКНИТЕ НА кнопке Memorize

Повторите процедуру для третьего выражения. В диалоговом окне, в поля Label и Expression

ВВЕДИТЕ Term Ct.

и

ВВЕДИТЕ TG1

ЩЕЛКНИТЕ НА кнопке View

ЩЕЛКНИТЕ НА кнопке Memorize

Закройте диалоговое окно Edit Expression.

НАЖМИТЕ OK

Окно Expression:

Ускорим процесс моделирования, убрав условия Stop.

ВЫБЕРИТЕ Window / Simulation Snapshot / User Stops

ЩЕЛКНИТЕ НА кнопке Remove All

НАЖМИТЕ OK

Вернемся в окно Blocks.

ЩЕЛКНИТЕ где-нибудь в окне Blocks

Далее

НАЖМИТЕ [F5]

несколько раз, чтобы наблюдать за влиянием перемещения Транзактов на системный таймер и Termination count. Каждый Блок в окне Blocks подсвечивается после того, как в него вошел Транзакт.

Иконка Continue на панели Debug в верхней части окна Blocks или запрограммированная функциональная клавиша продолжит прогон модели.

ЩЕЛКНИТЕ на иконке Continue

или

НАЖМИТЕ [F2]

Моделирование быстро закончится, затем будет составлен отчёт.

Итоги. Чтобы запланировать поступление Транзакта в модель в будущем, система GPSS World помещает Транзакт в цепь, называемую Цепью Будущих Событий или FEC. Цепь FEC отсортирована по увеличению времени прибытия Транзактов. Транзакт, прибывающий в момент времени 200, будет расположен раньше, чем Транзакт, прибывающий в момент времени 300. Когда модели нечего больше делать в текущий момент модельного времени, GPSS World снимает Транзакт(ы) с наиболее ранним временем прибытия из Цепи Будущих Событий. Это действие вызывает наращивание системного времени.

Поскольку системный таймер пропускает те периоды времени, в которые ничего не происходит, очень часто дискретно-событийная модель работает быстрее, чем настоящий процесс.

Цепь Текущих Событий, или CEC, используется для хранения Транзактов, у которых остались действия, выполняемые в текущий момент системного времени.

Отсутствие в цепи CEC Транзактов означает, что в текущий момент модельного времени больше ничего нельзя сделать. Поэтому GPSS World перемещает все Транзакты с наиболее ранним временем прибытия из цепи FEC в цепь CEC и переводит значение модельного времени.

Обратите внимание, что Транзакты, прибытие которых назначено в одно и то же время, перемещаются из цепи FEC в цепь CEC в случайном порядке. Это предотвращает непреднамеренное развитие синхронизации последовательностей. Можно предотвратить поступление Транзактов в случайном порядке, установив значение 0 для параметра «Time ties» на вкладке Random окна настроек модели.

ВЫБЕРИТЕ Edit / Settings

и откройте вкладку Random.

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

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

Быстрые прыжки к новому времени позволяют процессу моделирования протекать значительно быстрее, чем реальному процессу, состояние которого моделируется. Течение модельного времени очень часто ассоциируется со снятием новых Транзактов из цепи FEC.

Задержка Транзактов: блок ADVANCE

Наибольший приоритет в цепи CEC имеет Активный Транзакт.

Когда Активный Транзакт больше не может перемещаться по модели, он изымается из цепи CEC. Затем следующий Транзакт становится Активным Транзактом. Если цепь CEC пуста, то следующим Активным Транзактом должен стать Транзакт из цепи FEC. Это достигается за счёт перемещения одного или несколько Транзактов из цепи FEC в цепь CEC.

Перенос Транзактов с наиболее ранним временем прибытия из цепи FEC является действием, которое приводит к увеличению системного таймера.

GPSS World моделирует интервалы времени путем помещения Транзактов в цепь FEC и переноса их в цепь CEC в конце отрезка модельного времени. Эти действия управлялись Блоком GENERATE.

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

Рассмотрим ту же модель. В ней происходит моделирование прибытия покупателей в магазин. Мы рассматриваем ситуацию, когда покупатели прибывают в магазин, в среднем, каждые 60 секунд, а затем сразу же покидают его. Хотелось бы, чтобы покупатель некоторое время пробыл в магазине, например, общаясь с продавцом.

Создадим объект Simulation.

ВЫБЕРИТЕ Command / Create Simulation

Откроем окно Blocks.

ВЫБЕРИТЕ Window / Simulation Window / Blocks Window

Выставим условие Stop, которое приостановит моделирование при попытке войти в Блок TERMINATE.

ЩЕЛКНИТЕ НА иконке Блока TERMINATE

в окне Blocks, затем

ЩЕЛКНИТЕ НА иконке Place в верхней части окна

чтобы поместить условие Stop в Блок TERMINATE, а затем вернёмся в окно Journal / Simulation.

ЩЕЛКНИТЕ НА окне Journal / Simulation

затем

ВЫБЕРИТЕ Command / START

в диалоговом окне замените значение 1.

ВВЕДИТЕ 1000

НАЖМИТЕ ОК

Это действие устанавливает значение Termination Count в 1000 и запускает процесс моделирования. Не забываем, что выставлено условие Stop.

Поэтому моделирование будет приостановлено при первой попытке войти в Блок TERMINATE.

Смотрим Цепь Текущих Событий и Цепь Будущих Событий.

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

ВЫБЕРИТЕ Window / Simulation Snapshot / CEC Snapshot

ЩЕЛКНИТЕ НА знаке + в окне CEC Snapshot

Делаем окно Blocks активным.

НАЖМИТЕ [F5]

чтобы войти один раз в Блок.

Смотрим текущее модельное время:

ВЫБЕРИТЕ Command / SHOW

и в диалоговом окне

ВВЕДИТЕ AC1

Как видно из статусной строки главного окна, текущее модельное время равно 120.000. Это также время поступления Транзакта 2.

Проверим, загружена ли команда SHOW на клавишу [F8].

ВЫБЕРИТЕ Edit / Settings

Если клавише F8 не назначена команда, то переместимся на вкладку Function Keys окна настроек. В поле F8

ВВЕДИТЕ SHOW AC1

ВЫБЕРИТЕ OK

Смотрим цепи.

Транзакт 1 потерян навсегда.

Транзакт 2 изъят из Цепи Будущих Событий и помещен в Цепь Текущих Событий, тем самым, установив значение системного времени в 120.

Транзакт 1 не провел ни секунды времени в модели. Все входы этого Транзакта в Блоки произошли мгновенно в один момент времени, когда значение системных часов было равно 60.

В случае моделирования прибытия покупателей надо вернуть каждый Транзакт обратно в Цепь Будущих Событий, чтобы смоделировать определенный временной промежуток, пока Транзакт еще находится в модели.

Затем Транзакт будет снят из Цепи Будущих Событий после того, как значение модельного времени увеличится.

Для этого используется Блок ADVANCE.

Операнд A Блока ADVANCE определяет, через какое время необходимо изъять Транзакт из Цепи Будущих Событий.

Вставим Блок ADVANCE после Блока GENERATE.

В окне Model установим курсор в конец строки с Блоком GENERATE и

НАЖМИТЕ [Enter]

или

ВЫБЕРИТЕ Edit / Insert Line

затем

ВВЕДИТЕ ADVANCE 61 ;Cust browses 61 sec.

или

ВЫБЕРИТЕ Edit / Insert GPSS Blocks…

В открывшемся окне задаём значение параметра А, равное 61.

После добавления нового Блока необходимо перетранслировать модель.

Окно Journal должно быть активным, чтобы следить за сообщениями при моделировании.

ЩЕЛКНИТЕ в окне Journal / Simulation

и

ВЫБЕРИТЕ Command / Retranslate

Перед ретрансляцией в Блоке TERMINATE было условие STOP. Условие Stop работает по номеру Блока.

Ранее под номером 2 числился Блок TERMINATE, теперь – ADVANCE.

Запускаем моделирование.

ВЫБЕРИТЕ Command / START

В диалоговом окне заменим значение 1.

ВВЕДИТЕ 1000

НАЖМИТЕ OK

Моделирование будет приостановлено, когда Транзакт 1 войдет в Блок ADVANCE.

НАЖМИТЕ [F5]

чтобы Транзакт попал в Блок ADVANCE.

Смотрим цепи CEC и FEC, открыв соответствующие окна Snapshot.

Транзакт 1 в цепи FEC со временем 121, и Транзакт 2 в цепи CEC со временем 120.

НАЖМИТЕ [F8]

В статусной строке главного окна системные часы были обновлены до значения 120. Выполним еще 2 шага моделирования:

НАЖМИТЕ [F5]

2 раза.

Теперь проверим время еще раз:

НАЖМИТЕ [F8]

Поскольку Транзакт 2 был последним Транзактом в Цепи Текущих Событий, системное время переведено в тот момент, когда Транзакт 1 был изъят из цепи FEC на 121 секунде.

Текущее модельное время – 121. Следует ещё раз изучить цепи FEC и CEC, чтобы понять, в каких цепях находятся Транзакты.

Транзакт 2 находится в цепи FEC и не будет активным до наступления 181 секунды. Делаем ещё два шага моделирования.

НАЖМИТЕ [F5]

2 раза и снова смотрим на положение Транзактов в цепях.

Запуск модели привел к тому, что Транзакт 1 покинул Блок ADVANCE и был уничтожен Блоком TERMINATE.

Выведем на экран текущее время моделирования.

НАЖМИТЕ [F8]

Транзакт 3 вошёл в Блок GENERATE, создавая Транзакт 4. На следующем шаге Транзакт 3 сделает свой ход и войдет в Блок ADVANCE.

Следует потратить немного времени для того, чтобы понять, что происходит.

Транзакт 3 будет помещён в цепь FEC, позади Транзактов 2 и 4, в момент времени 241 (180 + 61). Текущее модельное время – 180, а Транзакт 2 станет активным в момент времени 181.

В секунду между моментами времени 180 и 181 оба Транзакта будут находиться в цепи FEC, используя свои 61-секундные интервалы.

Это будет первая секунда интервала для Транзакта 3 и последняя секунда интервала для Транзакта 2. В течение этой модельной секунды оба покупателя изучают ассортимент магазина.

НАЖМИТЕ [F5]

и

НАЖМИТЕ [F5]

Транзакт 2 стал активным, и текущее модельное время – 181. Транзакт 2 готовится покинуть модель, поскольку следующим его шагом будет вход в Блок TERMINATE. Он только что покинул Блок ADVANCE.

Смотрим цепи CEC и FEC, чтобы определить, в каких цепях находятся Транзакты. Следует понять расположение Транзактов и время их перемещения, затем

НАЖМИТЕ [F5]

НАЖМИТЕ [F8]

Транзакт 2 покинул модель. Он прибыл на 120 секунде, и ушел на 181 секунде. Это означает, что смоделировано время пребывания в 61 секунду. Здесь видна работа Блока ADVANCE.

Если интерпретировать Транзакт 2 как «покупателя №2», то он изучал ассортимент магазина в течение 61 секунды, покинув магазин через секунду после прибытия покупателя №3.

В отличие языков программирования, GPSS имеет маркер местоположения для каждого Транзакта. Это позволяет каждому Транзакту делать совершенно разные вещи в процессе моделирования. Каждый Транзакт в системе GPSS знает, в какой Блок ему предстоит войти на следующем шаге, причём Транзактов могут быть тысячи.

!!!Самостоятельно!!! Использовать команды STEP, SHOW и окна Chain Snapshot до тех пор, пока не будут полностью понятны действия Блока ADVANCE для моделирования задержек времени. Можно использовать карандаш и бумагу для расчёта времени следующих событий.

Изменить Блок ADVANCE, сделайть ретрансляцию после внесения изменений. Можно сделать процесс моделирования более реалистичным, используя операнд B Блока ADVANCE для внесения элемента случайности в задержки времени.

Устройства: блоки SEIZE и RELEASE

Одноканальное устройство (ОКУ) имеет:

  • список отложенных прерываний - список транзактов, ожидающих занятия ОКУ по приоритету;

  • список прерываний - список транзактов, обслуживание которых данным ОКУ было прервано;

  • список задержки - список транзактов, ожидающих занятия ОКУ в порядке приоритета;

  • список повторных попыток - список транзактов, ожидающих изменения состояния ОКУ.

При моделировании возможны следующие режимы организации функционирования ОКУ:

  • занятие ОКУ и его освобождение;

  • прерывание обслуживания ОКУ;

  • недоступность ОКУ и восстановление доступности. Прежде чем сразу рассматривать блоки, моделирующие ОКУ,

Предположим, что каждый покупатель должен провести 61 секунду, разговаривая с одним продавцом.

Чтобы смоделировать эту ситуацию, нельзя позволять Транзакту сразу же входить в Блок ADVANCE, поскольку это действие приведет к началу отсчета 61-секундного интервала, даже если продавец разговаривает с другим покупателем.

Нужно предотвратить поступление Транзактов в Блок ADVANCE, если продавец уже общается с одним покупателем.

Для этого используется Сущность GPSS – Устройство (Facility) и соответствующие Блоки SEIZE и RELEASE.

Изучать Устройства позволяет окно Facilities.

Устройство GPSS имеет несколько атрибутов, самое важное из них – название, задается операндом А.

Когда Транзакт поступает на Устройство, Устройство становится занятым, в противном – Устройство незанятое.

Только один Транзакт может становиться занимать Устройство.

Если устройство является занятым, то все Транзакты, пытающиеся войти в Блок SEIZE, получают отказ в доступе.

Транзакт, ожидающий входа в Блока SEIZE, прекращает двигаться по модели, пока не придет его очередь занять Устройство.

Такие Транзакты снимаются с цепи CEC и помещаются в Цепь Задержек Устройства до тех пор, пока они не смогут занять Устройство.

Транзакт, поступивший на Устройство, продолжает двигаться по модели. Он занимает Устройство до тех пор, пока не войдет в Блок RELEASE, операндом A которого является название Устройства.

В примере с покупателями Блоки SEIZE и RELEASE необходимы для предотвращения входа Транзактов в Блок ADVANCE до того, как они начали взаимодействие с продавцом.

Следующий покупатель получит возможность поговорить с продавцом только после того, как Транзакт будет изъят из цепи FEC и войдет в Блок RELEASE.

Создаём и сохраняем новую модель со следующими Блоками:

GENERATE 20 ;Customer arrives

SEIZE SALESMAN ;Customer engages salesman

ADVANCE 41 ;Customer talks to salesman

RELEASE SALESMAN ;Customer gives up salesman

TERMINATE 1 ;Customer leaves

Создаём объект Simulation.

ВЫБЕРИТЕ Command / Create Simulation

Поместим условие STOP в Блок GENERATE.

ВЫБЕРИТЕ Window / Simulation Window / Blocks Window

Затем

ЩЕЛКНИТЕ НА иконке Блока GENERATE

ЩЕЛКНИТЕ НА иконке Place панели Toolbar

Выставлено условие Stop, которое приведет к приостановке моделирования при попытке входа в Блок GENERATE.

ВЫБЕРИТЕ Command / START

В диалоговом окне замените значение 1

ВВЕДИТЕ 1000

и

НАЖМИТЕ OK

или

НАЖМИТЕ [Enter]

Функциональная клавиша [F5] позволяет выполнять пошаговое моделирование.

Клавише [F8] была назначена функция вывода модельного времени.

Передвинем первый Транзакт на один шаг в Блок GENERATE:

НАЖМИТЕ [F5]

Смотрим окно Journal: сообщение говорит о том, что Транзакт 1 готов войти в Блок SEIZE. У него есть такая возможность, поскольку продавец свободен.

Смотрим Цепи Текущих и Будущих Событий.

ВЫБЕРИТЕ Window / Simulation Snapshot / CEC Snapshot

В окне CEC

ЩЕЛКНИТЕ НА знаке +

чтобы видеть единственный Транзакт в цепи.

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

Транзакт 1 находится в CEC и готов войти в Блок SEIZE. Транзакт 2 находится в цепи FEC, его прибытия запланировано на момент времени 40.

После изучения Цепи Событий их можно распечатать по команде File / Print, а затем эти окна надо закрыть.

Сделаем активным окно Blocks:

ЩЕЛКНИТЕ в окне Blocks

Позволим Транзакту 1 занять Устройство, представляющее продавца.

НАЖМИТЕ [F5]

Снова открываем окна для просмотра цепочек.

Транзакт 1 по-прежнему является Активным Транзактом, и находится в начале цепи CEC.

Теперь он является владельцем Устройства, представляющего собой продавца. Проверим это, открыв окно Facilities.

ВЫБЕРИТЕ Window / Simulation Window / Facilities Window

Здесь видно Устройство, являющееся продавцом в нашей модели.

Найдём колонку «Owner XN»: владельцем является Транзакт 1.

Этот Транзакт готов начать 41-секундный интервал общения с продавцом путем входа в Блок ADVANCE.

НАЖМИТЕ [F5]

и

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

НАЖМИТЕ [F8]

Блок ADVANCE поместил Транзакт 1 в цепь FEC. Покупатель, которого представляет Транзакт 1, прекратит взаимодействие с продавцом на 61 секунде моделирования.

Текущее время модели – 40. Увидеть текущее модельное время можно в заголовке окна Snapshot, а также в статусной строке.

Смотрим окно Blocks:

ЩЕЛКНИТЕ в окне Blocks

чтобы сделать его активным.

Передвинем Активный Транзакт 2 вперёд на один блок:

НАЖМИТЕ [F5]

Транзакт 2 готов предпринять попытку вступить во взаимодействие с Устройством (продавцом) на 40 секунде. Но у него ничего не выйдет, т.к. Транзакт 1 владеет устройством.

НАЖМИТЕ [F5]

и

НАЖМИТЕ [F8]

и

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

и

ВЫБЕРИТЕ Window / Simulation Snapshot / CEC Snapshot

Что произошло с Транзактом 2? Где он?

Транзакт 2 попытался войти в Блок SEIZE, но ему было отказано в доступе, поэтому Транзакт был помещен в Цепь Задержек Устройства.

Отказав Транзакту 2 в поступлении на устройство, отсчёт 41-секундного интервала на общение с продавцом пока что не начался.

Смотрим окно Facilities:

ЩЕЛКНИТЕ в окне Facilities

В Цепи Задержек Устройства находится один Транзакт.

ВЫБЕРИТЕ View / Entity Details

Появился упрощенный вариант представления. Маленький квадрат представляет очередь с одним Транзактом. Транзакт 2 находится в Цепи Задержек Устройства, представляющего собой продавца.

Продолжим пошаговое моделирование:

НАЖМИТЕ [F5]

НАЖМИТЕ [F8]

Устранение Транзакта 2 привело к опустошению цепи CEC.

Поскольку Транзакт 3 был следующим в цепи FEC, значение системных часов стало равным 60.

Транзакт 1 закончит говорить с продавцом на 61 секунде, и будет готов войти в Блок RELEASE. Сделаем окно Blocks активным:

ЩЕЛКНИТЕ в окне Blocks

НАЖМИТЕ [F5]

Транзакт 1 перестал быть владельцем Устройства в момент входа в Блок RELEASE. Это привело к освобождению Устройства.

Поскольку Транзакт 2 был следующим в Цепи Задержек Устройства, ему автоматически был присвоен статус владельца и, как следствие, разрешён вход в Блок SEIZE. Транзакт 3 находится в Цепи Задержек, ожидая своей очереди.

Делаем окно Facilities активным

ЩЕЛКНИТЕ в окне Facilities

и вернёмся в режим детального отображения

ВЫБЕРИТЕ View / Entity Details

Транзакт 2 является владельцем Устройства, а один Транзакт ждёт своей очереди.

Можно свернуть/развернуть эти окна. Активные окна, пребывающие в свернутом/развёрнутом состояниях, будут замедлять процесс моделирования.

Альтернативным вариантом является использование пункта меню Windows / Tile для упорядочивания всех окон.

Транзакт 1 вошёл в Блок RELEASE, тем самым, позволив Транзакту 2 войти в Блок SEIZE. Транзакт 2 войдёт в Блок ADVANCE, когда наступит его очередь быть Активным Транзактом.

Транзакт 2 незамедлительно становится владельцем Устройства, не смотря на то, что он не является Активным Транзактом. Это происходит во время входа в Блок SEIZE. Это предотвращает возможность того, что пришедший к Блоку SEIZE Транзакт обгонит Транзакт 2, являющийся полноправным владельцем устройства.

Транзакт 2 готов войти в Блок ADVANCE, поскольку он вступил во взаимодействие с продавцом. Но сначала Транзакт 1 должен покинуть модель, войдя в Блок TERMINATE.

НАЖМИТЕ [F5]

и

ВЫБЕРИТЕ Window / Simulation Snapshot / FEC Snapshot

НАЖМИТЕ [F8]

Транзакта 1 нет. Текущее модельное время равно 61, а Транзакт 2 еще не начал свой 41-секундный интервал.

Если бы не было Блока SEIZE, Транзакт 2 не был бы задержан до входа в Блок ADVANCE. Тогда Транзакты 1 и 2 оказались бы в цепи FEC.

Оба Транзакта стали бы использовать свой 41-секундный интервал одновременно. Т.е. были бы 2 покупателя, одновременно разговаривающие с одним продавцом.

Использование Блока SEIZE позволило предотвратить появление такой ситуации.

Задание. Использовать команды STOP, SHOW и различные окна до тех пор, пока не будет понятно, как Блок SEIZE контролирует последовательное поступление Транзактов в Блок ADVANCE.

Транзакт, находящийся в Цепи Задержек, не может находиться в этот момент в цепи FEC или CEC.

Необходимо посмотреть окна Blocks и Facilities для того, чтобы изучить процесс моделирования. Убедиться, что блок SEIZE не позволяет более чем одному Транзакту находиться в блоке ADVANCE.

Сущности Queue и Qtable: блоки Queue и Depart

Блоки QUEUE и DEPART осуществляют только лишь сбор статистики.

Статистика хранится в Сущности GPSS под названием Queue (Очередь).

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

Наиболее важным атрибутом Очереди является число, называемое «Содержимым Очереди» (Queue Content).

Когда Транзакт входит в Блок QUEUE, значение Queue Content соответствующей Очереди увеличивается. Когда Транзакт входит в Блок DEPART, значение Queue Content уменьшается.

1-е преимущество использования Очередей заключается в том, что система GPSS World будет автоматически собирать статистику. Эта статистика будет записана в стандартный отчет, а также является доступной в процессе моделирования посредством нескольких атрибутов SNA.

2-е преимущество: можно также объявлять сущности Qtable, которые доступны в виде гистограмм в окне Table. Можно открыть окно Queue для текущих Очередей модели и следить за динамическим изменением статистических параметров.

Создадим новую модель Que

GENERATE (Exponential(1,0,6.5)) ;Create next customer

QUEUE Barber ;Begin queue time

QUEUE Total_time ;Total haircut time

TRANSFER Both,Barb1,Barb2 ;Choose not busy barber

Barb1 SEIZE Barber1 ;Get service by Barber1

DEPART Barber ;End queue time

ADVANCE 10,2.5 ;Haircut takes a few minutes

DEPART Total_time ;Leave total time queue

RELEASE Barber1 ;Give up the barber

TRANSFER ,Next ;Used Barber1-Done with cut

Barb2 SEIZE Barber2 ;Get service by Barber2

DEPART Barber ;End queue time

ADVANCE 13,4 ;Haircut takes a few minutes

DEPART Total_time ;Leave total time queue

RELEASE Barber2 ;Give up the barber

Next SAVEVALUE Ave_Queue,QT$Barber ;Save resulting average

TERMINATE 1 ;Customer leaves

Это простая модель парикмахерской с двумя парикмахерами: Barber1 и Barber2.

Поступление клиентов подчинено экспоненциальному закону распределения с параметрами: 0 и 6.5.

Если свободен парикмахер Barber1, то клиент направляется к нему на обслуживание. Обслуживание у Barber1 занимает от 7.5 до 12.5 минут.

Если занят 1-й парикмахер Barber1, то клиент направляется на обслуживание ко второму – Barber2, у которого обслуживание занимает от 9 до 17 минут.

После обслуживания клиент покидает парикмахерскую.

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

Блок

GENERATE (Exponential(1,0,6.5))

означает генерацию потока клиентов, подчинённого экспоненциальному распределению с параметрами 0, 6.5.

Exponential – встроенная функция для имитации экспоненциального распределения. Её первый параметр – 1, означает номер генератора случайных чисел. Чаще всего это встроенный генератор, и его номер равен 1. Второй и третий параметры, равные 0 и 6.5, означают параметры a и σ экспоненциального распределения.

Блоки QUEUE Barber и DEPART Barber определяют, в течение какого времени будет происходить сбор статистики для сущности под названием Barber.

В данном случае используем Блоки QUEUE и DEPART для «обрамления» Блока SEIZE. Это действие будет автоматически регистрировать время обработки для каждого Транзакта, входящего в Блок DEPART.

Для Транзактов, у которых есть возможность стать владельцами Устройства, значение времени ожидания будет равным 0. Средняя длина очереди и среднее время на обработку будут автоматически выведены в стандартном отчете GPSS World.

Приложение 4 описывает основные показатели отчёта.

Блоки QUEUE и DEPART необходимы для расчёта общего времени на стрижку, включая время ожидания. Получим статистику по времени ожидания и по общему времени на обработку.

Блок

TRANSFER Both,Barb1,Barb2

выбирает один свободный из двух блоков модели (парикмахеров) и направляет Транзакт к нему.

Barb1 – метка Блока SEIZE первого Устройства (парикмахера) под именем Barber1,

Barb2 – метка Блока SEIZE второго Устройства (парикмахера) под именем Barber2.

Описание операндов TRABSFER дано в Приложении 1.

Блок

Barb1 SEIZE Barber1

описывает первое Устройство с именем Barber1.

Блок

ADVANCE 10,2.5

означает задержку (обслуживание у парикмахера Barber1) в 10+-2.5 минуты.

Блок

RELEASE Barber1

освобождает устройство Barber1.

Блок

TRANSFER ,Next

отправляет Транзакт (клиента) после обслуживания на Устройстве Barber1 на Блок с меткой Next. Это сделано, чтобы Транзакт повторно не обслужился на Устройстве Barber2.

Блок

Barb2 SEIZE Barber2

описывает второе Устройство с именем Barber2.

Блок

ADVANCE 13,4

означает задержку (обслуживание у парикмахера Barber2) в 13+-4 минуты.

Блок

RELEASE Barber2

освобождает устройство Barber2.

Блок

Next SAVEVALUE Ave_Queue,QT$Barber

сохраняет значения Ave_Queue – среднюю длину очереди, QT$Barber – среднее время обслуживания.

Наблюдаем статистические данные в процессе моделирования. Сначала создадим объект Simulation.

ВЫБЕРИТЕ Command / Create Simulation

Затем откроем окно Queue для наблюдения за Очередью.

ВЫБЕРИТЕ Window / Simulation Window / Queues Window

Надо расположить окна так, чтобы можно было наблюдать одновременно за окном Model и окном Queue.

ВЫБЕРИТЕ Command / START

В диалоговом окне заменим значение 1.

ВВЕДИТЕ 11111

и

НАЖМИТЕ OK

Очередь можно отображать в детализированном и упрощённом режимах. Переключение происходит по команде

ВЫБЕРИТЕ View / Entity Details

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

Теперь прервём моделирование:

НАЖМИТЕ [F4]

Процесс создания динамических гистограмм прост. Надо определить Сущность TABLE или QTABLE для каждой гистограммы.

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

Делаем окно Model активным. Помещаем курсор в конец последней строки модели и

НАЖМИТЕ [Enter]

Затем

ВВЕДИТЕ

Waittime QTABLE Barber,2,3,20 ;Wait times Table

Параметры:

Barber – имя очереди,

2 – начальное значение на оси ординат,

3 – длина интервала (основания столбца),

20 – количество столбцов на гистограмме.

Таким образом, определили гистограмму, или Сущность QTABLE.

В отличие сущностей Facility и Queue, сущности QTABLE должны быть определены с помощью команды QTABLE. Команда QTABLE может быть отправлена в существующий объект Simulation для интерактивного определения сущности QTABLE.

Сделаем ретрансляцию модели

ВЫБЕРИТЕ Command / Retranslate

и запустим модель

ВЫБЕРИТЕ Command / START

В диалоговом окне заменим значение 1.

ВВЕДИТЕ 1111111

и

НАЖМИТЕ OK

НАЖМИТЕ [F4]

Теперь откроем окно для просмотра гистограмм.

ВЫБЕРИТЕ Window / Simulation Window / Table Window

В диалоговом окне уже выбрано значение Waittime.

НАЖМИТЕ OK

Развернём окно до приемлемых для просмотра гистограммы размеров.

Гистограмма должна выглядеть следующим образом.

НАЖМИТЕ [F2]

чтобы следить за изменением гистограммы.

Вертикальная ось – количество Транзактов, а горизонтальная – столбцы для каждого значения времени ожидания из диапазона.

Например, 2 минуты ожидания в очереди увеличат на единицу значение столбца для диапазона от 0 до 2.

Смотрим, как изменяются показатели задержки в нашей парикмахерской. Среднее время ожидания составляет примерно 15 минут, при этом некоторые клиенты ждут около 56 минут. Закроем окно и переключимся на окно Blocks.

ВЫБЕРИТЕ Window / Simulation Window / Blocks Window

Для Блока TRANSFER (Блок 4) количество Транзактов изменяется, пока клиенты ожидают парикмахеров. Они ждут в Блоке TRANSFER до тех пор, пока не смогут войти в один из двух Блоков SEIZE, представляющих собой начало пользования услугами парикмахера.

Закроем окно Blocks.

Смотрим Устройства.

ВЫБЕРИТЕ Window / Simulation Window / Facilities Window

Коэффициент загрузки (1-я колонка) каждого парикмахера высок.

Все Транзакты, ожидающие входа в Блок SEIZE, находятся в Повторных Очередях (Retry Chains) устройств Barber1 и Barber2.

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

В этом случае Транзакты никогда не достигают Цепи Задержек каждого парикмахера, а вместо этого помещаются в Повторные Цепи, связанные с Блоком TRANSFER.

Когда оба парикмахера заняты, Транзакты помещаются в Повторные Цепи обоих парикмахеров.

Смотрим ещё одну гистограмму. Прервём моделирование.

НАЖМИТЕ [F5]

ЩЕЛКНИТЕ НА окне Model

Время, которое уходит у парикмахера на одну стрижку, не является константой. Он тратит лишь в среднем 10 минут на одну стрижку, в диапазон входят значения от 7.5 до 12.5 минут.

Второй парикмахер тратит на стрижку от 9 до 17 минут.

Операнд B Блока ADVANCE определяет половину диапазона равномерного распределения.

Распределение времени на стрижку, генерируемое Блоком ADVANCE, называется равномерным распределением. Гистограмма этого распределения со временем примет соответствующую форму. Проверим это.

Добавим Блоки QUEUE и DEPART, чтобы фиксировать время, уходящее на стрижку.

Используем диалоговое окно Block Creation системы GPSS World. В окне Модели, сразу после надписи Barb1

ЩЕЛКНИТЕ НА выражении DEPART

Выражение помещено прямо перед Блоком ADVANCE.

ВЫБЕРИТЕ Edit / Insert GPSS Blocks …

Появится меню Block.

Теперь перейдем к добавлению выражения QUEUE. В левой колонке меню Block

ЩЕЛКНИТЕ НА QUEUE

Появится диалоговое окно Block Input. В поле Operand A

ВВЕДИТЕ Haircut

В поле Comment

ВВЕДИТЕ Length of cut – Barber1

Проделаем то же самое, чтобы создать выражение DEPART.

Установим позицию для вставки нового Выражения перед новым выражением Block. В окне Model, сразу после выражения QUEUE

ЩЕЛКНИТЕ НА следующем Выражении ADVANCE

Теперь перейдём в меню Blocks.

ЩЕЛКНИТЕ НА DEPART

Снова появится диалоговое окно Block Input. В поле Operand A

ВВЕДИТЕ Haircut

В поле Comment

ВВЕДИТЕ Length of cut – Barber1

Далее определяем гистограмму. Это выражение добавляем вручную. Перемещаем курсор в конец последней строки модели.

НАЖМИТЕ [Enter]

и

ВВЕДИТЕ Cuttimes QTABLE Haircut,8,0.5,10

Это команда определяет гистограмму или Сущность Qtable.

Ретранслируем модель, запускаем её и откроем окно Table.

ВЫБЕРИТЕ Command / Retranslate

и

ВЫБЕРИТЕ Command / START

В диалоговом окне заменяем значение 1.

ВВЕДИТЕ 1111111

и

НАЖМИТЕ OK

НАЖМИТЕ [F4]

чтобы приостановить моделирование, пока открывается окно Table, затем

ВЫБЕРИТЕ Window / Simulation Window / Table Window

В диалоговом окне уже выбрано значение Cuttimes,

НАЖМИТЕ OK

затем

НАЖМИТЕ [F2]

чтобы продолжить моделирование.

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

По истечении длительного периода времени гистограмма достигает формы равномерного распределения. Значение среднего времени, уходящего на стрижку, достигнет 10 минут.

Выражения TABLE и TABULATE также используются для создания гистограмм.

Их применяют вместе с сущностями Table, и они позволяют применять не только интервалы моделирования, но и другие выражения в гистограммах.

Итоги. Использовались Блоки QUEUE и DEPART вместе с сущностями Queue и Qtable. Гистограммы показали, как сходятся распределения вероятностей.

Добавление Блоков QUEUE и DEPART не влияет на процесс моделирования, поскольку эти Блоки не используют модельное время, и поток Транзактов никак не затрагивается. Единственное различие заключается в автоматическом сборе дополнительной статистики.