|
Автоматическая телефонная станция (АТС) обслуживает телефонных аппаратов (ТА) первой категории (ТА1), ТА второй категории (ТА2) и имеет выходов в сеть связи. Интервал времени между звонками с ТА1 случайный. Вероятность звонка с i-го ТА1 Вероятность того, что при этом для разговора потребуется внешняя линия связи соединение с ТА2 При этом может быть занята любая свободная линия связи, а вероятность звонка на -й ТА2 Длительность разговора с ТА1 случайная. Время ожидания при занятости ТА или внешних линий связи случайное. Вероятность того, что ТА2 не ответит, При этом время случайное.
Интервал времени между звонками с ТА2 случайный. Вероятность звонка с -го ТА2 Вероятности того, что при этом для разговора потребуются внешняя линия связи соединение с ТА1 Для разговора может быть занята любая свободная внешняя линия связи, а вероятность звонка на -й ТА1 Длительность разговора с ТА2 случайная. Время при занятости ТА или внешних линий связи случайное. Вероятность того, что ТА1 не ответит, При этом время также случайное.
Звонки с ТА1 обладают абсолютным приоритетом по отношению к звонкам с ТА2 при занятости внешнего выхода в сеть связи. Поэтому, если при поступлении с ТА1 заявки на разговор по внешнему выходу все внешние выходы будут заняты разговорами также с ТА1, прерывания разговоров не происходит и заявка считается потерянной. Если же некоторые внешние выходы будут заняты разговорами с ТА2, после один из этих разговоров прерывается (теряется) и начинается разговор по этому выходу с ТА1.
Разработать имитационную модель функционирования АТС. Исследовать зависимость вероятности разговоров абонентами ТА1 от интервалов времени T1, T2, времени t1, t2 разговоров и вероятностей р5 и р10 ответа на звонки абонентов ТА2 и ТА1 соответственно.
Результаты моделирования необходимо получить с точностью и доверительной вероятностью (достоверностью) \alpha = 0,99.
Модель функционирования АТС должна иметь:
Телефоны и внешние выходы в модели нужно представить ОКУ, а заявки на разговоры - транзактами. Казалось бы, что в целях сокращения программы модели нужно использовать МКУ, однако МКУ не дает возможности идентифицировать каждый свой канал. Что касается сокращения, то этого можно достичь и с ОКУ.
В программе п. 6.5.1.6 (сегмент имитации работы постов контроля) был продемонстрирован метод сокращения блоков модели за счет замены имен МКУ номерами. Язык GPSS не позволяет сразу, без объявления имен МКУ, использовать номера.
Но для одноканального устройства это возможно. Дадим, используя переменные пользователя, номера ОКУ, предварительно не указывая их имена:
Нумерацию будем использовать в блок-диаграмме и программе модели. За счет этого при увеличении числа ТА1, ТА2 и внешних выходов программа модели не потребует внесения каких-либо изменений.
Конечно, можно также определить арифметические выражения для вычисления (N1_+N2_), (N1_+N2_+N3_) и затем ссылаться на них в программе модели, например:
Num1VARIABLE N1_+N2_ Num2VARIABLE N1_+N2_+N3_
В больших моделях этот вариант предпочтителен. Для лучшего понимания построения модели ее сегменты разделены на части, реализующие самостоятельные функции. Сегмент имитации телефонных разговоров с ТА1:
В программе демонстрируется возможность GPSS описания и использования в одной и той же модели ОКУ, функционирующего в различных режимах:
Для имитации прерывания телефонных разговоров абонентов ТА2 звонками абонентов с ТА1 используются блоки PREEMPT и RETURN.
Блок-диаграмма модели представлена ниже (рис. 6.4).
Рис. 6.4. Блок-диаграмма модели АТС (лист 1) Рис. 6.4. Блок-диаграмма модели АТС (продолжение, лист 2) Рис. 6.4. Блок-диаграмма модели АТС (продолжение, лист 3) Рис. 6.4. Блок-диаграмма модели АТС (продолжение, лист 4) Рис. 6.4. Блок-диаграмма модели АТС (окончание, лист 5) |
В программе модели для задания исходных данных используются переменные пользователя. Значения им присваиваются командой EQU. Это позволяет проводить эксперименты с использованием встроенных генераторов, так как факторы в них должны быть только переменными пользователя.
Рассмотрим работу сегмента имитации телефонных разговоров с ТА1.
Генератор этого сегмента вводит в модель транзакты со средним интервалом времени (T1_/ N1_ ). Поскольку звонки с ТА1 имеют абсолютный приоритет, то блоком GENERATE транзактам присваивается приоритет 1. Генератор сегмента имитации телефонных разговоров с ТА2 вводит в модель транзакты с нулевым приоритетом.
После ввода транзакта в модель, имитирующего заявку на звонок, производится определение номера звонящего ТА1. Группа событий - звонки с ТА1 - рассматривается как полная группа несовместных событий. Три варианта алгоритмов розыгрыша таких событий рассматривались ранее (п. 3.7). В модели реализован алгоритм розыгрыша в цикле, что делает его независимым при изменении количества телефонных аппаратов.
Определенный в результате розыгрыша номер ТА1 заносится в параметр Р3 транзакта. Однако возможно, что с этого телефона уже звонят. Поэтому блоком GATE производится проверка: свободен ли ТА1 с данным номером? Если нет, заявка теряется.
Если телефон свободен, то далее определяется: куда звонок? На ТА2 или требуется внешний выход? Ответ на этот вопрос находится розыгрышем единичного события (см. п. 3.6).
Пусть требуется внешний выход. Поиск свободного внешнего выхода производится в цикле от номера (N1_+ N2_)+1) до номера ( N1_+ N2_+ N3_). Предположим, что найден свободный
внешний выход, номер которого занесен в параметр Р4. Тогда последовательностью блоков, начиная с метки Мет4, имитируется ведение разговора с ТА1 без прерывания разговора по внешнему выходу с ТА2. После занятия свободного выхода в сохраняемую ячейку с тем же номером, что и номер занятого внешнего выхода, заносится уровень приоритета, в данном случае это 1.
Разговор с ТА1 по внешнему выходу состоялся. Транзакт выводится из модели блоком TERMINATE с меткой Ter2.
Вернемся к поиску свободного внешнего выхода. Пусть все внешние выходы заняты. Далее отыскивается внешний выход, занятый разговором с ТА2. Поиск производится также в цикле от номера (N1_+ N2_) +1 до номера ( N1_+ N2_+ N3_). Однако при этом проверяется содержимое сохраняемых ячеек с такими же номерами, как и номера внешних выходов. Если содержимое проверяемой ячейки равно 1, то внешний выход занят ТА1. Если все внешние выходы заняты ТА1, т. е. во всех проверяемых сохраняемых ячейках 1, заявка на звонок теряется - транзакт отправляется на метку Мет23.
Пусть найден внешний выход, занятый ТА2, т. е. в соответствующей сохраняемой ячейке 0. Транзакт переходит к последовательности блоков, начинающихся с метки Мет22. Эта последовательность имитирует прерывание разговора с ТА2 и ведение разговора с ТА1 по внешнему выходу. По окончании разговора тран-закт выводится из модели блоком TERMINATE с меткой Ter1.
Возвратимся к последовательности блоков, разыгрывающей номер ТА1, с которого поступает заявка на звонок. Пусть теперь требуется не внешний выход, а нужно позвонить одному из абонентов ТА2. В этом случае транзакт направляется к последовательности блоков, начинающейся с метки Мет2. Эта последовательность имитирует определение номера ТА2, на который звонят с ТА1. Номер ТА2 разыгрывается также, как и ранее рассмотренный розыгрыш номера ТА1. После определения номера ТА2 проверяется: свободен ли ТА2 с данным номером? Если не свободен, фиксируется несостоявшийся разговор выводом транзакта из модели блоком TERMINATE с меткой Ter3. Если же ТА2 свободен, транзакт направляется к последовательности блоков, начинающейся с метки Мет6. Эти блоки имитируют ведение разговора абонентами ТА1 и ТА2. По окончании разговора транзакт выводится из модели блоком TERMINATE с меткой Ter4.
Сегмент имитации телефонных разговоров с ТА2 отличается от только что рассмотренного тем, что в нем отсутствует последовательность блоков, имитирующей прерывание разговоров с ТА2 заявками на разговор с ТА1 при отсутствии свободных внешних выходов.
; Модель функционирования автоматической телефонной станции ; Задание исходных данных VrMod EQU 3600 ; Время моделирования, 1 ед. мод. вр. = 1 с N1_ EQU 10 ; Количество ТА1 N2_ EQU 20 ; Количество ТА2 N3_ EQU 3 ; Количество внешних выходов T1_ EQU 40 ; Время для расчета интервалов между звонками с ТА1 T2_ EQU 50 ; Время для расчета интервалов между звонками с ТА2 Tog1 EQU 3.5 ; Среднее время ожидания при занятости внешних линий Tog01 EQU 0.5 ; Среднеквадратическое отклонение времени ожидания Tog2 EQU 3 ; Среднее время ожидания при звонке с ТА1 на ТА2 Tog02 EQU 0.5 ; Среднеквадратическое отклонение времени ожидания Tog3 EQU 2.5 ; Среднее время ожидания при занятости внешних линий Tog03 EQU 0.4 ; Среднеквадратическое отклонение времени ожидания Tog4 EQU 2 ; Среднее время ожидания при звонке с ТА2 на ТА1 Tog04 EQU 0.3 ; Среднеквадратическое отклонение времени ожидания Trazg1 EQU 3 ; Среднее время разговора с ТА1 Trazg2 EQU 5 ; Среднее время разговора с ТА2 P5_ EQU 0.7 ; Вероятность того, что ТА2 не ответит P10_ EQU 0.3 ; Вероятность того, что ТА1 не ответит ; Сегмент имитации телефонных разговоров с ТА1 GENERATE (Exponential(333,0,(T1_/N1_))),,,,1 ; Определение номера звонящего ТА1 Met0 ASSIGN 7,(RN43/1000) ; Обращение к генератору RN Met1 ASSIGN 3+,1 ; Начало цикла определения номера звонящего ТА1 TEST LE P7,(P3#(1/N1_)),Met1 ; Если условие выполнено, то номер ТА1 запомнить в Р3 GATE NU P3,Met9 ; Свободен ли телефон с данным номером? Если да, SEIZE P3 ; то звонят с него ASSIGN 7,(RN343/1000) ; Обращение к генератору RN TEST LE P7,(N3_/(N2_+N3_)),Met2 ; Если условие выполнено, то нужен внешний выход ; Поиск свободного внешнего выхода ASSIGN 4,(N1_+N2_) ; Подготовка к циклу Met3 ASSIGN 4+,1 ; Начало цикла определения номера свободного внешнего выхода GATE U P4,Met4 ; Свободен ли внешний выход? TEST GE P4,(N1_+N2_+N3_),Met3 ; Все ли внешние выходы проверены и не найдено свободного? ADVANCE Tog1,Tog01 ; Если да, то задержаться и ; Поиск внешнего выхода, занятого ТА2 ASSIGN 4,(N1_+N2_) ; подготовка к циклу Met21 ASSIGN 4+,1 ; Начало цикла определения номера внешнего выхода, занятого ТА2 TEST E X*4,1,Met22 ; Равно ли значение сохраняемой ячейки 1? Если нет, то перейти к прерыванию разговора TEST GE P4,(N1_+N2_+N3_),Met21 ; Все ли сохраняемые ячейки проверены? Не найдено ни одной, значение которой равно 0? Если да, то TRANSFER ,Met23 ; все внешние выходы заняты звонками с ТА1 ; Прерывание разговора с ТА2 Met22 PREEMPT P4,PR,Met24,,RE ; Прервать разговор с ТА2 по внешнему выходу без права продолжения SAVEVALUE *4,PR ; Сохранить PR в ячейке с номером в Р4 ADVANCE (Exponential(222,0,Trazg1)) ; Имитация разговора с ТА1 по внешнему выходу RETURN P4 ; Освободить внешний выход с номером в Р4 RELEASE P3 ; Освободить ТА1 с номером в Р3 Ter1 TERMINATE ; Состоявшиеся разговоры с ТА1 по внешним выходам с прерыванием разговоров с ТА2 Met23 RELEASE P3 ; Освободить ТА1, разговор с которого по внешнему выходу не состоялся TERMINATE ; Несостоявшиеся разговоры с ТА1 по внешним выходам из-за занятости их ТА1 ; Имитация ведения разговоров с ТА1 без прерывания Met4 SEIZE P4 ; Занять свободный внешний выход с номером в Р4 SAVEVALUE P4,PR ; Занести в ячейку с номером в Р4 уровень приоритета ADVANCE (Exponential(222,0,Trazg1)) ; Имитация разговора с ТА1 RELEASE P4 ; Освободить внешний выход с номером в Р4 RELEASE P3 ; освободить ТА1 с номером в Р3 Ter2 TERMINATE ; Состоявшиеся разговоры с ТА1 по внешним выходам ; Определение номера ТА2, на который звонят с ТА1 Met2 ASSIGN 7,(RN343/1000) ; Обращение к генератору RN ASSIGN 6,0 ; Подготовка к циклу Met5 ASSIGN 6+,1 ; Начало цикла определения номера ТА2, на который звонят с ТА1 TEST LE P7,(P6#(1/N2_)),Met5 ; Если условие выполнено, то номер ТА2 запомнить в Р6 GATE NU (N1_+P6),Met7 ; Свободен ли телефон с данным номером? Если да, ASSIGN 7,(RN343/1000) ; то ответит ли он? TEST LE P7,P5_,Met6 ; Если условие выполнено, то не ответит. Тогда Met7 ADVANCE Tog2,Tog02 ; задержаться и RELEASE P3 ; освободить ТА1 с номером в Р3 Ter3 TERMINATE ; Несостоявшиеся разговоры между абонентами ТА1 и ТА2 ; Имитация разговоров абонентов ТА1 и ТА2 Met6 SEIZE (N1_+P6) ; Занять ТА2 с номером в (N1_+Р6) ADVANCE (Exponential(222,0,Trazg1)) ; Имитация разговора между абонентами ТА1 и ТА2 RELEASE (N1_+P6) ; Освободить ТА2 с номером в (N1_+Р6) RELEASE P3 ; Освободить ТА1 с номером в Р3 Ter4 TERMINATE ; Состоявшиеся разговоры между абонентами ТА1 и ТА2 Met9 TERMINATE ; ТА1 уже был занят, поэтому разговор не состоялся Met24 RELEASE (N1_+P3) ; Прерванные разговоры с ТА2 TERMINATE ; Сегмент имитации телефонных разговоров с ТА2 GENERATE (Exponential(493,0,(T2_/N2_))) ; Определение номера звонящего ТА1 Met10 ASSIGN 7,(RN413/1000) ; Обращение к генератору RN ASSIGN 3,0 ; Подготовка к циклу Met11 ASSIGN 3+,1 ; Начало цикла определения номера звонящего ТА2 TEST LE P7,(P3#(1/N2_)),Met11 ; Если условие выполнено, то номер ТА2 запомнить в Р3 GATE NU (N1_+P3),Met19 ; Свободен ли телефон с данным номером? Если да, SEIZE (N1_+P3) ; то звонят с него ; Поиск свободного внешнего выхода ASSIGN 7,(RN343/1000) ; Обращение к генератору RN TEST LE P7,(N3_/(N1_+N3_)),Met12 ; Если условие выполнено, то нужен внешний выход ASSIGN 4,(N1_+N2_) ; Подготовка к циклу Met13 ASSIGN 4+,1 ; Начало цикла определения номера свободного внешнего выхода GATE U P4,Met14 ; Свободен ли внешний выход? TEST GE P4,(N1_+N2_+N3_),Met13 ; Все ли внешние выходы проверены и не найдено свободного выхода? ADVANCE Tog3,Tog03 ; Если да, то задержаться и RELEASE (N1_+P3) ; Освободить телефон с номером (N1_+P3) Ter5 TERMINATE ; Несостоявшиеся разговоры с ТА2 из-за занятости внешних выходов Met14 SEIZE P4 ; Занять свободный внешний выход SAVEVALUE P4,PR ; Запомнить приоритет абонента, ведущего разговор ADVANCE (Exponential(222,0,Trazg2)) ; Имитация разговора между абонентами ТА2 по внешним выходам RELEASE P4 ; Освободить внешний выход RELEASE (N1_+P3) ; Освободить ТА2 Ter6 TERMINATE ; Состоявшиеся разговоры с ТА2 по внешним выходам ; Определение номера ТА1, на который звонят с ТА2 Met12 ASSIGN 7,(RN343/1000) ; Обращение к генератору RN ASSIGN 6,0 ; Подготовка к циклу Met15 ASSIGN 6+,1 ; Начало цикла определения номера ТА1, на который звонят с ТА2 TEST LE P7,(P6#(1/N1_)),Met15 ; Если условие выполнено, то номер ТА1 запомнить в Р6 GATE NU P6,Met17 ; Свободен ли телефон с данным номером? Если да, ASSIGN 7,(RN343/1000) ; то ответит ли он? TEST LE P7,P10_,Met16 ; Если условие выполнено, то не ответит. Тогда Met17 ADVANCE (Normal(211,Tog2,Tog02)) ; задержаться и RELEASE (N1_+P3) ; освободить телефон с номером N1_+P3 Ter7 TERMINATE ; Несостоявшиеся разговоры с ТА2 из-за занятости ТА1 ; Имитация разговоров абонентов ТА2 и ТА1 Met16 SEIZE P6 ; Занять ТА1 с номером в Р6 ADVANCE (Exponential(222,0,Trazg2)) ; Имитация разговора между абонентами ТА2 и ТА1 RELEASE P6 ; Освободить ТА1 с номером в Р6 RELEASE (N1_+P3) ; Освободить ТА2 с номером N1_+P3 Ter8 TERMINATE ; Состоявшиеся разговоры между абонентами ТА2 и ТА1 Met19 TERMINATE ; Сегмент задания времени моделирования и расчета результатов моделирования GENERATE VrMod ; Задание времени моделирования TEST E TG1,1,Met20 ; Если содержимое счетчика завершений равно 1, то рассчитать SAVEVALUE Ver1,((N$Ter2+N$Ter4)/N$Met0) ; Вероятность ведения разговоров с ТА1 SAVEVALUE Ver2,((N$Ter6+N$Ter8)/N$Met10) ; Вероятность ведения разговоров с ТА2 Met20 TERMINATE 1 ; Фиксация очередного прогона
Приведем результаты моделирования, полученные после 1000 прогонов.
SAVEVALUE RETRY VALUE VER1 00.614 VER2 00.396
Вероятность ведения разговоров с ТА2 Ver2 = 0,396 меньше, чем Ver1 = 0,614. Одним из факторов, влияющим на это, является вероятность P10_ = 0,7 того, что абонент ТА1 на звонок абонента ТА2 не ответит.
Оставим без изменений все исходные данные, установим лишь равную вероятность не ответа на звонки абонентами обеих категорий P10_ = P5_ = 0,3.
По окончании моделирования получим:
SAVEVALUE RETRY VALUE VER1 00.584 VER2 00.625