Опубликован: 16.11.2010 | Уровень: специалист | Доступ: платный
Лекция 7:

Моделирование в GPSS World

6.5. Уменьшение числа объектов в модели

6.5.1. Постановка задачи

Автоматическая телефонная станция (АТС) обслуживает n_{1} телефонных аппаратов (ТА) первой категории (ТА1), n_{2} ТА второй категории (ТА2) и имеет n_{3} выходов в сеть связи. Интервал времени T_{1} /n_{1} между звонками с ТА1 случайный. Вероятность звонка с i-го ТА1 p_{1i} =1/ n_{1}. Вероятность того, что при этом для разговора потребуется внешняя линия связи p_{2} = n_{3} / (n_{2} + n_{3} ), соединение с ТА2 p_{3} = n_{2} / (n_{2} + n_{3} ). При этом может быть занята любая свободная линия связи, а вероятность звонка на j -й ТА2 p_{4j} =1/ n_{2}. Длительность t_{1} разговора с ТА1 случайная. Время t_{ож1} ожидания при занятости ТА или внешних линий связи случайное. Вероятность того, что ТА2 не ответит, p_{5}. При этом время t_{ож2} случайное.

Интервал времени T_{2} /n_{2} между звонками с ТА2 случайный. Вероятность звонка с k -го ТА2 p_{6k} =1/ n_{2}. Вероятности того, что при этом для разговора потребуются внешняя линия связи p_{7} = n_{3} / (n_{1} + n_{3} ), соединение с ТА1 p_{7} = n_{1} / (n_{1} + n_{3} ). Для разговора может быть занята любая свободная внешняя линия связи, а вероятность звонка на l -й ТА1 p_{9l} =1/ n_{1}. Длительность t_{2} разговора с ТА2 случайная. Время t_{ож3} при занятости ТА или внешних линий связи случайное. Вероятность того, что ТА1 не ответит, p_{10}. При этом время t_{ож4} также случайное.

Звонки с ТА1 обладают абсолютным приоритетом по отношению к звонкам с ТА2 при занятости внешнего выхода в сеть связи. Поэтому, если при поступлении с ТА1 заявки на разговор по внешнему выходу все внешние выходы будут заняты разговорами также с ТА1, прерывания разговоров не происходит и заявка считается потерянной. Если же некоторые внешние выходы будут заняты разговорами с ТА2, после t_{ож1} один из этих разговоров прерывается (теряется) и начинается разговор по этому выходу с ТА1.

6.5.2. Исходные данные

n_{1} = 10; T_{1} = 50; Exponential(T_{1} / n_{1} ); \\
n_{2} = 20; T_{2} = 400;   Exponential(T_{2} / n_{2}); \\
n_{3}= 3; Normal(t_{ож1}, t_{0ож1}) = Normal(3, 0.5);\\
p_{5}= 0.3; Normal(t_{ож2}, t_{0ож2}) = Normal(3, 0.5);\\
Exponential(t_{1}) = Exponential(3); Exponential(t_{2}) = Exponential(5);\\
Normal(t_{ож3} , t_{0ож3} ) = Normal(2.5, 0.4);\\
p_{10}=0.7; Normal(t_{ож4}, t_{0ож4}) = Normal(2, 0.3).\\

6.5.3. Задание на исследование

Разработать имитационную модель функционирования АТС. Исследовать зависимость вероятности разговоров абонентами ТА1 от интервалов времени T1, T2, времени t1, t2 разговоров и вероятностей р5 и р10 ответа на звонки абонентов ТА2 и ТА1 соответственно.

Результаты моделирования необходимо получить с точностью \varepsilon = 0,01 и доверительной вероятностью (достоверностью) \alpha = 0,99.

6.5.4. Блок-диаграмма модели

Модель функционирования АТС должна иметь:

  • задание исходных данных;
  • сегмент имитации телефонных разговоров с ТА1;
  • сегмент имитации телефонных разговоров с ТА2;
  • сегмент задания времени моделирования и расчета результатов моделирования.

Телефоны и внешние выходы в модели нужно представить ОКУ, а заявки на разговоры - транзактами. Казалось бы, что в целях сокращения программы модели нужно использовать МКУ, однако МКУ не дает возможности идентифицировать каждый свой канал. Что касается сокращения, то этого можно достичь и с ОКУ.

