LOOP 13, CYCL5

ASSIGN 13,МЕТ1

В поле <A> задан параметр транзакта под номером 13 (взят произвольно). Этому параметру сопоставляется число 5, которое переопределяется через метку МЕТ1 поля <B>. Значение поля <B> присваивается параметру, номер которого задается в поле <A>. Задание числа 5 осуществляется оператором EQU.

Формат записи оператора EQU:

МЕТ1 EQU SQR(25)

Метка МЕТ1 — это имя в поле метки оператора. В поле <A> оператора вычисляется выражение:

МЕТ2 EQU (SQR(9)+2^2)

Оператор EQU с меткой МЕТ2 в поле <A> вычисляет выражение:

Обращение к метке МЕТ1 задает число 5. Обращение к метке МЕТ2 задает число 7.

Формат записи блока LOOP:

LOOP 13, CYCL5

В поле <A> задан номер параметра (такой же, как и в поле <A> парного блока ASSIGN), определяющего число циклов. В поле <B> задан по метке блок, на который переходит транзакт, если параметр, на который сделана ссылка в поле <A>, не равен нулю. Прохождение транзактом одного цикла уменьшает значение поля <A> на единицу. Когда значение параметра в поле <A> становится равным нулю, то транзакт переходит к следующему по номеру блоку (в рассматриваемом случае к блоку RELEASE под номером 60). Начало цикла начинается с блока ADVANCE с меткой CYCL5 под номером 40, окончание цикла — с блока LOOP под номером 50. Если транзакт входит в блок LOOP со значением параметра, равным n,то этот транзакт войдет в блокLOOP n раз и вернется к началу этого цикла (n-1) раз.

В файле стандартного отчета (нажатием клавиши F7) приводятся следующие статистики (результаты моделирования):

