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

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

6.7. Моделирование неисправностей одноканальных устройств

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

На вычислительный комплекс коммутации сообщений (ВККС) поступают сообщения от n_{1} абонентов с интервалами времени T_{1}, T_{2}, ...,T_{n1}. Сообщения могут быть n_{2} категорий с вероятностями p_{1}, p_{2}, ..., p_{n2} (p_{1} + p_{2} + p_{n2} = 1 ) и вычислительными сложностями их обработки S_{1}, S_{2}, ..., S_{n2} операций (оп) соответственно. Вычислительные сложности случайные. ВККС имеет входной накопитель емкостью L_{1} байт для хранения сообщений, ожидающих передачи. Сообщения 1-й категории обладают относительным приоритетом по отношению к сообщениям остальных категорий при обработке на ВККС. В буфере сообщения размещаются в соответствии с приоритетом.

ВККС обрабатывает сообщения с производительностью Q оп/с. После обработки сообщения передаются по n_{3} каналам связи. Скорость передачи V_{п} бит/с. Сообщения 1-й категории обладают абсолютным приоритетом по отношению к сообщениям других категорий. Поэтому если после обработки сообщения все n_{3} каналов связи заняты передачей сообщений 1-й категории, обработанное сообщение помещается в накопитель каналов связи, если в нем есть место, иначе - теряется. Если же по какому-либо каналу передается сообщение другой категории, происходит прерывание передачи этого сообщения и передается сообщение 1-й категории. Емкость накопителя каналов связи ограничена L_{2} сообщениями.

ВККС и каналы связи имеют конечную надежность. Интервалы времени T_{от1} и T_{от2} между отказами ВККС и каналов связи случайные. Длительности восстановления T_{в1} и T_{в2} ВККС и каналов связи случайные. При отказе канала связи передаваемые сообщения 1-й категории сохраняются в накопителе каналов, если в нем есть место. При выходе из строя ВККС с вероятностью p_{c} все сообщения в накопителе ВККС и накопителе каналов связи сохраняются, обрабатываемое сообщение теряется, а прием ВККС и передача сообщений по каналам связи прекращается. Все поступающие в это время сообщения теряются.

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

Exponential(T_{1} ) = Exponential(T_{2} ) ... = Exponential(T_{6} ) = \\
= Exponential(118,4); n_{1} = 6; n_{3} = 3; n_{2} = 3; \\
p_{1} = 0,3; p_{2} = 0,2;p_{3}= 0,5; L_{1} = 5;   Q = 3600 оп/с \\
Normal(S_{1} , S_{o1} ) = Normal(530000, 6100); \\
Normal(S_{2} , S_{o2} ) == Normal(860000, 5000);\\
Normal(S_{3} , S_{o3} ) = Normal(660000, 7000); \\
Exponential(T_{от1} ) = Exponential(3600); \\
Exponential(T_{в1} ) = =Exponential(3, 7); \\
Exponential(T_{от2} ) = Exponential(1800); \\
Exponential(T_{в2} ) = Exponential(4, 2);p_{c}=. 0,7;V_{п} = 5000 бит/с

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

Разработать имитационную модель функционирования ВККС. Исследовать влияние емкостей входных накопителей, интервалов времени T _{1},T_{2},...,T_{6} и вероятностей p _{1} и p_{2} на вероятности передачи сообщений по категориям и в целом через ВККС в течение двух часов. Провести дисперсионный и регрессионный анализы. Сделать выводы о загруженности элементов ВККС и необходимых мерах по повышению эффективности его функционирования.

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

6.7.4. Уяснение задачи

Представим систему, имитационную модель которой предстоит разработать, схемой (рис. 6.6).

Видно, что ВККС - это многофазная многоканальная система массового обслуживания разомкнутого типа. На рис. 6.6 показаны средства GPSS World, которые будут использованы для моделирования элементов ВККС.

В структуре системы выделен блок контроля состояний ВККС, каналов связи ( GATE ) и их накопителей ( TEST ).

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

