- •Пример 6.3. Выбор объекта по заданному условию
- •Пример 6.4. Поиск объекта по заданному условию
- •Пример 6.5. Поиск объекта по заданному условию с отказами
- •Пример 6.6. Поиск объекта по заданному условию – с равной вероятностью
- •Пример 6.7. Поиск объекта по заданному условию – с равной вероятностью
- •Пример 6.8. Поиск объекта по заданному условию – с заданной вероятностью по функции
- •Пример 6.9. Программная модель с подпрограммой
- •Пример 6.10. Программная модель с подпрограммой
ЛЕКЦИЯ 6
Организация циклов
Для организации циклов применяется блок LOOP. В операнде А блока записывается идентификатор параметра, в котором предварительно указывается сколько раз требуется повторить цикл. В операнде В указывается метка начала цикла.
Пример 6.1. Система массового обслуживания с циклом
Структурная схема СМО с циклическим обслуживанием транзактов представлена на рис.6.1.
GT
PK1
PK2
PK3
Решённые задачи
500±100 20±7 25±10 100±20
8 раз
Время функционирования всех элементов модели распределено по равномерному закону. Останов после решения 300 задач.
Рис.6.1. Структурная схема примера 6.1
Программа
GENERATE 500,100
ASSIGN KOLPOVT,8
В параметр P$KOLPOVT запишем требуемое количество повторений
цикла – 8.
CIKL SEIZE PK1
ADVANCE 20,7
RELEASE PK1
SEIZE PK2
ADVANCE 25,10
RELEASE PK2
LOOP KOLPOVT,CIKL
При поступлении транзакта в блок LOOP из параметра P$KOLPOVT вычитается единица и проверяется оставшееся содержимое. Если оно >0, то переходим на метку CIKL, то есть на начало цикла. В противном случае переходим к следующему блоку, повторения выполнений операторов цикла больше не требуется и мы переходим к третьему РК.
SEIZE PK3
ADVANCE 100,20
RELEASE PK3
TERMINATE 1
START 300
Отчет
GPSS World Simulation Report - 16.31.1
Thursday, November 01, 2007 10:36:22
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 150919.436 13 3 0
NAME VALUE
CIKL 3.000
KOLPOVT 10000.000
PK1 10001.000
PK2 10002.000
PK3 10003.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 300 0 0
2 ASSIGN 300 0 0
CIKL 3 SEIZE 2400 0 0
4 ADVANCE 2400 0 0
5 RELEASE 2400 0 0
6 SEIZE 2400 0 0
7 ADVANCE 2400 0 0
8 RELEASE 2400 0 0
9 LOOP 2400 0 0
10 SEIZE 300 0 0
11 ADVANCE 300 0 0
12 RELEASE 300 0 0
13 TERMINATE 300 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
PK1 2400 0.317 19.962 1 0 0 0 0 0
PK2 2400 0.399 25.084 1 0 0 0 0 0
PK3 300 0.199 99.890 1 0 0 0 0 0
FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE
301 0 151042.456 301 0 1
Содержимое отчёта показывает, что количество повторений блоков цикла в восемь раз превышает количество входов транзактов в блоки до цикла и после него.
Блок TRANSFER имеет наибольшее количество модификаций из всех блоков языка GPSS W. Назовём их.
- «пробел» - безусловный;
- «.» - статистический;
- BOTH - условного выбора;
- ALL - условного поиска;
- PICK - вероятностного выбора;
- FN - перехода по функции;
- P - перехода по параметру;
- SBR -перехода к подпрограмме;
- SIM - перехода по выполнению нескольких условий.
Блок безусловного перехода TRANSFER ,METKA мы раньше уже использовали. При его записи операнд А не заполняется, а в операнде В записывается метка, к которой направляется транзакт.
Для выбора устройств по заданной вероятности используется следующая модификация блока TRANSFER A,B,C. С вероятностью, указанной в операнде А транзакт передается на метку, идентификатор которой указан в операнде С и с вероятностью единица минус указанная на метку, указанную в операнде В. Если метка, указанная в операнде В, следует сразу после блока TRANSFER, то ее можно не указывать.
Пример 6.2. Выбор объекта по заданной вероятности
Структурная схема примера представлена на рис.6.2.
PK1
GT
180±50 Решённые
0,3 задачи
PK2
100±30
210±70
Время функционирования всех элементов модели распределено по равномерному закону. Остановить моделирование после решения 250 задач.
Рис.6.2. Структурная схема примера 6.2
Программа
GENERATE 100,30
TRANSFER .3,PERV,VTOR
С вероятностью 0,3 транзакт передается на метку VTOR и с вероятностью 0,7 (1-0,3) на метку PERV. Если метка PERV следует сразу после блока TRANSFER, то ее можно не указывать.
PERV SEIZE 1
ADVANCE 180,50
RELEASE 1
TERMINATE 1
VTOR SEIZE 2
ADVANCE 210,70
RELEASE 2
TERMINATE 1
START 250
Отчет
GPSS World Simulation Report - 17.35.1
Thursday, November 01, 2007 10:36:34
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 30937.802 10 2 0
NAME VALUE
PERV 3.000
VTOR 7.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 310 0 0
2 TRANSFER 310 58 0
PERV 3 SEIZE 174 0 0
4 ADVANCE 174 1 0
5 RELEASE 173 0 0
6 TERMINATE 173 0 0
VTOR 7 SEIZE 78 1 0
8 ADVANCE 77 0 0
9 RELEASE 77 0 0
10 TERMINATE 77 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
1 174 0.996 177.111 1 231 0 0 0 57
2 78 0.521 206.691 1 308 0 0 0 1
CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE
308 0 30734.067 308 7 8
FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE
311 0 31003.385 311 0 1
231 0 31046.527 231 4 5
По содержимому отчёта отметим что распределение входов транзактов в ПК1 и ПК2 174:78=2.23 близко к заданному 0.7:0.3=2.33, что свидетельствует о корректности результатов моделирования.
Для выбора устройств по заданному условию используется модификация блока - TRANSFER A,B,C. В операнде А записывается символ модификации выбора по условию – BOTH. Транзакт, вошедший в блок TRANSFER пытается занять устройство, метка которого указана в операнде В, если это не удаётся, то занять устройство, метка которого указана в операнде С, если и это ему не удаётся, то транзакт остаётся в блоке TRANSFER до тех пор, пока не появится возможность занять одно из указанных устройств. Если метка, указанная в операнде В, следует сразу после блока TRANSFER, то ее можно не указывать.
Пример 6.3. Выбор объекта по заданному условию
Структурная схема примера представлена на рис.6.3.
PK1
GT
180±50 Решённые
задачи
PK2
100±30
210±70
Время функционирования всех элементов модели распределено по равномерному закону. Остановить моделирование после решения 250 задач.
Рис.6.3. Структурная схема примера 6.3
В этом случае в примере 6.2 требуется заменить запись второго блока.
GENERATE 100,30
TRANSFER BOTH,PERV,VTOR
*Транзакт пытается занять устройство с меткой PERV если это ему не *удаётся то устройство с меткой VTOR. Если метка PERV следует сразу *после блока TRANSFER, то ее можно не указывать.
PERV SEIZE 1
ADVANCE 180,50
RELEASE 1
TERMINATE 1
VTOR SEIZE 2
ADVANCE 210,70
RELEASE 2
TERMINATE 1
START 250
Отчет
GPSS World Simulation Report - 18.36.1
Thursday, November 01, 2007 10:36:44
START TIME END TIME BLOCKS FACILITIES STORAGES
0.000 25311.417 10 2 0
NAME VALUE
PERV 3.000
VTOR 7.000
LABEL LOC BLOCK TYPE ENTRY COUNT CURRENT COUNT RETRY
1 GENERATE 255 0 0
2 TRANSFER 255 4 0
PERV 3 SEIZE 136 0 0
4 ADVANCE 136 0 0
5 RELEASE 136 0 0
6 TERMINATE 136 0 0
VTOR 7 SEIZE 115 0 0
8 ADVANCE 115 1 0
9 RELEASE 114 0 0
10 TERMINATE 114 0 0
FACILITY ENTRIES UTIL. AVE. TIME AVAIL. OWNER PEND INTER RETRY DELAY
1 136 0.968 180.212 1 0 0 0 4 0
2 115 0.970 213.513 1 251 0 0 4 0
CEC XN PRI M1 ASSEM CURRENT NEXT PARAMETER VALUE
252 0 24998.825 252 2 2
253 0 25085.794 253 2 2
254 0 25163.895 254 2 2
255 0 25273.133 255 2 2
FEC XN PRI BDT ASSEM CURRENT NEXT PARAMETER VALUE
256 0 25356.169 256 0 1
251 0 25404.766 251 8 9
По содержимому отчёта отмечаем, что транзакт направлялся к первому устройству чаще в 136:115=1.18 раза в соответствии с заданной дисциплиной выбора устройств. Тот факт, что коэффициент использования второго устройства выше, чем первого можно объяснить тем, что среднее время обслуживания у второго устройства больше, чем у первого.
Для поиска устройства по заданному условию используется следующая модификация блока - TRANSFER A,B,C,D. В операнде А записывается символ модификации ALL. Транзакт, вошедший в блок TRANSFER, пытается занять устройство, метка которого указана в операнде В, если это не удаётся то занять устройство, которое отстоит от блока с меткой, указанной в операнде В, на количество блоков, указанное в операнде D, если это ему не удаётся, то транзакт ищет устройство, которое он может занять переходя от метки, указанной в операнде В до метки, указанной в операнде С, с шагом, указанным в операнде D. Если транзакту не удаётся найти ни одного свободного устройства, то он остаётся в блоке TRANSFER до тех пор, пока не появится возможность занять одно из устройств, которое можно найти по заданной процедуре поиска. Если метка, указанная в операнде В, следует сразу после блока TRANSFER, то ее можно не указывать.