В программе п. 6.5.1.6 (сегмент имитации работы постов контроля) был продемонстрирован метод сокращения блоков модели за счет замены имен МКУ номерами. Язык GPSS не позволяет сразу, без объявления имен МКУ, использовать номера.

Но для одноканального устройства это возможно. Дадим, используя переменные пользователя, номера ОКУ, предварительно не указывая их имена:

  • ТА1 - 1 … N1_ ;
  • ТА2 - (N1_+1) … (N1_+N2_) ;
  • внешние выходы - (N1_+N2_+1) … (N1_+N2_+N3_).

Нумерацию будем использовать в блок-диаграмме и программе модели. За счет этого при увеличении числа ТА1, ТА2 и внешних выходов программа модели не потребует внесения каких-либо изменений.

Конечно, можно также определить арифметические выражения для вычисления (N1_+N2_), (N1_+N2_+N3_) и затем ссылаться на них в программе модели, например:

Num1            VARIABLE   N1_+N2_
Num2            VARIABLE   N1_+N2_+N3_

В больших моделях этот вариант предпочтителен. Для лучшего понимания построения модели ее сегменты разделены на части, реализующие самостоятельные функции. Сегмент имитации телефонных разговоров с ТА1:

  • определение номера звонящего ТА1;
  • поиск свободного внешнего выхода;
  • поиск внешнего выхода, занятого ТА2;
  • прерывание разговора с ТА2;
  • имитация ведения разговора с ТА1 без прерывания разговора с ТА2;
  • определение номера ТА2, на который звонят с ТА1;
  • имитация разговора между абонентами ТА1 и ТА2. Сегмент имитации телефонных разговоров абонентами ТА2:
  • определение номера звонящего ТА2;
  • поиск свободного внешнего выхода;
  • имитация ведения разговора с ТА2;
  • определение номера ТА1, на который звонят с ТА2;
  • имитация разговора абонентов ТА2 и ТА1.

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

  • занятия и освобождения устройства (режим FIFO);
  • прерывания работы устройства.

Для имитации прерывания телефонных разговоров абонентов ТА2 звонками абонентов с ТА1 используются блоки PREEMPT и RETURN.

Блок-диаграмма модели представлена ниже (рис. 6.4).

Блок-диаграмма модели АТС (лист 1)

увеличить изображение
Рис. 6.4. Блок-диаграмма модели АТС (лист 1)
Блок-диаграмма модели АТС (продолжение, лист 2)

увеличить изображение
Рис. 6.4. Блок-диаграмма модели АТС (продолжение, лист 2)
Блок-диаграмма модели АТС (продолжение, лист 3)

увеличить изображение
Рис. 6.4. Блок-диаграмма модели АТС (продолжение, лист 3)
Блок-диаграмма модели АТС (продолжение, лист 4)

увеличить изображение
Рис. 6.4. Блок-диаграмма модели АТС (продолжение, лист 4)
Блок-диаграмма модели АТС (окончание, лист 5)

увеличить изображение
Рис. 6.4. Блок-диаграмма модели АТС (окончание, лист 5)

6.5.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                0                        0.614
VER2                0                        0.396

Вероятность ведения разговоров с ТА2 Ver2 = 0,396 меньше, чем Ver1 = 0,614. Одним из факторов, влияющим на это, является вероятность P10_ = 0,7 того, что абонент ТА1 на звонок абонента ТА2 не ответит.

Оставим без изменений все исходные данные, установим лишь равную вероятность не ответа на звонки абонентами обеих категорий P10_ = P5_ = 0,3.

По окончании моделирования получим:

SAVEVALUE    RETRY              VALUE
VER1                0                        0.584
VER2                0                        0.625
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!

Лариса Парфенова
Лариса Парфенова

1) Можно ли экстерном получить второе высшее образование "Программная инженерия" ?

2) Трудоустраиваете ли Вы выпускников?

3) Можно ли с Вашим дипломом поступить в аспирантуру?

 

Максим Казначеев
Максим Казначеев
Россия, Армавир, Армавирский Государственный Педагогический Университет, 2005