Для имитации накопителей будет использоваться список пользователя, т. е. блоки LINK и UNLINK. Но так как емкость накопителя ВККС определяется в байтах, а список пользователя не позволяет вести в них учет, следует ввести сохраняемую ячейку и в ней вести учет текущей емкости накопителя. Также примем, что объем накопителя, занимаемый сообщением, равен его вычислительной сложности.

Для моделирования неисправностей ВККС и каналов связи нужно использовать блоки FUNAVAIL и F AVAIL. В этом случае статистика ОКУ не будет искажена, как это могло быть при использовании блоков PREEMPT и RETURN.

ВККС как система массового обслуживания

увеличить изображение
Рис. 6.6. ВККС как система массового обслуживания

6.7.5. Программа модели

Программа модели согласно декомпозиции ВККС (рис. 6.6) должна иметь:

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

Программа модели функционирования ВККС приведена ниже.

; Модель функционирования ВККС
; Задание исходных данных
VrMod	EQU	7200	; Время моделирования, 1 ед. мод. вр. = 1с
NCan	EQU	3	; Число каналов
n1_	EQU	6	; Количество источников сообщений
MaxKat	EQU	3	; Максимальное число категорий сообщений
T_	EQU	118.4 ; Средний интервал времени поступления сообщений от источника
Q	EQU	3600	; Производительность ВККС, оп/c
V_	EQU	5000	; Скорость передачи, бит/с
Pc_	EQU	0.7 ; Вероятность потери сообщений при отказе ВККС
L1_	EQU	2500000	; Емкость накопителя ВККС, байт
L2_	EQU	5	; Емкость накопителя каналов связи, сообщений
TOtk1	EQU	3600	; Среднее время между отказами ВККС
TOtk2	EQU	1800	; Среднее время между отказами каналов
TVost1	EQU	3.7	; Среднее время восстановления ВККС
TVost2	EQU	4.2	; Среднее время восстановления каналов
; Описание функций, задающих исходные данные
Kat	FUNCTION RN34,D3 ; Вероятности видов категорий
.3,1/.5,2/1,3
S_	FUNCTION P1,D3	; Средние вычислительные сложности
сообщений (длины), оп (байт) по категориям 1,53000/2,86000/3,66000
So_	FUNCTION P1,D3 ; Среднеквадратические отклонения вычис-
лительных сложностей (длин) сообщений, оп (байт) по категориям 1,6100/2,5000/3,7000
; Арифметические выражения вычисления
DL	VARIABLE INT(NORMAL(114,FN$S_,FN$So_))	; Длин (вычислительных сложностей) сообщений
VrPer	VARIABLE (P2/V_)#8	; Времени передачи сообщения
VrObr	VARIABLE P2/Q_	; Времени обработки сообщения
; Сегмент имитации поступления сообщений от источников
	GENERATE (Exponential(11,0,(T_/n1_)))	; Источники сообщений
; Розыгрыш категории сообщения и счета сообщений
Met4	ASSIGN	1,FN$Kat	; Запись в Р1 кода категории и счет сообщений всех категорий
	ASSIGN	10,(P1+MaxKat)	; Запись в Р10 номера Х для счета поступающих сообщений по категориям
	ASSIGN	11,(P10+MaxKat)	; Запись в Р11 номера Х для счета переданных сообщений по категориям
	ASSIGN	12,(P11+MaxKat)	; Запись в Р12 номера Х для счета потерянных сообщений по категориям
	ASSIGN	13,(P12+MaxKat)	; Запись в Р13 номера Х для записи вероятности переданных сообщений по категориям
	ASSIGN	14,(P13+MaxKat)	; Запись в Р14 номера Х для записи вероятности потерянных сообщений по категориям
	SAVEVALUE	P10+,1	; Cчет поступающих сообщений по категориям
; Розыгрыш характеристик сообщений
Met02	ASSIGN	2,V$DL	; Занесение в Р2 длины (вычислительной сложности) сообщения
	ASSIGN	3,V$VrPer	; Занесение в Р3 времени передачи сообщения
	ASSIGN	8,V$VrObr	; Занесение в Р8 времени обработки сообщения
	ASSIGN	7,0	; Код 0 в Р7 - признак попадания сообщения в накопитель
	TEST E	P1,1,Met111 ; Если сообщение 1 категории, то
	PRIORITY	1	; сообщению 1 категории - высокий приоритет
