Московская финансово-промышленная академия
Н.Н. Прокимнов
Практикум по курсу
“Имитационное моделирование”
Москва, 2009
Содержание
2. Имитация случайных величин с заданными законами распределения и случайных процессов
3. Метод статистических испытаний
4. Имитационная модель одноканальной системы массового обслуживания.
5. Имитационная модель документооборота
6. Имитационная модель корпоративной информационной системы
7. Многослойная имитационная модель экономического процесса
Учебное пособие содержит описание лабораторных работ, перечни контрольных вопросов, подборку задач и дополнительных заданий к лабораторным работам по основным разделам курса “Имитационное моделирование”.
Каждый из разделов предваряется основными сведениями из теории компьютерного моделирования по основной теме раздела.
Описание содержания и порядка выполнения практической работы предваряется основными сведениями из теории компьютерного моделирования по основной теме занятия.
Вслед за описанием порядка выполнения и перечнем требований к составу и форме представления результатов работы дается перечень контрольных вопросов.
Содержание заданий на выполнение работ лабораторного практикума предполагает знакомство с основными понятиями теории вероятностей и математической статистики, а также наличие базовых навыков работы с электронными таблицами (приложение Excel пакета Microsoft Office) и знание основных конструкций языка С++.
В большинстве лабораторных работ предусмотрено проведение экспериментов с имитационными моделями изучаемых СМО. Порядок настройки параметров и сборки проекта, перечень модулей и настраиваемых параметров приводятся в приложениях.
Изучение:
1) метода линейного конгруента получения псевдослучайных чисел, равномерно распределенных на интервале 0-1,
2) метода имитации наступления/ненаступления событий.
Эффективными методами исследования процессов и систем, получившими широкое распространение, являются методы компьютерного моделирования, в частности, имитационное моделирование [1] и метод статистических испытаний (метод Монте-Карло) [2]. В основе вычислений по методу статистических испытаний лежит случайный выбор чисел из заданного вероятностного распределения. При практических вычислениях эти числа берут из таблиц или получают путем некоторых операций, результатами которых являются псевдослучайные числа с теми же свойствами, что и числа, получаемые путем случайной выборки. Имеется большое число вычислительных алгоритмов, которые позволяют получить длинные последовательности псевдослучайных чисел.
Один из наиболее простых и эффективных вычислительных методов получения последовательности равномерно распределенных случайных чисел, включающий только одну операцию умножения, разработан Лехмером и известен как метод линейного конгруента [3].
Алгоритм имеет четыре параметра:
m Модуль (основание системы), m > 0
a Множитель, 0 ≤ a < m
c Приращение, 0 ≤ с < m
Х0 Начальное значение, или зерно (seed), 0≤ Х0 < m
Последовательность случайных чисел {Xn} получается с помощью следующего итерационного равенства:
Если m, а и с являются целыми, то создается последовательность целых чисел в диапазоне 0 ≤ Xn < m.
Выбор значений а, с и m является критичным для разработки хорошего генератора случайных чисел.
Очевидно, что m должно быть очень большим, чтобы была возможность создать много случайных чисел. Считается, что m должно быть приблизительно равно максимальному положительному целому числу для данного компьютера. Таким образом, обычно значение m близко или равно 231.
Существует три критерия, используемые при выборе генератора случайных чисел:
- Функция должна создавать полный период, т.е., должны появиться все числа между 0 и m до того, как создаваемые числа начнут повторяться;
- Создаваемая последовательность должна появляться случайно. Фактически последовательность чисел не является случайной, так как она создается детерминированным образом, но различные статистические тесты, которые могут применяться, должны показывать, что последовательность случайна;
- Программа, реализующая метод, должна эффективно выполняться на 32-битных процессорах.
Значения а, с и m должны быть выбраны таким образом, чтобы эти три критерия выполнялись. В соответствии с первым критерием можно показать, что если m является простым и с = 0, то при определенном значении а период, создаваемый функцией, будет равен m-1. Для 32-битной арифметики соответствующее простое значение m = 231 - 1. Таким образом, функция создания псевдослучайных чисел имеет вид:
Только небольшое число значений а удовлетворяет всем трем критериям. Одно из таких значений а = 75 = 16807, которое использовалось в семействе компьютеров IBM 360.
Генератор широко применяется, и прошел более тысячи тестов, больше, чем все другие генераторы псевдослучайных чисел.
Программа на языке С++ имеет следующий вид
Для задания базового значения в программе использовано битовое содержимое таймера компьютера, что обеспечивает случайных характер выбора начальной точки последовательности чисел. Это удобно для проведения экспериментов на модели, но создает сложности в процессе ее отладки, так как не дает возможность обеспечить воспроизводимость запусков. С целью обойти эту проблему следует задавать в качестве начального значения конкретную величину, одну и ту же для всех отладочных тестов.
Пусть некоторое событие А происходит с вероятностью РА. Требуется воспроизвести факт наступления события А.
Поставим в соответствие событию А событие В, состоящее в том, что х ≤ РА, где х случайное число с равномерным на интервале (0,1) законом распределения. Вычислим вероятность события В:
Таким образом, события А и В являются равновероятными. Отсюда следует процедура имитации факта появления события А. Она сводится к проверке неравенства х ≤ РА, и алгоритм заключается в следующем:
1) Генерируется случайное число х;
2) Проверяется выполнение неравенства х ≤ Р(А);
3) Если неравенство выполняется, считается, что событие А произошло, если нет – не произошло.
Соберите проект С++ в соответствии с указаниями, содержащимися в Приложении (используется модуль 001). Запустите табличный редактор Microsoft Excel.
1. Запустите несколько раз программу для небольшого значения NexpR с получением трассировочного вывода и убедитесь, что это приводит к появлению различных последовательностей псевдослучайных чисел.
2. Замените
(long)time(NULL)
в тексте функции rundum() на выражение
или на заранее просчитанное по этой формуле значение.
Запустите несколько раз программу и убедитесь, что все запуски приводят к появлению одинаковых последовательностей псевдослучайных чисел.
3. Восстановите текст функции rundum() и осуществите прогоны программы с разными значениями числа выполнения программы-генератора NexpR, задавая в разделе параметров модели значения NexpR равные
- 100
- 1000
- 10000
Для каждого значения NexpR проведите по пять запусков и найдите среднее значение для оценок матожидания случайной величины, получаемой в результате выполнения программы-генератора, по всем запускам. Результаты занесите в Excel-таблицу:
№ |
1 |
2 |
3 |
4 |
5 |
СРЕДНЕЕ |
100 |
|
|
|
|
|
|
1000 |
|
|
|
|
|
|
10000 |
|
|
|
|
|
|
Чтобы отменить вывод в файл итог каждого испытания, возьмите в знаки комментария оператор вывода получаемого значения в цикле.
4. Проанализируйте полученные данные.
5. Для отключения в последующих запусках экспериментов с генератором случайных чисел установите в разделе “Параметры модели” NexpR=0.
1) В разделе параметров модели задайте значение вероятности наступления события равное
2) Выполните пробные прогоны программы с небольшим значением NexpE и изучите трассировочный вывод.
3) Осуществите прогоны программы с разными значениями числа выполнения программы-генератора NexpE, задавая в разделе параметров модели значения NexpE равные
- 100
- 1000
- 10000
4) Для каждого значения NexpE проведите по пять запусков и найдите среднее значение для оценок матожидания случайной величины, получаемой в результате выполнения программы-генератора, по всем запускам. Результаты занесите в Excel-таблицу:
№ |
1 |
2 |
3 |
4 |
5 |
СРЕДНЕЕ |
100 |
|
|
|
|
|
|
1000 |
|
|
|
|
|
|
10000 |
|
|
|
|
|
|
Чтобы отменить вывод в файл итоги всех испытаний, возьмите в знаки комментария оператор вывода получаемого в цикле значения.
5) Проанализируйте полученные данные.
6) Для отключения в последующих запусках экспериментов с программой имитации наступления события установите в разделе “Параметры модели” NexpE=0.
Отчет по работе должен включать таблицы результатов экспериментов с
1) генератором случайных чисел
2) имитатором наступления события
1) Чем вызывается необходимость применения программного генератора псевдослучайных чисел?
2) Чем отличается псевдослучайное число от случайного?
3) Какие требования предъявляются к программным генераторам псевдослучайных чисел?
4) В каких случаях целесообразно задавать начальное значение xn в виде константы, а в каких – случайной (псевдослучайной) величиной?
5) Какой прием обычно используется для задания начального значения последовательности случайных чисел?
6) Что понимается под имитацией случайного события?
7) Какой прием применяется для имитации случайных событий?
Изучение методов:
1)
получения
случайных чисел и
2)
обработки
результатов имитационных экспериментов.
Значительную роль в программных средствах и системах имитационного
моделирования играют методы и процедуры получения случайных величин,
подчиняющихся тому или иному закону распределения. Рассмотрим основные из этих
методов, а также приемы обработки результатов, получаемых с помощью
имитационных моделей (см., например, [1], [2]).
Для получения
случайной величины y, равномерно
распределенной на интервале (a,b), можно
воспользоваться выражением
где x – случайная
величина, равномерно распределенная на
интервале (0,1).
Программа на
языке С++ имеет следующий вид:
В этой программе интервал распределения задается своей
серединой m и половиной длины s.
Пусть непрерывная случайная величина η задана законом
распределения:
где fη–
плотность распределения вероятностей, а Fη
- функция распределения вероятностей. Тогда случайная величина ξ
распределена
равномерно на интервале (0,1).
Отсюда следует, что искомое значение y может быть определено из уравнения:
которое эквивалентно уравнению:
где y –
значение случайной величины η, а x
– значение случайной величины ξ.
Решение
уравнения можно записать в общем виде
через обратную функцию :
y=
Основной недостаток метода заключается в том, что
интеграл не всегда является берущимся, а уравнение не всегда решается
аналитическими методами.
Однако для ряда весьма важных случаев решение есть. В
частности, в соответствии с методом обратной функции существует преобразование,
позволяющее вычислить значения случайной величины η, распределенной по показательному закону, который особенно часто
используется для исследования систем массового обслуживания и определения
показателей надежности систем.
Функция плотности
для показательного закона имеет вид:
(y>0)
Воспользуемся
методом обратной функции, вычислим интеграл и получим уравнение вида
или
Тогда и, прологарифмировав и разрешив уравнение
через y, будем иметь:
Получая значение х
с помощью датчика равномерно распределенных на интервале (0,1) случайных чисел,
можно получить значения y в
соответствии с полученным выражением.
Программа на языке С++ генерации случайного числа,
имеющего экспоненциальное распределение, имеет следующий вид:
Здесь параметр m
функции expont есть значение, обратное параметру λ (интенсивности входящего потока, если
в программе имитируется поток в системе массового обслуживания).
В процессе имитационного моделирования
формируется большое количество реализации, являющихся исходным статистическим
материалом для нахождения приближенных значений (оценок) показателей
эффективности.
В качестве оценки
вероятности используется частота
.
где m-число
случаев наступления в экспериментах события А,
N-число проведенных экспериментов
Для ее получения
обычно организует на программном уровне два счетчика, которые подсчитывают:
-
общее количество
экспериментов N,
-
общее количество
положительных исходов m.
В
ряде случаев в качестве характеристики исследуемой системы выступает закон
плотности распределения. Его приближенно можно охарактеризовать гистограммой.
Для этого интервал изменения случайной
величины разбивается на отрезки Dti, каждому из них сопоставляется
счетчик, где накапливаются mi – количество попаданий значений этой величины
в Dti.
На
основании полученных значений счетчиков для Dti можно построить гистограмму - набор
прямоугольников с высотами .
Оценку математического ожидания получают как среднее арифметическое значение случайной величины yi
Для получения суммы в программных моделях
обычно используется переменная, значение которой получает приращение после
каждого проведенного испытания.
Оценку
дисперсии можно рассчитать по формуле:
В работе программным образом имитируются моменты
появления автобусов на одной из остановок, находящихся на маршруте движения.
Считается, что событие (момент прихода очередного автобуса) происходит в
момент, отстоящий от момента прихода предыдущего автобуса на случайную
величину, подчиняющуюся закону распределения заданного вида. Полагая момент
времени прихода первого автобуса Т1 равным 0, программа-имитатор определяет момент
появления очередного автобуса на основе рекуррентного соотношения:
Ti+1=Ti+Dti
где Dti – случайная величина с заданным законом распределения,
представляющая собой интервал между последовательными приходами.
Соберите проект С++ в соответствии с указаниями,
содержащимися в Приложении (используется модуль 002).
Запустите табличный редактор Microsoft Excel.
1.
Установите режим
запуска с детерминированным интервалом времени движения, сделав значение
переменной-переключателя dist равным
1.
2.
Задайте величину
среднего интервала движения
Tm = <порядковый номер в списке группы>
3.
Запустите
программу несколько раз c небольшим значением Nexp, получите результаты и
ознакомьтесь с трассировочным выводом.
Для дальнейших
запусков можно положить Nexp=100.
1.
Установите режим
запуска с интервалом времени движения, распределенным равномерно задав значение
переменной-переключателя dist равным 2.
2.
Задайте величину
половинного интервала распределения Ts равной
Ts = Entire
(Tm/5) + 1
4.
Выполните пробные
прогоны программы с небольшим значением числа испытаний, получите результаты и
ознакомьтесь с ними.
5.
Запустите
программу и получите последовательность значений моментов времени прихода.
Определите величину дисперсии интервала
движения, для чего воспользуйтесь приложением
Excel – перенесите с помощью буфера системы Windows значения на лист
Excel и найдите величину дисперсии с помощью формулы для оценки дисперсии (см.
раздел 2.2.8).
1.
Установите режим
запуска с интервалом времени движения, распределенным экспоненциально, задав
значение переменной-переключателя dist равным 3.
2.
Выполните пробные
прогоны программы с небольшим значением числа испытаний, получите результаты и
ознакомьтесь с ними.
3.
Запустите
программу и получите последовательность значений моментов времени прихода.
Определите величину дисперсии интервала
движения, для чего воспользуйтесь приложением
Excel – перенесите с помощью буфера системы Windows значения на лист
Excel и найдите величину дисперсии с помощью формулы для оценки дисперсии (см.
раздел 2.2.8).
1.
Установите режим
запуска с интервалом времени движения, распределенным в соответствии с
гистограммой частот появления временных интервалов, задав значение
переменной-переключателя dist равным 4.
2.
Введите значения
частот появления определенных величин интервалов времени между приходами
автобусов и значения этих интервалов как начальные значения соответствующих
массивов программы.
Исходные данные для составления гистограммы частот в
виде замеренных промежутков между двумя последовательными событиями (приходами
автобусов на остановку) приводятся в разделе 2.6.1.
3.
Выполните пробные
прогоны программы с небольшим значением числа испытаний, получите результаты и
изучите их.
4.
Запустите
программу и получите последовательность значений моментов времени прихода.
Определите величину дисперсии интервала движения, для чего воспользуйтесь
приложением Excel – перенесите с помощью буфера системы Windows значения
полученных интервалов на лист Excel и найдите величину дисперсии с помощью
формулы для оценки дисперсии (см. раздел 2.2.8).
Изучите полученные результаты. Дайте оценку каждому из
использованных вариантов.
1.
Добавьте в
программу текст, позволяющий получить гистограмму распределения интервалов
движения для 10 временных промежутков.
Произведите запуски программы для случая
экспоненциального распределения и постройте гистограмму в табличном и
графическом виде.
2.
Измените
программу таким образом, чтобы время (момент начала движения автобусов)
отсчитывалось с определенного момента, задаваемого в виде двух параметров
(переменных) для значений часа и минут соответственно, а результаты (время прихода автобуса на
остановку) выводились в виде чч:мм.
Варианты исходных данных приведены в разделе 0.
Номер варианта=<порядковый номер в списке группы >
1)
На чем основан
метод получения псевдослучайного числа равномерно распределенного на
произвольном интервале?
2)
Какой способ
применяется для имитации экспоненциально распределенного случайного числа?
3)
Что такое метод
обратной функции?
4)
В чем состоит
сущность имитации случайного числа с произвольным распределением на основе
собранной статистики?
5)
Как определяется
среднее значение исследуемого параметра на основе результатов экспериментов,
проведенных на модели?
6)
Как определяется
дисперсия исследуемого параметра на основе результатов экспериментов,
проведенных на модели?
7)
Как получить
гистограмму распределения значений случайной величины на основе результатов
экспериментов, проведенных на модели?
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
1 |
4 |
3 |
5 |
2 |
4 |
3 |
3 |
8 |
3 |
6 |
6 |
1 |
3 |
8 |
2 |
1 |
5 |
4 |
2 |
7 |
3 |
4 |
10 |
2 |
7 |
2 |
2 |
3 |
6 |
3 |
3 |
4 |
5 |
2 |
6 |
2 |
3 |
7 |
6 |
3 |
5 |
2 |
3 |
2 |
4 |
3 |
5 |
4 |
3 |
4 |
3 |
5 |
5 |
3 |
7 |
4 |
2 |
4 |
6 |
5 |
2 |
3 |
5 |
2 |
9 |
1 |
3 |
9 |
4 |
6 |
3 |
1 |
3 |
5 |
6 |
4 |
8 |
3 |
4 |
1 |
2 |
3 |
7 |
6 |
3 |
5 |
2 |
2 |
1 |
7 |
1 |
4 |
6 |
4 |
3 |
2 |
4 |
7 |
4 |
6 |
5 |
4 |
1 |
6 |
8 |
5 |
1 |
5 |
1 |
8 |
2 |
8 |
6 |
2 |
7 |
2 |
2 |
3 |
1 |
9 |
3 |
8 |
1 |
4 |
5 |
2 |
6 |
3 |
6 |
2 |
6 |
3 |
8 |
1 |
10 |
9 |
1 |
4 |
1 |
4 |
3 |
5 |
5 |
5 |
5 |
5 |
1 |
5 |
6 |
11 |
4 |
3 |
2 |
4 |
8 |
1 |
2 |
10 |
4 |
6 |
3 |
1 |
3 |
5 |
12 |
5 |
7 |
3 |
4 |
1 |
3 |
4 |
5 |
6 |
3 |
4 |
3 |
2 |
2 |
13 |
2 |
4 |
5 |
1 |
7 |
3 |
4 |
10 |
2 |
7 |
2 |
2 |
3 |
9 |
14 |
4 |
3 |
5 |
2 |
4 |
3 |
3 |
8 |
3 |
6 |
6 |
1 |
3 |
8 |
15 |
1 |
5 |
4 |
2 |
7 |
3 |
4 |
10 |
2 |
7 |
2 |
2 |
3 |
6 |
16 |
3 |
4 |
5 |
2 |
6 |
2 |
3 |
7 |
6 |
3 |
5 |
2 |
3 |
2 |
17 |
3 |
5 |
4 |
3 |
4 |
3 |
5 |
5 |
3 |
7 |
4 |
2 |
4 |
6 |
18 |
2 |
3 |
5 |
2 |
9 |
1 |
3 |
9 |
4 |
6 |
3 |
1 |
3 |
5 |
19 |
4 |
7 |
4 |
4 |
1 |
2 |
3 |
7 |
6 |
3 |
5 |
2 |
2 |
1 |
20 |
1 |
4 |
6 |
4 |
3 |
2 |
4 |
7 |
4 |
6 |
5 |
4 |
1 |
6 |
21 |
5 |
1 |
5 |
1 |
8 |
2 |
8 |
6 |
2 |
7 |
2 |
2 |
3 |
1 |
22 |
4 |
7 |
1 |
4 |
5 |
2 |
6 |
3 |
6 |
2 |
6 |
3 |
8 |
1 |
23 |
9 |
1 |
4 |
1 |
4 |
4 |
4 |
8 |
3 |
4 |
6 |
2 |
8 |
5 |
24 |
4 |
3 |
2 |
4 |
8 |
1 |
2 |
10 |
4 |
6 |
3 |
1 |
3 |
5 |
25 |
2 |
10 |
3 |
4 |
1 |
5 |
4 |
3 |
6 |
3 |
4 |
3 |
2 |
4 |
№ |
Интервал
движения |
Рабочее |
||
min |
max |
Начало |
Конец |
|
1. |
5,0 |
9,0 |
6-00 |
9-00 |
2. |
5,2 |
9,2 |
7-00 |
10-00 |
3. |
5,4 |
9,4 |
8-00 |
11-00 |
4. |
5,6 |
9,6 |
9-00 |
12-00 |
5. |
5,8 |
9,8 |
10-00 |
13-00 |
6. |
6,0 |
10,0 |
6-30 |
9-30 |
7. |
6,2 |
10,2 |
7-30 |
10-30 |
8. |
6,4 |
10,4 |
8-30 |
11-30 |
9. |
6,6 |
10,6 |
9-30 |
12-30 |
10. |
6,8 |
10,8 |
10-30 |
13-30 |
11. |
7,0 |
11,0 |
6-00 |
9-00 |
12. |
7,2 |
11,2 |
7-00 |
10-00 |
13. |
7,4 |
11,4 |
8-00 |
11-00 |
14. |
7,6 |
11,6 |
9-00 |
12-00 |
15. |
7,8 |
11,8 |
10-00 |
13-00 |
16. |
8,0 |
12,0 |
11-00 |
15-00 |
17. |
8,2 |
12,0 |
11-00 |
15-00 |
18. |
8,4 |
12,4 |
11-00 |
15-00 |
19. |
8,6 |
12,6 |
11-00 |
15-00 |
20. |
8,8 |
12,8 |
11-00 |
15-00 |
21. |
9,0 |
14,0 |
11-30 |
15-30 |
22. |
9,2 |
14,2 |
11-30 |
15-30 |
23. |
9,4 |
14,4 |
11-30 |
15-30 |
24. |
9,6 |
14,6 |
11-30 |
15-30 |
25. |
9,8 |
14,8 |
11-30 |
15-30 |
26. |
10,0 |
15,0 |
12-00 |
16-00 |
Изучение метода Монте-Карло.
Метод статистических испытаний, или метод Монте-Карло
[2], представляет собой численный метод, состоящий в
получении оценок вероятностных характеристик, совпадающих с решением
аналитических задач (например, с решением уравнений и вычислением определенного
интеграла). Впоследствии этот метод стал применяться для имитации процессов,
происходящих в системах, внутри которых есть источник случайности или которые
подвержены случайным воздействиям. Он получил также название метода статистического моделирования.
В основе метода лежит многократно повторяемый
эксперимент на модели физической системы с использованием случайных чисел и
дальнейшая статистическая обработка полученных результатов. Распространению
метода способствовало появление электронной вычислительной техники с высокой
производительностью, которая обеспечивает генерацию с большой скоростью
псевдослучайных чисел, необходимых для реализации метода.
Механизм метода можно пояснить на примере вычисления
определенного интеграла. Для определения площади под графиком функции Y=F(X):
что
является графической интерпретацией определенного интеграла, можно использовать
следующий подход:
- ограничим функцию прямоугольником, площадь которого легко вычисляется;
- внутрь прямоугольника поместим случайным образом N точек, координаты которых будем получать с помощью
специальных датчиков (генераторов) случайных чисел;
- определим число точек N’, которые будут находиться ниже графика функции;
Тогда значение интеграла (площадь под графиком
функции) определится из выражения:
Метод Монте-Карло широко применяется в различных
областях, имеет ряд разновидностей и
модификаций, зависящих от особенностей решаемых с его помощью задач и
повышающих точность и вычислительную эффективность.
Пусть события ,
составляют полную группу [4]. Тогда вероятности этих событий Рi удовлетворяют равенству:
Имитация факта появления одного из событий Аi (i=1,n)
состоит к проверке неравенств:
Выполнение k-го
неравенства эквивалентно наступлению события Аk.
Этот алгоритм иногда называют алгоритмом “розыгрыша по жребию”. Его можно
интерпретировать как установление номера k-го отрезка длиной Рk, на который пало случайное число х, при условии разбиения отрезка единичной длины на отрезки с
длинами P1,P2,...Pn,
[2]:
Типичным для практики является представление данных
наблюдения за какими-либо событиями в виде таблицы, в которой регистрируются
частоты наступления этих событий. Если события объединять в группы, поставив в
соответствие каждой группе индекс k=1,...,
N (k, в частности, может означать номер временного интервала
наблюдения, число на игральной кости и т.п.), то таблица вида
k |
1 |
2 |
3 |
… |
N |
fk |
|
|
|
|
|
будет представлять собой число зарегистрированных в
процессе наблюдения наступлений событий для каждой группы, или таблицу частот.
Если поделить значения частот на сумму их значений, то полученные величины можно
рассматривать как приближения к вероятностям появления событий каждой группы и
использовать для имитации появления событий в моделях.
Программа на языке С++, реализующая алгоритм выбора по
жребию, имеет следующий вид:
Таблица частот задается первыми parts
элементами массива nums частот
появления и массива vals значений
случайной величины.
Для
вычисления теоретических значений вероятностей безотказной работы системы,
состоящей из ненадежных элементов, следует использовать следующие выражения
теории вероятностей [4].
Вероятность
одновременного наступления независимых событий A и B находится как
произведение вероятностей наступления каждого события:
Для
полной группы несовместных событий ,
т.е., событий, для которых
и
и некоторого события В справедлива формула
полной вероятности:
где
есть условная вероятность наступления события B
при условии наступления события .
В работе проводится оценивание вероятности безотказной
работы технических схем на основе метода статистических испытаний и сравнение
результата с результатом, полученным с помощью вероятностной модели.
Запустите
табличный редактор Microsoft Excel.
1. Из каталога стандартных компонентов (см. 3.5.1) составьте исследуемую схему. Все компоненты, номера
которых указаны в строке с номером варианта в таблице вариантов (см. 3.5.2), соединяются последовательно, один за другим.
Номер
варианта=<Порядковый номер в списке группы>
Схема, таким
образом, выполняет одну функцию.
Работоспособность
всей схемы определяется одновременной работоспособностью всех трех компонентов.
2. Настройте текст раздела исходного СРР-модуля, включив
в него:
- описание констант со значениями безотказной работы
отдельных блоков по значениям, приведенным в 3.5.3;
- условия нахождения системы в работоспособном состоянии
при проведении ее проверки
3. Отключите выполнение ненужных разделов программы,
установив в разделе “Параметры модели” значения NexpR=0 и NexpE=0.
4. Осуществите пробные прогоны программы с небольшим
значением NexpS и изучите
трассировочный вывод.
5. Осуществите прогон программы, задав в качестве числа
испытаний значение NexpS=100000.
Результаты следует занести в Excel-таблицу:
№ |
1 |
2 |
3 |
4 |
5 |
СРЕД-НЕЕ |
100000 |
|
|
|
|
|
|
Чтобы отменить вывод в файл итогов каждого испытания,
возьмите в знаки комментария оператор вывода получаемого значения в цикле.
6. Проанализируйте полученные данные.
7. Пользуюсь формулами теории вероятностей (см. раздел 3.2.3), посчитайте точное значение вероятности безотказной
работы системы и сравните его со значением,
полученным экспериментальным путем.
Выполните все шаги раздела 3.3.2 для случая, когда моделируется схема с тремя
функциями (ветвями). Иначе говоря, компоненты образуют три параллельные цепочки
таким образом, что при каждом испытании включается одна из трех веток
компонентов с вероятностями:
Р1 = 0,2,
Р2 = 0,3,
Р3 = 0,5.
1) В чем заключается идея метода Монте-Карло?
2)
Чем достигается
статистическая точность метода?
3)
Каковы основные
достоинства и недостатки метода?
4)
Как зависит
точность результата, полученного на основе метода статистических испытаний, от
числа проведенных испытаний?
5)
Как можно
повысить вычислительную эффективность (на примере данной работы)?
6)
Как имитируются
события, образующие полную группу событий?
Компонент № |
I |
II |
III |
1 |
1 |
2 |
3 |
2 |
1 |
2 |
4 |
3 |
1 |
2 |
5 |
4 |
1 |
2 |
6 |
5 |
1 |
3 |
4 |
6 |
1 |
3 |
5 |
7 |
1 |
3 |
6 |
8 |
1 |
4 |
5 |
9 |
1 |
4 |
6 |
10 |
1 |
5 |
6 |
11 |
2 |
3 |
4 |
12 |
2 |
3 |
5 |
13 |
2 |
3 |
6 |
14 |
2 |
4 |
5 |
15 |
2 |
4 |
6 |
16 |
2 |
5 |
6 |
17 |
3 |
4 |
5 |
18 |
3 |
4 |
6 |
19 |
3 |
5 |
6 |
20 |
4 |
5 |
6 |
№ |
P |
1 |
0,95 |
2 |
0,80 |
3 |
0,75 |
4 |
0,70 |
5 |
0,65 |
6 |
0,60 |
7 |
0,85 |
8 |
0,80 |
9 |
0,75 |
10 |
0,70 |
11 |
0,80 |
12 |
0,75 |
13 |
0,85 |
14 |
0,75 |
15 |
0,70 |
16 |
0,50 |
17 |
0,70 |
18 |
0,80 |
Изучение:
1)
основных
возможностей и правил работы конструктора Gem,
2)
концепций
и основных конструкций моделирующей системы Pilgrim,
3)
порядка
разработки и запуска программной модели в среде моделирующей системы Pilgrim,
4)
интерпретации
результатов имитационного моделирования.
На
практике часто требуется провести исследование систем, которые представляются
как системы массового обслуживания с неограниченной очередью и одним обслуживающим прибором:
Наиболее существенными для анализа могут быть показатели типа среднего
числа ожидающих в очереди требований, среднего времени ожидания, среднего
времени нахождения заявки в системе и другие.
В случае, когда входящий поток (поток заявок) имеет пуассоновское распределение, среднее
время ожидания заявок в очереди в такой системе можно определить по формуле Полачека-Хинчина [5]:
где
- среднее время ожидания в очереди
- среднее время обслуживания
- коэффициент
загрузки канала
- коэффициент
вариации времени обслуживания.
Коэффициент загрузки канала можно
найти как
где - средний интервал между заявками во входящем потоке.
Коэффициент вариации времени
обслуживания определяется как
где -среднеквадратическое отклонение времени
обслуживания.
С возрастанием загрузки канала (т.е., чем ближе среднее время обслуживания к среднему интервалу поступления заявок), как
видно формулы, растет время задержки в очереди .
Альтернативным
подходом к решению задачи является исследование системы на основе имитационной модели, с помощью которой
можно получить результаты для случаев произвольных распределений интервалов
между требованиями входящего потока и продолжительности обслуживания заявки в
обслуживающем приборе. Такую модель можно построить с помощью специальной
моделирующей системы, что ускоряет процесс создания, улучшает характеристики
конечного результата (программной
модели) и имеет ряд других достоинств.
В настоящей работе проводится
изучение подхода на основе имитационного моделирования с использованием системы
Pilgrim [1].
Для задания законов и параметров
распределения случайных величин, используемых в моделях настоящей работы, в
конструкторе Gem имитационной системе Pilgrim используются параметры со
следующими именами и правилами для задания их значений:
Параметр |
Название в GEM |
Значения |
Закон
распределения |
Закон распределения |
none - детерминированный expo -
экспоненциальный norm - нормальный |
Математическое
ожидание |
Параметр 1 |
Действительное
число |
Среднеквадратическое
отклонение |
Параметр 2 |
Действительное
число |
В
работе необходимо создать и следовать три программные модели.
Модель 1
–модель СМО с детерминированным интервалом времени между заявками в потоке и
детерминированным временем обслуживания. Очевидно, что если время обслуживания
и интервал поступления являются детерминированными величинами (то есть не имеют
разброса) и время обслуживания меньше интервала между поступлениями, то очередь
к обслуживающему прибору образовываться не должна.
Модель 2 –модель
СМО с нормальным законом распределения интервала между заявками и нормальным
распределением времени обслуживания. Появление случайности должно теперь
привести к возникновению очередей.
Модель 3 –модель
СМО с пуассоновским входным потоком (экспоненциальным законом распределения
интервала между заявками). В случае простейшего потока заявок применима формула
Полачека-Хинчина, и среднее за весь период моделирования время ожидания в
очереди не будет равно нулю.
Для
третьей модели необходимо получить значения показателей моделируемой системы с
помощью аналитического выражения.
1) Запустите файл Gem.exe
(обычно находится в папке Pilgrim/Gem).
2) В меню Файл
выберете пункт Создать и разверните
рабочую плоскость на весь экран.
3) С помощью палитры объектов постройте на рабочей
плоскости граф модели:
Изображения узлов перетаскиваются при
нажатой левой кнопке мыши.
Узлы нумеруются автоматически (первая цифра номера означает номер
плоскости, так как в системе Pilgrim есть возможность иерархического построения графа моделей). Имена узлов
указываются в диалоговых окнах свойств узлов,
вход в которые осуществляется с помощью двойного щелчка мыши на изображении
узла графа.
Для удаления узла:
- захватите инструмент левой кнопкой мыши,
- не отпуская кнопку, поместите
указатель мыши на удаляемый узел,
- подтвердите необходимость удаления.
Для проведения стрелки:
- захватите инструмент левой кнопкой мыши,
- не отпуская кнопку, поместите
указатель мыши на узел-источник стрелки,
- отпустите кнопку, что будет означать привязку
начала стрелки к данному узлу,
- поместите указатель мыши на
узел-приемник стрелки и щелкните левой кнопкой мыши.
Для удаления стрелки:
- войдите в окно описания
узла-источника стрелки,
- пометьте мышкой соответствующий Выход из узла,
- нажмите кнопку Удалить.
4)
Узлы модели:
Узел
ag представляет собой генератор
транзактов имитационной модели. Транзакты в первой модели генерируются по
одному через равные промежутки времени, величина которых задается
пользователем.
Параметры
узла:
Число каналов |
1 |
Закон распределения |
none |
Матожидание |
10 |
Таким образом, задается регулярный поток транзактов, следующих один за
другим с постоянным интервалом в 10
временных единиц.
Узел Queue моделирует
очередь транзактов.
Для данной модели узел настраивать не нужно.
Узел Serv – это прибор или сервер, осуществляющий какое-либо
обслуживание транзактов в течение модельного времени, отличного от нуля.
Параметры узла:
Число каналов |
1 |
Закон распределения |
none |
Матожидание |
5 |
Таким образом, задается регулярный закон обслуживания транзактов в
сервере, имеющем один канал обслуживания, со средним значением 5 временных
единиц.
Узел
Term представляет собой терминатор транзактов. Он реализует
функцию удаления из модели входящего в узел транзакта. Одновременно узел
фиксирует время его существования, начиная с момента выхода этого транзакта из
генератора. Этот узел можно получить из узла ag после того, как он помещен на плоскость, изменением его свойства
Класс со значения AG на значение Terminator. Изменить
класс узла можно также и до его помещения на плоскость, нажатием на клавишу под
значком узла ag на панели
инструментов.
5)
Инициализация
модели.
Нажмите кнопку ModBeg под
палитрой объектов.
В строке Название введите имя модели, которое будет указано в таблице
результатов моделирования.
В строке Время следует указать длительность периода моделирования – 2000.
В строке ПСЧ указывается
начальное значение для генератора псевдослучайных чисел, необходимых для
имитации случайных процесов. По умолчанию в качестве начального значения
берется показание компьютерного таймера.
Строки Задержка и Поток предназначены для задания номеров
контролируемых узлов: очереди (узел Queue)
и терминатора (узел Term)
соответственно. Для указанных узлов в процессе моделирования будут строиться
графики времени задержки в узле типа Queue
и динамики выходного потока в узле типа Term.
Зададим в строке Задержка номер 102,
для получения графика динамики задержек в очереди модели.
6) Задание имени файла-отчета.
Целесообразно
указать имя и расширение для файла с отчетом о результатах моделирования,
которые выводятся автоматически системой Pilgrim.
Для этого
нажмите кнопку ModEnd под палитрой объектов и в открывшемся окне
введите имя файла.
Рекомендуется указывать расширение txt, что позволит открывать файл для
последующего просмотра приложением Notepad по умолчанию.
7) Генерация Pilgrim -программы.
Если
сохранение модели в графическом формате было успешно выполнено, нужно в меню Выполнить выбрать пункт Генерировать С++ файл. В указанной пользователем папке будет создан файл Pilgrim -программы с расширением .cpp (имя
вводится пользователем).
8)Следуя указаниям
9)Приложение 4
10)
11)
Создание и запуск модуля Pilgrim- создайте выполняемый модуль программной модели.
12)
Следуя
указаниям
13)
Приложение 4
14)
15)
Создание и запуск модуля Pilgrim- осуществите прогоны программной модели.
16) Изучите полученные результаты.
Повторите
все действия раздела 4.3.1 для параметров модели 2, задав их следующим образом:
Узел ag
Закон распределения |
norm |
Матожидание |
10 |
Отклонение |
3 |
Таким образом, задается поток
транзактов, имеющих нормальный закон распределения со средним значением 10
временных единиц и среднеквадратическим отклонением в 3 временные единицы.
Узел serv
Число каналов |
1 |
Закон распределения |
norm |
Матожидание |
9 |
Отклонение |
3 |
Таким образом, задается нормальный
закон обслуживания транзактов со средним значением 9 временных единиц и
среднеквадратическим отклонением в 3 временные единицы.
А- детерминированное
В- экспоненциальное
С- нормальное
Необходимо
получить результаты с помощью
1) эксперимента с имитационной моделью и
2) теоретических расчетов на основе формулы
Хинчина-Полачека.
Результаты
должны быть помещены в Excel-таблицу:
Модель |
Средний интервал прихода заявок tq |
Среднее время обслуживания ts |
|
|
Среднее
время ожидания в очереди tw |
||||||||
Формула Хинчина-Полачека |
Имитационная
модель |
||||||||||||
Тмод = 2000 |
Тмод =
50000 |
||||||||||||
Запуск 1 |
Запуск 2 |
Запуск 3 |
Среднее |
Запуск 1 |
Запуск 2 |
Запуск 3 |
Среднее |
||||||
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
|
|
|
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
1) Повторите действия раздела 4.3.1 для каждого из трех наборов параметров (Номер варианта – Порядковый номер в списке группы):
Узел ag
Закон распределения |
expo |
Матожидание |
tq |
Отклонение |
none |
Узел serv
А
Закон распределения |
none |
Матожидание |
ts |
Отклонение |
none |
В
Закон распределения |
expo |
Матожидание |
ts |
Отклонение |
none |
С
Закон распределения |
norm |
Матожидание |
ts |
Отклонение |
ts / 3 |
(Число каналов во всех вариантах модели задается равным 1.)
Удобнее менять параметры узлов ag и serv непосредственно в сгенерированном cpp-файле. Для этого следует отыскать в .cpp-файле узловые операторы ag и serv и менять их параметры.
Для изменения параметров узла serv в .cpp-файле нужно найти строку:
serv ("Object 103", 1, none, norm, 9, 3, none, 104);
(здесь среднее время обслуживания в узле равно 9) и менять параметр со значением norm и два, следующих за ним.
Изменения параметров узла ag осуществляются аналогично.
Для каждого набора параметров сделайте по три запуска программной модели и определите среднее значение времени ожидания в очереди.
2) Задайте время моделирования равным 50000 и повторите все эксперименты предыдущего пункта.
3) С помощью формулы Полачека-Хинчина найдите значение времени ожидания в очереди для вариантов А, В, С.
4) Сравните теоретические результаты с результатами, полученными на имитационной модели для разного времени моделирования. Какие выводы можно сделать относительно полученных результатов?
Отчет по работе должен содержать
- файлы с полученными результатами прогонов и
- таблицу со сводкой результатов экспериментов и
вычислений по формуле Хинчина-Полачека.
1)
Что такое
имитационная модель?
2)
Какое средство
системы Pilgrim используется для описания модели?
3)
Какими
возможностями обладает конструктор Gem?
4)
Что является
параметрами основных узлов?
5)
Каким образом
задаются параметры узлов?
6)
Что входит в
параметры модели?
7)
Как задаются
параметры модели?
8)
Из чего состоят
выходные параметры моделирования в системе Pilgrim?
9)
Каковы основные
этапы создания программной модели в системе Pilgrim?
10)
В каких случаях
целесообразно применять аппарат имитационного моделирования для решения задач
систем массового обслуживания?
11)
Как отражается
значение параметра Время моделирования
на значениях выходных параметрах модели?
средний интервал между приходами заявок
среднее время обслуживания заявок
№ |
|
|
1 |
10.0 |
5.0 |
2 |
11.0 |
3.0 |
3 |
9.0 |
4.0 |
4 |
7.0 |
3.5 |
5 |
12.0 |
7.0 |
6 |
6.0 |
4.0 |
7 |
5.5 |
2.0 |
8 |
8.5 |
4.5 |
9 |
12.0 |
8.0 |
10 |
7.5 |
4.0 |
11 |
9.0 |
6.5 |
12 |
13.0 |
8.0 |
13 |
10.0 |
4.0 |
14 |
10.0 |
7.0 |
15 |
9.5 |
4.5 |
16 |
13.0 |
9.0 |
17 |
8.5 |
4.5 |
18 |
7.5 |
3.5 |
19 |
9.0 |
5.0 |
20 |
10.0 |
6.0 |
21 |
9.0 |
6.0 |
22 |
12.0 |
9.0 |
23 |
8.0 |
4.0 |
24 |
9.5 |
4.0 |
25 |
11.0 |
5.0 |
26 |
13.0 |
7.0 |
Изучение:
1) средств и приемов работы с приоритетами,
2) приемов маршрутизации транзактов.
В системе Pilgrim [1] обеспечивается возможность назначения транзактам
приоритетов и применения различных правил обработки транзактов с разными приоритетами в узлах модели.
В генераторе с бесконечной емкостью ag:
аg (Р1,Р2,Р3,Р4,Р5,Р6,Р7,Р8,Р9)
параметр Р3 задает приоритет (число типа int в диапазоне
1-32767), назначаемый каждому сгенерированному транзакту; если приоритет не
нужен, то Р3=none.
Очередь queue
queue (Р1,Р2,Р3)
определяет узел,
моделирующий очередь транзактов. Эта очередь строится по одному из двух правил:
либо транзакты упорядочены в порядке поступления, либо вновь поступающие
транзакты поступают в конец своей приоритетной группы (более приоритетные
транзакты находятся ближе к началу очереди, а менее приоритетные – к концу). Приоритет
транзакта тем выше, чем больше значение его приоритета. Дисциплина задается
параметром Р2, значениями которого могут быть:
Р2= ргtу, для очереди с
приоритетами,
Р2= none, для очереди
без приоритетов.
Узел обслуживания с N параллельными каналами serv
serv (Р1,Р2,Р3,Р4,Р5,Р6,Р7,Р8)
описывает узел,
осуществляющий какое-либо обслуживание транзактов в течение модельного времени,
отличного от нуля. Это одно- или многоканальный обслуживающий прибор,
работающий по правилам абсолютных приоритетов или без них и имеющий стек для
транзактов, обслуживание которых было прервано транзактами более высокого
приоритета (правило относительных приоритетов реализуется, как было описано
выше, в узле типа queue – очередь).
Дисциплина обслуживания задается параметром Р3:
Р3= abs: используется
приоритетная дисциплина с прерыванием обслуживания менее приоритетного
транзакта более приоритетным, при этом менее приоритетный транзакт перемещается
в специальный стек;
Р3=
none: транзакты ставятся в очередь в порядке поступления.
Для Р3= abs имеются две возможности продолжения
обслуживания транзактов, перемещенных в стек:
1) после того, как приоритетный
транзакт покидает узел serv,
обслуживание транзактов, находящихся в стеке, продолжается с прерванного места,
причем сохраняется чистое заданное время обслуживания, без учета времени
нахождения прерванного транзакта в специальном стеке;
2) после того, как
приоритетный транзакт покидает узел serv,
обслуживание транзактов, находящихся в стеке, начинается заново.
Примером
может служить повторный ввод информации при отсутствии контрольных точек. Если
оператор в течение нескольких часов вводит большой массив информации и не
производит периодического сохранения информации в памяти на жестком диске, то
при случайном сбое или броске электропитания информация, расположенная в
оперативной памяти, пропадает, и оператор будет вынужден возобновить
проделанную работу заново.
Имитацию
такой ситуации можно обеспечить с помощью оператора присваивания типа
t -> ga=again,
который
необходимо выполнить перед входом транзакта в узел serv. В этом случае при
прохождении через serv транзакт
получает признак возобновления обслуживания. После выхода из узла serv этот признак теряется.
Следует отметить, что
среднее время обслуживания транзактов в узле serv и среднее время задержки в узле – это разные времена. При
прерываниях обслуживания транзакта (с его дообслуживанием) чистое время его
обработки будет меньше времени задержки в узле на длительность обслуживания
приоритетных транзактов.
В работе создается и
исследуется модель обработки документов в офисе.
Предполагается, что в офис приходят документы двух
типов: обычные и срочные.
Срочные документы приходят реже, чем обычные, и
требуют более длительной обработки.
Срочные документы обрабатываются вне очереди, при этом
обслуживание обычного документа прерывается до окончания обслуживания срочного.
После обработки документы подшиваются в соответствующие
папки.
Требуется найти:
-
Среднее время
задержки документа в очереди
-
Среднее время
обслуживания документа секретарем
-
Степень загрузки
секретаря
-
Количество
подшитых обычных документов
-
Количество
подшитых срочных документов
1) Запустите приложение Excel
и подготовьте таблицу для занесения результатов запусков модели следующего
вида:
Возобновление обслуживания |
Параметр |
Запуск |
Среднее |
|||
1 |
2 |
3 |
||||
Продолжение |
Tожидания |
|
|
|
|
|
Tобслуживания |
|
|
|
|
||
Загрузка секретаря |
|
|
|
|
||
Обработано |
обычных |
|
|
|
|
|
срочных |
|
|
|
|
||
Повторение |
Tожидания |
|
|
|
|
|
Tобслуживания |
|
|
|
|
||
Загрузка секретаря |
|
|
|
|
||
Обработано |
обычных |
|
|
|
|
|
срочных |
|
|
|
|
2) Запустите конструктор Gem.
3) Создайте плоскость новой
модели и постройте граф:
В модель включены два генератора:
-
генератор
обычных документов (имеющих приоритет 1) и
-
генератор
срочных документов (имеющих приоритет 2).
Транзакты
узла queue при поступлении переупорядочиваются
так, что транзакт с приоритетом 2 помещается в начало очереди транзактов.
Если
в узле serv в момент поступлении
транзакта с приоритетом 2 обслуживался транзакт с приоритетом 1, то его
обслуживание прерывается, и на обслуживание поступает транзакт с приоритетом 2.
Покинувшие
узел serv транзакты приоритета 1 направляются
в папку 1, а транзакты приоритета 2 направляются в папку 2. Папки имитируются
узлами типа term.
4) Задайте параметры
инициализации модели и параметры узлов ag
и queue.
AG101
( «Документ 1»)
AG101( «Документ 2»)
Q103
(«Стол»)
Для реализации модели обслуживания
с приоритетами, необходимо соответствующим образом настроить узел queue (очередь): во вкладке
«Определить параметры» в поле Приоритет
следует выбрать значение prty, чтобы
транзакты в узле располагались в порядке убывания приоритета к концу очереди.
5) Переменные
Прежде чем настраивать узел serv необходимо определить
две переменные M и G.
Для обеих переменных задайте тип float.
6) Задайте параметры узла Q104
(«Секретарь»)
На
вкладке Определить параметры
заполните поля следующим образом:
-
Приоритетность - abs (обслуживание транзакта с
низшим приоритетом в случае прихода транзакта с более высоким приоритетом будет
прерываться)
-
Закон
распределения - norm
-
Параметр 1 - M
-
Параметр 2 - G
В разделе «Общий С++ текст до вхождения в узел» записать текст (значения M
и G должны устанавливаться соответственно варианту работу):
if (t->pr==1)
{
M=1;
G=0.33;
}
else
{
M=3;
G=1;
}
Задайте условия перехода из сервера в соответствующую папку (узел term):
Условие
перехода для обычных документов (из 104 в 105):
t->pr==1
Условие
перехода для срочных документов (из 104 в 106):
t->pr==2
7) Установив все параметры, сгенерируйте
исходный модуль и соберите исполнительный модуль модели.
8) Проведите по три запуска
модели.
Результаты занесите в верхнюю часть таблицы с
результатами.
9) Установите режим с
повторением обслуживания прерванных транзактов, для чего перед узловым
оператором serv в тексте исходного
модуля добавьте строку:
t->ga=again;
и проведите по три запуска модели
для этого режима, заполняя нижнюю часть таблицы.
10) Оцените изменение ситуации
в случае, если обработкой документов будут заниматься два секретаря: задайте в
качестве параметра “число каналов” узла serv
значение 2, сделайте по одному-два запуска в каждом режиме и изучите результаты
запусков.
Отчет
по работе должен включать
-
Файлы-отчеты
системы с результатами запусков и
-
Excel-таблицу со
сводкой основных параметров (см. п.1).
1)
Что такое приоритет?
2)
Какие типы
приоритетов можно использовать в системе Pilgrim?
3)
Какие приоритеты
и как влияют на обработку транзактов в узле queue?
4)
Какие приоритеты
и как влияют на обработку транзактов в узле serv?
5)
Каким образом
можно задать значение приоритета транзакта?
6)
Какие из
полученных результатов можно использовать для предварительной оценки
адекватности модели?
7)
Предложите
какой-либо способ помимо использованного в работе для настройки параметров узла
serv на обработку транзактов каждого приоритета.
Значения параметров определяются по
значению N
(порядковый номер в списке группы):
№ |
Узел |
Параметры
|
Значение |
1 |
ag (101) |
Интервал между поступлениями обычных документов -
Закон
распределения -
Математическое
ожидание -
Среднеквадратическое
отклонение |
norm 2 * N |
1 |
ag (102) |
Интервал между поступлениями срочных документов -
Закон
распределения -
Математическое
ожидание -
Среднеквадратическое
отклонение |
norm 8 * N |
3 |
queue (103) |
Признак обслуживания с приоритетами |
Prty |
4 |
serv (104) |
Длительность обслуживания обычных документов -
Закон
распределения -
Математическое
ожидание -
Среднеквадратическое
отклонение Длительность обслуживания срочных документов -
Закон
распределения -
Математическое
ожидание -
Среднеквадратическое
отклонение |
norm N 1/3 * N norm 8 * N 8/3 * N |
Величина времени моделирования – 960.
Изучение:
1)
схем зарядки
замкнутых моделей в системе Pilgrim,
2)
приемов получения
выходных данных.
Под замкнутой моделью корпоративной
информационной системы (КИС) понимается модель системы, в которой транзакты,
будучи один раз сгенерированы, циркулируют в пределах графа модели, не погибая
в терминаторах.
Такой моделью, например, может быть модель работы, группы
пользователей с компьютерной сетью в диалоговом режиме. Транзакт в этом случае
имитирует запрос пользователя. Выйдя из узла, имитирующего работу пользователя,
транзакт проходит по графу модели и постепенно, по мере его обработки в КИС
(узлах модели), превращается в ответ и возвращается к пользователю (узел),
после чего вновь начинает играть роль запроса того же пользователя.
Моделировать каждый новый запрос отдельным транзактом
нельзя, так как нельзя рассчитать заранее время обработки запроса системой (это
случайная величина) и, следовательно, нельзя задать частоту генератора.
В этом случае модель может быть построена следующим
образом:
-
Пользователи
(или группы пользователей, в зависимости от сложности моделируемой системы)
представляются одно- или многоканальными узлами типа serv (серверы);
-
Число
каналов сервера соответствует числу пользователей, время обработки транзакта
сервером соответствует времени подготовки пользователями запроса;
-
Конкретное
состояние транзакта (запрос – ответ) фиксируется значением одного из его
параметров;
- Для зарядки транзактами серверов
пользователей, принадлежащих к одному классу, используется единственный
генератор, порождающий всего один транзакт. Далее транзакты размножаются с
помощью узлов типа creat.
В частности, если требуется смоделировать работу нескольких
пользователей, выполняющих разную работу за своими терминалами, то это может
быть реализовано с помощью следующего графа:
Текст программы на языке Pilgrim [1]:
ag ("Старт",1,none,
none,1.О,zero,zero,2);
top (2):
creat ("Множитель",
none, Users, none, 4, 3);
place;
top (3):
term ("Стоп");
cheg (1, none, none, modtime, zero, zero,3);
place;
top (4):
t->ft = addr[4]->na + 5;
t->ru0 = Think_time;
t->iu0 = QUERY;
queue ("Распределитель",
none, t->ft) ;
place;
Узел 2 creat генерирует Users транзактов (по числу пользователей), не
присваивая им номер семейства.
Далее эти транзакты попадают в очередь (узел 4), где
каждому из них присваивается свой номер семейства, равный номеру сервера, в
который этот транзакт поступит. В параметр транзакта t->ru0 заносится также среднее время задержки в
сервере, моделирующем работу пользователя. Этот параметр используется при
описании серверов пользователей (узлов с номерами из диапазона [5, Users + 4], где Users - число серверов).
Для оценивания среднего времени реакции КИС можно:
-
прибегнуть
к приему с включением в модель
дополнительных узлов типа key вместе
с соответствующей логикой или
- воспользоваться следующим выражением:
где означает среднее время обдумывания
пользователем ответа системы перед выдачей нового ей очередного запроса.
При использовании первого подхода каждому пользователю, который имитируется
одним узлом типа serv, придается
дополнительный узел key, который
служит только для целей измерений. Транзакт (запрос к КИС) сначала попадает в узел key и запирает его. После обработки запроса, когда транзакт
возвращается из модели КИС сервер, имитирующий пользователя, при входе в узел serv он открывает соответствующий узел key. В программной модели автоматически
измеряется интервал закрытого состояния узла key и определяются математическое ожидание и среднеквадратичное
отклонение.
В работе необходимо построить модель системы, работающей в
режиме “запрос-ответ”, и определить значения среднего времени реакции системы
на запросы пользователей.
Пользователи системы выполняют разнотипную работу, которая
характеризуется разным временем обработки запросов и предполагает разное время
обдумывания ответа системы на запрос.
Работа пользователей представляется в модели несколькими
узлами типа одноканального сервера, число которых соответствует числу
пользователей.
Модель
системы строится для случая четырех пользователей.
1) Создание графа модели.
С помощью конструктора Gem постройте граф
модели как показано на рисунке:
В
качестве значений параметров модели задаются следующие:
Имя |
Тип |
Смысл |
Начальные
значения |
Users |
int |
Число пользователей |
4 |
modtime |
float |
Время моделирования |
50000 |
T_time[] |
float |
Время обдумывания ответа |
{N*3,N*4, N*5, N*6} |
Q_time[] |
float |
Время обработки запроса |
{0.8*N*3, 0.7*N*4, 0.6*N*5, 0.45*N*6} |
где
N – порядковый номер в списке группы.
В
настройках modbeg в качестве времени моделирования указывается
переменная modtime.
В
настройках modend указывается имя файла-отчета.
Раздел
“после вхождения в узел” узла 103 должен
содержать текст:
cheg (101,none,none,modtime,zero,zero,102);
Узел
102 (creat) должен породить Users транзактов и
направить их в узел 104 (queue).
Раздел
“до вхождения в узел” описания узла 104 должен содержать текст:
t->ft=addr[104]->na+105;
t->ru0=T_time[addr[104]->na];
t->ru1=Q_time[addr[104]->na];
В качестве закона распределения в параметрах узлов
имитации пользователей 105-108 следует указать значение expo для
экспоненциального распределения времени обдумывания.
2) Редактирование текста программной модели.
После генерации программного кода необходимо произвести
несколько корректировок.
В
узле 104 убрать сгенерированные С++ - операторы и изменить параметры узлового
оператора queue
queue ("Прием", none, t->ft);
Для
узлов 105-108 установить параметры
Число каналов |
1 |
Закон распределения |
norm |
Среднее время |
ru0 |
Отклонение |
ru0/3 |
В
узле 110 убрать сгенерированные С++ - операторы и изменить параметры узлового
оператора serv
serv ("КИС", 1, none, norm, t->ru1, t->ru1/3, none,
t->ft);
После
этого следует проверить текст модуля на наличие пропусков и ошибок.
3) Запуски программной модели.
После сборки и компиляции проекта для программной
модели необходимо произвести несколько запусков для исходного набора значений
времени обработки запроса и времени обдумывания ответа пользователем, а также с
двумя дополнительными наборами значений (по выбору).
Для
всех запусков необходимо оценить среднее время реакции системы с использованием выражения:
где
- среднее время обдумывания ответа пользователем.
4)
Определение
времени ответа с помощью дополнительного узла key.
На основе разработанной модели создать модифицированную модель, включающую
дополнительные узлы типа key, обеспечивающие автоматический сбор временных
характеристик для оценивания времени реакции.
Для
этого необходимо выполнить следующее.
-
Добавить в
программную модель четыре узла (соответственно числу работающих в системе
пользователей) типа key.
Узлам присвоить номера 115, 116, 117, 118 и
скорректировать параметр, задающий максимальное число узлов модели, в операторе
modbeg.
-
Добавить описание
узлов key в программную модель, включив функцию hold(<номер
узла key>) вслед за узловым оператором, которые будут
переводить узлы в закрытое состояние после прохода через них транзактов.
-
Скорректировать
узловые операторы serv, имитирующие работу пользователей, добавив перед
узловыми операторами функцию rels(<номер узла key>) и изменив параметр маршрутизации транзакта на
номер соответствующего узла key.
Произвести запуски модели, оценить значения времени
реакции системы и сопоставить их со значениями,
полученными путем расчета.
Результаты расчета и запусков внесите в таблицу
следующего вида:
Польз. |
|
|
Кзагр |
|
|
Расчет- ное |
Изме-ренное |
||||
1 |
|
|
|
|
|
2 |
|
|
|
|
|
3 |
|
|
|
|
|
4 |
|
|
|
|
|
В столбцы и следует внести значения параметров для времени
обдумывания ответа на запрос и времени обработки запроса пользователя (время
процессора, имитируемого узлом типа serv)
для своего варианта.
В ячейках столбца Кзагр записываются значения
коэффициентов загрузки узлов serv,
полученные в результате прогона модели.
В ячейках столбца расчетного значения записываются вычисленные по формуле значения.
В ячейках столбца измеренного значения записываются значения, полученные в результате
прогона модели.
Отчет по работе должен содержать файлы с результатами
прогонов и сводку результатов в форме таблицы раздела 6.3.
1) Что такое замкнутая имитационная модель?
2) Что такое “зарядка
модели”?
3) Какие существуют способы зарядки модели?
4) Какие приемы можно применить для расчета среднего
времени реакции КИС на запросы пользователей?
5) Предложите один или несколько способов определения
временных параметров помимо использованных в работе.
Изучение:
1)
средств
построения имитационных моделей на основе методологии декомпозиции процессов,
2) приемов работы с приоритетами,
3) способов маршрутизация транзактов.
Широко применяемые при создании и использовании
имитационных моделей CASE-средства активно используют методологию структурного
анализа, предусматривающую наглядное и эффективное проектирование системы путем
выделения ее составляющих и их последовательного рассмотрения. Описание системы
начинается с общего обзора и выделения основных ее компонентов или процессов.
Для визуального представления создается первый уровень или слой, на котором
отображаются выделенные процессы и их взаимосвязи. Далее для ряда процессов
может быть проведена детализация, в свою очередь, выделяющая новые процессы в
их структуре. Так, последовательным усложнением описания объекта и его
процессов разработчик достигает необходимой детализации. Глубина детализации
определяется как необходимой точностью, так и набором исходных данных. В
процессе структурного анализа выявляется иерархическая структура модели.
С помощью конструктора Gem системы Pilgrim [1] можно строить
многоуровневые модели, организуя иерархию плоскостей построения модели. Иерархические модели устроены следующим
образом: верхний уровень модели содержит ряд узлов, среди которых есть такие,
которые детализируются на нижних уровнях. При этом, создавая детализирующий
уровень, пользователь опять может поместить на нее узлы, которые могут быть
детализированы еще ниже. Таким образом, граф модели примет иерархическую
структуру. Число уровней вложенности. Конструктором не ограничено, т.е.
пользователь может сколько угодно подробно детализировать и обобщать процессы
модели.
При создании новой модели пользователь начинает работу
корневого уровня, и поэтому некоторые процессы модели с целью дальнейшей
детализации могут быть представлены в общем виде. Для выполнения структурной
декомпозиции в системе Pilgrim
определяется особый тип узла parent,
использующийся исключительно как средство создания наглядных многоуровневых
моделей. Узел типа parent содержит ссылку на плоскость, его детализирующую,
т.е. используется для описания процессов, которые можно рассмотреть на
отдельной плоскости. Узел parent не выполняет никаких действий по обработке транзакта
и при генерации программного кода просто заменяется своей декомпозицией, т.е.
порождаемым им слоем. Например, если пользователь создал узел типа parent с
номером 4, то в программном файле узел с таким номером сгенерирован не будет. С
точки зрения генератора программного файла узел parent представляет собой простой маршрутизатор, который
может иметь любое количество входов, ссылку на детализирующий уровень и
единственный выход. На рисунке в плоскости 1
имеется последовательность узлов Клапан 101àДействие 102àОчередь 103.
Узел Действие 102
является узлом типа parent и содержит детализирующую плоскость с цепочкой Очередь 104 à Сервер 105:
В этой плоскости стрелка, направленная из левого верхнего
угла экрана в узел Очередь 104,
обозначает, что этот узел является входом
на плоскость, а стрелка из узла Сервер
105 в правый верхний угол - выходом с плоскости. При генерации программного файла получим
следующую цепочку:
Клапан 101 à Очередь 104 à Сервер 105 à Очередь 103,
т. е. узел Действие
102 является лишь средством реализации (виртуальным узлом) и будет
обработан генератором как узел Pilgrim
Иногда при построении модели может возникнуть
необходимость выделения некоторых типовых действий по обработке данных. Это
могут быть запросы на выполнение бухгалтерской проводки, требования выделения
моделируемого ресурса или какие-либо другие действия. При возникновении такой
задачи удобно обозначить подпрограммы, обращение к которым было бы возможно из
любого места модели. Для этого используются узлы типа pay, rent, down. Такие
узлы, так же как и parent, содержат переход на более низкий уровень модели,
однако имеют несколько иной механизм действия и область применения. Если с
помощью узла типа parent можно создавать иерархические модели, имеющие на
любой сколько угодно глубоко вложенной плоскости новые узлы parent, то с
помощью узлов типа pay, rent, down возможно лишь реализовать подпрограммы на двух слоях
модели и невозможно построить общую иерархию уровней.
Рассмотрим
принцип работы таких узлов на примере узла pay. На плоскости 1
находится узел типа pay, содержащий обращение к подпрограмме, расположенной в
плоскости 12:
Входом плоскости 12 является узел с названием «Р/счет»,
а выходом - узел с именем «Бухгалтерия». При генерации программного файла в
узле «Бухгалтерия» в качестве параметра, определяющего номер следующего узла,
на который переходит транзакт, будет указано не конкретное значение, а
специальный параметр транзакта updown. При этом предполагается, что каждый транзакт,
попадающий в выходной узел плоскости, содержит в параметре updown номер
узла, на который следует выполнить переход. Параметр транзакта updown
инициализируется в узле типа pay, т.е. в данном случае в узле с названием «Плата
поставщику».
Аналогичным образом реализуется переход на подпрограмму
с использованием узлов типа rent и down. Они также инициализируют переменную транзакта updown. Таким
образом, использовать узлы типа pay, rent и down для реализации иерархических моделей нельзя: на
уровне подпрограммы для узла одного из этих типов нельзя размещать никакой из
узлов типа pay, rent, down, поскольку каждый из этих узлов заново выполнит
инициализацию параметра updown, т.е. заменит значение updown, установленное уровнем выше, организуя циклическую
ссылку (это приведет к семантической ошибке).
Чтобы защитить пользователя от совершения таких
ошибок, конструктор не позволяет создавать в текущей плоскости узлы типа pay, rent, down, если
управление передано с более высокого уровня через узел перечисленного типа.
Однако узлы обращения к подпрограмме имеют одно важное преимущество перед узлом
parent. Оно состоит в том, что транзакт сам «помнит», куда
ему необходимо вернуться; поэтому из нескольких узлов (или слоев) можно
обращаться к общей плоскости, содержащей детальное выполнение типового действия.
Предположим, что в последнем примере имеется некоторая
организация, имеющая собственный расчетный счет и выполняющая ряд операций по
перечислению средств; часть операций необходимо смоделировать. В плоскости 12
создана подпрограмма «Плата поставщику», выполняющая бухгалтерскую проводку по
перечислению средств со счета фирмы. Если возникает необходимость смоделировать
аналогичную ситуацию с перечислением средств (например, возврат кредита), то
можно создать новый узел типа pay и указать
ему в качестве подпрограммы плоскость 12.
В процессе работы с конструктором, при создании нового
узла обращения к подпрограмме, появляется диалоговое окно с просьбой указать
номер плоскости, на которой должна размещаться подпрограмма. По умолчанию это
номер новой пустой плоскости, однако, пользователь самостоятельно может задать
номер уже существующей плоскости.
Иногда в модели можно выделить ряд процессов,
независимых на уровне транзактов, но пересекающихся на уровне моделируемых
ресурсов. Например, это может быть моделирование процесса производства с
участием нескольких независимых торговых компаний, приобретающих товар у
производителя и имеющих свой финансовый резерв и рынок сбыта. Тогда можно
выделить как независимые процессы торговых компаний и процесс функционирования
производителя. Для разработчика модели было бы неудобно воспринимать в одной
корневой плоскости несколько параллельных процессов, поэтому конструктор
предоставляет возможность содержать несколько корневых плоскостей с целью
размещения в них непересекающихся на уровне транзактов процессов.
В работе требуется построить модель производственного предприятия
с использованием концепции многослойной модели. Моделируемая система
описывается следующим образом.
Предприятие осуществляет прием и обработку заказов на
изготовление продукции, которая может принадлежать одному из двух типов А и В.
Заказы на продукцию типа А поступают в среднем раз в дней, а на продукцию типа В - раз в дней (значения даны в таблице с вариантами).
Для производства продукции типа А необходимо дней, а для продукции типа В - дней (значения даны в таблице с вариантами).
Одновременно может обслуживаться только один заказ. Заказы на продукцию А
являются первоочередными.
Все сведения о выполнении заказов типов А и В фиксируются в
отдельных документах.
Модель строится для исследования очереди задержек заказов.
Для демонстрации механизма построения многоуровневых
моделей создадим двухуровневую модель с помощью графического конструктора.
1) Создание графа модели.
Рассмотрим в качестве автономных
процессов:
-
формирование
заказов на производство.
-
производство
и регистрация выполненных заказов;
За единицу
модельного времени следует взять один рабочий день.
Запустите конструктор Gem, выберете Файл à Создать, и поместите на появившуюся пустую корневую плоскость с именем Плоскость 1 узлы типов parent serv и два узла типа term, расположив их следующим образом:.
Задайте имена
узлов:
Номер |
Имя |
102 |
Производство |
103 |
Отчет А |
104 |
Отчет В |
Определите
маршруты транзактов, соединив узлы графа модели. б
Создайте плоскость формирования заявок, для чего двойным
щелкнем по узлу Object 101 получите
новую пустую плоскость 10 с именем Object
101 и создайте на ней граф:
В информационной строке в нижней части экрана красным
цветом отображены надписи Вход не назначен
и Выход не назначен. Плоскость 10 не
имеет входа, так как предназначена для генерации заявок. Для задания выхода
необходимо в левой части экрана щелчком по кнопке Слой открыть диалоговое окно, в котором ввести имя слоя Заказ,. установить Вход в значение nonе, а в
поле Выход указать 107:
После
нажатия ОК одна из красных надписей в
информационной строке будет заменена на Выход:
107.
2)
Определение
глобальных переменных модели.
Для работы может требуется переменная, содержащая время
обслуживания транзакта (заявки). Для задания переменной щелчком по кнопке Переменные левой панели открыть
диалоговое окно:
в котором ввести
имя переменной proc_time и тип переменной float. Значение указывать не нужно, так как оно
будет задаваться динамически, в зависимости от типа продукции.
3) Определение свойств узлов
плоскости 10.
Узел 105 типа
ag (имитация
поступления заказов типа А):
Приоритет |
2 |
Закон распределения |
norm |
Среднее время |
|
Отклонение |
|
Узел 106 типа
ag (имитация
поступления заказов типа В):
Приоритет |
1 |
Закон распределения |
norm |
Среднее время |
|
Отклонение |
|
Узел 107 типа
queue (имитация нахождения заказов в
очереди на выполнение):
Приоритет |
prty |
Таким образом, всякий раз при поступлении нового транзакта
очередь будет переупорядочиваться в соответствии с приоритетами ждущих в
очереди транзактов.
4) Определение свойств узлов
плоскости 1.
Узел 102
типа serv (производство):
Число каналов |
1 |
Приоритетность |
abs |
Закон распределения |
norm |
Среднее время |
proc_time |
Отклонение |
proc_time/3 |
После
задания значений параметров необходимо добавить текст, обеспечивающий
маршрутизацию транзактов и установку временных параметров перед началом
обслуживания транзактов в узле.
Для этого
необходимо:
- выбрать в поле Выходы строку Из 102 в 103
и в поле Условие перехода
указать:
t->pr = = 1.
что обеспечит переход в узел 103 транзактов с
приоритетом 1 (значение параметра t->pr);
-
в
поле C++ текст ввести строку
proc_time = ;
что обеспечит
настройку времени обслуживания транзактов приоритета 1 в узле serv
в значение равное ;
-
выбрать
в поле Выходы строку Из 102 в 104 и в поле C++ текст ввести строку:
proc_time = ;
что обеспечит
настройку времени обслуживания транзактов приоритета 2 в узле serv
в значение равное 1.
5) Определение параметров функций modbeg и modend.
Параметры моделирования должны быть установлены в следующие
значения (окно задания параметров открывается щелчком кнопке modbeg на левой панели инструментов или
выбором соответствующего пункта меню раздела Модель).
Название |
Работа с заказами |
Время |
365 |
Задержка |
107 |
Для всех
остальных параметров сохраняются значения по умолчанию:
6) Генерация текста имитационной модели в операторах
Pilgrim.
Для генерации программного файла необходимо в основном меню
выбрать Выполнить à Генерировать C++ файл. При этом конструктором сначала будет
выполнена проверка модели, в нашем случае не обнаружившая никаких ошибок или
подозрительных участков на графе модели.
После нажатия кнопки ОК будет выведено стандартное
диалоговое окно, предлагающее сохранить файл с расширением «срр». Сохраненный
конструктором файл можно далее компилировать в среде Visual C++.
Программная
модель, автоматически сгенерированная конструктором и помещенная в срр-файл,
имеет следующий вид (для значений =30, =5, =10, ==2):
#include <Pilgrim.h>
forward
{
int fw;
int proc_time;
modbeg("Производство под заказ",
107,365,(long)time(NULL),none,107,none,none, 2);
ag("Заказы A", 105, 2, norm, 30, 10, none, 107);
ag("Заказы В", 106, 1, norm, 5, 2, none, 107);
network(dummy, dummy)
{
top(102):
if ( t->pr = = 1 )
{
proc_time = 10;
fw=103;
}
else
{
proc_time = 2;
fw=104;
}
serv("Производство", 1, abs, norm, proc_time, proc_time/2, none, fw);
place;
top(103):
term("Отчет А");
place;
top(104):
term("Отчет В")
;
place;
top(107):
queue ("Очередь заказов",
prty, 102);
place;
fault(123);
}
modend ("pilgrim.rep", 1, 8, page); return
0; }
}
7)
Сборка
имитационной модели в операторах Pilgrim.
Проводится
в соответствии с
Приложение 4
Создание и
запуск модуля Pilgrim-
8)
Эксперимент на
имитационной модели в операторах Pilgrim.
Подготовьте в
приложении Excel таблицу для записи
результатов.
Параметр |
Запуск |
Среднее |
|||
1 |
2 |
3 |
|||
Tожидания |
|
|
|
|
|
Tобслуживания |
|
|
|
|
|
Загрузка производства |
|
|
|
|
|
Обработано заказов |
Типа А |
|
|
|
|
Типа В |
|
|
|
|
Проведите запуски программной
модели и занесите результаты в таблицу.
9) Сравнение экспериментальных результатов с ожидаемым.
Оцените среднее время загрузки
производства с помощью аналитических расчетов и сравните с получены на модели.
Отчет
по работе должен включать:
-
Файл с графом
модели (*.pgf)
-
Сгенерированный
исходный текст (*.cpp)
-
Таблицу с
результатами прогонов.
Средние
интервалы поступления и обслуживания заявок типа А и В:
№ |
|
|
|
|
1 |
11 |
2 |
4 |
1 |
2 |
12 |
2 |
4 |
1 |
3 |
13 |
3 |
5 |
1 |
4 |
14 |
3 |
5 |
1 |
5 |
15 |
4 |
5 |
2 |
6 |
16 |
4 |
5 |
2 |
7 |
17 |
4 |
5 |
2 |
8 |
18 |
4 |
6 |
2 |
9 |
19 |
4 |
6 |
2 |
10 |
20 |
5 |
6 |
2 |
11 |
21 |
5 |
6 |
2 |
12 |
22 |
5 |
5 |
3 |
13 |
23 |
5 |
6 |
3 |
14 |
24 |
5 |
6 |
3 |
15 |
25 |
6 |
7 |
3 |
16 |
26 |
6 |
7 |
3 |
17 |
27 |
6 |
7 |
3 |
18 |
28 |
6 |
7 |
3 |
19 |
29 |
6 |
7 |
3 |
20 |
30 |
6 |
8 |
4 |
21 |
31 |
7 |
8 |
4 |
22 |
32 |
7 |
8 |
4 |
23 |
33 |
7 |
8 |
4 |
24 |
34 |
7 |
8 |
4 |
25 |
35 |
7 |
8 |
4 |
26 |
36 |
7 |
8 |
4 |
1)
В чем заключается
принцип декомпозиции при создании имитационных моделей?
2)
Как называются
уровни декомпозиции в системе Pilgrim?
3)
Что позволяет
сделать узел типа parent?
4)
В чем состоит
отличие узла типа parent от других узлов многослойного моделирования?
5)
Какие ограничения
установлены в системе Pilgrim на
использование узлов типа rent, pay и down?
Изучение
методов выбора существенных факторов эксперимента.
Объект
исследования удобно представлять в виде «черного ящика»:
В зависимости от целей моделирования в ходе
эксперимента должны быть решены одна или несколько задач, например, нахождение
совокупности значений входных параметров Х1, Х2,… Хn, оптимизирующей выходной параметр. Методики решения таких задач
разрабатываются и изучаются теорией
планирования эксперимента [6]. Входные параметры в теории планирования
эксперимента называют факторами, а
выходные параметры – откликом. Одной их типичных задач планирования
эксперимента является задача выделения среди множества факторов, число которых
может быть весьма велико, подмножества тех, которые несущественно влияют на
отклик. Решение задачи отсеивания несущественных факторов может значительно
сократить время экспериментов с моделью и затраты на их проведение. Процедура
нахождения несущественных факторов применяется на начальных этапах, когда
сведений о влиянии различных факторов недостаточно, и носит название отсеивающего эксперимента.
Переменным Х1, Х2,… Хn можно
сопоставить геометрическое понятие факторного пространства – пространства,
координатные оси которого соответствуют значениям факторов. Совокупность
конкретных значений всех факторов образует точку в многомерном факторном
пространстве.
Область планирования задается интервалами возможного
изменения факторов Хimin< Хi < Хimax для i
=1, 2, …, n. Факторы, однако, могут иметь разные размерности
(Мбайт, ГГц, операций/с) и различные диапазоны изменения. В теории планирования
эксперимента используют кодирование факторов.
Переход к
кодированным (безразмерным) значениям задается преобразованием
где
– натуральное значение фактора;
– именованное значение фактора, соответствующее нулю в
безразмерной шкале;
– интервал варьирования фактора;
– кодированное значение фактора.
При
проведении отсеивающих экспериментов все факторы варьируются на двух уровнях.
Нижний и верхний уровень каждого фактора выбираются из технологических
соображений и предшествующего опыта. Общее число опытов должно быть не меньше
числа исследуемых факторов. Комбинация уровней факторов определяется матрицей планирования - таблицей,
показывающей, на каком уровне устанавливается каждый конкретный фактор в каждом
опыте. В этой таблице "+1" (или просто "+") означает, что
фактор берется на верхнем уровне, "-1" (или "-") - на
нижнем (для качественных факторов эти понятия условны, например, "дисциплина
обслуживания" на нижнем уровне может быть LIFO, на верхнем - FIFO, важно, чтобы отличие между уровнями было как можно
больше в рамках допустимых пределов работоспособности исследуемой системы) В
каждом конкретном опыте уровни факторов в отсеивающем эксперименте должны быть
выбраны так, чтобы матрица планирования обладала следующими свойствами (свойства ортогональности):
6)
сумма чисел в
каждом столбце кроме первого равнялась нулю и
7)
сумма
произведений элементов, относящихся к одному опыту, для двух любых столбцов
равнялась нулю.
Примером
матрицы планирования может быть следующая таблица:
Номер
опыта i |
ФАКТОРЫ |
Результат
опыта |
|||||||
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
||
1 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
95 |
2 |
+ |
- |
+ |
- |
+ |
- |
+ |
- |
98 |
3 |
+ |
+ |
- |
- |
+ |
+ |
- |
- |
87 |
4 |
+ |
- |
- |
+ |
+ |
- |
- |
+ |
105 |
5 |
+ |
+ |
+ |
+ |
- |
- |
- |
- |
83 |
6 |
+ |
- |
+ |
- |
- |
+ |
- |
+ |
81 |
7 |
+ |
+ |
- |
- |
- |
- |
+ |
+ |
91 |
8 |
+ |
- |
- |
+ |
- |
+ |
+ |
- |
86 |
?Fi+ |
|
356 |
357 |
369 |
385 |
349 |
370 |
372 |
|
?Fi- |
|
370 |
369 |
357 |
341 |
377 |
356 |
354 |
|
ΔFi |
|
14 |
12 |
12 |
44 |
28 |
14 |
18 |
|
Ранг |
|
4 |
6 |
6 |
1 |
2 |
4 |
3 |
|
Измерялась
пропускная способность отделения в числе обслуженных клиентов в течение
рабочего дня в зависимости от таких факторов как:
1 - день
недели,
2 – качество
помещения,
3 - район
города,
4 - вид банковской
операции,
5 - время
(период) дня,
6 - категория
клиента,
7 -
квалификация кассира;
Столбец с
обозначением "0" не отвечает никакому фактору, он появился вследствие
правила формирования матрицы, которое поясняется ниже.
Собственно
план эксперимента содержится в ячейках таблицы, заполненных символами серого
цвета. Например, в опыте 5 первые три фактора берутся на верхнем уровне, а
остальные четыре - на нижнем.
Чтобы
построить матрицу, обладающую свойствами ортогональности, за основу берутся так
называемые матрицы Адамара. Матрица
Адамара размерности строится из матриц размерности по правилу:
Матрица
планирования нашего примера образована матрицей ,
отсюда столбец с номером 0. С такой матрицей можно проверить влияние не более,
чем семи факторов. Если проверяемых факторов больше (от 8 до 15) , то следует
строить матрицу .
Число опытов в этом случае равно16, если же факторов меньше 15, то просто
отбрасываются последние столбцы матрицы .
После
выполнения эксперимента по данному плану анализируем его результат следующим
образом.
Для каждого
фактора j, j=1,…7 находим сумму значений выходного параметра по всем опытам, где j-ый фактор был на верхнем уровне ( ):
.
и сумму
значений выходного параметра по всем опытам, где j-ый фактор был на нижнем уровне ( ):
После чего
находим разность
и вносим
результаты в соответствующие столбцы таблицы. Теперь ранжируем факторы по
убыванию в предположении того, что более сильно
влияющие факторы характеризуются большим значением абсолютной величины
разности. Ранг фактора вносится в нижнюю строку таблицыОшибка! Источник ссылки не
найден..
Такое
предположение, однако, нуждается в проверке, поскольку это влияние может быть
вызвано как случайным сочетанием уровней других факторов, так и тем
соображением, что максимальное влияние фактора проявляется не обязательно
тогда, когда он находится на верхнем или на нижнем уровнях, а тогда, когда он
находится на каком-то промежуточном уровне.
Для
числа факторов, заданных для варианта работы, необходимо построить матрицу
планирования эксперимента, заполнить ее значениями, полученным в результате
проведенных экспериментов (приводятся в вариантах) и определить ранги
оцениваемых факторов.
Работа
выполняется с помощью табличного процессора Excel.
Отчет по работе
должен содержать заполненную матрицу планирования отсеивающего эксперимента в виде:
Номер опыта i |
ФАКТОРЫ |
Результат опыта |
|||||||
0 |
1 |
2 |
3 |
… |
… |
… |
… |
||
1 |
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
?Fi+ |
|
|
|
|
|
|
|
|
|
?Fi- |
|
|
|
|
|
|
|
|
|
ΔFi |
|
|
|
|
|
|
|
|
|
Ранг |
|
|
|
|
|
|
|
|
|
Описание структуры таблицы приведено в разделе 0.
В правом столбце приводятся значения отклика для
комбинаций факторов, указанных в левом столбце.
Обозначения:
N - Число факторов
- Значение i-го фактора на верхнем уровне
- Значение i-го фактора на нижнем уровне
№ 1 (N=7)
|
121 |
|
115 |
|
101 |
|
97 |
|
94 |
|
93 |
|
89 |
|
88 |
№ 2 (N=5)
|
109 |
|
101 |
|
97 |
|
97 |
|
96 |
|
93 |
|
89 |
|
88 |
№ 3 (N=6)
|
121 |
|
115 |
|
101 |
|
97 |
|
94 |
|
93 |
|
89 |
|
88 |
№ 4 (N=7)
|
120 |
|
101 |
|
97 |
|
93 |
|
91 |
|
88 |
|
84 |
|
79 |
№ 5 (N=5)
|
125 |
|
105 |
|
98 |
|
97 |
|
97 |
|
91 |
|
67 |
|
58 |
№ 6 (N=5)
|
125 |
|
105 |
|
98 |
|
97 |
|
93 |
|
91 |
|
76 |
|
69 |
№ 7 (N=5)
|
152 |
|
143 |
|
111 |
|
98 |
|
89 |
|
76 |
|
47 |
|
33 |
№ 8 (N=6)
|
167 |
|
152 |
|
111 |
|
99 |
|
98 |
|
89 |
|
51 |
|
33 |
№ 9 (N=7)
|
142 |
|
131 |
|
98 |
|
94 |
|
86 |
|
74 |
|
69 |
|
47 |
№ 10 (N=7)
|
164 |
|
131 |
|
98 |
|
95 |
|
94 |
|
74 |
|
69 |
|
47 |
№ 11 (N=7)
|
143 |
|
132 |
|
104 |
|
103 |
|
94 |
|
75 |
|
69 |
|
64 |
№ 12 (N=6)
|
148 |
|
122 |
|
114 |
|
97 |
|
79 |
|
66 |
|
66 |
|
57 |
№ 13 (N=5)
|
137 |
|
123 |
|
99 |
|
97 |
|
84 |
|
79 |
|
75 |
|
59 |
№ 14 (N=6)
|
110 |
|
99 |
|
96 |
|
88 |
|
87 |
|
87 |
|
83 |
|
68 |
№ 15 (N=5)
|
134 |
|
128 |
|
96 |
|
85 |
|
75 |
|
74 |
|
63 |
|
55 |
№ 16 (N=7)
|
126 |
|
117 |
|
104 |
|
88 |
|
79 |
|
56 |
|
54 |
|
48 |
№ 17 (N=6)
|
146 |
|
117 |
|
105 |
|
98 |
|
94 |
|
79 |
|
69 |
|
48 |
№ 18 (N=6)
|
110 |
|
99 |
|
97 |
|
82 |
|
78 |
|
69 |
|
69 |
|
68 |
№ 19 (N=5)
|
130 |
|
124 |
|
99 |
|
98 |
|
94 |
|
86 |
|
73 |
|
71 |
№ 20 (N=7)
|
126 |
|
117 |
|
99 |
|
88 |
|
79 |
|
56 |
|
54 |
|
48 |
№ 21 (N=5)
|
113 |
|
97 |
|
84 |
|
75 |
|
75 |
|
67 |
|
59 |
|
56 |
№ 22 (N=6)
|
132 |
|
124 |
|
122 |
|
87 |
|
78 |
|
74 |
|
65 |
|
56 |
№ 23 (N=7)
|
124 |
|
122 |
|
117 |
|
88 |
|
87 |
|
78 |
|
75 |
|
69 |
№ 24 (N=6)
|
126 |
|
125 |
|
114 |
|
99 |
|
99 |
|
89 |
|
78 |
|
73 |
1)
Что в теории
планирования эксперимента называется фактором?
2)
Что в теории
планирования эксперимента называется откликом?
3)
Зачем и как
кодируются факторы?
4)
В чем состоит
сущность постановки задачи отсеивания факторов?
5)
Как организуется
и проводится отсеивающий эксперимент?
Емельянов А.А., Власова Е.А., Дума Р.В.
Имитационное моделирование экономических процессов. – М.: Финансы и
статистика, 2007. |
|
Соболь И.М. «Метод Монте-Карло» . – М.: «Наука»,1985 г. |
|
Кнут Д.
Искусство программирования для ЭВМ. Т. 2. Получисленные алгоритмы. Пер.с
англ. - М.: Мир, 1977 |
|
Гнеденко Б.В. Курс теории
вероятностей. Изд.9. – М.:, URSS, 2007 |
|
Гнеденко Б.В., Коваленко И.Н.
Введение в теорию массового обслуживания, Изд.4. – М.:, URSS. 2007 |
|
Монтгомери Д. Планирование
эксперимента и анализ данных. Пер.с англ.
– Л.: «Судостроение», 1980. |
В ряде лабораторных работ для изучения и исследования методик
и приемов моделирования используются программные модули на языке С++.
Модули исходных текстов программ имитационного
моделирования систем массового обслуживания хранятся в отдельной папке, имя
которой следует выяснять у преподавателя или у сотрудника отдела системного
сопровождения.
В лабораторных работах используются модули:
Имя |
Назначение |
001.cpp |
Генератор ПСЧ Имитация наступления событий Прототип программной модели метода Монте-Карло |
002.cpp |
Генератор случайного числа с экспоненциальным законом
распределения Генератор случайного числа с раcпределением, задаваемым гистограммой Имитация автобусного движения |
Настройка и запуски программ следует производить по
следующим правилам.
1. Создание проекта модели.
a. Создайте на жестком диске рабочую папку для проекта.
b. Откройте приложение Microsoft Visual C++.
c. Создайте новый проект, для чего выполните:
File à Newà Projects à Win32 Application
В окне Project name нужно указать имя проекта
(латинскими буквами).
В окне Locaton нужно указать (через кнопку Browse) путь к проекту.
Нажмите OK.
В открывшемся окне выберете A simple Win32 application:
и нажмите Finish.
d. Перейдите в режим FileView (нажав соответствующую
вкладку в нижней части левой панели)
в папке Source выберете и
откройте двойным щелчком мыши по имени
файла созданного СРР-модуля для
отображения его содержимого на правой панели
e.
Соберите проект и
проверьте корректность сборки одним из следующих способов:
- Build à Rebuild All главного меню
- Нажатием функциональной клавиши F7
- Нажатием значка панели инструментов
Появление сообщения 0 error(s), 0 warning(s) в окне отчета о процессе построения
свидетельстует о правильности выпонения шага.
2. Создание выполняемого файла модели.
a. Замените текст СРР-модуля текстом модуль-шаблона, для
чего:
- выделите весь текст СРР-модуля (EditàSelect All),
- откройте двойным щелчком по имени файла с текстом модуля-образца, из
библиотеки CPPs (тексты модулей приводятся в
Приложение 3
- Исходные тексты С++-программ),
- выделите весь текст модуля (EditàSelect All)
и скопируйте его в буфер (EditàCopy),
- переключитесь на СРР-модуль собранного
проекта (Window à
<имя модуля>),
- выполните вставку из буфера с заменой
выделенного текста (EditàPaste),
- переключитесь на модуль шаблона и закройте
модуль (защелкой окна).
b. Проверьте правильность выполненной операции, запустив
сборку проекта (см. выше).
3. Задание реквизитов файла результатов.
a. Рекомендуется сохранять результаты запусков для
отдельных пунктов задания в отдельных файлах. Для указания нужного выводного
файла в строке
измените указанные в кавычках путь и имя файла на
требуемые (одиночный слэш заменяется двойным слэшем).
b. Проверьте правильность выполненной операции, запустив
сборку проекта (см. выше) и открыв файл с помощью Windows-приложения Блокнот
(Notepad).
c. Внимательно изучите текст программы.
Для каждого
прогона производится задание значения параметров программ. Рядом с каждым
параметром (переменной С++) стоит комментарий, поясняющий содержательный смысл
параметра и, возможно, правило заданий его значения.
- NexpR (long) число
испытаний (запусков) генератора псевдослучайных чисел
- NexpE (long) число
испытаний (запусков) алгоритма имитации случайного события
- NexpS (long) число
испытаний проводимых методом Монте-Карло
- Pevent (float) вероятность
наступления случайного события
Модуль 001.CPP
Модуль 002.CPP
Создание исполняемого файла модели.
1) Создайте на жестком диске рабочую папку для будущего
проекта.
2) Перенесите в рабочую папку файл модели <имя
модели>.cpp.
3) Откройте приложение Microsoft Visual С++.
4) Выполните:
File à Newà Projects à Win32 Application
В окне Locaton посредством кнопки (Browse) укажите путь к файлу модели <модель>.cpp.
В окне Project name укажите имя проекта (латинскими буквами) и нажмите OK.
В открывшемся окне оставьте неизменными установку по умолчанию
для типа проекта (Empty application) и нажмите OK
5) Внесите в проект файлы, необходимые для построения
объектного кода модели.
Файл |
Папка |
Comctl32.lib |
стандартная
библиотека (папка) С++ |
Pilgrim.lib |
стандартная
библиотека (папка) С++ |
Pilgrim.res |
стандартная
библиотека (папка) С++ |
<имя модели>.cpp |
имя папки с
файлом должно соответствовать имени проекта, которое было указано в окне Location
(файл модели); |
Вставка
выполняется командой Add Files To Folder / Add Files To Project контекстного
меню, вызываемого правым щелчком мыши после установки курсора на имя проекта
(предварительно должна быть выбрана вкладка в окне проектов).
6) Постройте исполняемый файл модели.
Выполняется одним из следующих способов:
- Build à Rebuild
All главного меню Visual Studio
- Нажатием функциональной клавиши F7
- Нажатием значка панели инструментов
Если в окне отчета о процессе построения появится сообщение 0 errors, можно запустить программную
модель с помощью одного из следующих способов:
- Build à Execute
ModelPro.exe.
- Нажатием комбинации функциональных клавиш
Ctrl + F5
- Нажатием значка панели инструментов
Запуск
программной модели и получение результатов моделирования
1)
Перед запуском
процесса имитации целесообразно выбрать в меню Результаты пункт Динамика
задержки. После этого в меню Моделирование
выбрать пункт Запуск модели. Тогда
график задержки по выбранной при построении графа модели очереди будет
изображаться динамически. Пример отображения графика показан на рисунке:
Синим цветом показано среднее время задержки в
очереди.
Конкретный
вид графика определяется параметрами моделирования (проанализируйте параметры
модели №1 и определите, каким должен быть вид графика среднего времени задержки
в очереди).
Можно также
выбрать режим динамического построения графика потока в транзактов в терминаторе.
После
окончания процесса моделирования можно посмотреть оставшийся график, а также
выходные параметры всех узлов модели (также с помощью меню Результаты).
2) В папке созданного проекта откройте и изучите файл
результатов, где сведены в таблицу выходные параметры всех узлов модели (файл
имеет по умолчанию расширение rep, если это не было изменено в настройках):
3)
Если после
запуска модели требуется внести в нее какие-либо изменения, то перед очередным
построением исполняемого файла необходимо закрыть окно модели.
4) Изменения можно вносить минуя стадию создания с
помощью конструктора файла .pgf
непосредственно в файл.cpp,. Следует иметь в виду, однако, что эти
изменения не будут отражены в файле .pgf.