
- •Москва, 2004
- •Введение
- •1. Основные понятия теории моделирования
- •1.1 Понятие модели. Виды моделей
- •Цель (человека)
- •1.2. Общие вопросы моделирования систем
- •1.3. Основные требования к моделям
- •1.4. Принципы моделирования
- •1.5 Вопросы для самоконтроля
- •5. Основные требования к моделям.
- •6. Принципы моделирования.
- •2. Компьютерное моделирование
- •2.1 Этапы моделирования
- •2.2 Определение цели моделирования.
- •Определение типа системы;
- •Описание рабочей нагрузки;
- •Декомпозиция системы.
- •2.3 Определение типа системы
- •2.4 Описание рабочей нагрузки.
- •2.5 Декомпозиция системы
- •2.6 Выбор между имитационной или аналитической моделью
- •2.7 Вопросы для самоконтроля
- •6. Декомпозиция системы.
- •3.Формализация модели.
- •3.1 Классификация схем построения имитационной модели
- •3.2. Представление динамики системы
- •3.3. Генераторы случайных чисел
- •3.4 Моделирование случайных факторов
- •3.5 Управление модельным временем
- •3.5.1 Виды представления времени в модели
- •3.5.2 Изменение времени с постоянным шагом
- •3.5.3 Моделирование по особым состояниям
- •3.6. Моделирование параллельных процессов
- •3.6.1. Виды параллельных процессов
- •3.6.2. Механизм реализации параллельных процессов в языках моделирования
- •3.7 Вопросы для самоконтроля
- •8. Виды представления времени в модели.
- •4. Программная реализация модели
- •5.Планирование модельных экспериментов
- •5.1 Задачи планирования экспериментов. Стратегическое и тактическое планирование.
- •5.2. Стратегическое планирование имитационного эксперимента
- •5.2.1. Цель стратегического планирования эксперимента
- •5.2.2. Способы построения стратегического плана
- •5.3. Тактическое планирование экспериментов
- •5.4 Вопросы для самоконтроля
- •6. Обработка и анализ результатов моделирования
- •6.1 Основная идея регрессионного анализа
- •6.2 Общая схема проведения расчетов
- •6.3 Оценка качества имитационной модели
- •6.3.1 Адекватность модели
- •6.3.2 Оценка устойчивости
- •6.3.3 Оценка чувствительности
- •6.4 Калибровка модели
- •6.5 Вопросы для самоконтроля
- •6. Оценка чувствительности.
- •7.1 Основные понятия теории массового обслуживания
- •7.2 Марковский процесс
- •7.2.1 Понятие марковского процесса
- •7.2.2 Потоки событий
- •7.3 Уравнения Колмогорова для вероятностей состояний. Финальные вероятности состояний
- •7.4 Схема гибели/размножения.
- •7.5 Формула Литтла.
- •7.6 Моделирование смо как Марковского процесса
- •7.7. Моделирование смо по событиям
- •Заключение
7.6 Моделирование смо как Марковского процесса
Вероятности состояний марковского процесса можно получить не только при помощи рассмотренного выше аналитического расчета, но и в результате моделирования. Рассматриваемый далее алгоритм может применяться для любых марковских процессов с дискретными состояниями и непрерывным временем, однако неприменимым, если распределение времени до перехода из состояния в состояние не является экспоненциальным. Впрочем, тогда это будет уже не процесс Маркова. Также следует помнить, что предлагаемый алгоритм моделирует на самом деле не исходную СМО, а марковский процесс, являющийся ее моделью, поэтому с модели можно снять характеристики марковского процесса (вероятности состояний), а характеристики СМО снять напрямую затруднительно и их следует рассчитывать аналитически на основании вероятностей состояний марковского процесса.
Граф марковского процесса должен быть описан в виде матрицы интенсивностей переходов размерностью mm, где m — количество состояний. Для нашего случая (вариант 1) можно построить следующую матрицу интенсивностей переходов:
Будем для определенности считать, что строки и столбцы матрицы нумеруются с 0. Тогда ij — интенсивность перехода в состояние j при условии, что система находится в состоянии i. Логично задать начальное состояние системы i=0 (нет заявок). Тогда, если i — номер текущего состояния, алгоритм моделирования строится следующим образом:
1. Установить текущее состояние i=0, обнулить счетчик модельного времени T и счетчики времени пребывания в k-том состоянии Tk, k=0..m1, а также счетчик обслуженных заявок N.
2. Для каждого j=0..m1 генерируется случайная величина — время до перехода в состояние j из текущего состояния i:
,
где u — случайная величина ррсч(0,1). Данная формула соответствует генерации экспоненциально распределенной СВ с интенсивностью ij методом обратной функции. Для нулевых интенсивностей нужно задаться каким-нибудь конечным очень большим значением.
3. Среди m
полученных времен находим минимальное,
т.е. находим индекс jm
такой, что
.
Найденное время
— это время пребывания системы в текущем
состоянии i, после чего произойдет
переход в состояние jm.
4. Увеличить счетчики модельного времени и времени пребывания в состоянии i на величину :
T := T + ; Ti := Ti + ;
5. Если jm<i, то увеличить счетчик обслуженных заявок N.
6. Если N меньше заданного количества обслуженных заявок, то сменить текущее состояние на jm :
i := jm
и перейти к п.2, иначе — стоп.
На первый взгляд, выполняемые действия выглядят странно: допустим, система перешла в состояние 1 (один канал работает), и при розыгрыше времен до перехода в другие состояния определено, что t12=2.0 и t10=1.0. Это должно было бы означать, что через 1 единицу модельного времени придет очередная заявка, а через 2 единицы освободится работающий сейчас канал. Однако алгоритм "забывает" о более позднем событии и розыгрыш времени до освобождения канала и прихода заявки в состоянии 2 производится заново. На самом деле это допустимо, так при экспоненциальном распределении времени между событиями вероятность наступления события в течение интервала dt не зависит от предыстории, т.е. от времени, которое уже прошло в ожидании события до начала интервала dt. Поэтому время "доожидания" освобождения канала в состоянии 2 при условии, что уже прошла 1 единица модельного времени, распределено точно так же, как безусловное время ожидания его освобождения "с самого начала", поэтому его можно сгенерировать "заново", забыв о предыстории. Для других распределений времени обслуживания и времени между приходами заявок данный алгоритм моделирования применять нельзя, так как в этом случае "забывать" предысторию недопустимо.
Вероятности
состояний рассчитываются как отношение
времени, в течение которого система
находилась в данном состоянии, к общему
времени моделирования, т.е.
Для случаев с конечным количеством состояний m накапливать модельное время необязательно — ведь T равно сумме всех Ti.
Для случая с бесконечной очередью при реализации этого алгоритма возникает ряд трудностей, а именно: как описать матрицу бесконечной размерности и подсчитать статистику по бесконечному количеству состояний.
Решение 1. Ввести искусственные ограничения на длину очереди и решить конечную задачу, задав достаточно большую (например 40 или 100) максимально допустимую длину очереди. Желательно, чтобы в процессе моделирования крайнее состояние, соответствующее заполнению всей отведенной очереди, не достигалось, тогда полученный результат будет эквивалентен моделированию "бесконечного" случая.
Решение 2. а) Описать матрицу функцией языка программирования. Действительно — ведь значения стоят вдоль главной диагонали, т.е. когда |ij|=1, в остальных случаях получаются нули. Если j=i+1, то интенсивность равна , несложно построить условие и для чисел под главной диагональю.
б) Разыгрывать время перехода только в соседние состояния, т.е. i+1 и i1, так как интенсивности перехода в остальные состояния — нулевые.
в) Подсчитывать статистику по времени пребывания для ограниченного количества состояний (только для состояний, для которых вероятности рассчитывались аналитически). При этом обязательно надо подсчитывать модельное время для всех состояний.