;Сегмент имитации работы накопителя 1 и ВККС
Met111	GATE FV	Vkks,Met5	; Проверка ВККС на исправность GATE U	Vkks,Met17	; Проверка ВККС на занятость
	TEST LE	P2,(L1_-X$TEmk),Met5	; Есть ли место в накопителе ВККС?
	SAVEVALUE	TEmk+,P2	; Увеличение текущей емкости накопителя на длину сообщения
	LINK	SVkks,PR ; Поместить сообщение в накопитель ВККС
Met17	ASSIGN	7,1	; Признак: сообщение поступило на ВККС, минуя накопитель
Met14	SEIZE	Vkks	; Занять ВККС
	ADVANCE	P8	; Имитация обработки
	RELEASE	Vkks	; Освобождение ВККС
	TEST E	P7,0,Met18	; Если Р7 =0, то
	SAVEVALUE	TEmk-,P2	; уменьшить текущую емкость накопителя ВККС на длину обработанного сообщения
Met18	UNLINK	SVkks,Met111,1 ; Очередное сообщение из накопителя ВККС послать на обработку
; Сегмент имитации работы накопителя 2 и каналов связи
Met15	ASSIGN	4,NCan	; Подготовка к циклу
Met16	GATE FV	P4,Met23	; Начало цикла поиска исправного и свободного канала.
;Исправен ли канал? Если да, то
	GATE U	P4,Met21	; занят ли канал? Если нет, на Met21-занять канал
	TEST E	X*4,1,Met61 ; Если канал занят сообщением низкого приоритета, то прервать
Met23	LOOP	4,Met16	; Все ли каналы просмотрены? Если нет, продолжить поиск
	TEST L	CH$SCan_,L2_,Met5	; Есть ли место в накопителе каналов?
	LINK	SCan_,PR	; Сообщение в накопитель каналов
Met21	SEIZE	P4	; Занять канал с номером в Р4
	SAVEVALUE	P4,P1	; Занести код категории в ячейку с номером в Р4
	ADVANCE	P3	; Имитация передачи сообщения
	RELEASE	P4	; Освобождение канала с номером в Р4
	UNLINK	SCan_,Met15,1	; Очередное сообщение из накопителя каналов на передачу
	TRANSFER	,Met10	; Счет переданных сообщений
; Имитация передачи по каналам с прерыванием
Met61	SAVEVALUE	P4,P1	; Занести PR в ячейку с номером в Р4
	PREEMPT	P4,PR,Met62	; Занять канал с номером в Р4
	ADVANCE	P3	; Имитация передачи сообщения
	RETURN	P4	; Освобождение канала с номером в Р4
	UNLINK	SCan_,Met15,1	; Очередное сообщение из накопителя каналов на передачу
	TRANSFER	,Met10	; Счет переданных сообщений
Met62	RELEASE	P4	; Освободить канал с номером в Р4
	TRANSFER	,Met15	; Отправить в накопитель каналов
;Сегмент имитации отказов ВККС
	GENERATE	,,,1
Met49	ADVANCE	(Exponential(237,0,TOtk1))	; Розыгрыш времени до очередного отказа
	ASSIGN	1,(RN35/1000)	; Обращение к датчику RN
	TEST LE	P1,Pc_,Met50	; Все ли сообщения в накопителях теряются?
Met51	FUNAVAIL	Vkks,RE,Met115	; Перевод ВККС в неисправное состояние
	ADVANCE	(Exponential(237,0,TVost1))	; Имитация восстановления
	FAVAIL	Vkks	; Перевод ВККС в исправное состояние
	TRANSFER	,Met49	; Отправить для розыгрыша очередного отказа
Met115	RELEASE	Vkks	; Освобождение ВККС прерванным сообщением
	TEST E	P7,0,Met5	; Если Р7=0, то
	SAVEVALUE	TEmk-,P2	; уменьшить текущую емкость накопителя ВККС на длину потерянного сообщения
	TRANSFER	,Met5	; Отправить для счета потерь
Met50	UNLINK	SVkks,Met5,ALL	; Потеря всех сообщений из накопителя ВККС
	UNLINK	SCan_,Met5,ALL	; Потеря всех сообщений из накопителя каналов
	SAVEVALUE	TEmk,0	; Значение текущей емкости =0
	TRANSFER	,Met51	; Отправить для перевода ВККС в неисправное состояние
;Сегмент имитации отказов каналов связи
	GENERATE	,,,NCan	; Число транзактов - по числу каналов связи
	SAVEVALUE	NumCan+,1	; Записать в X$NumCan последовательно 1, 2, ..., NCan
	ASSIGN	4,X$NumCan	; Записать в Р4 последовательно 1, 2, ..., NCan
Met19	ADVANCE	(Exponential(237,0,TOtk2))	; Розыгрыш времени до очередного отказа
	GATE FV	P4,Met19
	FUNAVAIL	P4,RE,Met112	; Перевод канала в неисправное состояние
	ADVANCE	(Exponential(237,0,TVost2))	; Имитация восстановления канала
	FAVAIL	P4	; Перевод в исправное состояние
	TRANSFER	,Met19	; Отправить для розыгрыша очередного отказа
Met112	RELEASE	P4	; Освобождение канала с номером 1
	TEST E	P1,1,Met5	; Если сообщение 1 категории, то
	TRANSFER	,Met15	; отправить на повторную передачу
; Сегмент счета переданных и потерянных сообщений и расчет вероятностей передачи сообщений
Met10	SAVEVALUE	P11+,1	; Cчет и сохранение в ячейке с номером в Р11 переданных сообщений всего и по категориям
	SAVEVALUE	P13,(X*11/X*10)	; Расчет и сохранение в ячейке с номером в Р13 вероятностей передачи по категориям
;	SAVEVALUE	VPerS,(N$Met10/N$Met4)
; Расчет и сохранение в ячейке VPerS вероятностей передачи сообщений всех категорий
	TERMINATE
Met5	SAVEVALUE	P12+,1	; Cчет и сохранение в ячейке с номером в Р12 потерянных сообщений всего и по категориям
	SAVEVALUE	P14,(X*12/X*10)	; Расчет и сохранение в ячейке с номером в Р14 вероятностей
   потери сообщений по категориям ;
	SAVEVALUE	VPotS,(N$Met5/N$Met4)	; Расчет и сохранение в ячейке VPotS вероятностей
   потерь сообщений всех категорий
	TERMINATE
;Задание времени моделирования
	GENERATE	VrMod	; Задание времени моделирования
	TERMINATE	1

Для задания исходных данных использованы команда EQU и функции.

Арифметические выражения введены для расчета вычислительных сложностей сообщений, времени их обработки и передачи. Поскольку вычислительная сложность определяется количеством операций, которое не может быть дробным, то для перевода в целое используется встроенная функция INT.

Рассмотрим работу блоковой части модели.

Так как интервалы времени поступления сообщений от источников одинаковы, то блок GENERATE вводит транзакты - сообщения в модель со средним значением интервала (T_/n1_ ).

Предполагается, что число категорий сообщений может изменяться от единицы до определенного максимального значения, поэтому программа модели построена так, чтобы не подвергаться коррекции в таком случае.

Для этого в сегмент имитации поступления сообщений от источников включена последовательность блоков, разыгрывающих категории сообщений. Категория сообщения записывается в параметр Р1 транзакта. Для счета всех поступивших сообщений и в последующем переданных и потерянных сообщений по категориям в параметры Р10…Р14 транзакта записываются номера сохраняемых ячеек. В параметр Р10 записывается номер (Р1+MaxKat), в параметры Р11…Р14 записываются те, которые отличаются в указанной последовательности на максимальное число категорий MaxKat, задаваемое в исходных данных.

Пусть MaxKat = 5. Тогда в зависимости от того, что в Р1:

  • Р1 = 1; Р10 = 4; Р11 = 7; Р12 = 10; Р13 = 13; Р14 = 16 ;
  • Р1 = 2; Р10 = 5; Р11 = 8; Р12 = 11; Р13 = 14; Р14 = 17 ;
  • Р1 = 3; Р10 = 6; Р11 = 9; Р12 = 12; Р13 = 15; Р14 = 18.

Таким образом, распределение номеров сохраняемых ячеек не зависит от количества категорий сообщений.

После счета поступающих сообщений по категориям в сохраняемых ячейках с номерами в параметре Р10 производится розыгрыш и запись характеристик сообщений: вычислительной сложности, времени обработки и времени передачи по описанным ранее арифметическим выражениям. Характеристики записываются в параметры Р2, Р8 и Р3 соответственно.

Если сообщение первой категории, ему присваивается приоритет 1. Все сообщения отправляются на сегмент имитации работы накопителя 1 и ВККС.

Здесь вначале ВККС проверяется на исправность и занятость.

Если ВККС неисправен, сообщение теряется. Транзакт направляется на метку Мет5. Здесь учитывается потерянное сообщение, и рассчитываются вероятности потерь по категориям и в целом по всем категориям. После этого транзакт выводится из модели.

Если ВККС исправен, но занят, проверяется возможность сохранения сообщения в накопителе 1 SVkks. Если достаточно свободной емкости, сообщение помещается в накопитель 1. Его текущая занятая емкость TEmk увеличивается на длину сообщения. Если свободной емкости недостаточно, сообщение теряется. Транзакт направляется на метку Мет5. Здесь выполняются те же действия, что и при возникновении неисправности ВККС.

Если ВККС исправен и свободен, т. е. накопитель 1 пуст, тран-закт направляется на метку Мет17. В параметр Р7 заносится 1 - признак поступления сообщения на обработку, минуя накопитель 1. Транзакт занимает ВККС. После обработки при Р7 = 1 транзакт направляется на Мет18 для вывода очередного сообщения из накопителя 1 (если оно есть) для обработки на ВККС. Выводящий же транзакт - обработанное сообщение направляется в сегмент имитации работы накопителя 2 и каналов связи.

Поиск канала для передачи сообщения организован в цикле Максимально возможное повторение в цикле равно числу каналов связи.

Для организации в модели циклов предназначен блок LOOP. Он имеет следующий формат:

LOOP                         A,B

Операнд А - параметр транзакта или параметр цикла, в котором содержится число повторений какого-либо участка модели.

Операнд B - метка блока, с которого начинается цикл.

Операнды А и B могут быть именем, положительным целым числом, выражением в скобках, СЧА или СЧА*параметр.

Например, в данной модели блок LOOP используется так:

Met15	ASSIGN	4,NCan	; Подготовка к циклу
Met16	GATE FV	P4,Met23	; Начало цикла поиска исправного и свободного канала
; Исправен ли канал? Если да, то
	GATE U	P4,Met21	; занят ли канал? Если нет, на Met21-занять канал
	TEST E	X*4,1,Met61	; Если канал занят сообщением низкого приоритета, то прервать
Met23	LOOP	4,Met16	; Все ли каналы просмотрены? Если нет, продолжить поиск

Блок с меткой Мет16 является началом цикла, т. е. расположен раньше блока LOOP. Когда транзакт, пройдя участок модели, начинающийся блоком с меткой Мет16, войдет в блок LOOP, значение его параметра - параметра номер четыре транзакта уменьшается на 1. Если это значение не равно нулю, транзакт переходит к блоку с меткой Мет16, т. е. цикл повторяется. Если же после вычитания 1 значение параметра цикла равно нулю, следовательно, выполнено заданное число повторений, транзакт переходит к следующему блоку.

Замечание. При каждом входе в блок LOOP значение параметра цикла уменьшается на 1. Значит, значение параметра цикла можно использовать для выбора новых значений каких-либо факторов при очередном повторении. Однако это не всегда удобно, так как величина параметра цикла изменяется от большего к меньшему значению, а не наоборот. В рассматриваемой модели это не имеет принципиального значения.

Если в результате поиска находится исправный и свободный канал, транзакт направляется на Мет21 и занимает канал, номер которого содержится в его параметре Р4 (ссылка *4). После имитации передачи транзакт входит в блок UNLINK для вывода очередного сообщения из накопителя 2 на передачу. Выводящий же транзакт - переданное сообщение направляется на метку Мет10. Здесь учитывается переданное сообщение, рассчитываются вероятности передачи сообщений отдельно по категориям и в целом по всем категориям.

Если просмотрены все каналы связи и не найдено свободного канала для передачи сообщения не первой категории, проверяется возможность помещения этого сообщения в накопитель Scan_. При отсутствии свободного места в накопителе Scan_ сообщение теряется, и транзакт направляется на метку Мет5 для учета и вывода из модели.

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

Если же обнаружен канал, занятый передачей сообщения более низкого приоритета, транзакт направляется на метку Мет61. Происходит прерывание сообщения низкого приоритета. Прерванное сообщение направляется на метку Мет15 для проверки возможности размещения его в накопителе каналов связи Scan_. Переданное сообщение выводит из накопителя каналов связи на передачу очередное сообщение и направляется на метку Мет10 для счета.

Теперь рассмотрим сегменты имитации отказов.

Начнем с сегмента имитации отказов ВККС. ВККС в модели представлен ОКУ с именем Vkks. Блок GENERATE вырабатывает один транзакт и становится неактивным. Далее имитация отказов организуется в цикле. Такой метод позволяет уменьшить количество транзактов в модели, сократить машинное время. Ведь можно было бы сделать так, чтобы GENERATE вводил в модель транзакт для имитации каждого отказа ВККС, а блок TERMINATE выводил его после имитации восстановления.

Блоком ADVANCE с меткой Мет49 разыгрывается время до очередного отказа. Затем: все ли сообщения в накопителе теряются? Если да, транзакт направляется на Мет50. Из накопителей SVkks и Scan_ выводятся и теряются все имевшиеся там сообщения. Обнуляется текущая емкость TEmk накопителя SVkks и транзакт направляется к метке Мет51 для перевода ВККС в неисправное (недоступное) состояние. После восстановления транзакт направляется на метку Мет49 для розыгрыша очередного отказа.

Если же не все сообщения теряются, а только те, которые обрабатываются ВККС, он переводится в неисправное состояние. Обрабатываемое сообщение удаляется, и транзакт направляется на метку Мет115.

Если сообщение перед обработкой помещалось в накопитель SVkks, его емкость уменьшается на длину потерянного сообщения. Транзакт направляется на метку Мет5 для счета и уничтожения.

Каналы связи в модели представлены несколькими ОКУ, работающими параллельно. Следовательно, они будут независимо друг от друга выходить из строя. Поэтому блок GENERATE вырабатывает сразу количество транзактов, равное количеству каналов связи NCan_. Далее эти транзакты в соответствии с номером канала, записанным в параметр Р1 каждого из NCan_ транзактов, имитируют выход каналов связи из строя. Предполагается, что время восстановления канала связи значительно меньше времени между его предыдущим и последующим отказами.

После 1000 прогонов получим следующие результаты моделирования:

SAVEVALUE RETRY VALUE
1 0 1.000
2 0 1.000
3 0 1.000
4 0 1094993.000
5 0 729783.000
6 0 1823763.000
7 0 519429.000
8 0 320633.000
9 0 811566.000
10 0 575561.000
11 0 409149.000
12 0 1012190.000
13 0 0.474
14 0 0.439
15 0 0.445
16 0 0.526
17 0 0.561
18 0 0.555
TEMK 0 2498959.000
VPERS 0 0.453
VPOTS 0 0.547
Владислав Нагорный
Владислав Нагорный

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

Спасибо!

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

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

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

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

 

Виктор Погула
Виктор Погула
Россия, Новокузнецк, СибГИУ, 2002
Анастасия Кузнецова
Анастасия Кузнецова
Россия