Блок 8. Генерируем случайное число и сравниваем его с вероятностью обслуживания. Если полученное число меньше, то переходим к блоку 9. Если больше - к блоку 18.
Блок 9-13. Позволяем вошедшему сообщению использовать многоканальное устройство. Ставим его в очередь, задерживаем на время обслуживания, потом освобождаем очередь и многоканальное устройство. Т.о. сообщение было обслужено.
Блок 15-16. Проверяем, все ли вызовы были обслужены. Если все вызовы уже обслужены, то переходим к блоку 46. В противном случае создаем еще одну копию входящего сообщения и переходим к блоку 4.
Блок 18. Генерируем случайное число и сравниваем его с процентом не ответов. Если полученное число меньше, то переходим к блоку 31, в противном случае (т.е. процент не ответов выше заданного уровня и мы не можем обслужить сообщение) - к блоку 19.
Блок 19-24. Позволяем вошедшему сообщению использовать многоканальное устройство. Ставим его в очередь, задерживаем на среднее время прослушивания сигнала "занято", потом освобождаем очередь и многоканальное устройство. Т.о. сообщение не было обслужено и пробыло в блоке ровно столько времени, сколько нужно на прослушивание сигнала "занято".
Блок 26. Генерируем случайное число и сравниваем его с функцией настойчивости.
Если число меньше или равно функции, то переходим к блоку 27, в противном
случае - к блоку 42.
Рис. 3.2 Алгоритм имитационной модели функционирования концентратора
Блок 27-30. Итак, наше сообщение не было обслужено по причине занятости абонента. Задерживаем его на время, равное интервалу между ПВ при занятости абонента и отправляем к блоку 7.
Блок 31-36. Процент не ответов в нашей сети связи ниже заданного уровня. Таким образом, мы можем обслужить еще одно сообщение. Устанавливаем связь. Позволяем вошедшему сообщению использовать многоканальное устройство. Ставим его в очередь, задерживаем его (на среднее время установления связи), потом освобождаем очередь и многоканальное устройство.
Блок 37. Имитируем отсутствие абонента. Генерируем случайное число и сравниваем его с функцией настойчивости при отсутствии абонента. Если полученное число меньше или равно функции, то переходим к блоку 38, в противном случае - к блоку 42.
Блок 38-41. Сообщение не было обслужено по причине отсутствия абонента. Задерживаем сообщение на время, равное среднему интервалу между повторными вызовами и отправляем его к блоку 7. Т.о. мы повторяем попытку.
Блок 42-45. Проверяем, все ли вызовы были обслужены. Если все вызовы уже обслужены, то переходим к блоку 46, в противном случае создаем еще одну копию входящего сообщения и переходим к блоку 4.
Блок 46-50. Записываем в память все статистические данные.
Блок 51-54. Проверяем коэффициент использования многоканального устройства. Если он ниже требуемого уровня, тогда увеличим коэффициент адаптации с тем, чтобы как можно большему числу сообщений предоставлялся свободный кадр в цифровом тракте. Тем самым мы повысим коэффициент использования многоканального устройство. Если же коэффициент выше требуемого уровня, тогда переходим к блоку 55.
Блок 55. Уничтожаем все транзакты и прогоняем модель еще раз.
В соответствии с блок-диаграммой составим GPSS-программу модели функционирования концентратора
цифровой сети связи.
SIMULATE
SVE1 EQU 1
SVE1 STORAGE 6
INITIAL X$ABON,30
INITIAL X$INTER,12000
INITIAL X$RAZG,1200
INITIAL X$PROSL,150
INITIAL X$POFT,600
INITIAL X$OBSL,400
INITIAL X$NEOT,500
INITIAL X$UST,40
INITIAL X$ADAP,5
PER1 FVARIABLE 100000#N$EX1/X$POTER
PER2 FVARIABLE 100000#N$DL1/X$POTER
PER3 FVARIABLE 100000#X$SRED/(N$DL1+N$EX1)
BER1 FVARIABLE X$BLO1+N$ZAN-X$BLO2
BER2 FVARIABLE X$POTER+X$BLO3+X$BLO4
PER4 FVARIABLE 100000#(V$BER1/V$BER2)
*
EXP FUNCTION RN4,C24
,0/.100,.104/.200,.222/.300,.355/.400,.509/.500,.690/
.600,.915/.700,1.200/.750,1.380/.800,1.600/.840,1.830/
.880,2.120/.900,2.300/.920,2.520/.940,2.810/.950,2.990/
.960,3.200/.970,3.500/.980,3.900/.990,4.600/.995,5.300/
.998,6.200/.999,7/1,8/
*
TOCH FUNCTION P3,C7
,600/2,700/3,750/4,790/5,820/6,850/7,880
*
OTS FUNCTION P3,C3
,300/2,400/3,500
*
GENERATE 1,,,1
SPLIT X$ABON,ACT
TERMINATE
ACT ADVANCE X$INTER,FN$EXP
ASSIGN 3,1
SAVEVALUE POTER+,1
*
VHO TEST LE S1,X$ADAP
TEST L RN6,X$OBSL,IPV
ENTER 1
QUEUE 1
ADVANCE X$RAZG,FN$EXP
DEPART 1
LEAVE 1
*
DL1 SAVEVALUE SRED+,P3
TEST NE TG1,1,ED1
SPLIT 1,ACT
TERMINATE 1
*
IPV TEST G RN7,X$NEOT,NOT
SAVEVALUE BLO2+,1
ENTER 1
QUEUE 1
ZAN ADVANCE X$PROSL,FN$EXP
DEPART 1
LEAVE 1
*
OTK SAVEVALUE BLO1+,1
TEST LE RN5,FN$TOCH,EX1
SAVEVALUE BLO3+,1
ASSIGN 3+,1
ADVANCE X$POFT,FN$EXP
TRANSFER ,VHO
*
NOT SAVEVALUE ADR+,1
ENTER 1
QUEUE 1
ADVANCE X$UST,FN$EXP
DEPART 1
LEAVE 1
TEST LE RN6,FN$OTS,EX1
SAVEVALUE BLO4+,1
ASSIGN 3+,1
ADVANCE X$POFT,FN$EXP
TRANSFER ,VHO
EX1 SAVEVALUE SRED+,P3
TEST NE TG1,1,ED1
SPLIT 1,ACT
TERMINATE 1
ED1 SAVEVALUE RES1,V$PER1
SAVEVALUE RES2,V$PER2
SAVEVALUE RES3,V$PER3
SAVEVALUE RES4,V$PER4
TERMINATE 1
GENERATE 1000
SAVEVALUE ADAP,5
TEST G SR1,800,KON
SAVEVALUE ADAP,6
KON TERMINATE
START 500
0341 REPORT REPORT.GPS
END
Поясним текст программы.
Карта SIMULATE. Она должна предворять как все карты описания, так и все карты, задающие операционные блоки. При отсутствии карты SIMULATE интерпретация модели, т.е. собственно моделирование, производится не будет - система только проверит правильность описания модели с точки зрения синтаксиса языка описания дискретных сложных систем.
SVE1 EQU 1
Блок EQU предназначен для присвоения числовых значений именам, используемым в модели (т.к. для присваивания именам нужных номеров, необходимо, перед использованием имен присвоить им соответствующие номера).
Устройству SVE1 присвоили номер 1.
SVE1 STORAGE 6
Блок STORAGE определяет емкость многоканального устройства в текущей модели. Когда сообщение пытается войти в блок ENTER, то запрос на емкость многоканального устройства сравнивается с доступной емкостью многоканального устройства. Если запрос может быть выполнен, то сообщение входит в блок ENTER, и емкость доступной памяти многоканального устройства уменьшается. Если запрос сообщения не может быть удовлетворен, то сообщение входит в список задержки многоканального устройства.
Многоканальное устройство SVE1 имеет емкость 6.
В данном случае емкость SVE1 определяет число кадров в цифровом тракте.
INITIAL X$ABON,30
Блок INITIAL позволяет задавать начальные значения ячеек.
Ячейка с именем ABON имеет начальное значение равное 30.
Ячейка ABON определяет число абонентов в подсети.
INITIAL X$INTER,12000
Ячейка с именем INTER имеет начальное значение равное 12000.
Ячейка INTER определяет средний интервал между вызовами.
INITIAL X$RAZG,1200
Ячейка с именем RAZG имеет начальное значение равное 1200.
Ячейка RAZG определяет среднюю длительность разговора.
INITIAL X$PROSL,150
Ячейка с именем PROSL имеет начальное значение равное 150.
Ячейка PROSL определяет среднюю длительность прослушивания сигнала "занято".
INITIAL X$POFT,600
Ячейка с именем POFT имеет начальное значение равное 600.
Ячейка POFT определяет средний интервал между повторными вызовами.
INITIAL X$OBSL,400
Ячейка с именем OBSL имеет начальное значение равное 400.
Ячейка OBSL определяет вероятность обслуживания (в тысячных долях).
INITIAL X$NEOT,500
Ячейка с именем NEOT имеет начальное значение равное 500.
Ячейка NEOT определяет процент не ответов (в тысячных долях).
INITIAL X$UST,40
Ячейка с именем UST имеет начальное значение равное 40.
Ячейка UST определяет среднюю длительность установления связи.
INITIAL X$ADAP,5
Ячейка с именем ADAP имеет начальное значение равное 5.
Ячейка ADAP определяет порог адаптации.
0055 PER1 FVARIABLE 100000#N$EX1/X$POTER
Блок FVARIABLE определяет переменные с плавающей точкой.
Переменная PER1 равна: 100000 умножить на значение счетчика числа входов в блок EX1 (этот счетчик изменяется при каждом входе сообщения в блок EX1) и делить на значение переменной POTER, которая содержит суммарное число первичных вызовов.
Переменная PER1 определяет вероятность потери по времени.
0060 PER2 FVARIABLE 100000#N$DL1/X$POTER
Переменная PER2 определяет вероятность успешного завершения разговора.
0065 PER3 FVARIABLE 100000#X$SRED/(N$DL1+N$EX1)
Переменная PER3 равна: значение переменной SRED (содержит сумму повторных попыток) умножить на 100000 и делить на сумму значений счетчиков числа входов в блоки DL1 и EX1.
Переменная PER3 определяет среднее число попыток на один вызов.
0070 BER1 FVARIABLE X$BLO1+N$ZAN-X$BLO2
Переменная BER1 равна: значение переменной BLO1 (содержит число блокировок из-за отсутствия кадра) плюс значение счетчика числа входов в блок ZAN и минус значение ячейки BLO2 (содержит число состояний занято).
0071 BER2 FVARIABLE X$POTER+X$BLO3+X$BLO4
Переменная BER2 равна: значение переменной POTER плюс значение переменной BLO3 (содержит число повторных попыток при занятости адресата) плюс значение переменной BLO4 (содержит число повторных попыток при не ответе абонента).
0072 PER4 FVARIABLE 100000#(V$BER1/V$BER2)
Переменная PER4 равна: 100000 умножить на значение переменной BER1 и делить на значение переменной BER2.
Переменная PER4 определяет вероятность блокировки в абонентском тракте.
EXP FUNCTION RN4,C24
,0/.100,.104/.200,.222/.300,.355/ ...
Блок FUNCTION описывает функцию. Функция EXP является непрерывной числовой (С) функцией с числом пар значений X и Y равным 24. Функция принимает значение 0 с вероятностью 0; 0,104 - с вероятностью 0,100 и т.д. В качестве аргумента функции используется случайное число RN4.
Функция EXP - экспоненциальная функция.
TOCH FUNCTION P3,C7
,600/2,700/3,750/4,790/5,820/6,850/7,880
Функция TOCH является непрерывной числовой (С) функцией с числом пар значений X и Y равным 7. При значениях первого параметра транзакта Р3 функция с именем TOCH будет принимать значения: 600, если Р3 будет равен 1; 700, если Р3 будет равен 2 и т.д.
Функция TOCH - точная функция настойчивости.
OTS FUNCTION P3,C3
,300/2,400/3,500
Функция OTS является непрерывной числовой (С) функцией с числом пар значений X и Y равным 3. При значениях первого параметра транзакта Р3 функция с именем OTS будет принимать значения: 300, если Р4 будет равен 1; 400, если Р4 будет равен 2 и т.д.
Функция OTS - функция настойчивости при отсутствии абонента.
GENERATE 1,,,1
Блок GENERATE осуществляет ввод транзактов в модель.
Транзакты будут вводиться в модель через каждую 1 единицу модельного времени с приоритетом 1 (максимально - 127). Т.о. мы сгенерировали исходный транзакт.
SPLIT X$ABON,ACT
Блок SPLIT выполняет функцию копирования входящего в него сообщения, которое называется исходным или порождающим.
Создает число копий, указанное в ячейке с именем ABON, затем переходит к блоку с меткой ACT. Т.о. мы получили заданное число источников.
TERMINATE
Блок TERMINATE удаляет из модели входящие сообщения (транзакты).
Т.к. поле А пусто, то сообщение уничтожается, а содержимое счетчика не изменяется.
0140 ACT ADVANCE X$INTER,FN$EXP
Блок ADVANCE задерживает продвижение транзактов на заданный период времени.
Среднее время пребывания сообщения в блоке ADVANCE задано в ячейке с именем INTER, способ модификации среднего значения задан функцией EXP. Т.о. мы задали интервал между вызовами.
ASSIGN 3,1
Блок ASSIGN заменяет, увеличивает или уменьшает текущее значение параметра сообщения на заданное значение.
В значении параметра с номером 3 сохраняется значение 1. Параметр 3 содержит число ПВ.
SAVEVALUE POTER+,1
Блок SAVEVALUE используется для замены, увеличения или уменьшения текущего содержимого значений.
Значение 1 добавляется к значению переменной POTER, которая содержит суммарное число первичных вызовов.
0155 VHO TEST LE S1,X$ADAP
Блок TEST определяет номер следующего блока для вошедшего в него сообщения в зависимости от того, выполняется требуемое условие или нет.
В данном случае сравнивается содержимое многоканального устройства под номером 1 (S1) со значением, хранимым в ячейке с именем ADAP. S1 должна быть меньше или равна (LE) значению ячейки ADAP. Т.к. поле С блока TEST пусто, то транзакты не могут войти в блок TEST до тех пор, пока условия не изменятся таким образом, что отношение будет истинно. Как только отношение будет истинно, сообщение войдет в блок TEST и пытается перейти к следующему по номеру блоку. Т.о. мы проверили наличие свободного кадра.
0160 TEST L RN6,X$OBSL,IPV
Сравнивается значение случайной величины RN6 (ее значение колеблется от 0 до 1) со значением, хранимым в ячейке с именем OBSL (вероятность обслуживания). RN6 должна быть меньше (L) значения ячейки OBSL. Если отношение истинно, то транзакт переходит к следующему блоку. Если отношение ложно - к блоку с меткой IPV.
Т.о. мы осуществили проверку обслуживания.
ENTER 1
Блок ENTER позволяет вошедшему сообщению использовать многоканальное устройство.
Занимаем многоканальное устройство под номером 1.
QUEUE 1
Блок QUEUE увеличивает длину очереди.
Длина очереди под номером 1 увеличивается на 1 (поскольку операнд В отсутствует). Если очередь еще не существует, то она создается.
ADVANCE X$RAZG,FN$EXP
Среднее время пребывания сообщения в блоке ADVANCE задано в ячейке с именем RAZG, способ модификации среднего значения задан функцией EXP. Т.о. мы задержали сообщение на время, равное средней длительности разговора.
DEPART 1
Блок DEPART служит для уменьшения длины очереди.
Длина очереди под номером 1 уменьшается на 1 (поскольку операнд В отсутствует).
LEAVE 1
Блок LEAVE освобождает определенное число единиц многоканального устройства.
Освобождается одна единица (т.к. операнд В отсутствует) многоканального устройства под номером 1.
DL1 SAVEVALUE SRED+,P3
Значение Р3 добавляется к значению переменной SRED, которая содержит сумму повторных попыток.
TEST NE TG1,1,ED1
Сравнивается текущее значение счетчика завершений TG1 (сообщения, вошедшие в блоки TERMINATE с ненулевым операндом А, уменьшают значение этого счетчика на число, равное значению операнда А) с единицей. TG1 должна быть не равна (NE) единице. Если отношение истинно, то транзакт переходит к следующему блоку. Если отношение ложно - к блоку с меткой ED1. Таким образом, мы проверили, все ли вызовы (транзакты) мы обслужили.
SPLIT 1,ACT
Создает одну копию входящего сообщения и переходит к блоку с меткой ACT.
0185 TERMINATE 1
Уничтожает транзакт.
IPV TEST G RN7,X$NEOT,NOT
Сравнивается значение случайной величины RN7 (ее значение колеблется от 0 до 1) со значением хранимым в ячейке с именем NEOT (процент не ответов). RN7 должна быть больше (G) значения ячейки NEOT. Если отношение истинно, то транзакт переходит к следующему блоку. Если отношение ложно - к блоку с меткой NOT.
SAVEVALUE BLO2+,1
Значение 1 добавляется к значению переменной BLO2, которая содержит число состояний занято.
ENTER 1
Занимается многоканальное устройство под номером 1.
QUEUE 1
Длина очереди под номером 1 увеличивается на 1 (поскольку операнд В отсутствует).
0198 ZAN ADVANCE X$PROSL,FN$EXP
Среднее время пребывания сообщения в блоке ADVANCE задано в ячейке с именем PROSL, способ модификации среднего значения задан функцией EXP. Т.о. мы задержали сообщение на время, равное среднему времени прослушивания сигнала "занято".
DEPART 1
В данном случае длина очереди под номером 1 уменьшается на 1 (поскольку операнд В отсутствует).
LEAVE 1
Освобождается одна единица (т.к. операнд В отсутствует) многоканального устройства под номером 1.
OTK SAVEVALUE BLO1+,1
Значение 1 добавляется к значению переменной BLO1.
0210 TEST LE RN5,FN$TOCH,EX1
Сравнивается значение случайной величины RN5 (ее значение колеблется от 0 до 1) со значением функции TOCH. RN5 должна быть меньше или равна (LE) значению функции TOCH. Т.к. поле С блока TEST пусто, то транзакты не могут войти в блок TEST до тех пор, пока условия не изменятся таким образом, что отношение будет истинно. Как только отношение будет истинно, сообщение войдет в блок TEST и пытается перейти к следующему по номеру блоку.