Файл стандартного отчета программы 1
GPSS/PC Report file REPORT.GPS. (V 2, # 37349) 07-21-2001 15:21:22 page 1 START_TIME END_TIME BLOCKS FACILITIES STORAGES FREE_MEMORY 0 3499 7 1 0 77824 LINE LOC BLOCK_TYPE ENTRY_COUNT CURRENT_COUNT RETRY 10 1 GENERATE 100 0 0 20 2 ASSIGN 100 0 0 30 3 SEIZE 100 0 0 40 CYCL5 ADVANCE 500 0 0 50 5 LOOP 500 0 0 60 6 RELEASE 100 0 0 70 7 TERMINATE 100 0 0 FACILITY ENTRIES UTIL. AVE._TIME AVAILABLE OWNER PEND INTER RETRY DELAY 1 100 0.998 34.94 1 0 0 0 0 0 XACT_GROUP GROUP_SIZE RETRY POSITION 0 0

Задача повторного пятикратного обслуживания решается блоком LOOP, который отправляет транзакты на блок ADVANCE. Из файла стандартного отчета видно, что через блоки LOOP и ADVANCE проходит в пять раз больше транзактов, чем через остальные блоки. Среднее время обслуживания в устройстве также в пять раз больше (в позиции AVE_TIME), чем время обслуживания, которое задается в поле <A> блока временной задержки ADVANCE (см. PRIM11.GPS).

Задание к примеру 1: Снять ограничение на поступление требований в систему. Изменить номер параметра транзактов, по которому осуществляется циклическая обработка: присвоить параметру числа 2, 153, 678, 999. В заданные номера параметра занести числа 3, 7, 9, 11, вычисленные как корень квадратный из соответствующего числа. Вычисления зафиксировать оператором EQU.

Задание 2.

Изучение блоков PREEMPT, RETURN.

Пример 2. На обработку по равномерному закону поступает два потока заготовок деталей: первый — со временем 5±2 мин., второй — 25±2 мин. Второй поток прерывает изготовление деталей первого потока. Время обработки деталей первого потока 7±2 мин., второго — 11±2 мин. Смоделировать процесс обработки 100 деталей, образующих два потока.

Решение примера 2 приводится как программа 2.

SIMULATE ***************************************************************** 10 GENERATE 5,2; Формирование 1-го потока деталей 20 SEIZE FACIL1; Устройство под именем FACIL1 30 ADVANCE 7,2 40 RELEASE FACIL1 50 TERMINATE 1; Вывод деталей 1-го потока ***************************************************************** 60 GENERATE 25,2; Формирование 2-го потока деталей 70 PREEMPT FACIL1; Прерывание обработки 1-го потока 80 ADVANCE 11,2; Время обработки 2-го потока=времени прерывания 90 RETURN FACIL1; Снятие прерывания 1-го потока 100 EXIT TERMINATE 1; Вывод деталей 2-го потока ***************************************************************** START 100; Задание числа счетчика завершений, равное общему *количеству деталей END
Программа 2

Два блока GENERATE (под номерами 10 и 60 соответственно) формируют два независимых потока транзактов. Блок PREEMPT позволяет получать в пользование устройство, указанное в поле <A> этого блока, т.е. устройства под именем FACIL1. Это соответствует тому состоянию системы, когда происходит прерывание обработки деталей 1 потока в устройстве и начинается обработка деталей 2 потока в том же устройстве. Длительность обработки деталей 2 потока задается блоком ADVANCE под номером 80. Стандартная статистика системы GPSS/PC определяется только для одного устройства — под именем FACIL1.

Для блока PREEMPT могут быть задействованы пять полей. Только поле операнда <A> является обязательным. В программе 2 формат записи блока PREEMPT следующий:

70 PREEMPT <A>

В поле <A> блока PREEMPT (под номером 70) задается имя устройства (по метке FACIL1), на котором происходит прерывание 1-го потока транзактов от блока GENERATE под номером 10. Длительность прерывания задается блоком ADVANCE под номером 80. В то же время устройство FACIL1 во время прерывания 1-го потока деталей начинает обслуживать детали 2-го потока, который формируется блоком GENERATE под номером 60. Снятие прерывания осуществляется блоком RETURN.

Формат записи блока RETURN:

90 RETURN <A>

В поле <A> блока RETURN задается имя устройства (по метке FACIL1), с которого снимается прерывание. Прерывание может быть снято только тем транзактом, которым оно было генерировано (тем транзактом, которым устройство было переведено в состояние прерывания). Приведенный формат блока возврата RETURN является единственным.

Задание к примеру 2:

— Попарно изменить среднее время генерирования транзактов в соответствии с рядом чисел: 6 и 15; 9 и 11; 13 и 9; 21 и 7.

— Попарно изменить среднее время обработки требований в соответствии с рядом чисел: 5 и 13; 9 и 9; 11 и 7; 15 и 5.

— Объяснить результаты выполнения программ по файлу стандартного отчета.

Рассмотрим некоторые дополнительные возможности блока PREEMPT.

Пример 3. Пусть в условиях примера 2 детали, прерванные на время обработки 2-го потока, выводятся из системы. В этом случае большая часть условий задачи остается неизменной: на обработку по равномерному закону поступает два потока заготовок деталей: первый — со временем 5±2 мин., второй — 25±2 мин. Второй поток прерывает изготовление деталей первого. Время обработки деталей 1-го потока 7±2 мин., 2-го — 11±2 мин. Смоделировать процесс обработки 100 деталей, разделенных на два потока.

Данный пример решается с дополнительными полями блока PREEMPT, которые позволяют использовать блок PREEMPT в режиме удаления транзактов на повторный захват устройства и отправки их по метке к заданному блоку. Программа решения примера 3 приводится как программа 3.

SIMULATE 10 GENERATE 5,2; Формирование 1-го потока деталей 20 SEIZE FACIL1; Устройство под именем FACIL1 30 ADVANCE 7,2 40 RELEASE FACIL1 50 TERMINATE 1; Вывод деталей 1-го потока ***************************************************************** 60 GENERATE 25,2; Формирование 2-го потока деталей 70 PREEMPT FACIL1,,exit,,re; Прерывание обработки 1-го потока 80 ADVANCE 11,2; Время обработки 2-го потока=времени прерывания 90 RETURN FACIL1; Снятие прерывания 1-го потока 100 exit TERMINATE 1; Вывод деталей 1-го и 2-го потоков START 100; Задание числа счетчика завершений, равноеобщему *количеству деталей END
Программа 3

Формат записи блока PREEMPT для программы 3:

70 PREEMPT <A>,[<B>],<C>,[<D>],<E>

В поле <A> задается метка прерываемого устройства — FACIL1, поле <B> — пусто, в поле <C> указывается имя блока (EXIT), куда направляются транзакты прерванного потока, поле <D> — пусто, в поле <E> устанавливается режим удаления — RE.

Операнд поля <C> задает номер или имя (метку) блока, куда должен попытаться войти прерванный транзакт (транзакт прерываемого 1-го потока). Режим удаления RE поля <E> означает, что прерванный транзакт не будет претендовать на пользование устройства, на котором произошло прерывание. Прерванный транзакт пытается войти в блок, заданный полем <C>. Поскольку в поле <C> задано имя блока уничтожения транзактов TERMINATE, то попытка войти в это блок всегда будет успешной. Происходит моделирование процесса вывода из системы необработанных деталей первого потока. Через блок с меткой EXIT выводятся также и обработанные детали второго потока.

В общем случае поле <B> блока PREEMPT может задать приоритетный режим. При работе в этом режиме транзакт, занимающий устройство или генерирующий на нем прерывание, может быть прерван только транзактом, приоритет которого выше приоритета данного транзакта. Поле <D> задает номер параметра, связанного с прерванным транзактом. Поле <D> задавать следует только в том случае, если приоритет прерывающего транзакта больше приоритета прерываемого транзакта.

Задание к примеру 3. Видоизменить программу 3 так, чтобы в ней прерванные транзакты отправлялись бы в дополнительное устройство с временем обработки 5±1 мин. При этом вывод из системы транзактов из дополнительного устройства не должны быть связаны со счетчиком завершений. Также попарно изменить среднее время генерирования транзактов в соответствии с рядом чисел: 6 и 15; 9 и 11; 13 и 9; 21 и 7. Объяснить результаты моделирования по файлу стандартного отчета.

Задание 3.

Статистическая информация об очереди формируется блоками QUEUE и DEPART. В GPSS/PC блоки QUEUE и DEPART описывают объекты типа "очередь". Статистика об очередях собирается в моменты входа сообщения (транзакта) в блок QUEUE (вход в очередь) или в блок DEPART (выход из очереди). Блоки QUEUE и DEPART являются информационно-статистическими и не влияют на внутренние операции процесса моделирования GPSS/PC.

Для сохранения и запоминания в модели числовой информации, различных стандартных числовых атрибутов в GPSS/PC отводятся специальные ячейки основной памяти. Для записи числовой информации в ячейки служит блок SAVEVALUE

Пример 4. В систему по равномерному закону с интервалом 5±2 мин. поступают заявки на обслуживание. С вероятностью 0.6 заявки обслуживаются на первом приборе по равномерному закону с интервалом 12±2 мин. и с вероятностью 0.4 обслуживание происходит на втором приборе также по равномерному закону с интервалом 13±2 мин. Смоделировать процесс функционирования системы и получить статистические данные об очереди заявок при обслуженном числе их, равным 100.

Здесь входящий поток заявок не ограничен и по времени является более интенсивным, чем обслуживание в каждом из приборов. Естественно следует ожидать возникновение очередей перед каждым из устройств. Задача состоит в том, чтобы произвести обслуживание 100 заявок (двумя приборами) и собрать сведения о задержках начала обслуживания, т.е. статистику об очередях. Для решения этой задачи составлена программа, в которой применены две пары совместных блоков QUEUE и DEPART. В блоке GENERATE поле <D> — поле задания генерируемых транзактов (заявок) не используется, поэтому ограничение поступающих в систему транзактов определяется только операторм START и временем генерации транзактов блоком GENERATE.

Решение примера 4 приводится как программа 4.

simulate 10 generate 5,2 20 transfer 0.4,chan1,chan2 30 chan1 queue 1 40 seize 1 50 depart 1 60 advance 12,2 70 release 1 80 transfer,exit 90 chan2 queue LEN2 100 seize 2 110 depart LEN2 120 advance 13,2 130 release 2 140 savevalue num,c1 150 savevalue num1,q1 160 savevalue num2,q$len2 170 savevalue num3,qt1 180 savevalue num4,qt$len2 200 exit terminate 1 start 100 end
Программа 4

Формат записи блоков QUEUE:

30 <метка> queue <A>,[<B>]

90 <метка> queue <A>,[<B>]

В поле <метка> задается имя блока, в поле <A> — имя или номер очереди. В поле <B> задается число единиц, на которое увеличивается текущая длина очереди. Если поле <B> пусто (как в программе), то прибавляется единица. В поле <метка> блока QUEUE под номером 30 задана метка chan1, для блока 90 задана метка chan2. Блок QUEUE под номером 30 регистрирует статистику для очереди под номером 1, которая возникает перед первым устройством (оно начинается с блока SEIZE под номером 40). Блок QUEUE под номером 90 регистрирует статистику для очереди под именем LEN2, которая возникает перед вторым устройством (оно начинается с блока SEIZE под номером 100).

Выход транзакта из очереди регистрируется блоком DEPART.

Формат записи блоков DEPART:

50 depart <A>,[<B>]

110 depart <A>,[<B>]

В поле <A> блока DEPART задается номер или имя очереди, длину которой нужно уменьшить. В поле <B> задается число единиц, на которое уменьшается длина очереди. Это число не должно превышать текущую длину очереди (чтобы не получилось отрицательное число). Если поле <B> пусто (как в программе), длина очереди уменьшается на единицу. В программе для блока под номером 50 в поле <A> задана очередь с номером 1, для блока под номером 110 в поле <A> задана очередь под именем LEN2. В подпрограмме блока DEPART автоматически проверяется значение времени пребывания транзакта в очереди. Если транзакт не был задержан в очереди, т.е. имеет нулевое время задержки, число нулевых входов увеличивается на число единиц, указанное в поле <B> блока DEPART. В программе PRIM26.GPS поле <B> пусто. В программе используются пять блоков SAVEVALUE, которые сохраняют СЧА по времени моделирования и очередей.

Формат записи блоков SAVEVALUE:

140 savevalue <A>,<B>

150 savevalue <A>,<B>

160 savevalue <A>,<B>

170 savevalue <A>,<B>

180 savevalue <A>,<B>

В поле <A> каждого блока SAVEVALUE задается имя ячейки, в которую записывается значение поля <B>. Для примера с помощью блоков SAVEVALUE были сохранены следующие стандартные числовые атрибуты. Для блока SAVEVALUE под номером 140 имя сохраняемой ячейки num, сохраняемая величина С1 — условное время моделирования. Для блока SAVEVALUE под номером 150 имя сохраняемой ячейки num1, сохраняемая величина q1 — длина очереди под номером 1. Для блока SAVEVALUE под номером 160 имя сохраняемой ячейки num2, сохраняемая величина q$len2 — длина очереди с именем len2. Для блока SAVEVALUE под номером 170 имя сохраняемой ячейки num3, сохраняемая величина qt1 — среднее время (с точностью до целых) пребывания сообщения в очереди под номером 1(включая нулевые входы). Для блока SAVEVALUE под номером 180 имя сохраняемой ячейки num4, сохраняемая величина qt$len2 — среднее время (с точностью до целых) пребывания сообщения в очереди с именем len2 (включая нулевые входы). Очереди имеют также и другие СЧА: QAj — средняя длина очереди j (автоматически определяется и сохраняется программой, приводится в файле стандартного отчета); QMj — максимальная длина очереди j (автоматически определяется и сохраняется программой, приводится в файле стандартного отчета); QCj — общее число входов в очередь j (автоматически определяется и сохраняется программой, приводится в файле стандартного отчета); QZj — число нулевых входов в очередь j (автоматически определяется и сохраняется программой, приводится в файле стандартного отчета); QXj — среднее время пребывания транзакта в очереди j без нулевых входов (автоматически определяется и сохраняется программой, приводится в файле стандартного отчета).

Результаты моделирования примера 4 приводятся в таблице как файл стандартного отчета программы 4.

Файл стандартного отчета программы 4
GPSS/PC Report file REPORT.GPS. (V 2, # 37349) 08-24-1999 12:01:25 page 1 START_TIME END_TIME BLOCKS FACILITIES STORAGES FREE_MEMORY 0 633 19 2 0 80800 LINE LOC BLOCK_TYPE ENTRY_COUNT CURRENT_COUNT RETRY 10 1 GENERATE 130 0 0 20 2 TRANSFER 130 0 0 30 CHAN1 QUEUE 73 20 0 40 4 SEIZE 53 0 0 50 5 DEPART 53 0 0 60 6 ADVANCE 53 1 0 70 7 RELEASE 52 0 0 80 8 TRANSFER 52 0 0 90 CHAN2 QUEUE 57 8 0 100 10 SEIZE 49 1 0 110 11 DEPART 48 0 0 120 12 ADVANCE 48 0 0 130 13 RELEASE 48 0 0 140 14 SAVEVALUE 48 0 0 150 15 SAVEVALUE 48 0 0 160 16 SAVEVALUE 48 0 0 170 17 SAVEVALUE 48 0 0 180 18 SAVEVALUE 48 0 0 200 EXIT TERMINATE 100 0 0 FACILITY ENTRIES UTIL. AVE._TIME AVAILABLE OWNER PEND INTER RETRY DELAY 1 53 0.992 11.85 1 96 0 0 0 20 2 49 0.973 12.57 1 111 0 0 0 8 QUEUE MAX CONT. ENTRIES ENTRIES(0) AVE.CONT. AVE.TIME AVE.(-0) RETRY 1 21 20 73 1 10.36 89.85 91.10 0 LEN2 9 9 57 3 4.47 49.65 52.41 0 XACT_GROUP GROUP_SIZE RETRY POSITION 0 0 SAVEVALUE VALUE RETRY NUM +633 0 NUM1 +20 0 NUM2 +9 0 NUM3 +89 0 NUM4 +49 0

По условию входной поток неограничен и поэтому количество сгенерированных транзактов превышает количество обработанных и выведенных из системы транзактов, которых 100. Перед каждым устройством системы осуществляется сбор статистических данных об очередях с помощью блоков QUEUE, DEPART. Устройства моделируются блоками SEIZE, ADVANCE, RELEASE, соответственно для первого устройства это блоки с номерами 40, 60, 70; для второго устройства — блоки с номерами 100, 120, 130.

В файле стандартного отчета программы 4 строка QUEUE имеет следующие поля: 1 — номер первой очереди, LEN2 — имя второй очереди (очередь может иметь либо произвольный номер, либо произвольное имя), поле MAX определяет максимальное содержимое очереди в течение периода моделирования (для первой очереди 21, для второй с именем LEN2 — 9), поле CONT. определяет текущее содержимое очереди в конце периода моделирования (для первой очереди 20, для второй с именем LEN2 — 9), поле ENTRIES определяет общее количество входов в очередь в течение периода моделирования (для первой очереди 73, для второй с именем LEN2 — 57), поле ENTRIES(0) определяет общее количество входов в очередь с нулевым временем ожидания (для первой очереди 1, для второй с именем LEN2 — 3), поле AVE.CONT определяет среднее значение содержимого (количество транзактов) очереди (для первой очереди 10.36, для второй с именем LEN2 — 4.47), поле AVE.TIME определяет среднее время, проведенное в очереди с учетом всех входов в очередь (для первой очереди 89.85, для второй с именем LEN2 — 49.65), AVE.(-0) определяет среднее время, проведенное в очереди без учета "нулевых" входов в очередь (для первой очереди 91.10, для второй с именем LEN2 — 52.41), поле RETRY определяет количество транзактов, ожидающих специальных условий, зависящих от состояния очереди (специальных условий в примере нет).

Статистика по транзактам может быть сопоставлена по полям MAX, CONT., ENTRIES и ENTRY_COUNT, CURRENT_COUNT.

Пояснения к полю AVE(-0). Для каждой очереди поле имеет большее время пребывания в очереди, чем для поля AVE.TIME. Это объясняется тем, что каждая очередь имеет какое-то количество нулевых входов, когда транзакты поступают на обслуживание без задержки, если же этих нулевых входов нет, то транзактам бы пришлось находиться в очереди, и значит, увеличивается время пребывания в очереди.

Для статистики блоков SAVEVALUE в файле стандартного отчета отводятся следующие поля. В поле SAVEVALUE указываются имена ячеек (в отчете это NUM, NUM1, NUM2, NUM3, NUM4), в которых сохраняются заданные величины. Сохраняемые величины указываются в поле VALUE (это 633, 20, 9, 89, 49). Поле RETRY определяет количество транзактов, ожидающих наступления специальных условий, зависящих от состояния сохраняемой величины (в примере специальных условий нет).

Задание к примеру 4: задать равновероятное распределение транзактов по устройствам, а также: с вероятностью 0.8 на 1-е устройство, с вероятностью 0.2 на 2-е устройство; с вероятностью 0.3 на 1-е устройство, с вероятностью 0.7 на 2-е устройство При этом в каждом случае произвести один прогон программы, два прогона, три прогона. Изменить среднее время обработки в устройствах: 9 и 7; 15 и 5; 13 и 11; 12 и 12. Подсчитать средние статистические показатели работы устройств и средние статистические показатели очередей. Объяснить результаты моделирования по файлу стандартного отчета. Вычислить с помощью оператора EQU , , , , , , и сохранить результаты с помощью блока SAVEVALUE.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: