- •0. Лекция: Введение
- •1. Лекция: Понятие модели и моделирования:
- •1.1. Общее определение модели
- •1.2. Классификация моделей и моделирования
- •1.2.1. Классификация моделей и моделирования по признаку "характер моделируемой стороны объекта"
- •1.2.2. Классификация моделей и моделирования по признаку "характер процессов, протекающих в объекте"
- •1.2.3. Классификация моделей и моделирования по признаку "способ реализации модели"
- •1.3. Этапы моделирования
- •1.4. Адекватность модели
- •1.5. Требования, предъявляемые к моделям
- •2.1. Дискретные марковские процессы
- •2.2. Моделирование по схеме непрерывных марковских процессов
- •2.3. Схема гибели и размножения
- •2.4. Элементы смо, краткая характеристика
- •2.5. Моделирование смо в классе непрерывных марковских процессов
- •2.5.1. Многоканальная смо с отказами
- •2.5.2. Многоканальная смо с ожиданием
- •2.5.3. Одноканальная смо с ограниченной очередью
- •2.5.4. Одноканальная замкнутая смо
- •2.5.5. Одноканальная смо с конечной надежностью
- •2.6. Метод динамики средних. Сущность и содержание метода
- •2.7. Принцип квазирегулярности
- •2.8. Элементарные модели боя
- •2.8.1. Модель высокоорганизованного боя
- •2.8.2. Высокоорганизованный бой с пополнением группировок
- •2.8.3. Высокоорганизованный бой с упреждением ударов
- •2.8.4. Модель боя с неполной информацией
- •2.8.5. Учет запаздывания в переносе и открытии огня
- •3. Лекция: Статистическое моделирование:
- •3.1. Сущность имитационного моделирования
- •3.2. Общая характеристика метода имитационного моделирования
- •3.3. Статистическое моделирование при решении детерминированных задач
- •3.4. Моделирование равномерно распределенной случайной величины
- •3.5. Моделирование случайной величины с произвольным законом распределения
- •3.6. Моделирование единичного события
- •3.7. Моделирование полной группы несовместных событий
- •3.8. Моделирование совместных независимых событий
- •3.8.1. Определение совместных исходов по жребию
- •3.8.2. Последовательная проверка исходов
- •3.9. Моделирование совместных зависимых событий
- •3.10. Классификация случайных процессов
- •3.11. Способы продвижения модельного времени
- •3.12. Модель противоборства двух сторон
- •3.13. Модель противоборства как процесс блуждания по решетке
- •3.14. Типовая схема имитационной модели с продвижением времени по событиям
- •3.15. Имитационная модель системы массового обслуживания
- •4. Лекция: Планирование экспериментов
- •4.1. Сущность и цели планирования эксперимента
- •4.2. Элементы стратегического планирования экспериментов
- •4.3. Стандартные планы
- •4.4. Формальный подход к сокращению общего числа прогонов
- •4.5. Элементы тактического планирования
- •4.6. Точность и количество реализаций модели при определении средних значений параметров
- •4.6.1. Определение оценки матожидания
- •4.6.2. Определение оценки дисперсии
- •4.7. Точность и количество реализаций модели при определении вероятностей исходов
- •4.8. Точность и количество реализаций модели при зависимом ряде данных
- •4.9. Проблема начальных условий
- •5. Лекция: Обработка результатов имитационного эксперимента
- •5.1. Характеристики случайных величин и процессов
- •5.2. Требования к оценкам характеристик
- •5.3. Оценка характеристик случайных величин и процессов
- •5.4. Гистограмма
- •5.4. Элементы дисперсионного анализа. Критерий Фишера
- •5.6. Критерий Вилькоксона
- •5.7. Однофакторный дисперсионный анализ
- •5.8. Выявление несущественных факторов
- •5.9. Сущность корреляционного анализа
- •5.10. Обработка результатов эксперимента на основе регрессии
- •6. Лекция: Моделирование в gpss World
- •6.1. Основы построения и принципы функционирования языка имитационного моделирования
- •6.2. Построение моделей с устройствами
- •6.2.1. Организация поступления транзактов в модель и удаления транзактов из нее
- •6.2.1.1. Поступление транзактов в модель
- •6.2.1.2. Удаление транзактов из модели и завершение моделирования
- •6.2.1.3. Изменение значений параметров транзактов
- •6.2.2. Занятие и освобождение одноканального устройства
- •6.2.3. Имитация обслуживания посредством задержки во времени
- •6.2.4. Проверка состояния одноканального устройства
- •6.2.5. Методы сбора статистики в имитационной модели
- •6.2.5.1. Регистратор очереди
- •6.2.5.1. Статистические таблицы
- •6.2.6. Методы изменения маршрутов движения транзактов в модели
- •6.2.6.1. Блок transfer
- •6.2.6.2. Блок displace
- •6.2.7. Прерывание функционирования одноканального устройства
- •6.2.7.1. Прерывание в приоритетном режиме
- •6.2.7.2. Прерывание в режиме "захвата"
- •6.2.7.3. Проверка состояния одноканального устройства, функционирующего в приоритетном режиме
- •6.2.8. Недоступность одноканального устройства
- •6.2.8.1. Перевод в недоступное состояние и восстановление доступности
- •6.2.8.2. Проверка состояний недоступности и доступности одноканального устройства
- •6.2.9. Сокращение машинного времени и изменение дисциплин обслуживания методом применения списков пользователя
- •6.2.9.1. Ввод транзактов в список пользователя в безусловном режиме
- •6.2.9.2. Вывод транзактов из списка пользователя в условном режиме
- •6.2.10. Построение моделей систем с многоканальными устройствами и переключателями
- •6.2.10.1. Занятие многоканального устройства и его освобождение
- •6.2.10.2. Перевод многоканального устройства в недоступное состояние и восстановление его доступности
- •6.2.10.3. Проверка состояния многоканального устройства
- •6.2.10.4. Моделирование переключателей
- •6.3. Решение прямой и обратной задач в системе моделирования
- •6.3.1. Постановка прямой и обратной задач
- •6.3.2. Решение прямой задачи
- •6.3.2.1. Блок-диаграмма модели
- •6.3.2.2. Программа модели
- •6.3.2.3. Ввод текста программы модели, исправление ошибок и проведение моделирования
- •6.3.3. Решение обратной задачи
- •6.4. Пример построения моделей с оку, мку и списками пользователя
- •6.4.1. Модель процесса изготовления изделий на предприятии. Прямая задача
- •6.4.1.1. Постановка задача
- •6.4.1.2. Исходные данные
- •6.4.1.3. Задание на исследование
- •6.4.1.4. Уяснение задачи на исследование
- •6.4.1.5. Блок-диаграмма модели
- •6.4.1.6. Программа модели
- •6.4.2. Модель процесса изготовления изделий на предприятии. Обратная задача
- •6.4.2.1. Постановка задачи
- •6.4.2.2. Программа модели
- •6.5. Уменьшение числа объектов в модели
- •6.5.1. Постановка задачи
- •6.5.2. Исходные данные
- •6.5.3. Задание на исследование
- •6.5.4. Блок-диаграмма модели
- •6.5.5. Программа модели
- •6.6. Применение матриц, функций и изменение версий модели
- •6.6.1. Постановка задачи бизнес-процесса
- •6.6.2. Уяснение задачи
- •6.6.3. Программа модели
- •6.7. Моделирование неисправностей одноканальных устройств
- •6.7.1. Постановка задачи
- •6.7.2. Исходные данные
- •6.7.3. Задание на исследование
- •6.7.4. Уяснение задачи
- •6.7.5. Программа модели
- •6.8. Моделирование неисправностей многоканальных устройств
- •6.8.1. Постановка задачи
- •6.8.2. Программа модели
- •7. Лекция: Организация компьютерных экспериментов
- •7.1. Дисперсионный анализ (отсеивающий эксперимент). Прямая задача
- •7.2. Регрессионный анализ (оптимизирующий эксперимент). Прямая задача
- •7.3. Дисперсионный анализ (отсеивающий эксперимент). Обратная задача
- •7.3.1. Постановка задачи
- •7.3.2. Исходные данные
- •7.3.3. Задание на исследование
- •7.3.4. Уяснение задачи на исследование
- •7.3.5. Программа модели
- •7.3.6. Проведение экспериментов
- •8. Лекция: Разработка имитационных моделей в виде приложений с интерфейсом
- •8.1. Применение текстовых объектов и потоков данных
- •8.1.1. Блок open
- •8.1.2. Блок close
- •8.1.3. Блок read
- •8.1.4. Блок write
- •8.1.5. Блок seek
- •8.2. Разработка модели в gpss World
- •8.2.1. Постановка задачи
- •8.2.2. Программа модели
- •8.3. Создание стартовой формы приложения - имитационной модели
- •8.3 Добавление компонент в стартовую форму имитационной модели
- •8.3.1. Добавление полей редактирования
- •8.3.2. Добавление меток
- •8.3.3. Добавление компонент для ввода и вывода данных, представленных в виде таблиц
- •8.3.4. Добавление командных кнопок
- •8.4. События и процедуры обработки событий
- •8.4.1. События
- •8.4.2. Разработка процедур обработки событий для кнопок
- •8.4.3. Разработка процедур обработки событий для полей редактирования
- •8.4.4. Модификация программы имитационной модели
- •8.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