МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Технологический институт Федерального государственного образовательного учреждения высшего профессионального образования «Южный федеральный университет» ПРИОРИТЕТНЫЙ НАЦИОНАЛЬНЫЙ ПРОЕКТ «ОБРАЗОВАНИЕ»
В.И. ФИHАЕВ Е.Н. ПАВЛЕНКО Е.В. ЗАРГАРЯН
АНАЛИТИЧЕСКИЕ И ИМИТАЦИОННЫЕ МОДЕЛИ Допущено Учебно-методическим объединением вузов по образованию в области автоматизированного машиностроения (УМО АМ) в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов – «Автоматизированные технологии и производства» (специальность 210200 – «Автоматизация технологических процессов и производств (в энергетике))».
Таганрог 2007
2 УДК 518.5.001.57(075.8) В.И.Финаев, Е.Н. Павленко, Е.В.Заргарян. Аналитические и имитационные модели: Учебное пособие. - Таганрог: Изд-во Технологического института ЮФУ, 2007. - 310 с. ISBN 978-5-8327-0268-1 Учебное поcобие пpедназначено для cтудентов высших учебных заведений, изучающиx дисциплины «Моделиpование cиcтем», «Компьютерное моделирование». В учебном пособии приведены основные теоретические положения и методы имитационного моделирования. Табл. 8. Ил. 30. Библиогр.: 22 назв.
Рецензенты Целых А.Н., д-р. техн. наук, профессор, директор регионального (областного) центра новых информационных технологий, проректор по информатике ТТИ ЮФУ. Ромм Я.Е, д-р. техн. наук, профессор, заведующий кафедрой информатики ТГПИ. ISBN 978-5-8327-0268-1
© Технологический институт Южного федерального университета, 2007 © Финаев В.И., Павленко Е.Н., Заргарян Е.В., 2007
3
СОДЕРЖАHИЕ ВВЕДЕHИЕ……………………………………..……. 6 1. КОНЦЕПЦИЯ МОДЕЛИРОВАНИЯ………...... 9 1.1. Понятие модели…………………………………….. 9 1.2. Концепции определения моделей……………….… 18 2. КЛАССИЧЕСКИЕ МАТЕМАТИЧЕСКИЕ МОДЕЛИ…………………………………………..……. 24 2.1. Примеры моделей в виде дифференциальных уравнений…………………………. 24 2.2. Классические модели в виде дифференциальных уравнений…………………………. 29 2.3. Инерционные модели…………………………...….. 33 2.4. Модели на основе передаточных функций……..… 38 2.5. Конечные автоматы…………………………………. 40 3. СТОХАСТИЧЕСКИЕ МОДЕЛИ ОБЪЕКТОВ………………………………………..……. 46 3.1. Математические модели случайных процессов..… 46 3.2. Классификация моделей случайных процессов..… 53 3.3. Модели марковских процессов………………….… 55 4. ИМИТАЦИЯ СЛУЧАЙНЫХ СОБЫТИЙ….... 59 4.1. Понятие статистического моделирования…...……. 59 4.2. Датчики случайных чисел…………………….…… 60 4.3. Проверочные тесты…………………………..…….. 69 4.4. Имитация случайных событий…………………..… 78 4.5. Имитация непрерывных случайных величин…..… 83 4.6. Имитация марковского процесса……………….…. 93 5. ОБРАБОТКА РЕЗУЛЬТАТОВ МОДЕЛИРОВАНИЯ НА ЭВМ………………………. 106 5.1. Выбор числа опытов……………………………….. 106 5.2. Значимость оценки…………………………………. 111 5.3. Формулы и алгоритмы для оценки результатов моделирования…………………………….. 120
4 6. МОДЕЛИРОВАНИЕ ВЕРОЯТНОСТНЫХ АВТОМАТОВ…………………………………………... 132 6.1. Аналитическое определение вероятностных автоматов…………………..…………... 132 6.2. Табличное задание функций переходов и выходов 136 6.3. Имитационное моделирование вероятностных автоматов…………………..…………... 138 7. МОДЕЛИ СИСТЕМ МАССОВОГО ОБСЛУЖИВАНИЯ……..…………... 147 7.1. Общие сведения…..………………………………..... 147 7.2. Модель входного потока заявок и времени обслуживания…..…………………….……... 151 7.3. Модель Эрланга…..…………………………….…... 153 7.4. Исследование модели пуассоновского процесса с помощью производящих функций…..………...……... 156 7.5. Модель для определения времени задержки в виде интегро-дифференциальных уравнений Линди-Такача-Севастьянова…..………………………... 158 7.6. Имитационное моделирование одноканальной СМО…..………………………….……... 162 7.7. Имитационные модели многофазных СМО………. 184 7.8. Имитационные модели многоканальных СМО...… 190 7.9. Алгоритмизация имитационной модели СМО произвольной структуры…………………………. 211 8. АЛГОPИТМИЗАЦИЯ ПPОЦЕCCОВ ФУНКЦИОНИPОВАНИЯ CИCТЕМ………….……. 221 8.1. Моделиpующие алгоpитмы……………………..…. 221 8.2. Пpинципы поcтpоения моделиpующиx алгоpитмов для cложныx cиcтем………………………………..……. 226 9. УНИФИЦИРОВАННЫЙ ЯЗЫК МОДЕЛИРОВАНИЯ UML…………..………. 229 9.1. Основные компоненты…………..…………………. 229 9.2. Понятия и компоненты…………..…………………. 231 9.3. Диаграммы вариантов использования ………….… 238
5 9.4. Диаграммы классов…………………………………. 241 9.5. Типы связей между классами……………………… 249 9.6. Расширения понятия класса в UML………………. 255 9.7. Связи между объектами……………………………. 258 9.8. Диаграммы взаимодействия……………………….. 261 9.9. Диаграммы состояний……………………………… 267 9.10. Диаграммы деятельностей………………………... 278 10. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ МОДЕЛИРОВАНИЕ………………………..………… 282 10.1. Определение объекта ……………………..……… 282 10.2. Наследование ……………………………………… 295 10.3. Полиморфизм……………………………………… 299 10.4. Типы данных и пакеты………………………….… 303 БИБЛИОГРАФИЧЕСКИЙ СПИСОК…………… 308
6
ВВЕДЕНИЕ Компьютерное моделирование стало широко применяться после появления персональных компьютеров с графическим дисплеем, программного обеспечения, сделавших возможным появление современных визуальных инструментов моделирования. Вместе со строгим математическим описанием, позволяющим разрабатывать достаточно полные аналитические и алгоритмические модели, визуальное моделирование предполагает использование графической формы описания модели и зримого представления результатов исследования. Основным элементом графического представления моделируемой системы в современных средах является структурная схема, построенная из образов отдельных компонентов, соединенных функциональными связями. Для представления результатов используется математическая графика, а также двух- и трехмерная анимация. Моделирование направлено на решение задач и проведение исследований. При исследовании систем методами системного анализа необходимо построить модель, т.е. реальному объекту ставится в соответствие некоторый математический объект, называемый его моделью. Исследование модели позволяет получить рекомендации относительно поведения реального объекта [1, 2]. Моделирование - это творческий процесс, требующий определенного искусства, математических знаний, практических навыков и умения предвидеть результат исследований, поэтому при решении задач моделирования могут быть получены неоднозначные результаты [2, 3].
7 Работа проектировщика связана с аналитическим сравнением множества различных вариантов проектируемой системы при заданных ограничениях. Современные инструменты визуального моделирования предоставляют проектировщику новое средство проектирования - виртуальный испытательный стенд, который следует рассматривать, как некоторый специализированный набор программных продуктов для решения задач моделирования. Проектировщик на стенде может проводить эксперименты, используя ту же технологию, что и на обычном испытательном стенде, но значительно быстрее. В данном пособии не ставится задача обучения конкретным пакетам прикладных программ для решения задач моделирования, например, Matlab-Simulink-Stateflow, UML, Simulink, Stateflow, Model Vision Studium, Modeliсa, AnyLogiс и других. Одним из современных направлений компьютерного моделирования является объектно-ориентированное моделирование, которое рассматривают как расширение языка проектирования сложных вычислительных систем — Unified Modeling Language (UML) [4]. В пособии излагается материал по дисциплине «Компьютерное моделирование» согласно государственному образовательному стандарту. В первом разделе изложены основные концепции моделирования. Рассмотрена классификация моделей, тесно связанная с классификацией систем. Во втором разделе рассмотрены классические схемы моделей в виде аналитического задания: модели в виде дифференциальных уравнений; модели в виде сумм и интегралов свертки; модели на основе передаточных функций; модели в виде конечных автоматов и приведена их алгоритмизация.
8 В третьем разделе приведено описание стохастических моделей объектов. Рассмотрены способы задания моделей объектов в виде стохастических распределений, классификация стохастических моделей, модели марковских процессов. Чертвертый раздел позвящет имитационным моделям случайных событий. Формально определены датчики случайных чисел, приведены способы и алгоритмы генерации случайных величин, описано применение проверочных тестов. Рассмотрены алгоритмы имитации марковских процессов. В пятом разделе приведен материал, связанный с обработкой результатов моделирования на ЭВМ. Рассмотрены тербования к выбору числа реализаций, задачи значимости оценки, формулы и алгоритмы для оценки результатов моделирования. В шестом разделе приведено аналитическое определение вероятностных автоматов, а также алгоритмы для их имитационного моделирования. Седьмой раздел посвящен аналитическому моделированию и алгоритмизации систем массового обслуживания. В восьмом разделе изложены принципы поcтpоения моделиpующиx алгоpитмов процессов функционирования систем. В девятом и десятом разделах изложены основные сведения об унифицированном языке моделирования UML, об объектно-ориентированном моделировании. За основу взяты материалы работы [4].
9
1. КОНЦЕПЦИЯ МОДЕЛИРОВАНИЯ 1.1. Понятие модели 1.1.1. Системный подход к моделированию. При проектировании автоматизированных систем управления, разработке прикладных программных продуктов важно правильно поставить задачу проектирования, применяя методы системного анализа. Системным анализом называют совокупность методов и приемов решения задач. Системный подход состоит в исследовании изучаемого объекта как системы, состоящей из взаимодействующих элементов, построении математической модели для объекта и исследовании ее методами математического моделирования с целью решения некоторых оптимизационных задач, задач управления или принятия решения. Поэтому постановка задачи проектирования требует знаний методов и средств системного анализа, а в арсенал средств системного анализа входит моделирование объекта. При исследовании систем с применением системного подхода вначале необходимо построить модель, т.е. реальному объекту ставится в соответствие некоторый математический объект, называемый его моделью. Модель (modulus (лат.) - мера) есть объект-заменитель объектаоригинала [1]. Модель обеспечивает изучение свойств оригинала, а моделирование есть замещение одного объекта другим объектом с целью получения информации о свойствах объекта-оригинала. Теория замещения объектов называется теорией моделирования. Моделирование объекта может быть математическим, в
10 виде построения некоторого макета объекта, натурным и имитационным. Математическое моделирование связано с нахождением математической схемы, описывающей функционирование объекта и его взаимодействие с внешней средой. Математическое моделирование имеет ряд достоинств. Это точная воспроизводимость численных экспериментов, их гибкость и экономичность, возможность значительного сокращения времени моделирования по сравнению с временем выполнения реальных экспериментов на промышленном объекте. Моделирование может предусматривать построение макета объекта. Макет объекта может быть реализован в виде принципиальной электрической схемы, изготовления устройства, отображающего функционирование объекта или построение макетов (самолеты), моделей одежды и прочее. Данный вид моделирования не является предметом исследования в данной работе. Натурное моделирование предусматривает проведение экспериментов непосредственно на объекте. Высокая стоимость натурных экспериментов с промышленными объектами ограничивает возможность этого вида моделирования при проведении исследований. Имитационное моделирование является методом моделирования объектов и процессов на ЭВМ. При моделировании на ЭВМ вырабатывается информация, описывающая элементарные явления исследуемого процесса с учетом их связей и взаимных влияний. Получаемая информация о состояниях процесса используется для определения тех характеристик процесса, которые нужно получить в результате моделирования. Моделирующий алгоритм приближенно воспроизводит реальный процесс во времени. Имитируются элементарные явления, составляющие процесс, с сохранением их
11 логической структуры и последовательности протекания во времени. Моделирующий алгоритм позволяет по исходным данным получить сведения о состоянии процесса в произвольные моменты времени. Сущность имитационного моделирования состоит в реализации на ЭВМ специального алгоритма, который воспроизводит формализованный процесс сложной системы. Имитационное моделирование представляет собой определенную последовательность этапов решения задач: - изучение реальных систем; - составление содержательного описания процесса функционирования; - формулировка цели исследования; выбор основных критериев функционирования; - разбиение сложной системы на подсистемы; - построение формализованной схемы процесса функционирования; - построение математической модели системы; - планирование эксперимента и сбор исходных данных; -составление рабочей программы с учетом особенностей машины; - отладка программы; - осуществление моделирования; - обработка результатов; - выработка рекомендаций. Моделирование - творческий процесс, требующий определенного искусства, математических знаний, практических навыков и умения предвидеть результат исследований. Поиск модели объекта связан с понятием формализации, т.е. математическим, алгоритмическим или каким-либо другим видом задания модели. Формализация объекта и разработка адекватных математических моделей – начальная часть работ по моделированию систем самого разного назначения.
12 Формализация любого объекта или процесса содержит три этапа: содержательное описание, построение формализованной схемы процесса, построение математической модели процесса. Содержательное описание в словесном выражении концентрирует сведения о физической природе и характеристиках элементарных явлений исследуемого объекта или процесса, о степени и характере взаимодействия между ними, месте и значении каждого элементарного явления в общем процессе функционирования рассматриваемой реальной системы. Тщательное изучение объекта сводится к наблюдению и фиксации количественных характеристик при проведении натурного эксперимента. Если система проектируется, то при описании используют накопленный опыт и результаты наблюдения за процессами функционирования аналогичных систем. Материалы описания содержат постановку задачи моделирования, перечень искомых величин с указанием их практического предназначения и требуемой точности, исходные данные для исследования. Формализованная схема процесса является промежуточным звеном между содержательным описанием и математической моделью. Разрабатывается в том случае, когда из-за сложности исследуемого процесса или трудностей формализации некоторых его элементов непосредственный переход от содержательного описания к математической модели оказывается невозможным или нецелесообразным. Для построения формализованной схемы необходимо выбрать характеристики процесса, установить систему параметров, определяющих процесс, строго определить все зависимости между характеристиками и параметрами процесса с учетом тех факторов, которые принимаются во внимание при формализации. На этом этапе построения
13 формализованной схемы должна быть дана точная математическая формулировка задачи исследования с указанием перечня искомых величин и оцениваемых зависимостей. К формализованной схеме прилагается систематизированная и уточненная совокупность всех исходных данных, известных параметров процесса и начальных условий. Формализованная схема подводит итог изучению, экспериментальному исследованию процесса и преобразовывается в математическую модель без притока дополнительной информации о процессе. Необходимо записать в аналитической форме все соотношения, выразить логические условия. Начало формализации объекта состоит в следующем. Объект функционирует в некоторой среде. Среда воздействует на объект, а объект воздействует на среду. Hа объект могут подаваться управляющие параметры (сигналы). Объект характеризуется вектором состояний Z, называемым еще вектором конструктивных параметров. Формально это отображают схемой, приведенной на рис. 1.1, где Х, Y, F - векторы входных, выходных и возмущающих сигналов. F X
Объект Z
Y
Среда
Рис. 1.1 1.1.2. Классификация моделей. Существует много определений понятия «модель» [1,2,3]. Определим
14 математическую модель как упрощенное отображение существенных сторон реальной системы, выраженное в математической форме и позволяющее математически описать правило (оператор) преобразования входных Х сигналов в выходные Y: Y=W(Х), (1.1) где W – некоторая математическая модель системы. Под символом W(.) понимаются любые математические действия (алгебраические операции, дифференцирование, интегрирование, решение функциональных уравнений и т.д.). Оператор W представляет собой совокупность математических и логических операций, позволяющих установить соответствие между входными и выходными сигналами. В простейшем случае оператор модели преобразует векторную функцию Х(t) в векторную функцию Y(t). Модели подобного типа называются динамическими (временными). При выполнении классификации моделей исходят из существующих подходов к классификации систем, т.к. модель, по сути, является отражением системы в форме, выбранной исследователем. При классификации моделей обычно рассматривают зависимости между состояниями и параметрами сложной системы, которые в выбранной аналитической форме являются моделями. Математические модели делятся на два основных класса: детерминистические модели и стохастические модели. Детерминистические модели - модели тех систем, в которых существует однозначное соответствие для каждого момента времени между входными параметрами, состояниями и выходными параметрами. Иными словами, каждому набору входных параметров и набору состояний соответствует единственный выходной параметр в скалярной или векторной форме представления.
15 Стохастические модели - модели тех объектов, в которых изменение состояния и выхода задается в виде вероятностного распределения, т.е. каждому набору входных параметров и набору состояний соответствует вероятностное распределение значений выходного параметра. Для изучения математических моделей могут быть применены разные способы, применение которых позволяет делить модели на аналитические и имитационные. Аналитические модели представляют собой некоторые математические схемы в виде алгебраических, дифференциальных, конечно-разностных уравнений или иных аналитических зависимостей выходного параметра от входных параметров и состояний. Аналитические модели исследуются следующими способами: - аналитически, когда стремятся получить в явном виде зависимости для искомых величин; - численно, когда нет метода решения уравнения в общем виде, но можно получить результаты при конкретных начальных условиях; - качественно, когда нет решения в явном виде, но можем найти некоторые свойства решения (оценить устойчивость и т.п.). В тех случаях, когда аналитическое описание системы получить не удается, применяется алгоритмическое описание процесса ее функционирования или строится моделирующий алгоритм, предназначенный для реализации на ЭВМ. Модели делятся на стационарные, когда структура и свойства оператора W(t) не изменяются со временем, и на нестационарные. Реакция стационарной системы на любой входной сигнал зависит только от интервала времени между
16 моментом начала действия входного сигнала (возмущения) и данным моментом времени. Процесс преобразования входных сигналов не зависит от сдвига входных сигналов во времени. На рис. 1.2 приведен пример изменения выходного сигнала для стационарной и нестационарной системы. Стационарная система x(t) t y(t)
t1
t2
t3
t4
t5
t6
t7
t
Нестационарная система x(t) t y(t)
t1
t2
t3
t4
t5
t6
t7
t
Рис. 1.2 Для нестационарной системы изменение выходного сигнала y(t) зависит от моментов ti подачи входного сигнала х(ti) и времени t. При сдвиге входного сигнала во
17 времени (без изменения его формы) выходные сигналы не только сдвигаются во времени, но и изменяют форму. Модели делятся на модели безынерционных и инерционных (модели с запаздыванием или с предысторией) систем. Безынерционные модели соответствуют системам, в которых оператор W определяет зависимость выходных величин от входных в один и тот же момент времени – y(t)=W(Х,t). В инерционных системах значения выходных параметров зависят не только от настоящих, но и предыдущих значений переменных Y=W(Z,хt,хt-1,…,хt-k), (1.2) где хt-i=х(t-i) - значение входного сигнала в момент времени t-i. Инерционные модели еще называют моделями с памятью. Оператор преобразований может содержать параметры, которые обычно неизвестны - Y=W(Θ,Z,Х), где Θ={Θ1,Θ2,…,Θk} - вектор параметров. Модели, содержащие неизвестные параметры, называются параметрическими (например, обычные дифференциальные уравнения с неизвестными коэффициентами), в отличие от непараметрических моделей (например, модели типа интеграла свертки). Важнейшим признаком структуры оператора является линейность или нелинейность по отношению к входным сигналам, поэтому модели делят на модели линейных и нелинейных систем. Для линейных систем справедлив принцип суперпозиции, который состоит в том, что линейной комбинации произвольных входных сигналов ставится в соответствие та же линейная комбинация сигналов на выходе системы
18 m
m
m
i =1
i =1
i =1
W ( ∑ Ci x i ) = ∑ Ci W( x i ) = ∑ Ci y i .
(1.3)
Математическую модель с использованием линейного оператора можно записать в виде Y=WХ. Если условие (1.3) не выполняется, модель называется нелинейной. Классифицируются динамические модели в соответствии с тем, какие математические операции используются в операторе. Можно выделить: алгебраические, функциональные (типа интеграла свертки), дифференциальные, конечно-разностные модели и др. Одномерной моделью называется такая модель, у которой и входной сигнал, и отклик одновременно являются величинами скалярными. В зависимости от размерности параметра Θ модели подразделяются на одно- и многопараметрические. Классификация моделей может быть продолжена также в зависимости от видов входных и выходных сигналов.
1.2. Концепции определения моделей Под динамической системой понимается объект, находящийся в каждый момент времени t∈T в одном из возможных состояний z ∈Z и способный переходить во времени из одного состояния в другое под действием внешних и внутренних причин. При моделировании динамической системы применяют следующие механизмы: - описание изменения состояний под действием внутренних причин (без вмешательства внешней среды); - описание приема входного параметра и изменения состояния под действием этого параметра (модель в виде функции перехода);
19 - описание формирования выходного параметра или реакции динамической системы на изменения состояний и входного параметра (модель в виде функции выхода). Аргументами входных и выходных параметров системы могут служить время, пространственные координаты, а также некоторые переменные, используемые в преобразованиях Лапласа, Фурье и других. Входные параметры модели в общем случае могут быть заданы в виде вектора x ={х1,х2,…,хm}, хi∈Хi,, ( i = 1, m ), где Хi - заданные дискретные или непрерывные множества. Прямое произведение вида Х=Х1×Х2×…×Хm называется пространством входных параметров, а вектор x представляет собой точку пространства Х. Отображение Х=L(t), сопоставляющее каждому моменту времени t некоторый параметр x ∈Х, называется входным процессом L(t). Вектор выходных параметров y ∈Y - множеству выходных параметров. Выходной параметр, выдаваемый системой в момент времени t∈T, обозначим y(t ) . Если выходной сигнал y описывается набором характеристик y1,y2,…,yr, таких, что yj∈Yj, ( j = 1, r ), где Yj - заданные множества, то прямое произведение Y=Y1×Y2×…×Yr называется пространством выходных параметров. По аналогии с входным процессом определяется понятие выходного процесса Y=M(t). В теории управления выходные параметры называются фазовыми координатами (переменными состояния). Состояние системы определяется как совокупность состояний элементов. Состояние системы z описывается некоторым набором характеристик zk∈Zk, ( k = 1, n ), где Zk заданные множества, а пространство состояний Z определяется как прямое произведение Z=Z1×Z2×…×Zn.
20 В технических системах в большинстве случаев не удается непосредственно наблюдать параметры (сигналы) на выходе системы. Можно наблюдать сигналы лишь на выходе измерительного устройства, последовательно соединенного с системой, как это показано на рис. 1.3. Δ X
Объект Z
Y
+
V
Рис. 1.3 Выходные сигналы системы и дополнительные воздействия, которым соответствует r-мерный вектор дополнительных сигналов (связанных также с ошибками измерения) Δ={δ1,δ2,…,δr}, являются входными сигналами для измерительного устройства. Наблюдаемый вектор состояний измерительной системы (вектор откликов) записывается в виде V={v1,v2,…,vr}. Математическая модель измерительного устройства имеет вид V=B(YΔ), (1.4) где B(YΔ) - некоторый оператор, преобразующий сигналы Y и Δ на входе измерительного устройства в сигналыотклики V. При моделировании систем находят модели в виде функций переходов и выходов. В самом общем случае эти модели могут быть заданы в виде соответствий. Соответствие [4] - это способ (закон) сопоставления элементов х∈Х с элементами y∈Y так, что имеется возможность образования пар (двоек) (х,y), причем для каждого элемента х∈Х возможно указать элемент y∈Y, с которым сопоставляется элемент х. В сопоставлении могут
21 участвовать не все элементы Х и Y. Для задания соответствия необходимо указать: - множество Х, элементы которого сопоставляются с элементами другого множества; - множество Y, с элементами которого сопоставляются элементы множества Х; - множество Q⊆Х×Y, определяющее закон, согласно которому осуществляется соответствие, т.е. перечисляющее все пары (х,y), участвующие в сопоставлении. Соответствие, обозначаемое через q, представляет собой тройку множеств q=(Х,Y,Q), где Х – область отправления соответствия, Y – область прибытия соответствия, Q – график соответствия, Q⊆Х×Y. Очевидно, что проекция Пр1Q⊆Х, а Пр2Q⊆Y, причем множество Пр1Q называется областью определения соответствия, а проекция Пр2Q – областью значений соответствия. Способы задания соответствий следующие. При теоретико-множественном задании определяют множества Х={х1,х2,…,хn}, Y={y1,y2,…,ym} и график Q={(хi,yj)}, х∈Х, y∈Y ( i = 1, n ) , ( j = 1, m) . При матричном способе задания соответствие задается в виде матрицы инцидентности RQ, которая имеет вид прямоугольной таблицы размером n×m. Элементы хi∈Х соответствуют строкам матрицы RQ, а элементы yj∈Y соответствуют столбцам. На пересечении хi строки и yj столбца ставится элемент rij=1, если элемент (хi,yj)∈Q, и rij=0, если (хi,yj)∉Q. При графическом способе соответствие задается в виде рисунка (см. рис. 1.4.), на котором элементы хi∈Х – кружки одной линии, элементы yj∈Y – кружки другой линии, а каждая двойка (хi,yj)∈Q обозначается стрелкой, идущей от
22 кружка хi к кружку yj. Такое представление называется графиком. Если сопоставлять элементы y∈Y элементам множества Х, то получим соответствие q-1=(Y,Х,Q-1), обратное соответствию q (инверсия соответствия q). x1
x2
y1
x3
y2
x4
y3
Х={х1,х2,х3,х4}, Y={y1,y2,y3}, Q={(х1,y1), (х1,y2), (х2,y1), (х2,y2), (х3,y2), (х4,y3)}. Рис. 1.4 Исходя из приведенных выше определений множеств входных параметров Х=Х1×Х2×…×Хm, выходных параметров Y=Y1×Y2×…×Yr, состояний Z=Z1×Z2×…×Zn определим задание моделей функций переходов и выходов, как соответствий. Модель системы в виде функции переходов задана соответствием fП=(Х1×Х2×…×Хm,Z1×Z2×…×Zn,FП). (1.5) Данная модель устанавливает соответствие fП между каждым элементом x ={х1,х2,…,хm}∈Х1×Х2×…×Хm и элементом z ={z1,z2,…,zn}∈Z1×Z2×…×Zn. FП – график соответствия fП. Модель системы в виде функции переходов может быть задана также в виде fП={(Х1×Х2×…×Хm),(Z1×Z2×…×Zn), (Z1×Z2×…×Zn),FП}, (1.6) т.е. модель устанавливает соответствие fП между каждым элементом ( x , z )∈[(Х1×Х2×…×Хm)×(Z1×Z2×…×Zn)] и
23 элементом z ={z1,z2,…,zn}∈Z1×Z2×…×Zn. Модель системы в виде функции выходов задана соответствием fВ={[(Х1×Х2×…×Хm),(Z1×Z2×…×Zn)], (Y1×Y2×…×Yr),FВ}. (1.7) Модель устанавливает соответствие fВ между каждым элементом ( x , z ) из множества [(Х1×Х2×…×Хm), (Z1×Z2×…×Zn)] и элементом y ={y1,y2,…,yr}∈Y1×Y2× ×…×Yr. FВ – график соответствия fВ. Модель системы в виде функции выходов может быть задана еще и в таком виде: fВ={[(Х1×Х2×…×Хm)×(Z1×Z2×…×Zn)],[Z1×Z2×…×Zn], (Y1×Y2×…×Yr),FВ), (1.8) т.е. модель в данном случае устанавливает соответствие fВ между каждым элементом {( x , z ), z } из множества {[(Х1×Х2×…×Хm), (Z1×Z2×…×Zn)], [Z1×Z2×…×Zn]} и элементом y ={y1,y2,…,yr}∈Y1×Y2× ×…×Yr. Модель системы в виде функции переходов может быть записана еще в следующем виде: fП (1.9) {(X1 , X1 ,..., Xm ) ⎯⎯ →(Z1 , Z1 ,..., Z n ) или в виде fП {(X1 , X1 , ..., Xm ) × (Z1 , Z1 , ..., Z n )} ⎯⎯ →(Z1 , Z1 , ..., Z n ) . (1.10) Модель системы в виде функции выходов может быть задана и в таком виде: fВ {(X1 , X1 ,..., Xm ) × (Z1 , Z1 ,..., Z n )} ⎯⎯ →(Y1 , Y1 ,..., Yr ) (1.11) или в виде {[(X1 , X1 ,..., Xm ) × (Z1 , Z1 ,..., Zn )] × fВ ×(Z1 , Z1 ,..., Z n )} ⎯⎯ →(Y1 , Y1 ,..., Yr ) .
(1.12)
24
2. КЛАССИЧЕСКИЕ МАТЕМАТИЧЕСКИЕ МОДЕЛИ 2.1. Примеры моделей в виде дифференциальных уравнений 2.1.1. Модель электрического колебательного контура. Классические разделы высшей математики связаны с решением и исследованием дифференциальных уравнений. Дифференциальные уравнения нашли широкое применение при моделировании технических, социальных, экономических и других систем. Классическая теория автоматического управления применяет модели объектов в виде дифференциальных уравнений и позволяет решать задачи управления, исследуя дифференциальные уравнения [5]. Вид уравнений может быть очень сложным и для решения и исследования моделей, заданных дифференциальными уравнениями, применяется компьютерное моделирование. Применяют специальные пакеты прикладных программ, например MatLab, Omola, Dymola, Dymosim, Model Vision Studium, язык UML и другие. Колебательный контур, известный в электротехнике, представляют в виде схемы, приведенной на рис. 2.1. Определены параметры колебательного контура: - С – емкость конденсатора; - L – индуктивность катушки; - UС(t) – напряжение на конденсаторе; - IL(t) – ток в катушке; - U(t)ИСТ – напряжение внешнего источника. Определим модель колебательного контура, которая позволит моделировать колебательный процесс в контуре.
25
L Uист(t)
C UC(t)
IL(t)
Рис. 2.1 В соответствии с законом Кирхгофа запишем следующие соотношения: dI L dU C = − U C + U ИСТ . С = −I L , L dt dt Введем координаты z1=UС, обозначим UИСТ/L=х(t) и получим систему дифференциальных уравнений: dz 1 z dz 2 z =− 2, (2.1) = − 1 + x(t ) . dt dt dt L Если UИСТ=0, то х(t)=0 и система (2.1) описывает свободные колебания. Рассматривая х(t) как сигнал управления, получим описание динамики колебаний в каждый момент времени t. Решая систему (2.1), можно получить аналитический вид функций z1(t) и z2(t). Если рассматривать U(t)ИСТ как единичное ступенчатое воздействие, R - внутреннее сопротивление источника, то можно показать, что напряжение на конденсаторе С будет изменяться по формуле [6]: δ UC (t) = 1- e-δt (cosω1t + sinω1t) , (2.2) ω1 R 1 2 , ω0 = , ω12 = ω02 − δ2 . где δ = 2L LC
26 Дальнейшее исследование модели связано с разработкой программы, которая будет рассчитывать и выводить график функции UС(t) в зависимости от параметров R, L и С, тем самым позволяя исследовать время переходного процесса (время затухания колебаний) в данном контуре. 2.1.2. Модель размножения микроорганизмов. Из результатов изучения развития популяций микроорганизмов известно, что скорость размножения микроорганизмов пропорциональна числу уже имеющихся на данное время. Рассмотрим моделирование процесса роста популяций микроорганизмов. Пусть E(t) − число особей в момент времени t. Скорость размножения определим как отношение величины E(t+∆t)E(t) к величине Δt при Δt→0. Исходя из этого условия, получим уравнение в частных приращениях (модель роста популяций в частных приращениях): E(t + Δt ) − E(t ) = kE(t ). Δt
Переходим к предельному выражению E(t + Δt ) − E(t ) lim = kE(t ) Δt → 0 Δt и получаем модель роста популяций микроорганизмов в виде дифференциального уравнения (общий вид): dE(t ) (2.3) = kE(t ) . dt
Решая дифференциальное уравнение (2.3), можно получить аналитическое уравнение роста популяций и провести исследования. При начальных условиях t=0, E(t=0)=E0 получим решение модели роста популяций в виде аналитического выражения E(t)=E0ekt. (2.4) Вид уравнения (2.4) показан на рис. 2.2.
27 Е(t)
Е0
Рис. 2.2
t
Если при t=0 начальное число популяций микроорганизмов E=E0, то можно определить время Т, за которое число особей удвоится по формуле 2E0=E0ekt, → 2=ekT, → T=(1/k)ln2. Заметим, что при получении этой модели не учитывалось ограничение, связанное с требуемым количеством питательных средств для существования микроорганизмов, а также воздействия внешней среды (например, иммунные силы организма). 2.1.3. Модель динамики боя. Проведение военных сражений связано с расчетами, поэтому разрабатывают модели боевых действий [2]. Пусть m1 - число боевых единиц красных; m2 - число боевых единиц синих, сохранившихся непораженными к моменту времени t; λ1 - средняя скорострельность для одной боевой единицы красных; λ2 - средняя скорострельность для одной боевой единицы синих. Цели поражаются с вероятностью р1 - красными и вероятностью р2 - синими. Рассмотрим модель, отображающую динамику боя. Интенсивности успешных выстрелов определятся как
28 L1=λ1р1, L2=λ2р2. Число выведенных боевых единиц красных Δm1 за время Δt составит λ2р2Δtm2, а число выведенных из строя боевых единиц синих Δm2 за время Δt составит λ1р1Δtm1, Тогда Δm1=-λ2р2Δtm2, Δm2=-λ1р1Δtm1. (2.4) Уравнения (2.4) - модель динамики боя в частных приращениях. От уравнения (2.4) осуществим переход к дифференциальным уравнениям. Разделив правую и левую части на Δt, получим Δm1 Δm 2 = -λ 2p 2m 2 , = -λ 1p1m1 . Δt Δt Взяв пределы при Δt→0, получим дифференциальные уравнения, моделирующие динамику боя dm1 dm 2 (2.5) = -L 2m 2 , = -L1m1 dt dt Уравнения (2.5) называются уравнениями Ланчестера. 2.1.4. Модель движения ракеты. Движение ракеты, запускаемой в космос, описывается её координатами х и y, проекциями вектора скорости V на координатные оси VХ и VY. Пусть m - масса ракеты; u величина тяги; ϕ - угол между направлением тяги и осью 0х; f(u) - секундный расход массы. Рассмотрим построение модели, отображающей динамику полета. Проекции скоростей являются производными от движения по координатам, следовательно dy dx = Vy . = Vx , dt dt В соответствии с уравнением Ньютона запишем: dVy dV m = Fy + U sin ϕ; m x = Fx + U cos ϕ . dt dt Расход массы определится уравнением
29 dm = − f (u ) . dt Таким образом, моделью движения ракеты является система уравнений: dVx dy dx = Vx , = Vy , m = Fx + U cos ϕ, dt dt dt m
dVy dt
= Fy + U sin ϕ,
dm = − f (u ) dt
при начальных условиях х(t 0 )=х 0 , y(t 0 )=y 0 , m(t 0 )=m 0 , V х (t 0 )=V х0 , V y (t 0 )=V y0. Управление траекторией ракеты осуществляется за счет регулирования величины и направления силы тяги двигателя, U и ϕ - управляющие параметры. Во всех приведенных выше примерах применение компьютерного моделирования сводится к получению аналитических уравнений, программированию с целью получения решений при заданных наборах входных параметров, визуализации результатов решения.
2.2. Классические модели в виде дифференциальных уравнений Дифференциальные уравнения описывают процесс перехода динамической системы из одного состояния в другое и изменение выходного параметра. Могут рассматриваться системы, в которых моделируют только изменение состояний или только изменение выходного параметра. Могут рассматриваться системы, в которых моделируют изменение и состояний, и выходного параметра. Математические схемы такого вида отражают динамику изучаемой системы и носят название D-схем от английского слова dynamic (динамика).
30 Пусть входные параметры (сигналы, координаты и прочее) заданы множеством Х(t)={х1(t),х2(t),...,хm(t)}, а выходные параметры заданы множеством Y(t)={y1(t),y2(t),..., yr(t)}. Модель динамической системы, определяемая обыкновенными дифференциальными уравнениями в общем виде, задается следующим образом. Задают дифференциальные уравнения, определяющие движение системы в пространстве состояний dz i = f i (t, z 1 (t),..., z n (t), x1 (t),..., x m (t)), i = 1,n . (2.6) dt Каждое i-е дифференциальное уравнение задается в общем виде функцией fi, зависящей от времени t, компонент вектора состояний Z={z1(t),z2(t),…,zn(t)} и компонент вектора входных параметров Х(t)={х1(t),х2(t),...,хm(t)}. Задают соотношения, определяющие изменение выходных параметров y j = g j (t, z1 (t),..., z n (t), x1 (t),..., xm (t)), j = 1,r . (2.7) Для решения дифференциальных уравнений системы (2.6), определения изменения во времени выходных параметров необходимо для момента t(0)=t0 задать начальные состояния z1 (t 0 ) = z10 , z 2 (t 0 ) = z 02 , ..., z n (t 0 ) = z n0 , а также функции, определяющие изменения во времени компонент вектора входных параметров Х(t) на полуинтервале (t0,t]:
(X(t)]tt0 = {(x1 (t)]tt0 ,(x 2 (t)]tt0 , ...,(xm (t)]tt0 } . Если для каждого уравнения системы (2.6) выполнены условия существования и единственности решений, то эти решения в общем случае имеют вид
z i (t) = ji (t, t 0 , z 10 , z 02 , ..., z n0 ,(X(t)]tto ), i = 1,n .
(2.8)
Обозначим решения системы дифференциальных уравнений (2.6), проходящие в момент времени t0 через
31 точку Z 0 = ( z 10 , z 02 ,..., z n0 ) , символом F. Тогда модель в виде функции переходов для динамической системы будет задана в общем виде уравнением (2.9) Z( t ) = F( t , t 0 , Z 0 , ( X( t )] tt o ) . Эта функция каждому набору (t , t 0 , Z 0 , ( X(t )] tt o ) ставит в соответствие то состояние Z(t), в которое переходит система за время перехода t-t0 из фазы (t0,Z0) под действием входных параметров ( X(t )] tt o . Модель динамической системы в виде функции выходов в общем виде будет определена уравнением (2.10) y ( t ) = G ( t , t 0 , Z 0 , ( X( t )]tt o ), в котором оператор G каждому набору ( t , t 0 , Z 0 , ( X( t )]tt o ) сопоставляет выходной сигнал yt=y(t). Дифференциальные уравнения классифицируются на линейные и нелинейные, стационарные и нестационарные, уравнения первого и более высокого порядка, а также одномерные и многомерные. Если модель предназначена для описания изменения состояния z(t) динамической системы, то модель в виде обыкновенного линейного дифференциального уравнения q-го порядка с постоянными коэффициентами и правой частью, выраженной через производные от управляющих функций, задается в следующем виде: dqz d q −1 z d q−2 z − λ − λ − ... − λ q z = 1 2 dt q dt q − 1 dt q − 2 drx d r −1 x d r−2 x = μ 0 r + μ 1 r −1 + μ 2 r − 2 + ... + μ r x (2.11) dt dt dt Если применить оператор дифференцирования p =
d , dt
то с учетом аддитивной ошибки v(t) уравнение (2.11) запишется в виде
32
z(р)=λ-1(р)μ(р)х(р)+v(р), где λ-1(р)=рq-λ1рq-1-λ2рq-2-…-λq, μ(р)=μ0рr+μ1рr-1 + … + μr. Модели в виде многомерных дифференциальных уравнений в форме Коши находят наибольшее применение. Они описываются системами обыкновенных дифференциальных уравнений первого порядка в форме Коши, т.е. разрешенными относительно первых производных. Для стационарной линейной системы, параметры которой изменяются непрерывно во времени, модель в общей форме имеет следующий вид: dZ = ФZ + GX + ГW, Y = HZ + V . dt
(2.12)
В уравнении (2.12): Z={z1(t),z2(t),…,zn(t)} - вектор состояний; Х(t)={х1(t),х2(t),...,хm(t)} – вектор входных параметров; Y(t)={y1(t),y2(t),..., yr(t)} – вектор выходных параметров; W={w1(t),w2(t),…,wn(t)} - вектор шума системы;
dZ dz dz dz = { 1 , 2 ,..., n }T - транспонированный dt dt dt dt
вектор производных от переменных состояния; матрицы Ф, G, H и Г имеют размерности, зависящие от размерностей векторов Z, Х(t), Y(t), W. Коэффициенты матриц Ф, G, H и Г имеют смысл коэффициентов передачи, для стационарной системы не зависят от времени и подлежат оцениванию. Параметры могут входить и в начальное условие, которое необходимо добавить для решения первого уравнения (2.12). Модель для нестационарной линейной непрерывной системы отличается от (2.12) тем, что матрицы Ф, G, H и Г будут зависеть от времени. Непрерывная нелинейная система может быть описана моделью dZ = ϕ( Z, X, t , Θ ) + Г( t , Θ )W , dt
Y = ψ ( Z, X, t , Θ ) + V. (2.13)
33 Векторные функций ϕ(…), ψ(…) и матрица Г(...) предполагаются известными с точностью до параметров, подлежащих оцениванию. Применяя преобразования Лапласа, можно перенести описание из временной области в область изображений по Лапласу. Компьютерное моделирование систем, описываемых многомерными дифференциальными уравнениями в форме Коши, осуществляется с применением пакетов программ. Широко используется подсистема Simulink пакета MatLab. При моделировании определяется вид дифференциального уравнения, задаются начальные условия. Результаты решения отображаются визуально в виде цифровых данных, а также в виде графических данных.
2.3. Инерционные модели Динамические системы с последействием (с предысторией) могут быть формализованы с применением дифференциальных уравнений с запаздывающим аргументом. 2.3.1. Дифференциальные уравнения с запаздывающими аргументами. В общем случае дифференциальные уравнения n-го порядка с запаздывающим аргументом имеют вид d n z(t) dz(t) d n-1z(t) = f[t, z(t), , ..., , z(t - τ), dt n dt dt n-1
dz(t - τ) d n-1z(t - τ) , ..., ]. dt dt n-1
(2.14)
Дифференциальное уравнение (2.14) может быть сведено к системе дифференциальных уравнений первого dz 2 (t) dz(t) = z3 и ; порядка. Введем обозначения: z=z1; = z2 dt 2 dt
34 т.д. Тогда дифференциальное уравнение (2.14) запишем в следующем виде: d n z(t) = f[t, z1 (t), z 2 (t),..., z n (t), z1 (t - τ), z 2 (t - τ),..., z n (t - τ)] . dt Из рассмотрения даже простейшего дифференциального уравнения вида dz(t ) = f [t , z(t ), z(t − τ)] , (2.15) dt где τ>0, τ=сonst, сложно понять, какие начальные условия надо задать, чтобы определить решение z(t) для t>t0. Решение дифференциального уравнения (2.15) определяется из интегрального уравнения t
z(t ) = z(t 0 ) + ∫ f [Θ, z(Θ ), z(Θ − τ)]dΘ. (2.16) t0
Решение уравнения (2.16) осуществляется по следующему алгоритму. Следует задать начальное значение для точки t0 z0=z(t0) и функцию z(t) в полуинтервале t0-τ≤t
t0 с применением методов вычислительной математике и компьютерного моделирования. Алгоритм решения уравнения (2.16) представляет собой следующую последовательность действий. После задания начальных условий следует определить непрерывное решение z(t) для t>t0, при условии, что z(t)=W(t) для ∀t∈[t0-τ,t0). Если функции f и W непрерывны и первая из них удовлетворяет условию Липшица по z, то искомое решение существует и единственно.
35 Зная W(t) для t0-τ≤tt0 недостаточно задать z0=z(t0). z0=z(t0), ∀t∈[t0-τ,t0): z(t)=W(t)
∀t∈[t0,t0+τ): z(t)
z(t)=W(t) ∀t∈[t0,t0+τ)
∀t∈[t0+τ,t0+2τ): z(t)
z(t)=W(t) ∀t∈[t0+τ,t0+2τ)
∀t∈[t0+2τ,t0+3τ): z(t)
z(t)=W(t) ∀t∈[t0+2τ,t0+3τ)
………
Рис. 2.3
2.3.2. Модели в виде сумм и интегралов свертки. Если динамическая система функционирует в дискретные моменты времени, то ее модель может быть описана в виде суммы свертки. Математические модели, выражаемые суммой свертки или интеграла свертки, задаются следующим образом. Для однооткликовой стационарной динамической системы, на вход которой действует управляющая функция х(t), а наблюдения над входом и выходом производятся только в дискретные моменты времени с интервалом квантования Δt, математическая модель может быть выражена с помощью суммы свертки:
36 ∞
z(kΔt ) = ∑ h(iΔt )x(kΔt − iΔt ) + v(kΔt ) = i =0
k
= ∑ h(kΔ t − iΔt )x( iΔt ) + v(kΔt ). i = −∞
Зададим масштаб t=1, получим ∞
z (k ) = ∑ h ( i )x(k − i ) + v (k ) = i =0
k
= ∑ h(k − i )x( i ) + v (k ). i = −∞
(2.17)
Модель (2.17) является моделью импульсной системы, h(i) есть импульсная характеристика системы, представляющая собой отклик системы в данный момент времени на входное воздействие, приложенное на i интервалов раньше и имевшее характер единичного мгновенного импульса в виде функции Дирака. Импульсная характеристика играет здесь роль весовой функции. Если линейная динамическая система нестационарная, то в выражения (2.17) нельзя применять импульсную характеристику системы вида h(k-i). Для этого случая математическая модель примет вид k
z (k ) = ∑ h(k , i )x( i ) + v (k ), i = −∞
где h(k,i) - реакция системы в момент k на единичный импульс в момент i. В модели типа суммы свертки роль величин, подлежащих определению из экспериментальных данных, играют значения импульсной характеристики, т.к. данная модель является непараметрической, т.е. не содержит явно параметров в виде некоторых численных величин. Если в динамической системе измерения управляющей функции и отклика носят непрерывный характер, то модель линейной системы может быть записана в виде интеграла свертки:
37 - для линейной системы ∞
z(t) =
∫
t
h(τ)x(t - τ)dτ + v(t) =
∫
h(t - τ)x(τ)dτ + v(t) ; (2.18)
τ=- ∞
τ=0
- для нестационарной системы t
z ( t ) = ∫ h( t , τ )x( τ )dτ + v ( t ). τ = −∞
Модель представлена в виде функционала с аддитивной ошибкой v(t). Интеграл называется интегралом свертки, или интегралом Дюамеля. Для определения импульсной характеристики (весовой функции) используется (для стационарных систем) представление весовой функции в форме Релея-Ритца путем разложения функций в ряд по системе известных ортогональных функций p
h( t , Θ ) = ∑ Θ i Ф i ( t ), i =1
(2.19)
где Фi(t) - функции системы ортогональных функций при значениях t, принадлежащих отрезку ортогональности [t1,t2]. Это позволяет сделать модель параметрической, которая содержит ограниченное число параметров Θi, подлежащих определению. Коэффициенты Θi называют еще спектром разложения в ряд базисных функций. К системе базисных функций предъявляются следующие требования: для любой весовой функции ряд (2.19) должен сходиться; Фi(t) должна иметь простую аналитическую форму; Θi должны вычисляться аналитически просто. Условие ортогональности базисных функций имеет вид t2 ⎧ 0 i ≠ j⎫ Ф (t)Ф (t)dt = (2.20) ⎨ ⎬, i j ∫t c i = j ⎩ ⎭ i 1 где число сi называют нормой базисной функции Фi(t). Каждую базисную функцию можно нормировать по ее норме, причем нормированная функция имеет вид
38
Фi (t) = Фi (t)/ ci . Система (2.20) примет вид t2
⎧1 Ф (t)Ф (t)dt = ⎨ i j ∫ ⎩0i t1
i = j⎫ ⎬ = δ ij , i ≠ j⎭
(2.21)
где δij - символ Кронекера. Для определения Θi умножим правую и левую части уравнения (2.19) на Фi(t) и проинтегрируем обе части на отрезке ортогональности t2
∫ h(t)Ф
t1
i
(t)dt =
t2
∞
∑Θ ∫Ф k
k =0
k
(t)Ф i (t)d t .
t1
При k=i правый интеграл равен единице, тогда t2
Θ i = ∫ S(t)Ф i (t)dt .
(2.22)
t1
Модели вида свертки могут использоваться и для описания многооткликовых линейных инерционных систем.
2.4. Модели на основе передаточных функций Рассмотрим однооткликовую импульсную систему с дискретными сигналами на ее входе и выходе, модель которой может быть выражена с помощью импульсной характеристики (весовой функции) в виде уравнения (2.17). Дискретное Z-преобразование решетчатой функции v(n)=vn задается в следующем виде ∞
ˆ = ∑ v n z -n . v(z) n=0
Применяя одностороннее Z-преобразование к левой и правой части этого выражения, получаем
39
ˆ ˆ + v(z) ˆ = h(z)x(z) ˆ / z(z)
(2.23) Z-преобразование однозначно связано с дискретным преобразованием Лапласа. Взаимосвязь комплексной переменной z и комплексной переменной преобразования Лапласа выражается соотношением z=es, которое используется для перехода от дискретного преобразования Лапласа к Z-преобразованию и наоборот. Модель импульсной системы (2.23) устанавливает связь между Z-преобразованием zˆ ( z ) отклика z(k) выходного сигнала и Z-преобразованием xˆ( z ) входного сигнала х(k). hˆ( z ) - передаточная функция импульсной системы (дискретная передаточная функция), являющаяся Zпреобразованием импульсной характеристики h(k). vˆ( z ) Z-преобразование случайной составляющей v(k). Если применять преобразование Лапласа к обеим частям модели (2.18) для непрерывной однооткликовой системы, то можно записать z(s)=h(s)х(s)+v(s). В этом уравнении z(s), h(s), х(s), v(s) - преобразования Лапласа соответственно от z(t), h(t), х(t), v(t); h(s) - передаточная функция непрерывной системы, представляющая собой преобразование Лапласа от импульсной характеристики. Преобразование Лапласа имеет вид +∞
x(s) =
∫ x(t)e
-js
dt .
-∞
Применяя к обеим частям уравнения (2.18) дискретное преобразование Фурье, получим z(jw)=h(jw)х(jw)+v(jw), где z(jw), х(jw), v(jw) - преобразования Фурье соответственно от отклика, входного сигнала и помехи, h(jw) - частная характеристика системы, которая есть не что иное, как преобразование Фурье от импульсной характеристики. Преобразование Фурье имеет вид
40 +∞
x(jw) =
∫ x(t)e
-jwt
dt .
-∞
В рассмотренных моделях, использующих преобразования по Лапласу и Фурье, в роли аргументов выступают соответствующие параметры преобразований z, s, j. Все модели линейны по входным сигналам, но, как правило, нелинейные по параметрам.
2.5. Конечные автоматы Для моделирования динамических систем, функционирующих в дискретном времени, применяется аппарат конечных автоматов [7]. Теория конечных автоматов и их модели используются при синтезе и анализе вычислительных устройств, дискретных устройств автоматики. Конечный автомат функционирует в дискретные моменты времени t, причем в каждый момент ti автомат находится в одном из возможных состояний z(ti), принадлежащем множеству состояний автомата Z. Математические модели в виде конечного автомата получили название F-схем от английского finite automata – конечный автомат. В каждый момент ti (i=1,2,...) на вход конечного автомата поступает входной параметр - одна из букв х(ti) входного алфавита Х, а на выходе существует выходной параметр y(t) - буква выходного алфавита Y. Автомат формально определен набором A=<Х,Z,Y,z0,ϕ,ψ>, где Х={х1,х2,...,хm} - множество входных параметров; Z={z1,z2,...,zn} - множество состояний; Y={y1,y2,...,yr} множество выходных параметров. Элементы множества Х, Z, Y называют входным, внутренним и выходным
41 алфавитом. При поступлении параметра х состояние конечного автомата изменяется в соответствии с одношаговой функцией переходов, например: z(t)=ϕ[z(t-1),х(t)] или z(t)=ϕ[z(t),х(t)], а выходной параметр y(t) определяется функцией выходов, которая может иметь следующие виды задания: y(t)=ψ[z(t),х(t)]; y(t)=ψ[z(t-1),z(t) х(t)]; y(t)=ψ[z(t-1), х(t)]. Функции переходов и выходов могут быть заданы теоретико-множественным способом, табличным способом и в виде графов. Рассмотрим пример задания конечного автомата. Пусть Х={х1,х2,х3}, Z={z1,z2,z3,z4}, Y={y1,y2,y3,y4}. Функция переходов для данного автомата задана в виде табл. 2.1, а функция выходов вида y(t)=ψ[z(t),х(t)] – в виде табл. 2.2. Таблица 2.1 Функция переходов Z Х z1 Z2 z3 z4 х1 z1 Z2 z3 z4 х2 z2 Z3 z4 z1 х3 z4 Z1 z2 z3 Таблица 2.2
Х х1 х2 х3
z1 y1 y2 y3
Функция выходов Z z2 y4 y1 y2
z3 y3 y4 y1
z4 y2 y3 y4
При задании функции переходов на пересечении i–й строки и j–го столбца указывается состояние zk, в которое переходит автомат при подаче входного параметра хi в
42 такте времени t, при условии, что в такте времени t-1 автомат находился в состоянии zj. На рис. 2.4 приведено графическое задание функции переходов рассматриваемого автомата. x1 z1
x2
x1
x2
x3 x1
x3
z4
z2
x3
x3
x2
x2 z3 x1
Рис. 2.4 Автомат в процессе своей работы реализует отображение множества слов (последовательность параметров) входного алфавита Х на множество слов выходного алфавита Y. Если на вход конечного автомата, установленного в начальное состояние z0, подать последовательность букв входного алфавита х(t0), х(t1), х(t2),…, то на выходе автомата будут последовательно появляться буквы выходного алфавита y(t0), y(t1), y(t2),… В зависимости от способа заданий функций переходов и выходов, автоматы подразделяются на автоматы первого и второго рода. Для автомата первого рода, называемого
43 автоматом Мили, функция переходов имеет вид z(t)=ϕ[z(t),х(t)], а функция выходов - y(t)=ψ[z(t),х(t)]. Для автомата второго рода функция переходов имеет вид: z(t)=ϕ[z(t),х(t)], а функция выходов - y(t)=ψ[z(t1),х(t)]. Автомат второго рода, функция выходов которого определяется его состоянием - y(t)=ψ[z(t)], называется автоматом Мура. По числу состояний различают конечные автоматы с памятью и без памяти. Автоматы с памятью имеют более одного состояния, а автоматы без памяти обладают лишь одним состоянием. Автоматы без памяти называют комбинационными или логическими схемами. Функция выходов такого автомата - y(t)=ψ[х(t)]. Если множества Х и Y состоят из двух параметров, то функции переходов и выходов называются булевыми функциями. Рассмотрим примеры моделирования систем в виде конечных автоматов. Пример 1. Автомат для продажи билетов в автобусах принимает монеты достоинством в 1,2 и 5 рублей и выдает билеты стоимостью 5 рублей. Рассмотрим конечный автомат Мили с множеством состояний Z=(0,1,2,3), входным алфавитом Х=(1,2,5) и выходным алфавитом Y=(0,1), где 0 соответствует ситуации «билет не выдается», а 1 – ситуации «билет выдается». Функция переходов ϕ(t) определяется соотношением Z(t)=(z(t-1)+х(t))mod5, а функция выходов ψ(t) – соотношением ⎧⎪0, z ( t - 1) + x ( t ) < 4, Y=⎨ ⎪⎩1, z ( t - 1) + x ( t ) > 4.
44
Пример 2. Хранилище склада материальнотехнического снабжения состоит из стеллажей, предназначенных для хранения материальных ценностей. Изделия i-й номенклатуры хранятся в i-м стеллаже (i=1,2,…,n). Содержание стеллажей изменяется в моменты времени поступления на склад новых изделий потребителям. Такое хранилище можно представить в виде конечного автомата Мура. В качестве состояний выберем n-мерный вектор Z=(Z1,Z2,…,Zn), где Zi - число изделий на i-м стеллаже. Выходной сигнал – (n+1) – мерный вектор Х=(Х1,Х2,…, Хn,μ), где Хi - число изделий i-й номенклатуры, поступивший на склад или выданный потребителю. При поступлении изделий на склад μ=1, а при выдаче изделий потребителю μ= -1. Выходной сигнал представляет собой n–мерный вектор Y=(Y1,Y2,…,Yn), для которого Yi(t)=Zi(t) – информация о состоянии стеллажей. Функция переходов определена соотношением Zi(t)=Zi(t-1)+μх(t), а функция выходов определена соотношением Yi(t)=Zi(t). На рис. 2.5 приведен алгоритм программы моделирования конечного автомата, функция выходов которого имеет задание z(t)=ϕ[z(t-1),х(t)], а функция переходов - y(t)=ψ[z(t),х(t)]. Функция переходов задается в подпрограмме WWOD в виде массива FР(i,j), значения которого определены индексом k состояния zk, в которое переходит автомат при подаче входного параметра хi в такте времени t, при условии, что в такте времени t-1 автомат находился в состоянии zj.
45 Начало 1 2
WWOD
Генерация и вывод параметра (буквы) X, определяемой индексом i 3
4
j=k
Определение состояния k=FP(i,j) 5 Вывод состояния k
6
Определение и вывод выходного параметра w=FW(i,k) 7 0
Все входные параметры сформированы 1 Конец
Рис. 2.5 Функция выходов задается в подпрограмме WWOD в виде массива FW(i,k), значения которого определены индексом w выходного параметра (буквы) yw, который будет на выходе автомат при подаче входного параметра хi в такте времени t, при условии, что в этом такте времени t автомат находится в состоянии zk. В подпрограмме WWOD происходит инициализация автомата, т.е. определение z0=zk. В блоке 3 алгоритма происходит изменение индекса состояния с учетом задержки на один такт.
46
3. СТОХАСТИЧЕСКИЕ МОДЕЛИ ОБЪЕКТОВ 3.1. Математические модели случайных процессов При проведении научных исследований в производстве и в быту часто встречаются события, которые многократно появляются при одних и тех же условиях, но отличающиеся каждый раз друг от друга. Например, измеряя значение напряжения в сети переменного тока с помощью одного и того же прибора с одинаковой тщательностью, никогда не получим одинаковых данных. Наблюдается случайное рассеивание. Для оценки величины рассеивания вводится вероятность, как мера измерения. Закономерность рассеивания, выраженная функцией распределения вероятностей, носит общий характер. Если входные параметры объекта, смена состояний объекта или его выходные параметры описываются случайными распределениями вероятностей, то эти объекты относятся к классу стохастических. При моделировании поведения данных объектов применяется аппарат теории вероятностей, а для идентификации параметров моделей применяется аппарат математической статистики. Рассмотрим виды моделей, которые могут быть применены для описания стохастических объектов. 3.1.1. Распределение случайных событий. Массовые явления или процессы характеризуются многократным повторением при постоянных условиях некоторых опытов (операций и прочее). Абстрагируясь от специальных свойств этих опытов, в теории вероятностей вводится понятие испытания (опыта). Испытанием называется осуществление определенного комплекса условий, который
47 может быть воспроизведен сколь угодно большое число раз. Явления, происходящие при реализации этого комплекса условий (в результате испытания), называются событиями [8]. Положительное число в отрезке [0,1], представляющее собой количественную меру возможности реализации случайного события в испытании, называется его вероятностью. Вероятность появления события А обозначают символом Р(А), причем 0≤Р(А)≤1. Вероятность понимается как идеальная мера возможности появления события. Случайная величина рассматривается как функция, аргументом которой служит элементарное случайное событие. Дискретной случайной величиной называется такая, которая может принимать конечное или бесконечное счетное множество значений, например возможны значения x1, x2, …, xn, … Для каждого события xi определены вероятности P(xi). Распределение вероятностей дискретной случайной величины, представленное на рис. 3.1, рассматривают как точечное распределение вероятностей. P(x3) P(x1)
P(x2) P(xn) х
x1
x2
x3
x4
….
xn
….
Рис. 3.1 При непрерывном распределении случайной величины вероятности распределены сплошной полосой по всей оси x или по некоторым ее участкам с определенной плотностью.
48 Распределение вероятностей носит название теоретического распределения случайной величины. Интегральная функция распределения вероятностей определяет вероятность того, что случайная величина X меньше значения x x
P(X < x) = ∫ f(x)dx = P(x) .
(3.1)
-∞
Пример задания интегральной функции распределения вероятностей приведен на рис. 3.2. F(x) 1
х
Рис. 3.2 Дифференциальная функция распределения вероятностей (плотность распределения вероятностей) определяет вероятность того, что случайная величина X меньше значения x x2
P(x < X < x ) = P(x ) - P(x ) = ∫ f(x)dxx) . 1 2 2 1 x
(3.2)
1
Пример задания дифференциальной функции распределения вероятностей приведен на рис. 3.3. Совокупность случайных величин X(Θ) аргумента Θ, образует случайный процесс. Течение случайного процесса описывают некоторой функцией X(Θ), где Θ - аргумент функции со значениями из множества Θ. Функцию X(Θ), наблюдаемую в некотором опыте, соблюдая определенный
49 комплекс условий, называют выборочной функцией или реализацией случайного процесса. f(x)
х
Рис. 3.3 Если множество Θ произвольно, то вместо термина «случайный процесс» применяют термин «случайная функция». Название «случайный процесс» применимо в тех случаях, когда параметр Θ интерпретируется как время. Если аргумент случайной функции является пространственной переменной, то функцию называют случайным полем. Определение. Моделью случайного процесса называют случайную функцию X(Θ), заданную на множестве Θ, принимающую действительные значения и описываемую семейством распределений [9]: FΘ1 ,Θ2 ,...,Θn (x1 , x2 ,..., xn ) , Θi∈Θ, i=1,2,...,n, n=1,2,..., которое удовлетворяет условиям согласованности FΘ1 ,Θ2 ,...,Θn (x1 , x 2 ,..., xn , +∞,..., +∞) = FΘ1 ,Θ2 ,...,Θn (x1 , x2 ,..., xn ) ,
FΘ1 ,Θ2 ,...,Θn (x1 , x 2 ,..., xn ) = FΘ
i1 ,Θi2 ,...,Θin
(xi1 , xi2 ,..., xin ) ,
где i1, i2,…, in, - любая перестановка индексов 1, 2,..., n. FΘ1 ,Θ2 ,...,Θn (x1 , x2 ,..., xn ) называется Набор функций конечномерными распределениями случайной функции
50 или интегральной функции распределения вероятностей многомерной случайной величины. При n=1 получим одномерное распределение (3.1). Модель многомерного распределения необходима для моделирования многопараметрической случайной величины. При решении многих задач моделирования приходится оперировать с несколькими случайными функциями. Для того чтобы над ними производить математические операции, недостаточно, чтобы каждая из этих случайных функций была задана в отдельности. Последовательность функций X1(Θ), X2(Θ),…, Xn(Θ) возможно заменить векторной функцией ξ(Θ), компонентами которой служат случайные функции Xi(Θ), (i=1,2,…,n). Явные выражения для конечномерных функций распределения случайного процесса бывают сложными и неудобными для применения. Поэтому в ряде случаев предпочитают задавать конечномерные распределения их плотностями (дифференциальной функцией распределения вероятностей многомерной случайной величины) или характеристическими функциями. Если функций fΘ1 ,Θ2 ,...,Θn (x1 , x 2 ,..., xn ) - плотность распределения FΘ1 ,Θ2 ,...,Θn (x1 , x 2 ,..., xn ) , то
FΘ1 ,Θ2 ,...,Θn (x1 , x2 ,..., xn ) = x1 x 2
=
xn
∫ ∫ ... ∫ f
-∞ -∞
Θ1 ,Θ2 ,...,Θn
(y1 , y 2 ,..., y n )dy 1 , dy 2 ,..., dy n .
-∞
Связь интегральной функции распределения вероятностей одномерной случайной величины и ее дифференциальной функцией распределения вероятностей показана формулой x
F(x) = ∫ f(y)dy . -∞
51 Модель системы может быть задана также в виде характеристической функции конечномерного распределения последовательности X1(Θ),X2(Θ), …, Xn(Θ), Θi≥0 >, i=1,n, n=1,2,..., которая определяется формулой n
ϕΘ1 ,Θ2 ,...,Θn (u1 , u 2 ,...,un ) = Mexp{j∑ X(Θk )uk } , k=1
где M - символ математического ожидания, u1,u2,...,uk вещественные числа. Если существует плотность конечномерного распределения, то модель в виде характеристической функции является преобразованием Фурье плотности распределения. Для одномерной случайной величины характеристическая функция определится по формуле +∞
F(jω) =
∫ f(y)e
-jωt
dy .
-∞
3.1.2. Корреляционные функции. Исчерпывающую характеристику модели стохастического объекта в виде случайной функции в широком смысле дает семейство конечномерных распределений. Однако решение многих теоретико-вероятностных задач зависит только от небольшого числа параметров, характеризующих входящие в задачу распределения. Наиболее важными числовыми характеристиками распределений являются их моменты. В теории случайных функций роль моментов распределений играют моментные функции. Рассмотрим модели в виде моментных функций для одномерной случайной величины. Момент k–го порядка дискретной случайной величины определяется по формуле n
M(Xk ) = ∑ xki p(xi ) . i=1
52 Для непрерывной случайной величины моментная функция k–го порядка определяется по формуле +∞
M[Xk ] =
∫ x f(x)dx . k
-∞
Рассмотрим модели в виде моментных функций для многомерной случайной величины. Определение. Модель случайной функции X(Θi), Θi∈Θ в виде моментной функции задается отношением m j1 ,j2 ,...,jn (Θ1 ,Θ 2 ,...,Θn ) =
= M{[X(Θ1 )]j1 ,[ X(Θ2 )]j2 ,...,[ X(Θn )]jn } , если математическое ожидание в правой части равенства имеет смысл при всех Θi∈Θ, i=1,n. Величина q=j1+j2+...+jn называется порядком моментной функции. Если известны характеристические функции конечномерного распределения, то моментные функции с целочисленными индексами могут быть найдены с помощью дифференцирования
m j1 ,j2 ,...,jn (Θ1 ,Θ 2 ,...,Θn ) = (-1)q
djΘ1 ,Θ2 ,...,Θn (u1 ,u 2 ,...,un ) du1j1 ,du 2j2 ,...,dunjn
при u1=u1=…=un=0. Кроме моментных функций в качестве моделей часто рассматривают центральные моменты функции. Центрированной случайной величиной называется o
случайная величина X = X - M(X) . Для непрерывной случайной величины центральная моментная функция k–го порядка определяется по формуле +∞
M[Xk ] =
∫ (x - M[X]) f(x)dx . k
-∞
Для многомерной случайной величины центральные моменты функции определятся по формуле
53
m j1 ,j2 ,...,jn (Θ1 ,Θ2 ,...,Θn ) =
= M{[X(Θ1 ) - M[Θ1 ]]j1 ,...,[ X(Θ n ) - M[Θ n ]]jn } , которые являются моментными функциями центрированной случайной функции многих параметров. Среди моментных функций особое значение имеют функции первых двух порядков, которые могут иметь обозначения: m(Θ)=m1(Θ1)=MX(Θ), R1(Θ1,Θ2)=m1(Θ1,Θ2)=M{[X(Θ1)–m(Θ2)][X(Θ2)–m(Θ2)]}. Функции m(Θ) называются средним значением или математическим ожиданием, а R1(Θ1,Θ2) - корреляционной функцией. При Θ1=Θ2=Θ корреляционная функция дает дисперсию σ(Θ) величины ε(Θ), R1(Θ1,Θ2)=σ2(Θ). Величину r(Θ 1 , Θ 2 ) =
R(Θ 1 , Θ 2 ) R(Θ 1 , Θ 2 ) = σ(Θ 1 ), σ(Θ 2 ) R(Θ 1 , Θ 2 )R(Θ 1 , Θ 2 )
называют коэффициентом корреляции случайных величин X(Θ1) и X(Θ2).
3.2. Классификация моделей случайных процессов Случайные процессы делятся на следующие широкие классы: гауссовы процессы; процессы с независимыми приращениями; стационарные в широком смысле; марковские процессы. 3.2.1. Модели на базе гауссовых случайных функций. Важную роль во многих прикладных вопросах играют случайные функции, конечномерные распределения которых являются гауссовыми (нормальными). Определение многомерного гауссова распределения следующее.
54
Определение. Случайный вектор X=(X1,X,...,Xn) имеет гауссово (нормальное) распределение, если характеристическая функция распределения представима в виде ϕ(u)=M{eхр[j(u,x)]}=eхр[j(m,u)-0,5R(u,u)], где m=(m1,m2,…,mn), u=(u1,u2,…,un) - векторы, R неотрицательно-определенная вещественная симметричная матрица, R=||rij||, i,j=1,n. Здесь (α,β) обозначает скалярное произведение векторов α и β, так, что n
n
k=1
i=1 j=1
(m,u) = ∑ mk uk , R(u,u) = ∑ riju iu j . 3.2.2. Модель процессов с независимыми приращениями. Пусть T - конечный отрезок T=[0,a] или T=[0,∞]. Определение. Случайный процесс {X(t), t∈T} со значениями в евклидовом пространстве Rn называется процессом с независимыми приращениями, если для любых n, таких, что 0
55 теоретико-вероятностные характеристики которых не изменяются со временем. Пусть T=[0,a] или T=[0,∞). Определение. Модель случайного процесса (в широком смысле) {X(t), t∈T} со значениями в Rn называется стационарной, если для любого n и любых t1,t2,...,tт, таких, что tk+t∈T, (k=1,n), совместное распределение случайных векторов, описывающих случайный процесс X(t1+t),...,X(tn+t), не зависит от t. Имеются задачи, относящиеся к теории стационарных процессов, решение которых может быть выражено через моменты первого и второго порядков рассматриваемых процессов, т.е. многие задачи можно решать, находя моменты первого и второго порядков. Целесообразно определить класс процессов, моменты первого и второго порядков которых обладают свойствами стационарности. Определение. Случайный процесс X(t), t>0 со значениями в пространстве Rn называют процессом, стационарным в широком смысле, если M[X(t)]2<∞ и M[X(t)]=m=сonst, M[X(t)-m][X(s)-m]=R(t-s), (t>s), где R(t) - непрерывная матричная функция. Функцию R(t) называют корреляционной (матричной) функцией процесса X(t). В качестве примера стационарных в широком смысле процессов можно рассмотреть колебания со случайными параметрами.
3.3. Модели марковских процессов Наибольшее распространение в теории систем, как вероятностная схема описания, получили марковские процессы, представляющие собой типичную вероятностную модель «без последействия». Представим себе систему, которая может находиться в разных состояниях. Возможные состояния образуют
56 множество Х, называемое фазовым пространством. Пусть система эволюционирует во времени. Состояние системы в момент времени t обозначим через хt. Если хt∈B, где B∈Х, то будем говорить, что система в момент времени t находится во множестве B. Предположим, что эволюция системы носит стохастический характер, т.е. состояние системы в момент времени t не определяется однозначно через состояние системы в моменты времени s, предшествующие t, где s
Соотношение (3.4) называется уравнением Колмогорова−Чепмена. Это уравнение определяет модель марковского процесса.
57 Пусть {Х,B}-некоторое измеримое пространство. Функцию Р(х,B), х∈Х, B∈B, удовлетворяющую условиям: а) Р(х,B) при фиксированном х является мерой на B и Р(х,Х)=1; б) при фиксированном B Р(х,B) является B - измеримой функцией от х будем называть стохастическим ядром. Пусть I - некоторый конечный или бесконечный полуинтервал (отрезок). Семейство стохастических ядер {Рst(х,B)=Р(s,х,t,B), s
58 случайный положительный отрезок времени, после чего скачком случайно попадает в другую точку фазового пространства. Процессы с дискретным вмешательством случая. Эти процессы моделируют динамическую систему, траектории которой в случайные моменты времени терпят разрывы первого рода со случайными скачками. Диффузионные процессы. Так называют процессы в конечномерных линейных пространствах, которые на малых промежутках времени ведут себя аналогично процессу броуновского движения. Марковские процессы в конечномерном пространстве, аппроксимируемые на малых промежутках времени произвольным процессом с независимыми приращениям.
59
4. ИМИТАЦИЯ СЛУЧАЙНЫХ СОБЫТИЙ 4.1. Понятие статистического моделирования При определении методов статистического моделирования применяют название «метод Монте-Карло». Определение, которое характеризует этот метод достаточно точно и полно, не существует. Известно, что этот метод всегда связан со случайными испытаниями. Все расчеты по методу Монте-Карло заключаются в случайной выборке из некоторой «генеральной совокупности» в соответствии с определенными вероятностными законами. Метод МонтеКарло появился в 1949 году. В этом году вышла в свет статья «The Monte Carlo method» американских авторов Metropolis N. и Ulam S. Создателями этого метода считают математиков Дж. Неймана и С. Улама [10]. В Советском Союзе первые статьи о методе МонтеКарло были опубликованы в 1955-1956 годах. Однако следует отметить, что теоретическая основа метода была известна давно, и некоторые задачи статистики рассчитывались с помощью случайных выборок, что соответствовало идее метода Монте-Карло. Но до появления ЭВМ метод не мог найти широкого применения, т.к. моделирование случайных величин вручную представляет собой трудоемкую работу. Название «Монте-Карло» происходит от города МонтеКарло в княжестве Монако, знаменитого своим игорным домом, т.к. рулетка служила простейшим механическим прибором для получения случайных величин. Первоначально метод успешно применялся для решения задач ядерной физики - переноса нейтронов, расчета критичности ядерных реакторов, задач защиты от
60 излучений и других. Широкое применение данного метода при решении различных задач началось с развития вычислительной техники, особенно при появлении персональных ЭВМ. Метод Монте-Карло имеет две отличительные особенности. Первая заключается в простоте структуры вычислительного алгоритма - многократного повторения одного случайного испытания. Так как испытания являются независимыми опытами, то результаты всех испытаний усредняются. В связи с этим метод иногда называют методом статистических испытаний. Вторая особенность состоит в зависимости точности метода от числа испытаний N. Метод достаточно эффективен при решении задач, не требующих высокой точности, например, в пределах 5-10%. Метод статистического моделирования позволяет решать как детерминированные, так и вероятностные задачи [11].
4.2. Датчики случайных чисел Для имитации случайных событий необходим некоторый эталон, т.е. то, с чем можно что-то сравнить. Известно, что наука существует там, где есть измерения. Отсутствие измерений приводит к схоластике, лженаукам. В мире существуют эталоны для измерения времени, расстояния, веса и прочее. Такой же эталон должен существовать и в ЭВМ для «измерения» вероятности случайного события. Начало созданию подобного эталона было положено в шестидесятых – семидесятых годах прошлого столетия. Создавались специальные устройства – датчики (генераторы) случайных чисел или случайных величин, авторы которых получали авторские свидетельства на эти устройства. Ученые издавали статьи, книги, посвященные этой проблеме. Однако существовало
61 непреодолимое препятствие – нестабильность электронных элементов, на которых осуществлялась реализация датчиков случайных чисел. Из-за нестабильности эти датчики необходимо было постоянно настраивать. Появление высокопроизводительной вычислительной техники и развитых языков программирования упростило задачу создания эталонов. Датчики или генераторы случайных чисел стали создавать программным путем. В библиотеках языков программирования присутствуют подпрограммы (процедуры) с названиями random, randomizir, randu и прочее, которые позволяют получать на ЭВМ псевдослучайные числа, квазиравновероятно распределенные в интервале [0, 1]. Строго говоря, для формирования случайных событий с различными функциями распределения в ЭВМ необходимо иметь, как эталон, совокупность случайных чисел с равномерным законом распределения. Эта совокупность случайных чисел будет эталоном, т.е. базовой последовательностью случайных чисел. На рис. 4.1 показан вид функции распределения случайных чисел, равномерно (равновероятно) распределенных в интервале [0, 1]. F(x) 1
х 0
1
Рис. 4.1
62 Функция распределения вероятностей случайных чисел, равномерно распределенных в интервале [0, 1], имеет вид x < 0; ⎧ 0, ⎪ F( x ) = ⎨ x, 0 ≤ x < 1; ⎪ 1, x > 1. ⎩
(4.1)
Математическое ожидание (генеральное среднее) случайных чисел, равномерно распределенных в интервале [0, 1], будет равно M[х]=0,5, а дисперсия D[х]=1/12. Однако применение возможностей ЭВМ не позволяет теоретически получить последовательность случайных чисел с равномерным распределением. Действительно, любое число в ЭВМ формируется в регистре. Если число разрядов регистра ЭВМ равно k, то число Х в десятеричной системе счисления будет сформировано согласно формуле k −1
X = ∑α j 2j ,
(4.2)
j= 0
в которой коэффициенты αi∈{0, 1} составляют двоичный код αk-1,αk,…,α2,α1,α0 случайного десятеричного числа Х. Десятеричное число Х будет случайным и будет иметь равномерное распределение, если коэффициенты αi=0 с вероятностью рi=0,5 или αi=1 с вероятностью рi=1-0,5. Тогда числа Х={i/(2k-1)} принимают значения i/(2k-1) (i=0,1,2,...,2k-1) с постоянной вероятностью Р=1/2k. Но полученные при этих условиях случайные числа Х будут иметь не равномерное, а квазиравномерное равновероятностное распределение в интервале [0,1], вид которого показан на рис. 4.2, что связано с дискретностью чисел Х. Математическое ожидание и дисперсия для данного распределения определяются соотношениями: 2k −1 i 1 ⋅ = 0,5, M[x] = ∑ k k i =0 2 −1 2
(4.3)
63 D[x] =
2k −1
1 1 1 2k + 1 . = − )2 ⋅ k 2 2k 12 2k − 1 i =0 2 − 1
∑
(
i
(4.4)
F(x) 1
х 0
1
Рис. 4.2 Таким образом, математическое ожидание квазиравномерного равновероятностного распределения в интервале [0,1] M[х] точно совпадает с генеральным средним для равномерного распределения в интервале [0,1], а дисперсия при kÆ∞ асимптотически стремится к дисперсии для равномерного распределения, равной 1/12. Практически при k>15 обеспечивается требуемая точность в имитационных исследованиях. В ЭВМ нет генератора случайных чисел αi, принимающих значения либо 0, либо 1 с вероятностью Р=1/2, поэтому аппаратная реализация датчика не имеет смысла. Датчики случайных чисел разрабатывают в виде программ, поэтому случайные числа, получаемые на ЭВМ, не являются случайными. Эти числа формируются на основе детерминированных преобразований в виде алгоритмов, поэтому их называют псевдослучайными. Так
64 как алгоритм представляет собой строгую последовательность действий, то последовательность, получаемых псевдослучайных, квазиравномерно распределенных в интервале [0,1] чисел, имеет период Р, например: Х0, Х1, Х2, Х3,...,ХР-2, ХР-1, ХР, Х0, Х1, Х2, Х3,... Датчики псевдослучайных, квазиравномерно распределенных в интервале [0,1] чисел создают таким образом, чтобы период Р был как можно более большим и превосходил в несколько раз число испытаний (опытов), производимых на ЭВМ в имитационной программе. Если при моделировании число обращений к программному датчику случайных чисел оказывается меньше периода, измеряемого числом различных случайных чисел, то такая периодичность программного датчика не оказывает существенного влияния на результаты моделирования. Рассмотрим, каким образом можно создавать алгоритмы для получения псевдослучайных, квазиравномерно распределенных чисел. Методы получения псевдослучайных квазиравномерных чисел программным путем делятся на две группы: а) аналитические; б) методы перемешивания. При использовании аналитических методов в псевдослучайной последовательности Х0, Х1, Х2, …, Хr-1 очередное число Хr получают с помощью некоторого выбранного рекуррентного соотношения ϕ, аргументами которого являются одно или несколько предыдущих чисел последовательности, т.е. Хr=ϕ(Хr-1, Хr-2,..., Х0). Самым простым примером может служить метод вычетов, в котором для получения числа Хi+1 используется следующее рекуррентное соотношение: Хi+1=bХi(mod M), (4.5) где выражение bХi(mod M) означает остаток от деления произведения bХi на число M; Хi+1 - очередное случайное
65 число; Хi - предыдущее случайное число; b - некоторая константа; M - число, определяющее значение получаемых случайных чисел. Рассмотрим пример. Пусть очередное число Хi+1 определяется по формуле ⎤ ⎛ cos x ⎞ ⎡ X i +1 = ⎥ A⎜ − Bxi i ⎟ + x i2 ⎢ , (4.6) ⎠ ⎦ ⎝e ⎣ где А и В заданные константы, ]Хi+1[ - операция взятия мантиссы числа Хi+1. На рис. 4.3 приведен алгоритм генератора псевдослучайных, квазиравномерно распределенных чисел в интервале [0,1]. Начало 1
Ввод T=0, TZ, Х[T], А, В 2
D=cosX[Т]
3
E=eB×X[T]
4
F=D/E
5 6 7
G=X[T]2 X[T+1]=]A×F+G[ 9
Вывод X[T+1] 8
1 T≤TZ 0 Конец
Рис. 4.3
Т=Т+1
66 В блоке 1 алгоритма осуществляется задание начального такта моделирования Т=0, заданное число тактов моделирования (генерации) TZ, равное количеству чисел Х, которое должно быть получено от датчика. В блоках 2-6 вычисляется очередное число Х[T+1]. В блоке 8 проверяется условие генерации датчиком заданного числа чисел Х. Если условие Т≤TZ выполняется, то наращивается в блоке 9 такт моделирования. Таким образом, генератор псевдослучайных, квазиравномерно распределенных чисел может быть реализован согласно заданной формуле (4.6). При применении методов перемешивания очередное число псевдослучайной последовательности получается путем хаотического перемешивания разрядов предыдущего случайного числа с помощью операций сдвига, специального сложения и других различных арифметических операций. В качестве начальной константы Х0 для формирования последовательностей обычно берут иррациональные числа ( 3 3 , 2 2 , 5 5 ). На рис. 4.4 показан пример метода перемешивания. Число Хi вначале циклически сдвигается на три разряда влево (K=3), а затем полученное после этого сдвига число поразрядно суммируется по модулю два с начальным числом Хi. Получаем двоичное число Хi*. Затем это число циклически сдвигается на два разряда вправо (L=2) и полученный результат суммируется поразрядно по модулю два с числом Хi*. В результате получим последующее число псевдослучайной последовательности Хi+1. Приведенная процедура легко алгоритмизируется, а затем по алгоритму составляется программа, представляющая собой датчик псевдослучайных, квазиравномерно распределенных чисел.
67 Хi
1
1
0
0
1
1
0
1
Сдвиг на три разряда влево
⊕ 0
1
1
0
1
1
1
0
1
0
1
0
0
0
1
1
= Хi * ⊕
Сдвиг на два разряда вправо 1
1
1
0
1
0
0
0
0
1
0
0
1
0
1
1
= Хi+1
Рис. 4.4 Для того чтобы числа были распределены в интервале [0,1], необходимо провести соответствующее нормирование, например, считать, что получаемые числа это дробная часть. На рис. 4.5 приведен алгоритм датчика псевдослучайных, квазиравномерно распределенных чисел, реализованного согласно примеру метода перемешивания. В блоке 1 алгоритма осуществляется ввод начального такта моделирования Т=0, заданное число тактов моделирования (генерации) TZ, начального массива Х0[I] размерностью IM, значение IM, а также K - число сдвигов влево и L - число сдвигов вправо. В массиве Х0[I] записана начальная константа Х0. В блоках 3-6 определяется массив ХK[I], полученный из массива Х0[I] в результате циклического сдвига его элементов на K разрядов влево. Например, если IM=7, а K=3, то при I=0 (блок 4) ХK[3]=Х0[0] (блок 5), при I=1 ХK[4]=Х0[1], при I=2 ХK[5]=Х0[2], при I=3 ХK[6]=Х0[3], при I=4 ХK[0]=Х0[4],
68 при I=5 ХK[1]=Х0[5], при I=6 ХK[2]=Х0[6]. Результатом операции (I+K)modIM будет остаток от деления числа I+K на число IM. Начало 1
Ввод T=0, TZ, Х0[I], IM, K, L
2
13
XL[I]= +XM[(I+L)modIM]
1
I=I+1 XK[(I+K)modIM]= =X0[I] 6
7
1
1
I=I+1 XM[I]=X0[I]⊕XK[I] 10
I
19
0
20 1
XT[I]=XM[I]⊕ ⊕XL[I] 18
I
0
Вывод массива XT[I] X0[I]=XT[I] 21
T
Конец
Рис. 4.5
0
I=I+1
I
I
I=-1
16
I=-1
8
14
15
0
9
I=I+1
I=-1
4
1
I=-1
12
T=T+1
3
5
11
0
69 Затем в блоках 7-10 алгоритма происходит поразрядное суммирование по модулю два элементов массивов ХK[I] и Х0[I]. В результате будет получен массив ХМ[I]. В блоках 11-14 определяется массив ХL[I], полученный из массива ХM[I] в результате циклического сдвига его элементов на L разрядов вправо. Например, при L=2, при I=0 (блок 12) ХL[0]=ХM[2] (блок 13), при I=1 ХL[1]=ХM[3], при I=2 ХL[2]=ХM[4], при I=3 ХL[3]=ХM[5], при I=4 ХL[4]=ХM[6], при I=5 ХL[5]=ХM[0], при I=6 ХL[6]=ХM[1]. Затем в блоках 15-18 алгоритма происходит поразрядное суммирование по модулю два элементов массивов ХМ[I] и ХL[I]. В результате будет получен массив ХT[I], элементы которого представляют собой двоичный код мантиссы искомого псевдослучайного, квазиравномерно распределенного в интервале [0,1] числа. В блоке 19 элементы массива ХT[I] присваиваются элементам массива Х0[I]. В блоке 21 выполняется условие генерации датчиком заданного числа чисел Х. Насколько близким к теоретическому равномерному распределению является программный датчик псевдослучайных, квазиравномерно распределенных чисел проверяют на основе анализа результатов статистической проверки.
4.3. Проверочные тесты Программная реализация датчика псевдослучайных, квазиравномерно распределенных чисел может быть получена любым программистом на основе разработанного им алгоритма с применением либо аналитических методов, либо методов перемешивания. Качество датчика необходимо проверить. Осуществляются проверки путем
70 применения проверочных тестов. Рассмотрим проверочные тесты. Тест частот. Отрезок [0,1] разбивается на m (обычно 1020) равных интервалов, как это показано на рис. 4.6. n1 0
1
n2 2
n3
….
3
nm m
1
Рис. 4.6 Датчик псевдослучайных, квазиравномерно распределенных чисел генерирует N величин, каждая из которых принадлежит одному из m отрезков. В результате проведения N испытаний будут получены эмпирические частоты ni, представляющие собой число попаданий чисел датчика в интервал i, i= 1, m . Деление частот ni на число опытов N даст эмпирические частоты. Если рассматривать теоретическое равномерное распределение случайной величины на отрезке [0,1], то теоретические вероятности попадания в каждый из m отрезков одинаковы и равны значению 1/m. Для проверки согласия датчика псевдослучайных, квазиравномерно распределенных чисел и теоретического равномерного распределения полученные эмпирические m частости ni/N, (i= 1, m ), ( ∑ n = N) сравнивают с i i =1 теоретическими вероятностями 1/m. Согласие проверяется по критерию χ2, т.к. случайная величина χ2 =
k (n − Np ) 2 ∑ i Np i i i =1
(4.7)
подчиняется распределению χ2 с (m-1) степенями свободы, где N - объем выборки (число опытов).
71 На рис. 4.7 приведен алгоритм теста частот. Рассмотрим его работу. Начало 1
WWOD
2
N=N+1
3
CEN(X)
4 5
I=0, A=0 I=I+1, A=A+1/m 6
K[I]=K[I]+1 8
9 10
X≤A 1
7 1
0
N
Рис. 4.7 В подпрограмме WWOD осуществляется ввод исходных данных для моделирования: N=0 - начальный такт
72 моделирования; NZ - заданное число тактов моделирования (число опытов); m – число интервалов разбиения отрезка [0,1]. В подпрограмме WWOD также осуществляется обнуление необходимых для работы идентификаторов и счетчиков. В блоке 2 происходит наращивание тактов моделирования. В блоке 3 датчиком случайных чисел генерируется число Х. Затем это число Х сравнивается с правыми границами интервалов разбиения отрезка [0,1]. Для этого в блоках 4 - 6 организован цикл по переменной I и сравнение числа Х с числом А, которое последовательно принимает значения: 1/m, 2/m, 3/m, …, m/m. При выполнении условия Х≤A содержимое соответствующего счетчика увеличивается на единицу (см. блок 7). В блоке 8 осуществляются проверки выполнения числа опытов. Если датчик псевдослучайных, квазиравномерно распределенных чисел выполнил генерацию заданного числа опытов NZ, то в блоке 9 происходит вычисление случайной величины χ2. В подпрограмме WIWOD (см. блок 10) на экран дисплея выводятся значения случайной величины χ2, счетчиков K[I], в которых подсчитаны частоты ni, а также могут быть выведены гистограммы эмпирических частостей * Pi =ni/N=K[I]/NZ, как это показано на рис. 4.8. На рис. 4.8 приведены гистограммы для заданного числа опытов NZ =10000. Очевидно, что форма гистограммы частот должна совпадать с формой гистограммы частостей, т.к. эмпирические частости определяются по формуле Pi* =K[I]/NZ.
73 Случайная величина χ2=12,68 Гистограмма частот 1050 1035
1030 1020
1020 985
980
970
960
950
K[1]
K[2]
K[3]
K[4]
K[5]
K[6]
K[7]
K[8]
K[9] K[10]
Гистограмма частостей 0,105 0,1035
0,103 0,102
0,102 0,985
0,098
0,97
0,96
0,95
Р1*
Р2*
Р3*
Р4*
Р5*
Р6*
Р7*
Р8*
Р9*
Р10*
Рис. 4.8
Тесты пар частот. Пусть датчик псевдослучайных, квазиравномерно распределенных чисел генерирует последовательность чисел Х1,Х2,...,ХN. Рассматриваются последовательные пары случайных чисел. Квадрат со сторонами [0,1] на [0,1] делится на m2 частей, как это показано на рис. 4.9. Если пары образовать в виде (Х1,Х2), (Х3,Х4)..., то каждая пара случайно попадает в одно из m2 делений квадратной таблицы. Пары (Х1,Х2), (Х3,Х4)... взаимно независимы и результат их попадания в одно из m2 делений
74 квадратной таблицы оценивается эмпирической частотой nij. 1 nm1
m
nm2
nm3
….
nmm
….
….
….
….
….
3
n31
n32
n33
….
n3m
2
n21
n22
n23
….
n2m
n11
n12
n13
….
n1m
1 0
1
2
3
m
1
Рис. 4.9 Если рассматривать теоретическое равномерное распределение случайной величины на отрезке [0,1] и образование из чисел таких же пар, то теоретические вероятности попадания в каждый из m2 делений квадратной таблицы одинаковы и равны значению 1/m2. Для проверки согласия по данному тесту пар частот датчика псевдослучайных, квазиравномерно распределенных чисел и теоретического равномерного распределения полученные эмпирические частости 2nij/N, (i,j= 1, m ),
m
(
∑
i, j=1
n
ij
=
N ) 2
сравнивают
с
теоретическими
вероятностями 1/m2. Согласие проверяется по критерию χ2, т.к. случайная величина
75 m χ 2 = ( 2m 2 N ) ∑ (n − N (2m 2 )) 2 ij i, j=1
(4.8)
распределена по закону χ2 с (m2-m) степенями свободы, где N/2 - объем выборки пар случайных величин, генерированных датчиком псевдослучайных, квазиравномерно распределенных чисел. На рис. 4.10 приведен алгоритм для рассмотренного теста пар частот. Начало 1
WWOD
2
CEN(X)
8
N=N+1
3
J=0, B=0
9
J=J+1, B=B+1/m
CEN(X)
0
10
4 5
7
X≤B
I=0, A=0
1 11
I=I+1, A=A+1/m 6
0
1
X≤A 1 14
13
WIWOD
K[I,J]=K[I,J]+1 12
N
Конец
Рис. 4.10 В подпрограмме WWOD осуществляется ввод исходных данных для моделирования: - N=0 - начальный такт моделирования;
76 - NZ - заданное число тактов моделирования; - m - число интервалов разбиения отрезка [0,1], происходит обнуление необходимых для работы идентификаторов и счетчиков. В блоке 2 происходит наращивание тактов моделирования. В блоке 3 датчиком случайных чисел генерируется число Х. Затем в блоках 4 – 6 определяется индекс I. В блоке 7 датчиком случайных чисел генерируется второе число Х (тем самым образована пара (Х1,Х2)). В блоках 8 – 10 определяется индекс J. В блоке 11 в счетчиках K[I,J] осуществляется подсчет частот попадания случайных пар (Хk,Хр) в соответствующие деления квадратной таблицы. В блоке 12 осуществляются проверки выполнения числа опытов. Если датчик псевдослучайных, квазиравномерно распределенных чисел выполнил генерацию заданного числа опытов NZ/2, то в блоке 13 происходит вычисление случайной величины χ2. В подпрограмме WIWOD (см. блок 14) на экран дисплея выводятся значения случайной величины χ2, счетчиков K[I,J], значения эмпирических частостей Pij* =2nij/N=2K[I,J]/NZ. Генерируемая выборка в данном методе используется неэффективно. Можно пары образовать в следующем виде (Х1,Х2),(Х2,Х3),(Х3,Х4),... . Этот метод образования пар более эффективен, т.к. полнее использует выборку чисел, но из-за зависимостей пар случайная величина χ2 определится по формуле 2 2 m2 m N m m N ], 2 χ = ∑ (nij − 2 ) − N ∑ (ni − m ) N m i,j=1 i =1
где n = i
m
∑ nij .
j=1
(4.9)
77 будет определена χ2 Случайная величина распределением χ2 с (m2-m) степенями свободы. На рис. 4.11 приведен алгоритм для рассмотренного теста пар частот с эффективным использованием выборки. Начало 1
WWOD
2
9
J=0, B=0 J=J+1, B=B+1/m
I=0, A=0 10 I=I+1, A=A+1/m 5
0 X≤B 1
0
11
X≤A
K[I,J]=K[I,J]+1
12
1
1 6
CEN(X)
8
CEN(X)
3 4
7
N=N+1 14 15
I=J 13
N
Рис. 4.11
78 В данном алгоритме в блоке 2 генрируется число Х1, а затем в блоках 3 - 5 определяется индекс I. В блоке 6 происходит наращивание тактов моделирования. В блоке 7 датчиком случайных чисел генерируется число Х. В блоках 8 – 10 определяется индекс J (тем самым образована пара (Х1,Х2)). В блоке 11 в счетчиках K[I,J] осуществляется подсчет частот попадания случайных пар в деления квадратной таблицы. В блоке 12 индексу I присваивается значение индекса J. При N=2 будет образована пара (Х2,Х3) и т.д.
4.4. Имитация случайных событий Пусть события S1, S2,..., Sm образуют полную группу несовместимых событий, каждое из которых может произойти с вероятностью Рi, причем
m
∑ Рi = 1 .
Это
i =1
означает, что в результате одного опыта может произойти лишь одно из событий S1, S2,..., Sm. Рассмотрим метод и алгоритм имитации данных случайных событий. Разбиваем отрезок [0,1] на m частей длиной Р1,Р2,...,Рm, при этом точки деления отрезка имеют следующие координаты: A = 0; A = P ; A = P + P ; ..., A = 0 1 1 2 1 2 m
m
∑P
i =1
i
,
как это показано на рис. 4.12. Р1 0
Р2 А1
….
Р3 А2
А3
Рис. 4.12
Рm Аm
1
79 Имитация осуществляется следующим образом. Пусть теперь Х - очередное число от датчика псевдослучайных, квазиравномерно распределенных чисел, который далее для упрощения будем называть генератором случайных чисел. Если число генератора Аk-1≤Х<Аk, то считаем, что произошло событие Sk. Действительно Р(Sk)=Р(Ak-1<Х
6
WWOD
2
7
N=N+1
3
0
X≤A2
8
1
Событие S2 K[2]=K[2]+1 9
5
X≤A1
0
Событие S3 K[3]=K[3]+1
10
1 Событие S1 K[1]=K[1]+1
11
X≤A1 1
Событие S4 K[4]=K[4]+1
12 1
13
N
Событие S5 K[5]=K[5]+1
0 Конец
Рис. 4.13
0
1
CEN(X)
4
X≤A1
0
80 На каждом такте моделирования случайное число Х сравнивается со значениями А1, А2, А3, А4, А5 в блоках 4, 6, 8, 10 соответственно. Если случайное число Х≤А1, то произошло событие S1 и содержимое счетчика K[1] увеличивается на единицу. Если случайное число Х≤А2, то произошло событие S2 и содержимое счетчика K[2] увеличивается на единицу и т.д. События S1, S2,..., Sm могут образовывать неполную группу несовместимых событий. Если событие Si происходит с вероятностью Рi, то для этих событий m
m Р ≠ 1 , ∑ i ∑ Рi < 1. i =1 i =1
Для имитации событий S1, S2,..., Sm, образовывающих неполную группу, необходимо ввести дополнительное событие S0, с которым связано непоявление ни одного из вышеперечисленных событий. Вероятность события S0 определится по формуле P0 = 1 −
m
∑ Рi .
После введения
i =1
события S0 имитация неполной группы событий осуществляется по аналогии с рассмотренной выше имитацией событий, образующих полную группу несовместимых событий. Рассмотрим ситуацию, когда осуществляется имитация зависимых событий. Событие В будет зависеть от события А, если после наступления события А событие В может произойти с условной вероятность Р(В/А). Метод и алгоритм имитации рассмотрим на примере. Пусть события S1, S2, S3, S4 образуют полную группу независимых событий. Если происходит событие S1, то с вероятностью Р(U1/S1)=Р(11) может произойти событие U1. Если происходит событие S2, то с вероятностью Р(H1/S2)=Р(12) может произойти событие H1 и с
81 вероятностью Р(H2/S2)=Р(22) может произойти событие H2, причем события H1 и H2 образуют полную группу событий. Если происходит событие S4, то с вероятностью Р(D1/S4)=Р(14) может произойти событие D1. На рис. 4.14 приведен граф событий. S1
Р11
U1
S2
Р12
H1
S3
Р22
H2
S4
Р14 D1
Рис. 4.14 На рис. 4.15 приведена схема алгоритма имитации рассмотренной системы случайных событий. После генерации случайного числа Х (см. блок 3) в блоке 4 проверяется условие появления события А1. Если событие А1 произошло, то содержимое счетчика KS[1] увеличивается на единицу (см. блок 5) и генерируется случайное число Х (см. блок 6). В блоке 7 проверяется условие появления события U1. Если событие U1 произошло, то содержимое счетчика KU[1] увеличивается на единицу (см. блок 8). Если событие А1 не произошло, то в алгоритме выполняется переход от блока 4 к блоку 9 и проверяется условие появления события А2. Если событие А2 произошло, то содержимое счетчика KS[2] увеличивается на единицу (см. блок 10) и генерируется случайное число Х (см. блок 11). В блоке 12 проверяется условие появления события H1. Если событие H1 произошло, то содержимое счетчика KH[1] увеличивается на единицу (см. блок 13). Если событие H1 не произошло, то считается, что произошло
82 событие H2, т.к. события H1 и H2 составляют полную группу. Содержимое счетчика KH[2] увеличивается на единицу (см. блок 14). Начало 9
1 2
N=N+1
3
10
0
X≤A1
Событие S1 KS[1]=KS1[1]+1 6
8
16
Событие S3 KS[3]=KS[3]+1
0
X≤P12
0
17
Событие S4 KS[4]=KS[4]+1
1
Событие H1 KH[1]=KH[1]+1
X≤P11
18
CEN(X)
0 19
14
Событие H1 KH[2]=KH[2]+1
1
20
21
X≤P14 1
Событие D1 KD[1]=KD[1]+1
Событие U1 KU[1]=KU[1]+1
1
0
X≤A3 1
CEN(X)
13
CEN(X) 7
11
12
1
5
15
1
Событие S2 KS[2]=KS[2]+1
CEN(X) 4
0
X≤A2
WWOD
N
0 Конец
Рис. 4.15 Если событие А2 не произошло, то в алгоритме выполняется переход от блока 9 к блоку 15 и проверяется условие появления события А3. Если событие А3 произошло, то содержимое счетчика KS[3] увеличивается на единицу (см. блок 16).
83 Если событие А3 не произошло, то считается, что произошло событие А4. Содержимое счетчика KS[4] увеличивается на единицу (см. блок 17) и генерируется случайное число Х (см. блок 18). В блоке 19 проверяется условие появления события D1. Если событие D1 произошло, то содержимое счетчика KD[1] увеличивается на единицу (см. блок 20). В блоке 21 осуществляется контроль выполнения цикла по переменной N.
4.5. Имитация непрерывных случайных величин Если событие Х принимает значения в некоторой области непрерывных величин, то для аналитического моделирования непрерывных событий применяют функцию распределения вероятностей F(Х<х) или плотность распределения вероятностей f(х). Функция распределения вероятностей F(Х<х) определяет вероятность того, что событие (случайная величина) Х меньше либо равна некоторому значению х, т.е. F(Х<х)=Р{Х<х}. Вид функции распределения вероятностей приведен на рис. 4.16. Это монотонно возрастающая (неубывающая) функция в диапазоне от нуля до единицы, не имеющая разрывов на интервале значений от +∞ до +∞. Плотность распределения вероятностей f(х), называемая еще дифференцированным распределением вероятностей, определяется по формуле x
dF( x) , причем F( x ) = ∫ f ( x )dx . f ( x) = dx −∞
84 F(x) 1
x
Рис. 4.16 Гипотетический вид плотности вероятностей f(х) приведен на рис. 4.17.
распределения
f(x)
x
Рис. 4.17 Известны функции и плотности распределения вероятностей, имеющие аналитическое задание, например: - экспоненциальное распределение F(х)=1-e-λх; - распределение Пуассона, определяющее вероятность появления k событий за время t по формуле (λt ) k − λt , Pk (t ) = e k! где λ - математическое ожидание;
85 - распределение Эрланга r-го порядка, плотность распределения вероятностей для которого определится по формуле a r (t ) =
(λt ) r − λt ; e λr!
- нормальное (гауссово) распределение, плотность распределения вероятностей для которого определится по формуле f ( x) =
1 σ 2π !
− e
(x − m) 2 2σ 2
,
где m – математическое ожидание, σ - среднеквадратичное отклонение, а также другие распределения. Задача имитации непрерывных случайных величин, описываемых тем или иным аналитическим распределением вероятностей, основана на преобразованиях равномерно распределенных случайных чисел в числа с заданным законом распределения. 4.5.1. Метод обратной функции. Пусть случайная величина Х определена функцией распределения вероятностей F(х) и плотностью распределения вероятностей f(х). Если Р - случайная величина, равномерно распределенная на отрезке [0,1], то случайная величина Х может быть получена из решения следующего уравнения:
X P=
∫ f(x)dx .
(4.10)
−∞
На рис. 4.18 приведена иллюстрация метода обратных функций. Как следует из рис. 4.18, выполняется как бы обратное преобразование вероятности Р в случайную
86 величину Х, поэтому данный метод наименование метода обратных функций.
и
получил
f(x) 1
P
x
X
Рис. 4.18 Метод обратных функций позволяет вывести правило генерирования случайной величины, имеющей произвольную функцию распределения вероятностей F(х) и плотность распределения вероятностей f(х): - вырабатывается датчиком случайной равномерной последовательности случайное число Р; - случайная величина (случайное число) Х, имеющее распределение f(х), находится из решения уравнения (4.10). Рассмотрим пример. Пусть случайная величина Х определена функцией распределения вероятностей F(х)=1-e-λх. Плотность распределения вероятностей f(х)= λe-λх. При известной вероятности Р значение случайной величины Х определится по формуле X P = ∫ λe -λx dx = 1 -e -λX . 0
87 Таким образом, получили трансцендентное уравнение Р=1-e-λХ с одним неизвестным Х. Решение этого уравнения: X=
1 ln(1 − P ) . −λ
В силу того, что Р – число, равномерно распределенное на отрезке [0,1], то и 1-Р – число, равномерно распределенное на отрезке [0,1], поэтому случайную величину Х находят по формуле X=
1 ln( P ) . −λ
На рис. 4.19 приведена схема алгоритма обратных функций для рассмотренного случая. Начало 1
WWOD
2
N=N+1
3 4
CEN(Р) X=-(1/λ)ln(P)
5 1
STAT 6
N
7
WIWOD Конец
Рис. 4.19
метода
88 Подпрограммы WWOD и WIWOD предназначены для реализации интерфейса пользователя и инициализации программного модуля. Блоками 2 и 6 организован цикл по переменной N. В подпрограмме GEN генерируется число Р, равномерно распределенное на отрезке [0,1]. В блоке 4 определяется случайная величина Х, определенная функцией распределения вероятностей F(х)=1-e-λх. Подпрограмма STAT предназначена для набора и обработки статистических данных о значениях случайной величины Х. 4.5.2. Метод ступенчатой аппроксимации. Метод обратных функций применим для моделирования непрерывных случайных величин Х в том случае, если существует функция распределения вероятностей F(х), т.е. уравнение 10 имеет аналитическое решение. Однако известны распределения случайных величин, например, нормальное распределение, для которых функция распределения вероятностей F(х) аналитически не определяется. Для имитации случайных величин Х, определяемых только плотностью распределения вероятностей f(х) применяется метод ступенчатой аппроксимации. Рассмотрим суть этого метода. Зависимость плотности распределения f(х) представляется графически в интервале изменения случайной величины Х от a до b. Если случайная величина задана на [-∞,+∞], то достаточно ограничиться минимально и максимально возможными числами, воспринимаемыми ЭВМ. Суть метода ступенчатой аппроксимации показана на рис. 4.20. Разобьем [a,b] на n интервалов таким образом, чтобы площади под кривой f(х) внутри каждого интервала были равны, как это показано на рис. 4.20, т.е.
89 C1
C2
Cn
С0 = a
C1
Cn − 1
∫ f(x)dx = ∫ f(x)dx = ... = ∫ f(x)dx = 1 n
,
где Сi ( i = 0, n ) - координаты точек разбиения. f(x)
…….. a C0
C1
C2
C4
Cn-2
Cn-1
Cn-3
C3
b Cn
x
Рис. 4.20 Вероятность того, что случайная величина Х попадет в любой из интервалов [Сi-1, Сi], i = 1,n , определится по формуле P(C i − 1 < X ≤ C i ) =
Ci
∫ f (x)dx = 1 n = const ,
Ci −1
т.е. попадание на любой отрезок равновероятно. Если внутри интервала распределение случайной величины Х также равномерное, то значение случайной величины Х на оси х может быть определено, как Х=Сi-1+η, где η - равномерно распределенная случайная величина на интервале [Сi-1, Сi], представляющая собой расстояние от левого конца (Сi-1) i–го интервала. На рис. 4.21 приведена
90 схема алгоритма генерации случайных величин Х с применением метода ступенчатой аппроксимации. Начало 1
WWOD
2
N=N+1
3
CEN(Р1)
4
i=]nP1[
5
CEN(Р2)
6
η=P2(Сi-Сi-1
7
Y=Сi-1+η
8
STAT
1
9
N
10
WIWOD Конец
Рис. 4.21 Правило имитации случайных величин Y сводится к следующему: - получаем от генератора равномерно распределенных чисел случайное число Р1 (см. блок 3); - из значения числа Р1 находим индекс i=]nР1[ интервала [Сi-1, Сi], где ]nР1[ - целая часть числа nР1, причем ]nР1[
91 - получаем от генератора равномерно распределенных чисел случайное число Р2 (см. блок 5); - из значения числа Р2 находим случайную величину η=Р2(Сi-Сi-1), т.е. значение числа Р2 «приводится» к величине интервала [Сi-1, Сi] (см. блок 6; - находим случайную величину Х, имеющую заданную плотность распределения вероятностей f(х), по формуле (см. блок 7) X = С ]nP1 [ =1 + P2 (С ]nP1 [ − С ]nP1 [ −1 ) = C i =1 + η . Подпрограмма STAT предназначена, как и в алгоритме метода обратных функций, для набора и обработки статистических данных о значениях случайной величины Х. 4.5.3. Использование предельных теорем. Для имитации случайной величины Х, имеющей нормальный закон распределения вероятностей, используют свойство сходимости независимых величин к нормальному распределению. Для получения нормального распределения чисел с параметрами: математическое ожидание mХ=0, среднеквадратичное отклонение σХ=1 удобен искусственный прием, основанный на центральной предельной теореме теории вероятностей. На рис. 4.22 приведен алгоритм получения случайный величин Х с применением свойств центральных предельных теорем. Согласно центральной предельной теореме при достаточно большом значении n величина Z может считаться нормально распределенной с параметрами k
m Z = ∑ M[z i ] = 0 , σ Z = i=1
k
∑σ i=1
2 zi
=
k . 3
Для имитации случайной величины Х в качестве исходных чисел возьмем k равномерно распределенных на отрезке [1,-1] случайных чисел, получаемых из интервала [0,1] по правилу zi=2Рi-1 (см. блоки 5,6).
92 Начало 1
WWOD
2
N=N+1
3
I=0, Z=0
4
I=I+1
5 6 1
CEN(P) Z=Z+2(P-1)) 7
I
9
X=Z×(√3)/(√K)
10 1
STAT 11
N
12
WIWOD Конец
Рис. 4.22 Сформируем величину Z согласно следующей формуле (см. блоки 3 – 7):
93 Z=
n
∑ zi .
i =1
Выполним нормирование величины Z и получим (см. блок 9) Z 3 k X= [ ∑ 2P − 1] . = i σ k z i =1
(4.11)
Случайная величина Х будет иметь нормальное распределение с mХ=0, σХ=1. Установлено, что при k>8 формула (4.11) дает хорошие результаты.
4.6. Имитация марковского процесса 4.6.1. Моделирование дискретной цепи Маркова. Рассмотрим дискретную цепь Маркова или марковский процесс с дискретным временем перехода из одного состояния в другое. Математическая модель дискретной цепи Маркова задается матрицей вероятностей переходов ||Рij||, имеющей вид P11 P12 ... P1n P P22 ... P2n , (4.12) Pij = 21 ... ... ... ... Pn1 Pn2 ... Pnn
где Рij - вероятность перехода из состояния zi в состояние zj в некоторый дискретный момент времени kΔt (k=1,2,3,...). Начальное состояние марковского процесса определяется матрицей-строкой начальных вероятностей ||Р0||=|Р1(0), Р2(0), ..., Рn(0)|, где Рi(0) вероятность нахождения процесса в zi-м состоянии при t=0. Вероятности перехода Рij не зависят от времени, т.е. процесс является однородным.
94 На рис. 4.23 приведен обобщенный алгоритм имитации дискретной цепи Маркова. Начало 1
WWOD
2
T=T+1
3
OPRZ0
4
OPRZ
5 1
STAT 6
T
7
WIWOD Конец
Рис. 4.23 Подпрограммы WWOD и WIWOD реализуют интерфейсную часть имитационной программы. В подпрограмме WWOD осуществляется ввод элементов массива Р0[I], в который заносятся вероятности Рi(0), и массива Р[I,J], в который заносятся вероятности Рij. Определяется начальный такт моделирования T=0 и заданное число тактов моделирования TZ. Подпрограмма OРRZ0 предназначена для определения начального состояния, а подпрограмма OРRZ – для определения состояний в процессе моделирования смены
95 состояний. Подпрограмма STAT предназначена для набора статистических данных. Моделирование марковского процесса основано на принципе имитации системы случайных событий. Определяем числовые границы n
l 0 = 0, l1 = P1 (0); l 2 = P1 (0) + P2 (0),..., l n = ∑ Pi (0) = 1 . i=1
Р0, Исходя из значения случайного числа генерированного датчиком случайных чисел, определяется номер r начального состояния zr(0), для которого будет справедливо условие 0 l r-1 < P0 ≤ l r0 . Затем датчик случайных чисел вырабатывает случайное число Р1, которое также сравнивается с границами n
l r0 = 0, l r1 = Pr1 , l r2 = Pr1 + Pr2 ,..., l rn = ∑ Pri = 1 . i=1
Путем сравнения устанавливается очередное состояние и подобным образом осуществляется моделирование дальше. Рассмотрим реализации подпрограмм. На рис. 4.24 приведен алгоритм подпрограммы OРRZ0. На рис. 4.25 приведен алгоритм подпрограммы OРRZ. На рис. 4.26 приведен алгоритм подпрограммы STAT. В алгоритме подпрограммы OРRZ0 (см. рис. 4.24) в блоке 1 вырабатывается число Р датчиком случайных чисел. Затем реализуется цикл по переменной I для сравнения числа Р с элементами массива Р0[I]. Для этого введен идентификатор А, который в блоке 2 определен А=0.
96 Начало 1
СЕN(P)
2 3
0
I=0, A=0 I=I+1, A=A+P0[I] 4
P≤A 1 Конец
Рис. 4.24 Начало 1
СЕN(P)
2 3
0
J=0, B=0 J=J+1, B=B+P[I,J] 4
P≤В 1 Конец
Рис. 4.25
97 Начало 1 2
K[J]=K[J]+1 I=J Конец
Рис. 4.26 При наращивании переменной I идентификатор А будет принимать последовательно значения: I=1, А=Р1(0); I=2, А=Р1(0)+Р2(0); I=3, А=Р1(0)+Р2(0)+Р3(0); …; I=n, А=Р1(0)+Р2(0)+Р3(0)+…+Рn(0). При первом же выполнении условия Р≤A считается, что найден индекс начального состояния zi(0). Таким образом, выходным параметром подпрограммы OРRZ0 является значение индекса I, при котором выполнено условие Р≤А=Р1(0)+Р2(0)+Р3(0)+…+Рi(0). В алгоритме подпрограммы OРRZ (см. рис. 4.25) в блоке 1 датчиком случайных чисел формируется случайное число Р∈[0,1]. Затем реализуется цикл по переменной J для сравнения числа Р с элементами массива Р[I,J]. Введен идентификатор В. При наращивании переменной J идентификатор В будет принимать последовательно значения: J=1, А=Р(I,1); J=2, А=Р(I,1)+Р(I,2); …; J=n, А=Р(I,1)+Р(I,2)+Р(I,3)+…+Р(I,n). При выполнении условия Р≤B считается, что найдет индекс состояния zj(T) в текущем такте моделирования T. Выходным параметром подпрограммы OРRZ является значение индекса J, при котором выполнено условие Р≤В=Р(I,1)+Р(I,2)+Р(I,3)+…+Р(I,J).
98 В алгоритме подпрограммы STAT (см. рис. 4.26) в блоке 1 в счетчиках K[J] осуществляется подсчет частот появления событий zj. Затем в блоке 2 осуществляется присвоение значения индекса J индексу I, т.е. на следующем такте моделирования в подпрограмме OРRZ будет выполнен анализ j-й сроки матрицы вероятностей переходов ||Рij||. Алгоритм имитации дискретной цепи Маркова может быть представлен в более сокращенном виде, как показано на рис. 4.27. Объединим матрицы ||Р0|| и ||Рij|| в обобщенную матрицу вида P01 P02 ... P0n
P11 P Pij = 21 ...
P12 P22
Pn1
Pn 2
...
... P1n ... P2n . ... ...
(4.13)
... Pnn
В подпрограмме WWOD осуществляется ввод элементов массива Р[I,J], в который заносятся вероятности Рij, причем i = o , n , j = 1, n . Определяется начальное значение индекса I=0, начальный такт моделирования T=0 и заданное число тактов моделирования TZ. Так как в первом такте моделирования (Т=1) I=0, то в первом такте будет рассматриваться верхняя строка обобщенной матрицы ||Рij||, т.е. фактически матрицы ||Р0||. В блоке 3 формируется случайное число Р∈[0,1]. Затем реализуется цикл по переменной J для сравнения числа Р с элементами массива Р[I,J] при I=0 (см. блоки 4 – 6). При выполнении условия Р≤В в соответствующий счетчик K[J] добавляется единица (см. блок 7). В блоке 8 индексу I присваиваются значения индекса J. Процесс моделирования продолжается до тех пор, пока не будет выполнено условие окончания моделирования T
99 Начало 1 2 3
WWOD
7
T=T+1
8 0
СЕN(P)
4
K[J]=K[J]+1 I=J 9
T
J=0, B=0 1
5
10
J=J+1, B=B+P[I,J]
WIWOD Конец
0
6
P≤В 1
Рис. 4.27 В счетчиках K[J] после окончания моделирования будут подсчитаны частоты пребывания марковского процесса в состояниях zj, j = 1, n . В подпрограмме WIWOD осуществляется вывод значений счетчиков K[J], а также вывод эмпирических оценок финальных вероятностей марковского процесса, определяемых по формуле K[ J ] vj = , j = 1, n . TZ 4.6.2. Моделирование вложенной цепи Маркова. Для вложенной цепи Маркова, в отличие от дискретной цепи, переход из состояния в состояние может произойти в любой случайный момент времени, т.е. время пребывания марковского процесса в любом состоянии является
100 величиной случайной. Математическая модель марковского процесса в этом случае определяется: - распределением вероятностей начального состояния процесса Рi(0) в момент t0; - матрицей вероятностей переходов ||Рij|| (12); - матрицей-строкой функций распределения времени пребывания в состоянии |A|={A1(t), A2(t), …, An(t)}, где Ai(t) - функция распределения времени пребывания марковского процесса в состоянии zi. На рис. 4.28 приведен обобщенный алгоритм имитации вложенной цепи Маркова. Начало 1
WWOD
2
T=T+1
3
OPRZ0
4
OPRZ
5
STAT1
6
OPRTAU
7 1
STAT2 8
T
9
WIWOD Конец
Рис. 4.28
101 Подпрограммы WWOD и WIWOD предназначены для реализации интерфейса имитационной программы. В подпрограмме WWOD осуществляется ввод элементов массива Р0[I], массива Р[I,J], а также параметров функций распределения Ai(t). Определяется T=0 и TZ. В подпрограмме OРRZ0 (см. блок 3) определяется начальное состояние, в подпрограмме OРRZ определяются состояния в процессе моделирования смены состояний. Подпрограмма STAT1 предназначена для набора статистических данных о частотах пребывания марковского процесса в состояниях. В подпрограмме OРRTAU определяется время пребывания марковского процесса в состоянии, определенном в подпрограмме OРRZ. Подпрограмма STAT2 предназначена для набора статистических данных о времени пребывания марковского процесса в состояниях. Рассмотрим реализацию подпрограмм OРRZ0, OРRZ, OРRTAU. Подпрограммы OРRZ0, OРRZ имеют такой же вид, как и аналогичные подпрограммы для дискретной цепи Маркова (см. рис. 4.24 и рис. 4.25). Выходным параметром подпрограммы OРRZ является индекс J состояния zj(T) в текущем такте моделирования T. Схема алгоритма подпрограммы OРRTAU будет иметь вид алгоритмов генерации случайной величины, рассмотренных в разд. 4.5, метод обратных функций, метод ступенчатой аппроксимации, использование предельных теорем. О схемной реализации подпрограмм STAT1 и STAT2 будет сказано ниже. Существует способ моделирования вложенной цепи Маркова, который называется схемой развернутой рекуррентной имитацией. Для этого способа математическая модель определена:
102 - распределением вероятностей состояния Рi(0) в момент t0 ;
- матрице Λ, имеющей вид
λ 11 λ Λ = 21 ...
λ 12 λ 22 ...
λ n1 λ n2
... λ 1n ... λ 2n , ... ...
(4.14)
... λ nn
где λij - интенсивностей переходов марковского процесса из состояния zi в состояние zj. Способ моделирования сводится к следующему. Пусть в момент t состояние марковского процесса z(t)=zi. Известен момент времени ti, в который марковский процесс должен покинуть состояние zi. Для определения следующего состояния zi+1 и момента ti+1 перехода в последующее состояние генерируется ряд независимых случайных величин τij по показательному закону распределения с параметрами i-й строки матрицы ||λij ||. Затем определяется минимальное значение из полученной совокупности независимых случайных величин τij, т.е.
τ ij = min τ ki . k=1,2,...,n
(4.15)
Следующий момент изменения состояния будет ti+1=ti+τij, а состояние, в которое переходит система в момент ti+1, будет zj, где zj - состояние, при котором τzj было минимальным из всех значений совокупности независимых случайных величин {τii}. Физическая интерпретация такого подхода к моделированию марковского процесса с непрерывным временем позволяет разрабатывать имитационные модели реальных систем. Схема алгоритма моделирования вложенной цепи Маркова по данному способу приведена на рис. 4.29.
103 Начало 1
WWOD
2
T=T+1
3
OPRZ0
4
OPRTAU
5
MINTAU
6 1
STAT1 7
T
8
WIWOD Конец
Рис. 4.29 Отличие алгоритма по схеме развернутой рекуррентной имитации (см. рис. 4.29) от алгоритма, приведенного на рис. 4.28, состоит в блоках 4 и 5, в которых реализована генерация случайных величин τki и формулы (4.15). На рис. 4.30 приведена схема алгоритма подпрограммы OРRTAU для данного способа. На рис. 4.31 приведена схема алгоритма подпрограммы MINTAU.
104 Начало 1
J=0
2
J=J+1
3 4 0
СЕN(P) TAU[J]=-(1/λij)lnP 5
J
Рис. 4.30 В подпрограмме OРRTAU (см. рис. 4.30) входным параметром является индекс I предыдущего состояния марковского процесса. Для каждого значения J в блоке 4 по методу обратных функций определяется значение случайной величины TAU[J], отождествляющей собой описанную выше величину τii. Таким образом, в данной подпрограмме будет сформирован массив TAU[J]. В подпрограмме MINTAU (см. рис. 31) входным параметром являются элементы массива TAU[J], из которых необходимо выбрать минимальный элемент. В блоках 1 – 5 осуществляется выбор минимальной величины (MIN) из массива TAU[J]. Происходит это следующим образом. При переменной массива J=1 первый
105 элемент массива TAU[1] определяется, как минимальный элемент MIN (см. блок 1). Начало 1 2
0
6
J=1, MIN=TAU[1]
7
J=J+1
3
0 TAU[J]<MIN
4
5
J=0 J=J+1
8 TAU[J]=MIN
1
1
MIN=TAU[J]
Конец 0
J
Рис. 4.31 Затем второй элемент массива TAU[2] сравнивается со значением MIN (см. блок 3). Если второй элемент массива TAU[2] меньше значения MIN, то идентификатору MIN присваивается значение TAU[2] (см. блок 4). Если условие TAU[2]<MIN не выполняется, то рассматривается условие TAU[3]<MIN для элемента массива TAU[3] и т.д. В блоках 6 – 8 определяется индекс J элемента массива TAU[J], равного числу MIN. Это индекс J определяет индекс состояния zJ, в который переходит марковский процесс.
106
5. ОБРАБОТКА РЕЗУЛЬТАТОВ МОДЕЛИРОВАНИЯ НА ЭВМ 5.1. Выбор числа опытов При разработке имитационных моделей для исследования случайных объектов существует задача выбора числа опытов (объема выборки). Это непростая задача, т.к. во-первых, необходимо обосновать достоверность результатов моделирования и связать достоверность с точностью, а во-вторых, существуют события, вероятность появления которых очень мала (Р→0) или, наоборот очень велика (Р→1). Для обоснования объема выборки при имитационном моделировании применяют аналитические подходы [8,12,13]. В инженерной практике известны критерии для оценки погрешности. Непрерывную (аналоговую) величину х(t) в ряде инженерных задач рассматривают как дискретную, как показано на рис. 5.1.
x(t)
x(t)
x*(t)
*
x (t)
δ (t)
t Рис. 5.1 Если х*(t) - результат измерения непрерывной величины х(t), то для любого момента t текущая погрешность
107 дискретизации этой непрерывной величины определится: δ(t)=х(t)-х*(t). Выбор критерия оценки δ(t) зависит от назначения величины х(t). Известны следующие критерии. Критерий наибольшего отклонения имеет вид δ Д ≤ max δ(t ) = x(t ) − x * (t ) . Критерий применим, если t∈Δt
известны априорные сведения о сигнале в форме условия Липшица x( t ) − x( t ' ) ≤ l( t − t ' ) , где l -некоторая константа. Среднеквадратичный критерий приближения определяется по формуле t t 2 1 1 2 2 2 ∗ σ = δ ( t ) dt = x ( t ) − x ( t ) dt =σ д . ∫ ∫ Δt 0 Δt 0
(
)
Среднеквадратичный критерий применим для функций, интегрируемых в квадрате. Использование среднеквадратичного критерия связано с усложнениями, например аппаратуры измерения, по сравнению с критерием наибольшего отклонения. Интегральный критерий как мера отклонения х(t) от х*(t) имеет вид
μ=
1 Δt
Δt
∫ δ(t ) dt = ≤ μ
Д
.
0
Если моделируются случайные процессы, то вышеназванные критерии не применимы. Выбор количества реализаций зависит от того, какие требования предъявляются к результатам моделирования. Пусть для оценки случайной величины A, оцениваемой по результатам моделирования х, выбирается величина х*, являющаяся функцией от х. Значения х* будут отличаться от A в силу случайных факторов, т.е. можно связать точность оценки, теоретическое значение случайной величины A и её статистическую оценку х* в виде формулы |A-х*|<ε, (5.1)
108 где ε - точность оценки. В силу того, что каждый результат х* моделирования случайной величины A также является случайной величиной, то вероятность того, что неравенство (5.1) выполняется, будет достоверностью точности оценки х* случайной величины A, т.е. справедлива формула Р(|A-х*|<ε)=α. (5.2) Воспользуемся сформулированным критерием (5.2) для определения точности результатов методом статистического моделирования. Пусть цель моделирования - вычисление вероятности р появления события A. Количество ε наступления события A в реализации процесса является случайной величиной, принимающей значение х1=1 с вероятностью р и значение х2=0 с вероятностью 1-р. Пример случайного появления события A показан на рис. 5.2.
А
А
А
А
А
Рис. 5.2 Математическое ожидание случайной величины ε определится по формуле M[ε]=х1р+х2(1-р)=р. (5.3) Если х1=1, как появление события A, а х2=0, как не появление события, то значение M[ε] совпадает с вероятностью р наступления события A. Дисперсия определится по формуле D[ε]=[х1-M[ε]]2р+[х2-M[ε]]2(1-р)=р(1-р). (5.4) При выполнении имитационного моделирования оценкой вероятности р является частость m/N наступления события A при N реализациях, m - число испытаний, в
t
109 которых событие A наступило. Частость m/N определяется формулой n (5.5) p* = m N = 1 N ∑ ε , ε [0,1] , i i n=1 где εi - количество наступлений событий A в реализации с номером i. Из формул (5.3), (5.4) и (5.5) можно определить математическое ожидание и дисперсию частости m/N m m p(1 - p) . (5.6) M[ ] = p; D[ ] = N N N В силу центральной предельной теоремы вероятностей частость m/N при NÆ∞ имеет распределение, близкое к нормальному. Поэтому для каждого значения достоверности α (вероятности) можно выбрать из таблиц нормального распределения такую величину (значение случайной величины) tα, что точность ε будет равна (5.7) ε = t D[m N]. α Подставив в формулу (5.7) значение D из формулы (5.6), получим p(1 − p) (5.8) ε=t . α N Из формулы (5.8) можно определить количество реализаций N, необходимых для получения оценки m/N с точностью ε и достоверностью α:
N = t α2
p(1 − p ) . ε2
(5.9)
В формуле (5.9) неизвестны величины N и р, т.к. вероятность р определяется, исходя из ее оценки m/N, а N число необходимых для этого опытов. Поэтому в практике моделирования для определения N поступают следующим образом. Выбирают N0=50-100. По результатам N0
110 реализаций определяют m/N0, т.е. осуществляют примерную оценку вероятности р=m/N0. Затем по формуле (5.9) окончательно выбирают N, принимая р=m/N. Другим случаем является оценка по результатам моделирования среднего значения некоторой случайной величины. Пусть непрерывная случайная величина A имеет среднее значение A и дисперсию σ2. В реализации с номером i случайная величина A принимает значение хi. В качестве оценки для среднего значения (математического ожидания) A используется среднее арифметическое 1 N x= ∑x . i N i=1 В силу центральной предельной теоремы при NÆ∞ x будет иметь приблизительно нормальное распределение с математическим ожиданием A и дисперсией σ2/N, поэтому точность определится по формуле
ε = tα σ
N.
Число реализаций определится по формуле
N = t α2 σ 2 ε 2 .
(5.10) Так как в формуле (5.10) неизвестными являются число реализаций N и среднеквадратичное отклонение σ2, то также выбирают N0=50-100. По результатам N0 реализаций определяют оценку дисперсии, а затем по формуле (5.10) окончательно выбирают N. Количество реализаций N в формуле (5.9) зависит от р, а в формуле (5.10) от σ2. Целесообразно так строить моделирующий алгоритм, чтобы методом моделирования оценивались параметры величин, имеющих возможно меньшую дисперсию, или вероятности случайных событий, не близкие к 0,5. Вероятности не должны быть также близки к 0 или 1, т.к. в
111 этом случае снижается эффективность имитационного моделирования.
5.2. Значимость оценки 5.2.1. Статистическая проверка гипотезы относительно вероятности. При имитационном моделировании получают практические (эмпирические) результаты, которые затем аппроксимируют известными теоретическими распределениями, т.е. выдвигают гипотезу, то данное теоретическое распределение аппроксимирует эмпирическое распределение. Например, необходимо проверить гипотезу относительно того, что при выполнении имитационного моделирования частость р*=m/N является оценкой вероятности р события. Пусть проверяется настройка станка на среднюю точку поля допуска. Проведено 280 независимых испытаний и интересующее нас событие появилось 151 раз. Модель появления независимых событий – биноминальное распределение. Если гипотетическая вероятность события р=1/2, то математическое ожидание равно Nр=280(1/2)=140, а среднеквадратичное отклонение биноминального распределения определится из формулы 1 1 Npq = 280 × × =8,37, где q=1-р – вероятность не 2 2 появления события. Надо получить ответ на вопрос: можно ли считать наблюденную частоту 151 достаточно близкой к теоретической норме 140, отвечающей гипотезе р=1/2. Чтобы получить ответ на заданный вопрос, следует выбрать границу допустимых при гипотезе отклонений частот (или частостей) от математического ожидания. Будет определено критическое отклонение, превышение которого при выдвинутой гипотезе настолько
112 маловероятно, что его можно считать практически невозможным. Если превышение критического отклонения будет наблюдаться, то это указывает на несовместимость выдвинутой гипотезы с наблюдениями и говорят, что наблюденная частость значимо отклоняется от вероятности. Если фактическое отклонение меньше критической границы, то опыт не противоречит выдвинутой гипотезе и наблюденное отклонение можно объяснить случайностью испытаний. На практике, в соответствии с критерием (5.2), задают уровень значимости α, т.е. вероятность практически невозможных отклонений. Эта вероятность обычно не превышает значение 0,05. Область больших отклонений, соответствующую уровню значимости α, называют критической областью, а само правило проверки – критерием значимости. Критическую границу для отклонений от теоретической нормы можно определить, пользуясь нормальным приближением к биноминальному закону. На рис. 5.3 приведены двухсторонние критические границы для проверки гипотезы р=1/2.
-1,96
0
+1,96
Рис. 5.3 Вероятность 0,95 соответствует при нормированном нормальном распределении интервалу (-1,96, +1,96) около центра распределения, т.к. вероятность того, что
113 абсолютная величина нормированного отклонения превысит значение 1,96, равна 0,05, т.е. Р(|A|>1,96)=Р(|m-Nр|>1,96σ)≈0,05, где m – практическая частота. Уровень значимости 0,01 соответствует границе 2,58, т.е. Р(|A|>2,58)=Р(|m-Nр|>2,58σ)≈0,01. Для рассмотренного выше примера настройки станка на среднюю точку поля допуска σ=8,37 и 5% критическая граница соответствует 1,96×8,37=16,41, а 1% критическая граница соответствует 2,58×8,37=21,59. Таким образом, область допустимых значений при 5% критической границы определяется пределами Nр±1,96σ=140±16,41, а при области допустимых значений при 1% критической границы определяется пределами Nр±2,58σ=140±21,6. Если выдвинутая гипотеза, что наблюденная частота 151 достаточно близка к теоретической норме 140, отвечающей вероятности р=1/2, верна, то отклонение частоты от теоретической нормы в пяти случаях из 100 может превышать 16,4, и в одном случае из 100 может превышать 21,6. Так как в рассмотренном примере отклонение составило 151-140=11, т.е. оно находится в области допустимых значений, то нет оснований считать гипотезу р=1/2 противоречащей наблюдениям. 5.2.2. Общая задача проверки гипотез. При наличии явлений рассеивания признаков случайной величины требуется провести сравнительную оценку, причем обоснованный вывод может быть получен путем научно поставленного анализа статистических данных. Данные рассматривают как некоторые выборки, информирующие о поведении случайных величин, и
114 позволяющие делать определенные заключения о законах распределения этих величин. Существуют некоторые выборки значений случайной величины А. Необходимо сделать заключение о законах распределения случайной величины А. Можно сделать предположение, что тип закона распределения известен (нормальный, пуассоновский и т.д.), но неизвестны его параметры, т.е. проверка гипотезы сводится к сравнению статистических характеристик, оценивающих параметры выбранных законов распределения. Для проверки гипотезы согласно критерию выбираются надлежащие уровни значимости (см. разд. 5.2.1) α=5%, 2%, 1% и т.д., отвечающие событиям, которые при данном исследовании считаются практически невозможными. Затем определяется критическая область (см. рис. 5.3) данного критерия, вероятность попадания в которую в точности равна уровню значимости α, если гипотеза верна. Значения критерия, лежащие вне критической области, образуют дополнительную к ней область допустимых значений (незаштрихованная область на рис. 5.3). Если α/100 – уровень значимости, то вероятность попадания критерия в область допустимых значений при справедливости выдвинутой гипотезы равна 1-α/100. Если значение критерия, вычисленное по произведенным наблюдениям (опытам), окажется в критической области, то гипотеза отвергается. Если значение критерия окажется в области допустимых значений, что наблюденное значение критерия не противоречит гипотезе. Чем меньше уровень значимости, тем меньше вероятность забраковать проверяемую гипотезу, когда она верна, т.е. совершить ошибку первого рода. С уменьшением уровня значимости понижается чувствительность критерия, т.к. расширяется область допустимых значений и увеличивается вероятность
115 совершения ошибки второго рода, т.е. принятия проверяемой гипотезы, когда она не верна. Уровень значимости критерия проверки контролирует лишь ошибки первого рода и не измеряет степень риска, связанного с принятием неверной ошибки. При заданном уровне значимости можно по разному устанавливать критическую область, гарантирующую этот уровень. Например, в качестве критерия рассматривается некоторый показатель, распределенный при проверяемой гипотезе нормально с плотностью распределения f(x;a;σ). В качестве критической области соответствующей уровню значимости α=5% можно принять: - область больших положительных отклонений так, что Р(tq)=Р(x>a+tqσ)=0,05, но 2
∞
z 1 1 P1 (t q ) = e 2 dz = - Ф0 (t q ) , ∫ 2 2π tq
(5.11)
тогда из таблицы значений нормированной функции Лапласа z
2
v 1 2 Ф0 (z) = e dv ∫ 2π 0
определим, что tq=1,65; - область больших отрицательных отклонений Р2(tq)=Р(xtqσ)=0,05, определив t из соотношения
P(| x - a |> t qσ) =
116 2
∞
z 2 1 2 = 1e dz = - Ф0 (t q ) , 2 2π t∫q
(5.12)
так что tq=1,96; - область малых по абсолютной величине отклонений Р4(tq)=Р(|x-a|>tqσ)=2Ф0(z), (5.13) так что tq≈0,063. Эти области показаны на рис. 5.4. f(x,a,σ
Значение х критерия проверки гипотезы
4
0
3
3 a
2 -1,96
+1,96
1
1 – область больших положительных отклонений; 2 - область больших отрицательных отклонений; 3 - область больших по абсолютной величине отклонений (состоит из двух половин); 4 - область малых по абсолютной величине отклонений Рис. 5.4 5.2.3. Проверка гипотез о законе распределения. Рассмотренные в предшествующем разделе (см. разд. 5.2.2) методы проверки предполагали известным закон
117 распределения случайной величины и направлены на определение параметров распределения. При обработке результатов имитационного моделирования (статистических данных) вид закона распределения является гипотетическим и нуждается в статистической проверке, т.е. задача о критерии проверки гипотезы по данным выборки состоит в том, что случайная величина Х подчинена закону распределения Р(х). Эти критерии, называемые критериями соответствия, основаны на выборе определенной меры расхождения между теоретическим и эмпирическим распределениями. Если такая мера расхождения для рассматриваемого случая превосходит установленный предел, то гипотеза не подтверждается. Рассмотрим наиболее употребительный критерий χ2 (критерий Пирсона). Пусть гипотеза предполагает вид функции распределения Р(х). Вся область изменения случайной величины Х разбита на конечное число k множеств Δ1, Δ1, …, Δk. Если случайная величина Х непрерывна, то множества Δ1, Δ1, …, Δk представляют собой интервалы, а если случайная величина Х дискретна, то множества Δ1, Δ1, …, Δk представляют собой группы отдельных значений случайной величины Х. Пусть pi вероятность того, что значения случайной величины Х при данном распределении Р(х) принадлежат интервалу Δi. Объем выборки N, а mi - число значений случайной величины Х в выборке O(x1, x2, x3, …, xN), попавших в интервал Δi. Очевидно, что p1+p2+ …+pk=1, (5.14) m1+m2+ …+mk=N. (5.15) Если проверяемая гипотеза верна, то mi представляет частоту появления события, имеющего в каждом из N произведенных испытаний вероятность pi. В таком случае
118 mi можно рассматривать как случайную величину, подчиненную биномиальному закону распределения с центром в центре в точке Npi и средним квадратическим σ 1 = Npi (1 − p i ) . Если N достаточно велико, то можно считать, что частота распределена асимптотически нормально с центром в центре в точке Npi и средним квадратическим σ1 = Npi (1 − p i ) . Если проверяемая гипотеза верна, то можно ожидать, что в совокупности будут асимптотически нормально распределены случайные величины (m i − Np i ) , (i=1,2,…,k), (5.16) ξi = Np i
связанные между собой соотношением k
∑ξ i =1
k
i
pi = ∑ i =1
(m i − Np i ) N
,
(5.17)
вытекающем из условий (5.14) и (5.15). В качестве меры расхождения данных выборки (эмпирических частот) m1, m2, …, mk с теоретическими частотами Np1, Np2, …, Npk рассмотрим величину k k (m − Npi )2 . (5.18) χ 2 = ∑ ξ i2 = ∑ i Npi i =1 i =1 Для практических приложений можно применять подобное равенство: k m2 χ2 = ∑ i − N . (5.19) i =1 Np i Согласно формуле (5.18) случайная величина χ2 представляет собой сумму квадратов асимптотически нормально распределенных случайных величин, связанных линейной зависимостью (5.17). Из теории вероятностей известна теорема. Если проверяемая гипотеза верна, то критерий χ2, определяемый
119 по формуле (5.18), имеет распределение, стремящееся при N→∞ к распределению χ2 с k-1 степенями свободы. При проведении проверки задают уровень значимости α% для критерия. Пусть χ α2 обозначает α% предел для закона распределения χ2 с k-1 степенями свободы. Этот закон имеет табличное задание и его значения приводятся в приложениях книг с изложением теории вероятностей. Если гипотеза верна, то при достаточно большом числе опытов N справедливо определение вероятности
Р(χ 2 > χ α2 ) =
α . 100
(5.20)
После определения случайной величины χ2 по данным выборки O(x1, x2, x3, …, xN), будет выполняться одно из двух условий: - при χ 2 > χ α2 критерий попадает в критическую область и, следовательно, расхождение выборочных данных с гипотетическим допущением о законе распределения случайной величины существенно, гипотеза отвергается; - при χ 2 ≤ χ α2 несущественно расхождение выборочных данных с гипотетическим допущением о законе распределения, гипотеза принимается. Во втором случае в α% всех случаев, но неизвестно каких, гипотеза неверна. Принято считать достаточным нормальное приближение для практических расчетов, если Npi≥10 ∀i. Если есть группы со значениями Npi меньшими 10, то рекомендуют соседние группы объединять так, чтобы новые группы удовлетворяли условию Npi≥10 ∀i. Если число степеней свободы k>30, то 2 соответствующего значения случайной величины χ нельзя найти в табличном задании закона распределения χ2. В
120 этом случае формулу:
применяют
χ α2 =
следующую
1 ( 2ν − 1 + z 2 α ) 2 , 2
основанную на том, что
приближенную (5.21)
2χ 2 оказывается асимптотически
нормальным законом N( z; ( 2ν − 1;1) , z2α - есть 2α% предел абсолютного уклонения нормальной переменной, заданный в табличных приложениях книг по теории вероятностей.
5.3. Формулы и алгоритмы для оценки результатов моделирования При реализации моделирующего алгоритма на ЭВМ вырабатывается информация о состоянии моделируемых систем, которая представляет собой исходный материал для определения приближенных искомых величин по статистическим данным. Желательно так организовать фиксацию и алгоритмы обработки результатов моделирования, чтобы статистические оценки для искомых величин формировались постепенно по ходу моделирования, без специального запоминания всей информации о состояниях системы [8]. Если при моделировании учитываются случайные факторы, то в качестве оценок для искомых величин используются средние значения, дисперсия и другие вероятностные характеристики. В памяти ЭВМ для формирования оценки желательно занимать как можно меньше ячеек. При моделировании случайных событий оценка Р(A) вероятности Р(A) события A определится по формуле Р*(A)=m/N, (5.22)
121 где m — число случаев (частота) наступления событий A, N - число реализаций (объем выборки). В данном случае для подсчета частоты достаточно предусмотреть один счетчик К, содержимое которого будет увеличиваться на единицу каждый раз при наступлении события A. Для получения значения Р*(A) после окончания моделирования содержимое счетчика К делится на N. Если событие принимает значения в некоторой области величин, то область значений n случайной величины разбивается на отрезки так, что n={n1,n2…nm}, ∑ n i = N . i
Оценка вероятностей возможных i-х значений случайной величины определяется Р*i(A)=mi/N, (5.23) где mi - число значений случайной величины в интервале ni. Для подсчета частоты необходимо предусмотреть m счетчиков К[I], содержимое которых будет увеличиваться на единицу каждый раз тогда, когда случайное событие A принимает значение из интервала ni. Для получения значения Р*i(A) после окончания моделирования содержимое i-го счетчика К[I] делится на N. Алгоритм приведен на рис. 5.5. Примером непрерывной случайной величины A могут быть интервалы времени между движущимися автомобилями. Если задать границы D(J), J = I , JM , где JМ - заданное число границ оценки этой случайной величины А, то можно определить частоты событий А(J), состоящие в том, что значения случайной величины A меньше или равны границам D(J). Частоты А(J) записаны в счетчиках К(J), J = I, JM .
122 Начало 1
I=0
2 3
I=I+1 P(A)=K[I]/N
1 4
I≤M 0 Конец
Рис. 5.5 Величина D(JМ) является наибольшей границей оценки случайной величины, т.е. D(1)
123 Начало 1
J=0
2
J=J+1 3
X≤D[J]
0
1 4
1
K[J]=K[J]+1
5
J≤M 0 Конец
Рис. 5.6 Таблица 5.1 Статистические данные результатов моделирования Границы D(1 D(2 D(3 D(4 D(5 D(6 D(7 D(8 ) ) ) ) ) ) ) ) оценки 2 4 6 8 10 15 20 25 К(1 К(2 К(3 К(4 К(5 К(6 К(7 К(8 Номер ) ) ) ) ) ) ) ) счетчика Частота 37 100 193 240 280 362 425 500 события Определяются частости соответствии с формулами: Pj* = A( J ) / A( JM ),
появления A( J ) , N → ∞ A( JM )
Pj = lim
события J = 1, JM ,
где Pj - теоретическое значение вероятностей.
А
в
124 Затем строится гистограмма кумулятивной эмпирической функции распределения по значениям Pj*. Пример построения приведен на рис. 5.7. 1,0
P(x) - теоретическая функция 0,9 0,85 0,8 0,725
0,7 0,6 0,56 0,5
0,48
0,4
0,385
0,3 0,2
0,2
0,1
0,075
2
4
6
8
10
15
20
25
Рис. 5.7 Выдвигается гипотеза, состоящая в том, что найденная кумулятивная эмпирическая функция распределения может быть аппроксимирована известным теоретическим распределением P(x) (см. рис. 5.7). Проверка гипотезы осуществляется по критерию χ2 (см. разд. 5.2.3). Если определять частоты событий А(J), состоящие в том, что значения случайной величины A принадлежит интервалу (D(J+1)-D(J)), J = 0, JM − 1 , и эти частоты записывать в счетчики К(J), J = I, JM , то алгоритм
125 подпрограммы STAT в этом случае будет иметь вид, приведенный на рис. 5.8. Начало 1
J=0
2
J=J+1 3
X≤D[J]
0
1 4
K[J]=K[J]+1 Конец
Рис. 5.8 Можно получить по статистическим данным ν *j частости попадания случайной величины A в интервалы (D(J+1)-D(J)), J = 0, JM − 1 : * * * ν *j = P1* ; ν 2 = P2 − P1 ; ν 3 = P3 − P2 ; …;
*
*
*
Затем определить отношение
ν *j
ν *M = PM* − PM* −1 . к величине j-го
интервала (D(J+1)-D(J)): ν *j * δj = , j = 1, M , J = 0, JM - 1, j = J + 1. D( J − 1) − D( J ) Если при моделировании в счетчиках К(J) будут получены частоты событий, состоящих в том, что случайная величина А принадлежит интервалу (D(J+1)D(J)), то частости ν *j определятся:
126 JM
ν *j = A( J ) / ∑ A( J ). j= 1
Для построения кумулятивной эмпирической функции распределения частости Pj* определятся следующим образом: j
P = ∑ ν *i . * j
i =1
Среднее значение случайной величины определяется по формуле x=
m 1 ∑x , N k =1 k
(5.24)
где хk - возможные значения случайной величины, которые она принимает при различных реализациях процесса. На рис. 5.9 приведен алгоритм для определения среднего значения случайной величины. Начало 1
N=N+1
2
GEN(X)
3
1
K=K+X 4
NI≤NZ 0
5
XS=K/N Конец
Рис. 5.9
127 В этом алгоритме N - такты моделирования; NZ заданное число тактов моделирования; GEN(Х) – подпрограмма генерации случайной величины Х. После генерации всей выборки случайной величины Х в блоке 5 определяется среднее значение XS. Оценкой S2* дисперсии случайной величины определится S 2* =
1 N 2 ∑ (x − x) , N −1 k =1 k
(5.25)
где x - математическое ожидание случайной величины. Эта формула неудобна, т.к. в процессе моделирования необходимо запоминать весь массив значений х1, х2, х3, …, хN. Известна упрощенная формула, согласно которой S 2* =
N 1 N 2 1 ( ∑ xk ) 2 , ∑ xk − N −1 k =1 N( N − 1) k = `1
(5.26)
т.е. для определения S2* достаточно в двух счетчиках накапливать значения
m 2 ∑ xk k =1
m ∑ x k . Для оценки
и
k =1
корреляционного момента Kεη случайных величин ε и η с возможными значениями хk и yk применяется формула K* =
1 N−1
N
∑ (xk − x)(y k − y ) .
(5.27)
k =1
Эта формула преобразуется к виду K* =
1 N−1
N
1
N
N
k =1
k =1
∑ xk y k − N(N − 1) ∑ xk ∑ y k ,
k =1
(5.28)
требующему подсчета и запоминания в трех счетчиках соответствующих величин: N
∑ xk y k ,
k =1
N
∑ xk ,
k =1
N
∑ yk .
k =1
128 Иногда искомыми величинами являются математическое ожидание и корреляционные функции случайного процесса Х(t). В теории случайных процессов изучаются закономерности изменения случайной величины от изменения неслучайного параметра, например времени, пространственной координаты и прочее. Основным понятием в теории вероятностей является понятие испытания с определенным множеством Ω возможных элементарных событий ω - исходов испытания. Случайная величина X представляет однозначную числовую функцию X=f(ω) элементарных событий, принимающего числовое значение в зависимости от исхода ω испытания. Пусть каждому элементу ω множества Ω соответствует не одно определенное значение, а определенная числовая функция fω(t)∈(0,T) некоторого неслучайного параметра t. Так как для различных ω эти функции различны, то каждую такую функцию fω(t) называют возможной реализацией случайного процесса Х(t). Совокупность всех возможных реализаций, т.е. множество функций fω(t) образуют случайный процесс Х(t). Распределение вероятностей случайного процесса Х(t) задают распределением вероятностей случайных величин Х(t1), Х(t2), …, Х(ts), соответствующих любому конечному набору значений t1, t2, …, ts параметра t (s=1,2,3,…). На практике случайный процесс Х(t) определяют математическим ожиданием и дисперсией, являющимися функциями параметра t, а также корреляционной функцией. Рассмотрим, как определяют и как вычисляют эти функции. На рис. 5.10 показаны возможные реализации случайного процесса Х(t). Математическим ожиданием случайного процесса Х(t) называется неслучайная функция МХ(t), значение которой при каждом значении t=ti равно математическому
129 ожиданию МХ(ti) той случайной величины Х(ti), которая соответствует этому значению параметра.
X1(t) X5(t) X2(t) XN(t)
X4(t)
Математическое ожидание MX(t) XN-1(t)
X3(t)
Δt1
Δt2
Δt3
Δt4
Δt5
Δt6
Δt7
Δt8
Δt9
Δt10
Δt11
Δt12
Рис. 5.10 Математическое ожидание МХ(t) (см. рис. 5.10) представляет собой среднюю функцию, около которой группируются возможные реализации случайного процесса Х(t). Дисперсией случайного процесса Х(t) называется неслучайная функция DХ(t), значение которой при каждом значении t=ti параметра t равно математическому ожиданию DХ(ti) той случайной величины Х(ti), которая соответствует значению параметра ti. Квадратный корень из дисперсии представляет среднее квадратичное
130 отклонение случайного процесса Х(t) и определяется по формуле
σ X(t) = + DX(t) .
(5.29) *
Связь между случайными величинами Х(t ) и Х(t**), соответствующим значениям t* и t** случайного процесса Х(t), характеризуется их ковариацией BX(t*,t**)=cov[Х(t*),Х(t**)]= (5.30) =M{[Х(t*)-MХ(t*)][Х(t**)-MХ(t**)]}. Ковариация представляет собой неслучайную функцию BX(t*,t**) двух переменных t* и t**, которая графически может быть представлена поверхностью, как это показано на рис. 5.11. BX(t*,t**)
t*
t**
Рис. 5.11 Функция BX(t*,t**) называется корреляционной функцией или автокорреляционной функцией случайного процесса Х(t).
131 Интересующий интервал (0,T) разбивается на части с шагом Δt. Накапливают значения Хk(Δti) реализаций случайного процесса Х(t) для фиксированных моментов времени Δti. Затем вычисляют оценки для математического ожидания по формуле 1 N MX(Δt i ) = ∑ Xk (Δt i ) . (5.29) N k=1 Оценки для корреляционной функции BX(t*,t**) вычисляются по формуле
1 N [Xk (t* ) ∑ N -1 k=1 -X(t* )][Xk (t** ) - X(t** )] ,
B*X (t* ,t** ) =
(5.30) где t и t «пробегают» все значения t. Так при моделировании при применении формулы (5.30) необходимо накапливать N значений Xk(t*) и N значений Xk(t**). На практике для оценки корреляционной функции BX(t*,t**) применяют формулу *
**
1 N B (t ,t ) = X (t * )X (t ** ) ∑ k N - 1 k =1 k * X
*
**
N
N
−∑ X (t* )∑ X (t** ) . k k k=1 k=1
(5.31)
При применении формулы (5.31) необходимо три счетчика для подсчета сумм N
∑ Xk (t )Xk (t k=1
*
**
),
N
X (t* ) , ∑ k k=1
N
∑ Xk (t k=1
**
).
132
6. МОДЕЛИРОВАНИЕ ВЕРОЯТНОСТНЫХ АВТОМАТОВ 6.1. Аналитическое определение вероятностных автоматов 6.1.1. Формальное задание и классификация. Вероятностные автоматы (ВА) относятся к дискретностохастическому классу моделей. Данный тип моделей служит инструментом изучения динамических систем, имеющих стохастическую природу функционирования с дискретным временем. ВА является типичным представителем таких систем (probabilistic automat) и носит название P-схемы или P-автомата. В общем виде такой автомат является потактным преобразователем информации с памятью, функционирование которого может быть описано статистически. Математический аппарат ВА применим для разработки методов проектирования дискретных систем, проявляющих статистически закономерное случайное поведение, для выяснения возможностей таких систем и обоснования границ целесообразности их использования, а также при решении различных задач синтеза. Аппарат ВА применяется также для моделирования дискретностохастических объектов, у которых подача входных параметров, изменение состояния и формирование выходных параметров осуществляется в дискретные моменты времени ti (t0,t1,...,ti…). Состояние объекта определяется через предшествующие состояния и входной параметр. Выходной параметр определяется через состояние в данном такте времени, состояние в предшествующем такте, а также через входной параметр.
133 Для формального описания ВА следует задать распределение начальных состояний, множество входных параметров Х={х1,х2,...,хm}, множество состояний Z={z1,z2,...,zn}, множество выходных параметров Y={y1,y2,...,yr}. Элементы множества Х,Z,Y называют входным, внутренним и выходным алфавитом. Определение. Вероятностным автоматом называется математическая схема, которая задается следующим набором [7,14]: ВА=, где Р0 - распределение начальных состояний, Р0=|| Pi0 ||, Pi0 вероятность того, что в такте времени t0 автомат будет находиться в состоянии zi; Р=||Р(zt,yt/zt-1,хt)|| стохастическая матрица, в которой Р(zt,yt/zt-1,хt)=Р{z(t)=zt, y(t)=yt/z(t-1)=zt-1, х(t)=хt} - условная вероятность того, что в такте времени t автомат будет в состоянии zt, на выходе будет иметь параметр yt при условии, что в такте t-1 автомат был в состоянии zt-1, а на вход был подан параметр хt. При моделировании следует определить функции переходов и выходов. Функцию переходов задают в виде стохастической матрицы ||Р{zt(t)=z(t)/zt-1,хt}||. Функция выходов определяет выходные параметры и задается в виде стохастической матрицы ||Р(yt/zt-1,хt,zt)||, в которой Р(yt/zt-1,хt,zt)=Р{y(t)=yt/z(t-1)=zt-1,х(t)=хt, z(t)=zt}. Определим условную вероятность Р(yt/zt-1,хtzt): Р(zt,yt/zt-1,хt)=Р(zt/zt-1,хt)Р(yt/zt-1,хt,zt). Просуммируем правую и левую части по всем значениям yi и получим
∑ P(z t , y t /z t -1 , x t ) = P(z t /z t -1 , x t )∑ P(y t /z t -1 , x t , z t ). yi
yi
Сумма в правой части равна единице, так как это сумма вероятностей полной группы событий. Тогда вероятность Р(yt/zt-1,хt,zt) определится формулой
134 P ( y t / z t −1 , x t , z t ) =
P ( z t , y t / z t −1 , x t ) . ∑ P ( z t , y t / z t −1 , x t ) yi
6.1.2. Классификация ВА. Классификация ВА зависит от способов определения вероятности Р(yt/zt-1,хt,zt) функции выходов и вероятности Р(yt/zt-1,хt) функции переходов. Вероятностный автомат называется автоматом первого рода, если функция выходов зависит только от предшествующего состояния и входного параметра в данном такте времени: Р(yt/zt-1,хt,zt)=Р(yt/zt-1,хt), (автомат Мили). Вероятностный автомат называется автоматом второго рода, если функция выходов зависит только от состояния и входного параметра в данном такте времени: Р(yt/zt-1,хt,zt)=Р(yt/хt,zt). Вероятностный автомат называется правильным, если функция выходов зависит только от состояния в предшествующем такте и состояния в текущем такте времени: Р(yt/zt-1,хt,zt)=Р(yt/zt-1,zt). Существует правильный ВА первого рода, у которого Р(yt/zt-1,хt,zt)=Р(yt/zt-1), и правильный вероятностный автомат второго рода, у которого Р(yt,zt-1,хt,zt)=Р(yt/zt), (автомат Мура). Вероятностный автомат называется автоматом с детерминированной функцией перехода, если состояние в каждый такт времени однозначно определяется через предшествующее состояние и входной параметр:
⎧1, P( z t / z t −1 , x t ) = ⎨ ⎩0,
z t = f ( z t −1 , x t ), z t ≠ f ( z t −1 , x t ).
135 Вероятностный автомат будет называться автоматом с детерминированной функцией выходов, если выходной параметр однозначно задается через предшествующее и текущее состояние и входной параметр:
⎧1, P( y t / z t −1 , x t , z t ) = ⎨ ⎩ 0,
y t = ϕ( z t −1 , x t , z t ), y t ≠ ϕ( z t −1 , x t , z t ).
Вероятностный автомат первого рода с детерминированной функцией переходов называется автоматом со случайными реакциями. Вероятностный автомат первого рода с детерминированной функцией выходов называется марковским. Правильный ВА второго рода с детерминированной функцией выходов называется автоматом с отмеченными состояниями. Каждому состоянию соответствует свой входной параметр. Причем, если у этого ВА стохастическое отображение элементов множества Z в элементы множества Y задается взаимно однозначно, то ВА называется абстрактным и для него достаточно рассматривать алфавит внутренних состояний. Абстрактный ВА задается в виде набора ВА=<Х,Z,Р0{Р(zt/zt-1,хt}>. Если мощность множества Z равна единице, то такой автомат называется автоматом без памяти. Если мощность множества Х равна единице, то такой автомат называется автономным. Автономный абстрактный ВА называется дискретной цепью Маркова и задается в следующем виде: ВА=.
136
6.2. Табличное задание функций переходов и выходов Задание условных вероятностных мер Р(zt,yt/zt-1,хt) возможно как задание стохастического отображения Z×ХÆZ×Y табличным способом. В табл. 6.1 приведен вид совместного задания функций переходов и выходов. Таблица 6.1 Совместное задание функций переходов и выходов Z×Х z1х1 … z1хm … znх1 … znхm
z1y1 P1111 … P111m … P11n1 … P11nm
z1y2 P1211 … P121m … P12n1 … P12nm
… …
Z×Y … …
z1yr P111r … P11rm … P1nr1 … P1nm r
… … … … … …
Элементы каждой нормированы, т.е.
… … … … … …
строки n
r
∑∑ P i = 1 j =1
pk ij
zny1 Pn111 … Pn11m … Pnn11 … Pnnm 1
табл. 6.1
zny2 Pn112 … Pn12m … Pnn21 … Pnnm 2
… znyr … Pnr11 … … … Pnr1m … … Pnrn1 … … … Pnrnm
должны
быть
= 1.
Функция переходов может быть представлена как стохастическое отображение элементов множества Z×Х в элементы множества Z. В табл. 6.2 приведен общий вид задания функции переходов. Элементы каждой строки табл. 6.2 также отвечают условию нормирования, т.е. n
pk ∑ Pi = 1.
i =1
Таблица 6.2 Задание функции переходов
137 Z
Z×Х z1х1 … z1хm … znх1 … znхm
z2 P211 … P21m … P2n1 … P2nm
z1 P111 … P11m … P1n1 … P1nm
… … … … … … … …
zn Pn11 … Pn1m … Pnn1 … Pnnm
Функция выходов может быть представлена как стохастическое отображение элементов множества Z×Х×Z в элементы множества Y. В табл. 6.3 приведен общий вид задания функции выходов. Элементы каждой строки табл. 6.3 отвечают условию нормирования, т.е. r
∑P
ρkl
j
=1.
j=1
Таблица 6.3 Задание функции выходов Y
Z×Х×Z z1х1z1 … znх1zn … znхmz1 … znхmzn
y1 P1111 … P1n1n … P1nm1 … P1nmn
y2 P2111 … P2n1n … P2nm1 … P2nmn
… … … … … … … …
yn Pn111 … Pnn1n … Pnnm1 … Pnnmn
При применении аппарата вероятностных автоматов для решения задач моделирования сложных систем необходимо определить множества входных параметров, состояний и выходных параметров, определить функции
138 переходов и выходов. Следующим этапом в моделировании будет идентификация значений вероятностей функций переходов и выходов и проверка адекватности найденной модели.
6.3. Имитационное моделирование вероятностных автоматов Для имитации процесса функционирования ВА необходимо задать: - такты моделирования T, а также цикл по тактам моделирования от нуля до заданного числа тактов моделирования TZ; - закон (правило) появления (генерации) входных параметров хt∈Х на входе ВА; - модель функции переходов ||Р{zt(t)=z(t)/zt-1,хt}||; - модель функции выходов ||Р(yt/zt-1,хt,zt)||; - определить счетчики для набора статистических данных. Закон генерации входных параметров может быть задан в детерминированном виде и в виде стохастического распределения. Детерминированный закон определяет детерминированные правила появления входного параметра х в такте моделирования T. Стохастический закон появления входного параметра х в такте моделирования T представляет собой распределение вероятностей W=|w1,w2,…,wm|, где wi - вероятность появления входного параметра хi. Структурная схема алгоритма имитационной модели ВА при стохастическом законе появления входного параметра х приведена на рис. 6.1.
139 Начало 1
WWOD
2
GENZ0
3
T=T+1
4
GENX
5
STATX
6
OPRZ
7
STATZ
8
OPRV
9 1
11
STATY 10
T
Рис. 6.1 Подпрограмма WWOD, как интерфейсная часть, предназначена для ввода исходных данных для моделирования, определенных выше. Подпрограмма WIWOD составляет также интерфейсную часть имитационной модели и предназначена для вывода результатов моделирования. В подпрограмме GENZ0,
140 P10 , P20 ,..., Pn0 , исходя из значений вероятностей генерируется в схеме случайных событий (см. разд. 4.4) начальное состояние z(t0) ВА. Алгоритм подпрограммы GENZ0 приведен на рис. 6.2. Начало 1
СЕN(P)
2 3
0
J=0, A=0 J=J+1, A=A+W[J] 4
P≤A 1 Конец
Рис. 6.2 Работает алгоритм подпрограммы GENZ0 следующим образом. В блоке 1 вырабатывается датчиком случайных чисел число Р, равновероятно распределенное на отрезке [0,1]. В блоках 2 – 4 число Р сравнивается со значениями P10 , P10 + P20 , P10 + P20 + P30 и т.д. При первом выполнении условия Р< P10 + P20 + ... + Pj0 считается, что начальным состоянием ВА является состояние zj. Выходным параметром подпрограммы GENZ0 является параметр J – индекс состояния zj.
141 В подпрограмме GENX, исходя из значений вероятностей w1,w2,…,wm, генерируется входной параметр х. Алгоритм подпрограммы GENX приведен на рис. 6.3. Начало 1
СЕN(P)
2 3
0
I=0, B=0 I=I+1, B=B+W[I] 4
P≤B 1 Конец
Рис. 6.3 Алгоритм подпрограммы GENX подобен алгоритму подпрограммы GENZ0. Также в блоке 1 вырабатывается датчиком случайных чисел число Р. В блоках 2 – 4 число Р сравнивается со значениями: w1, w1+w2, w1+w2+w3 и т.д. При первом выполнении условия Р<w1+w2+…+wi считается, что на вход ВА поступает параметр хi. Выходным параметром подпрограммы GENX является параметр I - индекс хi. Подпрограмму STATX можно реализовать в виде счетчика KX[I], в котором подсчитываются частоты появления входного параметра хi, а также заполнением массива WX[T], который затем будет выведен на экран дисплея и на печать. Алгоритм подпрограммы STATX приведен на рис. 6.4.
142 Начало 1 2
KX[I]=KX[I]+1 WX[T]=I Конец
Рис. 6.4 В подпрограмме OPRZ, входными параметрами которой является индекс J предшествующего состояния и индекс I входного параметра, определяется состояние в текущем такте T согласно заданным вероятностям функции переходов ||Р{zt(t)=z(t)/zt-1хt}||. Алгоритм подпрограммы OPRZ приведен на рис. 6.5. Работает алгоритм подпрограммы OPRZ следующим образом. В блоке 1 вырабатывается датчиком случайных чисел число Р, равновероятно распределенное на отрезке [0,1]. В блоках 2 – 4 число Р сравнивается со значениями: P(z1/zj(t-1),хi(t)), P(z1/zj(t-1),хi(t))+P(z2/zj(t-1),хi(t)), P(z1/zj(t-1),хi(t))+P(z2/zj(t-1),хi(t))+P(z3/z3(t-1),хi(t)) и т.д. При первом выполнении условия Р
143 Начало 1
СЕN(P)
2 3
0
K=0, C=0 K=K+1, C=C+P[I,K] 4
P≤C 1 Конец
Рис. 6.5 Состояние массива WZ[T] затем будет выведено на экран дисплея и на печать. Алгоритм подпрограммы STATZ полностью идентичен алгоритму подпрограммы STATX (см. рис. 6.4). Подпрограмма OPRY предназначена для определения выходного параметра. Входными параметрами для этой подпрограммы являются: - индекс J предшествующего состояния (состояния в такте (T-1); - индекс I входного параметра в текущем такте T; - индекс K состояния ВА в такте T. Схема алгоритма подпрограммы OPRY зависит от задания функции переходов. Если функция переходов задана в виде матрицы ||Р(yt/zt-1,хt,zt)||, то схема алгоритма подпрограммы OPRY будет иметь вид, показанный на рис. 6.6.
144 Начало 1
СЕN(P)
2 3
0
L=0, D=0 L=L+1, D=D+P[J,I,K] 4
P≤D 1 Конец
Рис. 6.6 Отличительная особенность работы алгоритма подпрограммы OPRY состоит в том, что происходит в блоках 2 – 4 сравнение случайного числа Р со значениями: P(y1/zl(t-1),хi(t)zk(t)), P(y1/zl(t-1),хi(t)zk(t))+P(y2/zl(t-1),хi(t)zk(t)), P(y1/zl(t-1),хi(t)zk(t))+P(y2/zl(t-1),хi(t)zk(t))+ +P(y3/zl(t-1),хi(t)zk(t)) и т.д. При первом выполнении условия Р
145
D определяется как D=D+P[J,I]. В блоках 2 – 4 происходит сравнение случайного числа Р со значениями: P(y1/zl(t-1),хi(t)), P(y1/zl(t-1),хi(t))+P(y2/zl(t-1),хi(t)), P(y1/zl(t-1),хi(t))+P(y2/zl(t-1),хi(t))+P(y3/zl(t-1),хi(t))) и т.д. При первом выполнении условия Р
KY[I]=KY[I]+1 WY[T]=L J=K Конец
Рис. 6.7 В подпрограмме STATY в счетчиках KY[L] подсчитываются частоты появления на выходе ВА параметра yl, В массиве WY[T] фиксируется
146 последовательность выходных параметров yl. Состояние массива WY[T] затем будет выведен на экран дисплея и на печать. В блоке 3 определяется индекс состояния zj(t+1)=zk(t), (J=K), т.к. состояние ВА zk(t) в текущем такте T будет рассматриваться как предшествующее состояние для последующего такта T+1.
147
7. МОДЕЛИ СИСТЕМ МАССОВОГО ОБСЛУЖИВАНИЯ 7.1. Общие сведения Моделирование объекта с применением математического языка систем массового обслуживания (СМО) предусматривает в процессе формализации выделение понятий: заявка (требование), поток заявок, прибор обслуживания, очередь на обслуживание, дисциплины выбора на обслуживание, закон обслуживания, поток обслуженных заявок, поток потерянных заявок. Известна классификация, которая произведена, исходя из характеристик СМО. СМО классифицируют следующим образом [15 - 20]. По потокам заявок СМО делятся на СМО с однородным потоком и приоритетные СМО. По дисциплинам обслуживания СМО делятся на СМО с дисциплиной FIFO (первый пришел первый обслуживается), СМО с дисциплиной LIFO (последний пришел - первый обслуживается), СМО со случайным выбором на обслуживание. Исходя из того, каким временем на ожидание располагает заявка, СМО делятся на СМО с отказами, если эта величина времени ожидания равна нулю, смешанные СМО, если время ожидания является конечной величиной (СМО с ограниченной очередью), СМО с ожиданием, если время ожидания является бесконечной величиной (с бесконечной очередью). По количеству и структурному расположению приборов обслуживания СМО делятся на одноканальные (рис. 7.1,а), n-канальные, если имеются n параллельно расположенных
148 приборов (рис. 7.1,б), m-фазные СМО, если имеются последовательно расположенные m приборов (рис. 7.1,в), СМО смешанной структуры (рис. 7.1,г). Входной поток
Прибор обслуживания
Выходной поток
а Прибор обслуживания 1 Прибор обслуживания 2 …. Прибор обслуживания n б Прибор 1
Прибор 2
….
Прибор m
в
Прибор 1
Прибор 2
Прибор 4
Прибор 3
Прибор 5
г
Рис. 7.1
Прибор 6
149 Классификация может быть осуществлена, исходя из математических законов, описывающих математические модели потока входных заявок и времени обслуживания. Моделирование систем с применением схем СМО предусматривает определение выходных параметров и параметров состояния, которые могут быть представлены как показатели эффективности СМО. Моделью, описывающей функционирование системы, может служить описание времени задержки в системе. В виде моделей могут быть применены коэффициент использования СМО, вероятность того, что поступившая в СМО заявка застанет ее свободной от обслуживания, описание периода занятости системы, вероятность отказа на обслуживание, среднее число заявок в очереди, описание выходных потоков заявок, интегральные характеристики функционирования СМО. Почему аппарат теории массового обслуживания широко применим при моделировании систем самого различного назначения? Если это системы, связанные с обслуживанием клиентов, например в прачечной, химчистке, кассе и прочее, то здесь очевидно применение аппарата. Моделями СМО адекватно моделируются процессы погрузки транспорта, стрельба по целям, передача информации по каналам связи, потоки транспортных средств, перевозка грузов, обработка деталей на станке и многие другие процессы функционирования разных систем. Изготовление какого-либо изделия, состоящего из большого числа деталей, можно представить в виде модели СМО сложной структуры. Действительно, изготовление детали требует выполнение определенного множества последовательных операций на разных станках и, возможно, на разных производственных участках,
150 например отливка, штамповка, а затем токарные операции. Все эти операции, выполняемые на разных станках разными рабочими, в результате позволяют представить структуру сложной СМО. Однако здесь при моделировании появляются математические сложности. Математическую модель СМО в виде системы уравнений Эрланга [15 - 17], как наиболее простую аналитическую модель, можно получить при пуассоновском потоке заявок и экспоненциальном распределении времени обслуживания. Удобство пользования данной моделью ограничивается требованием стационарности процессов и отсутствием необходимости оценки изменения вероятностных характеристик во времени. Если же перед исследователем ставится более сложная задача оценки таких критериев, как функции распределения вероятностей времени задержки, периода занятости, числа заявок в очереди. Наиболее широко применяется описание математических моделей в виде характеристических функций, в частности, в виде преобразований ЛапласаСтильтьеса [18]. Модель времени задержки представима в виде интегродифференциального уравнения Линди-ТакачаСевастьянова [18], причем в данной модели предполагается произвольный вид распределения времени обслуживания. Однако при всей универсальности аппарата характеристических функций для применения его при описании моделей СМО, у него имеется один существенный недостаток, заключающийся в том, что получить реальные распределения действительного параметра времени далеко не всегда возможно. Это связано с тем, что не всегда существуют обратные преобразования Лапласа. При моделировании приоритетных СМО
151 применяют математические модели, изложенные в работе [19]. Если же рассматривать сложные структуры СМО (многофазные, многоканальные, приоритетные), то получить математическую модель в виде аналитических зависимостей невозможно. Поэтому для исследования сложных структур СМО разрабатывают имитационные модели [20]. Для СМО приняты обозначения А/В/m/L, в которых: - первая позиция А определяет функцию распределения входного потока заявок (интервала времени между поступающими заявками); - вторая позиция В определяет функцию распределения закона обслуживания; - третья позиция определяет m число каналов (приборов) обслуживания; - четвертая позиция L определяет максимально допустимое число заявок в очереди на обслуживание. Аналитические законы функций распределений имеют следующее общепризнанное кодированное обозначение: - М – показательное распределение; - Er - распределение Эрланга r–го порядка; - Hk - гиперпоказательное распределение порядка k; - D - вырожденное распределение; - G - произвольное распределение.
7.2. Модель входного потока заявок и времени обслуживания Входной поток заявок характеризуется начальным моментом времени t0, моментами времени ti поступления i-х заявок, случайными величинами εi - интервалами времени между заявками, εi=ti-ti-1. Модель потока в общем
152 виде представляет собой конечномерную функцию распределения вероятностей: F(х1,х2,...,хn)=Р{ε1<х1, ε2<х2,..., εn<хn}. Если εi - величины детерминированные, то имеем дело с равномерным потоком заявок. Можно задать для каждого εi плотности распределения fi(х). В том случае, когда плотность совместного распределения будет определяться как f(х1,х2,...,хn)=f1(х)f2(х)...fn(х), получим поток Пальма с ограниченным последействием. Известны три характеристики для классификации входных потоков: - ординарный поток, если за сколь угодно малый отрезок времени вероятность появления двух и более заявок равна нулю; - стационарный поток, если вероятность поступления kзаявок за интервал времени (t0,t) не зависит от выбора момента t0; - поток без последействия, если вероятность появления k-заявок внутри некоторого интервала не зависит от появления заявок до момента начала этого интервала. Простейший поток (поток Пуассона) удовлетворяет всем трем условиям. Для этого потока вероятность поступления k-событий за время t определится Pk (t ) =
(λt )k −λ t . e k!
Функция распределения времени поступления между двумя заявками определяется экспоненциальным распределением - A(t)=1-ε-λt. Hаиболее часто применяется при моделировании экспоненциальное распределение и распределение Эрланга. Функция распределения плотности вероятности интервалов между заявками для эрланговского потока r-го порядка определится
153 (λt )r −λt . e λr! Если r=0, то получаем экспоненциальное распределение. Эрланговские распределения описывают модели потоков с последействием. Моделями времени обслуживания могут служить функция и плотность распределения вероятности длительности обслуживания. При исследовании прибора обслуживания необходимо определить эмпирическую плотность распределения длительности обслуживания, а затем ее аппроксимировать известными теоретическими распределениями. Hаиболее применяемые распределения: нормальное, постоянное, экспоненциальное распределения и распределение Эрланга. ar ( t ) =
7.3. Модель Эрланга При моделировании СМО исследуется изменение в системе за сколь угодно малый отрезок времени. Составляются уравнения в частных приращениях, от которых затем осуществляется переход к дифференциальным уравнениям. Рассмотрим вывод дифференциальных уравнений, известных как модель Эрланга. Будем рассматривать одноканальную СМО с бесконечной очередью, с ожиданием, пуассоновсим потоком заявок и экспоненциальным временем обслуживания. Поток ординарный, простейший, функция распределения интервалов между заявками является экспоненциальной. Модель смены состояний можно представить в виде графа, приведенного на рис. 7.1.
154
z0
z1
…
z n-1
zn
z n+ 1
…
Рис. 7.1 Составим уравнения Эрланга в частных приращениях, которые будут отображать те изменения, которые произошли в системе за сколь угодно малое время Δt. Из графа состояний (см. рис. 7.1) следует, что в числе состояний СМО существует «особое» состояние – состояние, при котором в СМО нет заявок. Определим это состояние, начальное состояние, когда число заявок в СМО n=0. Остальные состояния идентичны по своим связям с другими состояниями и определены числом заявок в СМО n≥1. Вероятность Р0(t+Δt) того, что СМО к моменту t+Δt останется в нулевом состоянии, определится из анализа полной группы событий: - в момент времени t система была в нулевом состоянии и за время Δt заявки не поступали; - в момент времени t система была в единичном состоянии (в СМО была одна заявка) и за время Δt обслуживание заявки окончилось. Вероятность Р0(t+Δt) определится Р0(t+Δt)=Р0(t)(1-λΔt)+Р1(t)μΔt, (7.1) где 1-λΔt - вероятность непоступления заявки в СМО за время Δt, μΔt - вероятность окончания обслуживания заявки за время Δt. Вероятность Рn(t+Δt) того, что к моменту времени t+Δt система будет в n-м состоянии, определится из рассмотрения следующей полной группы событий:
155 - в момент времени t в системе было n-1 заявок и за время Δt поступила заявка; - в момент времени t система была в n-м состоянии и за время Δt заявки в СМО не поступили и обслуживание не окончено; - в момент времени t в системе была n+1 заявка и за время Δt обслуживание заявки было окончено. Вероятность Рn(t+Δt) определится Рn(t+Δt)=Рn-1(t)λΔt+Рn(t)[1–(λ+μ)Δt1+Рn+1(t)λμΔt, (7.2) где Δt - вероятность поступления заявки за время Δt; 1– (λ+μ)Δt - вероятность непоступления заявки в СМО и неокончания обслуживания заявки за время Δt. Уравнения (7.1) и (7.2) представляют собой модель рассматриваемой СМО в виде уравнений Эрланга в частных приращениях. От уравнений в частных приращениях перейдем к дифференциальным уравнениям. Для этого Рn(t) из правой части перенесем в левую, разделим каждую часть на Δt и определим предел при Δt→0. Получим уравнения: dP0 ( t ) = −λ P0 (t ) + μP1 (t ), n = 0, dt dPn (t ) = −(λ + μ )Pn (t ) + λPn−1 (t ) + μPn+1 (t ), n ≥ 1 (7.3) dt модель Уравнения (7.3) представляют собой исследуемой СМО в виде дифференциальных уравнений Эрланга для нестационарного случая. Так как поток заявок, поступающих в систему, отвечает условиям стационарности, то значение производных можем приравнять к нулю. Получим модель СМО в виде уравнений Эрланга для стационарного режима Р1=ρР0, n=0, (1+ρ)Рn=Рn+1+ρРn-1, n≥1, (7.4) где λ/μ=ρ - коэффициент использования системы.
156 Решение системы уравнений (7.4) будет иметь следующий вид: Рn=ρnР0, Р0 =(1-ρ), Рn = ρn (1-ρ), где Рn - вероятность того, что в СМО будет n заявок. Затем могут быть определены такие характеристики СМО, как математическое ожидание числа заявок в СМО, математическое ожидание числа заявок в очереди и другие.
7.4. Исследование модели пуассоновского процесса с помощью производящих функций Будем считать, что на вход СМО поступает пуассоновский поток заявок с интенсивностью λ и вероятностью Рn(t) того, что за время t в СМО поступит n заявок. Делаем предположение, что при сколь угодно малом отрезке Δt вероятность поступления заявки определится через λΔt. Вероятность непоступления заявки определится как 1-λΔt. Поток является ординарным. Можно записать уравнение в частных приращениях. Вероятность того, что к моменту времени t+Δt в системе не будет заявок, определится через вероятность того, что в системе в момент времени t не было заявок, и за отрезок времени Δt заявки в систему не поступили: Р0(t+Δt)=Р0(t)(1-λΔt). (7.5) Вероятность того, что к моменту времени 1+Δt в СМО будет n заявок, определится как вероятность того, что в момент t в СМО было n заявок, и за время Δt заявка не поступила, или к моменту времени t в СМО были n-1 заявок, и за время Δt поступила еще одна заявка: Рn(t+Δt)=Рn(t)(1-λΔt)+ Рn-1(t) λΔt. (7.6) После проведения преобразований уравнений (7.5) и (5.6), аналогичных преобразованиям уравнений (7.1), (7.2), получим дифференциальные уравнения:
157 dP0 (t ) = −λP0 (t ), n = 0, dt dPn (t ) (7.7) = − λPn (t ) + λ Pn−1 (t ), n ≥ 1 . dt Рассмотрим решение уравнений (7.7) с применением производящих функций. Производящая функция Р(z,t) для функции Рn(t) определится ∞ P ( z , t ) = ∑ Pn ( t ) z n =P 0 ( t ) + P1 ( t ) z + P 2 ( t ) z 2 + ... n=0 Вероятность Рn(t) получим из производящей функции после того, как продифференцируем ее n раз и положим z=0. При решении уравнения в частных приращениях начало отсчета времени выбирается произвольно даже после того, как в систему поступило i заявок. Будем считать, что при t=0 в СМО есть i заявок. В этом случае Рn(0)=0, если n≠i и Рn(0)=1, если n=i. Таким образом, ∞
∞
n=0
n=0
P ( z , o ) = ∑ Pn ( 0 )z n = Pi ( 0 )z i , P(1, t) = 1 = ∑ Pn ( t ). ∞ ∂P ( z , t ) ∂ ∞ (l) n n = ∑ Pn z = ∑ Pn z . n=0 ∂t ∂t n =0
Если умножим дифференциально-разностное уравнение (7.5) на zn, а дифференциально-разностное уравнение (7.6) на z0 и просуммируем по всем значениям n, так что
dP0 (t) 0 z = -λP0 (t)z 0 + dt ∞ dP (t) + ∑ n z n = -λPn (t)z n + λPn-1 (t)z n , dt n=0 то получим, что сумма в левой части равна ∂P ( z , t ) , ∂t
158 а сумма первых членов правой части равна λР(z,t). Просуммировав вторые члены правой части по n, получим ∞ (t )zn =λ P (t )z + λ P (t )z 2 + ... = zP( z , t ). . ∑ P n =1 n −1
0
1
Если в правой части выделить множитель λz, то всю сумму можно записать в виде λzР(z,t). Таким образом, система приводится к линейному дифференциальному уравнению для производящей функции, которое имеет вид ∂P( z , t ) − λ ( z − 1)P( z ,0) = 0 . ∂t Решение этого уравнения при постоянном значении z (поскольку оно не зависит от t) имеет вид Р(z,t)=Сeλ(z-1)t. Допустим, что к моменту t=0 не поступило ни одного требования, тогда Р(z,0)=1, так как i=0. Таким образом, С=1 и Р(z,t)=eλ(z-1)t. Как говорилось выше, Рn(t) определится Pn ( t ) =
1 ∂ n P(z, t) . n! ∂zn z=0
Таким образом,
( λ t )n e − λ t P0 ( t ) = e − λ t , P1 ( t ) = λ te − λ t , Pn ( t ) = , n!
что является искомой пуассоновского потока.
математической
моделью
7.5. Модель для определения времени задержки в виде интегро-дифференциальных уравнений Линди-Такача-Севастьянова Модель описывает функцию распределения времени задержки в СМО [10]. Пусть Р(ω,t)- вероятность того, что
159 заявка ожидает в очереди в течение времени ω(t)≤ω при условии, что она поступила во время t, так что Р(ω,t)=Р{ω(t)≤ω/t}. Будем рассматривать NÆ∞ идентичных, одновременно действующих одноканальных СМО, на вход каждой из которых поступает пуассоновский поток заявок, а время обслуживания определяется функцией распределения В(t)=Р{bω. Число систем первой группы равно NР(ω,t), а число систем второй группы равно N-NР(ω,t). Рассмотрим изменения, которые могут произойти в момент времени t+Δt. Задача будет состоять в том, чтобы определить вероятность Р(ω,t+Δt) через вероятности Р(ω,t) и Р(ω+ Δt,t). Для момента времени t+Δt число систем первой группы становится равным NР(ω+Δt,t) минус число тех систем NС, у которых в момент времени t было время ожидания ω(t)≤ω, но вследствие поступления заявки за время Δt, ω(t) превысит уровень w. Можно записать: NР(ω,t+Δt)=NР(ω+Δt,t) - NС. (7.8) Поставим задачу определения числа систем NС. Вначале определим число систем, у которых в момент времени t ω(t) находится внутри интервала (х,х+dх). Так как Р(х,t) - функция распределения вероятностей, то после дифференцирования при х>0 получим ее плотность распределения. Тогда число систем определится N[
∂P ( x , t ) ]dx , если х>0, или NР(0,t), если х = 0. ∂x
Предполагается, что в интервале (t,t+Δt) время ожидания превзойдет величину ω, если за время Δt
160 поступит одна заявка и если время обслуживания y этой заявки, сложенной с величиной х, превзойдет величину ω, т.е. (х+y>ωÆy>ω-х). Поэтому нужно умножить число систем, у которых время ожидания равно х, на вероятность поступления одного требования за время Δt, т.е. на λΔt, и на вероятность того, что время обслуживания этой заявки превзойдет величину ω-х. Если b(y) - плотность распределения времени обслуживания, то вероятность последнего события равна P {b ≥ ω − x } =
∞
b ( y )d ( y ) . ∫ ω−x
Для фиксированного значения времени ожидания ω>0 число систем, которые перейдут из первой группы во вторую, определится выражением NλΔt
∂P (x, t) dx ∂x
∞
∫ b ( y )d ( y ) =
NλΔt
ω−x
∂P (x, t) dxB c ( x ) , ∂x
которое должно быть просуммировано по всем х, х<0≤ω . y
Причем B c (y ) = 1 - ∫ b (u )d (u ) = 1 - B (y ) . Если х=0, то 0
число систем, переходящих во вторую группу, определится ∞
N λ Δ tP ( 0 , t ) ∫ b ( y ) d ( y ) = N λ Δ tP ( 0 , t ) B c ( x ) . ω
Следовательно, уравнение (7.8) будет иметь вид NP ( ω , t + Δ t ) = NP ( ω + Δ t , t ) − ω
− NλΔt
dP ( x , t ) B c ( ω − x ) dx − dx 0+
∫
− N λ Δ tB c ( ω ) .
(7.9)
Применим разложение функции Р(ω+Δt,t) в ряд Тейлора P (ω + Δ t, t) = P (ω , t) +
∂P (ω , t) Δ t + 0(Δ t) , ∂ω
161 разделим обе части уравнения (7.9) на N, вычтем из обеих частей Р(ω,t), разделим на Δt и, перейдя к предельным выражениям, получим ∂P (ω , t ) ∂P (ω , t ) = − ∂t ∂ω ω ∂P (x, t) B c ( w − x ) dx − λ P ( 0 , t ) B c ( w ) . −λ∫ ∂ x 0+
Решение данного интегродифференциального уравнения должно удовлетворять условиям: Р(ω,0)=1 для всех ω; Р(∞,t)=1 для всех t. Интегрируем по частям: ω ∂P (ω , t ) ∂P (ω , t ) − λ P ( ω , t ) + λ ∫ P ( ω − u , t ) dB c ( v ) . = ∂ω ∂t 0
Если B(t)=1-BС(t), то
ω ∂ P ( ω, t ) ∂ P ( ω, t ) = − λ P ( ω, t ) + λ ∫ P ( ω − x )d x P ( x , t ). (7.10) ∂t ∂ω 0
Уравнение (7.10) носит название уравнения ЛиндиТакача-Севастьянова, и оно является моделью для описания времени ожидания в СМО. Для стационарного режима уравнение (7.10) примет вид ω ∂P (ω ) = λ P ( ω ) − λ ∫ P ( w − x )dP ( x ) . (7.11) ∂ω 0 Математическая модель может быть представлена в виде характеристической функции, если применить к уравнениям (7.9) и (7.11) преобразование ЛапласаСтилтьеса, которое имеет вид ω
ω ( s ) = ∫ e − st d ω ( t ) . 0
Характеристическая функция распределения Р(ω,t) из решения уравнения (5.9) определится
ω(s, t ) =
P ( 0, t ) , 1 − λ[1 s − (1 β(s ))]
162 где β(s) - характеристическая функция распределения B(t). Характеристическая функция распределения Р(ω) из решения уравнения (7.11) определится как 1− ρ ω(s) = . 1 − β( s ) 1− λ s
7.6. Имитационное моделирование одноканальной СМО Алгоритмизация может осуществляться с применением способа Δt-моделирования, который позволяет определить состояния СМО через интервал времени Δt. 7.6.1. Алгоритм имитационной модели одноканальной СМО. Одноканальная СМО самая простая модель (см. рис. 7.1,а) при условии пуассоновского входного потока заявок и экспоненциального распределения времени обслуживания. Если поток заявок пуассоновский, то СМО определена шифром M/G/1/PM. Одноканальную СМО следует рассматривать как элемент, т.е. предел членения СМО сложной структуры. Рассмотрим задачу построения имитационной модели одноканальной СМО с пуассоновским потоком заявок, характеризующимся интенсивностью α и функцией распределения времени обслуживания B(t). Для понимания процесса функционирования одноканальной СМО следует построить временные диаграммы, на которых отображают время задержки ω(t) заявок, а также определяют интервалы периода занятости π(t). На рис. 7.2 приведены временные диаграммы, отображающие процесс функционирования СМО.
163 Поток заявок П(t) описывается стохастическим распределением вероятностей длин интервалов между соседними заявками (показаны точками). Время задержки в момент поступления заявки скачком увеличивается на величину, равную времени обслуживания поступившей заявки, а затем убывает с угловым коэффициентом, равным единице. Интервалы периода занятости π(t) на нижней оси показаны выделенными отрезками (толстые линии). П(t) ω(t)
t
t0
t М=0 М=1
М=0
М=0
М=1
М=0
М=1
М=1
М=0
М=0 М=1
Рис. 7.2 При пуассоновском потоке заявок длины интервалов времени между соседними заявками описываются экспоненциальным распределением A(t)=1-e-αt. На рис. 7.2 имеются идентификаторы: - I=1, если за такт моделирования Т=Δt поступила заявка с вероятностью Рn, I=0, если заявка в систему не поступила; - М=1, если в СМО есть очередь на обслуживание, М=0, если очередь отсутствует; - L=1, если прибор занят обслуживанием (в СМО одна и более заявок ), L=0, если прибор от обслуживания свободен (в СМО нет заявок);
164 - К=1, если обслуживание окончено и заявка покидает СМО; - JPM - максимально возможная длина очереди. На рис. 7.3 приведена структурная схемя алгоритма имитационной модели СМО M/G/I/JPM, полученная исходя из модульного принципа построения программ.
165 Начало 1 2 3
4
11 12
WWOD 23
13
T=T+1 23
GEN
I=1
10
0
0
16
B>0
1 1
5
1
STATO OBS
15
L=1 0
1 17
JP<JPM
STATB
0 6
14
WIB
L=0
18
PZ=0
23
0
0
19
M=1
1 7 9
10
8
STATP
20 STATT 0
OSTH
L=1
1
14
16,17
1
0 STATPZ
21
22
1
K=1 1 STATW
0 11
M=1
23
0
1
24
T
1
2
0 WIW
12 Конец
Рис.7.3 Алгоритм имитационной модели построен в соответствии с процедурами поступления заявок в систему, постановки их в очередь при занятом приборе,
166 обслуживания заявок. Структура алгоритма имитационной модели состоит из подпрограмм, имитирующих конкретные операции в СМО. «Движение» по подпрограммам осуществляется с помощью ключей. Работает алгоритм имитационной модели следующим образом. Вначале происходит обращение к подпрограмме WWOD – ввод исходных данных, в которой описываются необходимые массивы, общие области, задаются начальные значения. В начальный такт моделирования необходимо определить: - счетчик тактов моделирования Т=0; - идентификаторы М=0, L=0, так как нет очереди и прибор свободен от обслуживания; - длительность времени обслуживания ВТ=0, так как в СМО нет заявок; - число заявок в очереди JP=0; - момент времени начала интервала до следующей заявки ТН=0; - длительность периода занятости PZ=0; - память под все массивы: N[J] – массив времен поступления J-х заявок в очередь; массивы чисел для сравнения получаемых случайных величин (интервалов времени между соседними заявками, времени ожидания очереди, числа потерянных заявок, времени обслуживания, периода занятости и т.д.) с их оценками; - и ввести значение вероятности РР=Рn; - заданное число тактов моделирования TZ, значение JPМ и т.д. Затем наращивается такт моделирования (см. блок 2 на рис. 7.3) и за данный отрезок времени Δt=1 просматриваются изменения в СМО, для чего и предусмотрены подпрограммы.
167 Далее по алгоритму следует обращение к подпрограмме GEN – генерация заявок входного потока (см. блок 3 на рис. 7.3). Алгоритм подпрограммы GEN будет рассмотрен ниже. В подпрограмме GEN на основе анализа полной группы событий – поступления и непоступления заявок за рассматриваемый такт Т определяется факт появления заявки (идентификатор I=1) либо непоявления заявки (идентификатор I=0). Зная такт моделирования Т, результат работы подпрограммы GEN, при I=1 (см. блок 4 на рис. 7.3) и числе заявок в очереди, меньшем максимально возможного (см. блок 5 на рис. 7.3), обращаемся к подпрограмме набора статистических данных потока заявок STATP. Это происходит потому, что заявка будет поставлена в очередь на обслуживание. Переход к подпрограмме STATP возможен также и в том случае, если в данном такте моделирования Т заявка поступила в СМО и в этом же такте СМО покидает заявка, обслуживание которой завершено, т.е. идентификатор L=0 (см. блок 6 на рис. 7.3). В подпрограмме STATP набираются статистические данные для построения эмпирической кумулятивной функции распределения А*(t) длин интервалов между двумя любыми соседними заявками. Алгоритм подпрограммы STATP будет рассмотрен ниже. Затем следует постановка поступившей заявки в очередь, что осуществляется в подпрограмме OSTH. Анализ очереди на обслуживание состоит из анализа следующих событий: а1) есть очередь и за такт Т поступила заявка; а2) есть очередь и за такт Т не поступила заявка; а3) нет очереди и за такт Т поступила заявка; а4) нет очереди и за такт Т не поступила заявка. Если поступившую в такт Т заявку идентифицировать обозначением N[J]=T, где J – ее номер в очереди, а N[J]=T
168 – такт поступления заявки в систему, то при событии а1 поступившая заявка получит значение идентификатора N[J]=T, где J=JP+1, JP – число заявок в очереди в предшествующем такте Т-1. При событии а3 поступившая заявка получит значение идентификатора N[1]=T. Если заявка поступила, а число заявок в очереди равно JPM, а также при полностью заполненном буфере очереди в этом такте не окончено обслуживание заявки, то поступившая заявка теряется. В этом случае происходит переход к подпрограмме набора статистических данных потерянных заявок STAТT. Если прибор свободен от обслуживания (L=0) и имеется очередь на обслуживание (М=1), то обращаемся к подпрограмме выбора заявки на обслуживание из очереди WIB (см. работу блоков 10, 11, 12 на рис. 7.3). В соответствии с заданной дисциплиной выбора на обслуживание осуществляется выбор заявки из очереди при условии, что прибор в такте Т свободен от обслуживания. Для заявки, выбранной на обслуживание, определяется время пребывания в очереди W и в подпрограмме набора статистических данных времени задержки в очереди STATO величина W фиксируется для набора статистических данных для дальнейшего построения кумулятивной эмпирической функции * распределения времени ожидания W (t). Затем в алгоритме следует переход к подпрограмме определения времени обслуживания OBS (см. блок 14 на рис. 7.3). При имитации процессов (см. работу блоков 10, 11 на рис. 7.3), обслуживания прибором анализируются следующие события: б1) обслуживание предыдущей заявки окончено, очереди нет и заявка не поступила; б2) обслуживание окончено, заявка поступила, очередь из одной поступившей заявки;
169
б3) обслуживание окончено, очередь есть, заявка не поступила; б4) обслуживание окончено, очередь есть, заявка поступила; б5) обслуживание не окончено, очереди нет, заявка не поступила; б6) обслуживание не окончено, очереди нет, заявка поступила; б7) обслуживание не окончено, очередь есть, заявка не поступила; б8) обслуживание не окончено, очередь есть, заявка поступила. При выполнении событий б2, б3, б4 определяется время обслуживания В заявки, которая принята на обслуживание в соответствии с результатом работы подпрограммы WIB. При событиях б5 – б8 текущая величина времени обслуживания ВТ уменьшается на единицу. Текущая величина времени обслуживания ВТ введена в соответствии с динамикой изменения времени обслуживания, показанной на рис. 7.2. Затем в подпрограмме набора статистических данных времени обслуживания STATB фиксируется величина В для последующего построения кумулятивной эмпирической функции распределения времени * обслуживания В (t). К подпрограмме STATB обращение происходит только в том такте Т, в котором определено значение времени обслуживания В при занятости прибора обслуживанием (см. блоки 15, 16, 17 на рис. 7.3). В подпрограмме STATPZ (см. блок 20 на рис. 7.3) фиксируется случайная величина PZ – длительность периода занятости для набора статистических данных кумулятивной эмпирической функции распределения периода занятости Z*(t). Обращение в подпрограмме STATPZ происходит в том случае, если заявок в очереди
170 нет (см. блок 19 на рис. 7.3), прибор свободен от обслуживания (см. блок 15 на рис. 7.3) и подсчитанная величина PZ больше нуля. В подпрограмме STATW фиксируется случайная величина IN – интервал времени между двумя соседними обслуженными заявками, что позволяет набирать статистические данные для дальнейшего построения кумулятивной эмпирической функции распределения длин интервалов между обслуженными требованиями D*(t). 7.6.2. Алгоритмы подпрограмм. Рассмотрим особенности алгоритмов подпрограмм алгоритма имитационной модели одноканальной СМО. На рис. 7.4 приведена структурная схема алгоритма подпрограммы GEN. Начало 1
3
I=1
1
2
RAN
x≤PP
0
4
I=0
Конец
Рис. 7.4 В программе GEN событие появления заявки I=1 (см. блок 3 на рис. 7.4) либо событие непоявления заявки I=0 (см. блок 4 на рис. 7.4) выбираются по известной схеме моделирования случайных событий. Вероятность поступления заявки PP при условии пуассновского распределения входного потока заявок определится, как PP=αΔt.
171 На рис. 7.5 приведена структурная схема алгоритма подпрограммы STATP, который работает следующим образом. Если в такте Т появилась на входе СМО заявка (I=1), то идентификатору ТK1 присваивается значение Т. Идентификатор TK1 принимает значение конца интервала между любыми двумя соседними заявками. Идентификатор TH1 принимает значение начала интервала. Длина интервала определится D1=TK1–TH1. Очевидно, что для определения интервала до следующей заявки, конец данного интервала станет началом следующего (см. блок 3 на рис. 7.5). Затем значение D1 сравнивается с заданными границами оценок D1[J]. При выполнении условия D1≤D1[J] (см. блок 6 на рис. 7.4) в соответствующий счетчик K1[J] прибавляется единица. Таким образом, в счетчиках K1[J] к окончанию процесса моделирования накапливаются частоты Nj событий, состоящих в том, что длины интервалов меньше соответствующих величин D1j. Эмпирические оценки вероятностей (частости) этих событий определятся по формулам Nj K1[J ] Pj* = = , j = 1, JM1 , N K1[JM1] где N – число заявок, поступивших в СМО за время моделирования, зафиксированное в счетчике К1[JM1]; JM1 – число счетчиков К1. Заметим, что в счетчик К1[1] заносится величина D11, в счетчик К1[2] заносится величина D12, …, в счетчик К1[JM1] заносится величина D1JM1, D11
172 Начало 1 2 3 4 5
6
TK1 = T D1=TK1-TH1 TH1=TK1 J=0 J=J+1 0 D1≤D1[J]
1 7 K1[J]=K1[J]+1 8 J < JM
1
1 Конец
Рис. 7.5 Структурная схема алгоритма подпрограммы набора статистики о потерянных заявках STATT (см. рис. 7.6) аналогична схеме алгоритма подпрограммы STATP .
173 Начало 1 2 3 4
5
J = J +1
TK2 = T 6
D2 =TK2 – TH2
D2 ≤ D2[J]
0
TH2 =TK2 1 7 K2[J]=K2[J]+1
J=0
8 J < JM2
1
1 Конец
Рис. 7.6 Информация о частотах длин интервалов между потерянными заявками накапливается в счетчиках K2[J], а в счетчиках K2[JM2] будет к последнему такту моделирования TZ получено количество потерянных заявок. Частости событий, состоящих в том, что длины интервалов D2 меньше границ оценок D2[J], определятся по формуле K 2[J ] η*j = , j = 1, JM 2 , K 2[JM 2] а оценка вероятности (частость) потери заявок из-за занятости прибора и буфера очереди определится формулой * = PПТ
K 2[JM2] . K1[JM1]
174 На рис. 7.7 приведена структурная схема алгоритма подпрограммы OSTH. Начало 1 2
J = JP+1
3 4
JP =J M=1
5
I=0 Конец
N[J] = T
Рис. 7.7 Определяется номер в очереди J для поступившей заявки. Он будет на единицу больше номера JP последней заявки в очереди на обслуживание (см. блок 1 на рис. 7.7). Для поступившей заявки определяется идентификатор N[J]=T (блок 2 на рис. 7.7), который имеет значение, равное времени поступления этой заявки в СМО. Число заявок в очереди стало на одну больше, то есть JP=J (блок 3 на рис. 7.7). Так как в очереди появилась заявка на обслуживание, то ключ М=1, а значение I=0, так как поступившая заявка «обработана» при постановке на очередь (блок 4 и блок 5 на рис. 7.7). В имитационной модели предусмотрено применение трех дисциплин выбора заявок из очереди: первый пришел – первый обслужен (FIFO); последний пришел – первый обслужен (LIFO); случайный выбор заявки из очереди на обслуживание (SIRO). На рис. 7.8 приведена структурная схема алгоритма подпрограммы WIBP – выбор заявки из очереди при прямом порядке обслуживания FIFO. Работает алгоритм следующим образом.
175 начало 1 2 3
4
N = N[1] W=T-N J=1
1
JP = 1 0
6
7
5
N[J]=N[J+1]
J<JP-1
M=0 JP=0
0
1 8 9
J=J+1 JP = JP - 1
Конец
Рис. 7.8 Вызывается первый элемент массива N[1] (см. блок 1 на рис. 7.8), имеющий значение времени поступления в систему заявки, первой стоящей в очереди. В предшествующем такте Т-1 прибор освободился от обслуживания (L=0) и первая из очереди заявка в такте Т принимается к обслуживанию. Следовательно, время задержки этой заявки в очереди определится W=T–N (см. блок 2 на рис. 7.8). Затем, если очередь существует (см. блок 3 на рис. 7.8), необходимо «сдвинуть» массив очереди
176 на один элемент вперед, то есть второй элемент массива становится первым, третий – вторым и т.д. (см. блоки 6, 7, 8 на рис. 7.8). Затем номер последней заявки в очереди уменьшается на единицу (см. блок 9 на рис. 7.8). Очередь существует, если после выбора заявки на обслуживание номер последней заявки в очереди будет больше или равен двум (см. блок 3 на рис. 7.8). Если же в очереди была одна заявка (JP=1), то ключ М=0 и число заявок в очереди JP=0. На рис. 7.9 приведена структурная схема алгоритма подпрограммы WIBI – выбор заявки из очереди при инверсном порядке обслуживания LIFO. начало 1 2 3
N = N[JP] W=T-N JP = JP - 1
4
0
JP = 0 1 5
M=0 Конец
Рис. 7.9
177 При данном порядке обслуживания выбирается последняя из очереди заявка (ее номер JP) и время ее задержки в системе определится W=T–N[JP]. Число заявок в очереди после выбора уменьшается на единицу (см. блоки 1,2,3 на рис. 7.9). Затем проверяется условие наличия заявок в очереди (см. блок 4 на рис. 7.9). Если заявок в очереди нет, то ключ М=0. На рис. 7.10 приведена структурная схема алгоритма подпрограммы WIBS – случайного (равновероятного) выбора заявки из очереди на обслуживание. Работает алгоритм следующим образом. 7
Начало 8
1 2 3 4
0
RAN 9 X*=X×JP J=0
1
J < JP J=J+1
X* ≤ J
6 7
J=J+1
10
11
5
N[J]=N[J+1]
0
1
0 JP=JP–1
12 JP = 0
N = N[J] 13
W=T–N
8
1 M=0
Конец
Рис. 7.10
178 Подпрограммой RAN (см. блок 1 на рис. 7.10) генерируется случайное число X, равновероятно распределенное в интервале (0,1). Затем величина этого числа приводится к длине очереди или величине интервала (0,JP). Для этого число X умножается на величину JP (см. блок 2 на рис. 7.10). Полученное число X*=X×JP равновероятно распределено в интервале (0,JP). Затем происходит поиск в схеме случайных событий (см. блоки 3, 4, 5 на рис. 7.10). При первом же выполнении условия считается, что на обслуживание случайно выбрана J-я заявка. Определяется ее время задержки W=T–N[J] (см. блоки 6, 7 на рис. 7.10), а затем все заявки, стоящие в очереди после J-й, сдвигаются на один номер вперед (см. работу блоков 8, 9, 10 на рис. 7.10). Затем уменьшается на одну число заявок в очереди (см. блок 11 на рис. 7.10), и если число заявок в очереди равно нулю, то ключ М=0 (см. блоки 12, 13 на рис. 7.10). На рис. 7.11 приведена структурная схема алгоритма подпрограммы STATO – набора статистических данных о времени задержки заявок. 3
Начало 1
2
4
J=0
W ≤ W[J]
1
0
K[3]=K3[J]+1 2 J=J+1
5 J > JM3
0
1
4
Конец
Рис. 7.11
179 Полученная в подпрограмме WIB случайная величина сравнивается с границами W[J] по правилу W ≤ W[J ], J = 1, JM 3 (см. блок 2 на рис. 7.11). В счетчиках K3[J] накапливается величина частоты события, состоящего в том, что случайная величина W≤W[J]. Оценки вероятностей (частости) этих событий определятся по формуле K 3[J ] ω*j = , j = 1, JM 3 . K 3[JM 3] На рис. 7.12 приведена структурная схема алгоритма подпрограммы OBS - имитации обслуживания заявок прибором.
W
Н ачало
6 7 8
9
O PRB PZ =PZ+B
0
1 BT > 0
4
1 K=1
BT = B
5
L=0
L=1
2
1
BT=BT – 1
3 BT = 0
0
К онец
Рис. 7.12 Работает алгоритм следующим образом. Имитация длительности обслуживания должна осуществиться либо при поступлении заявки в СМО, свободную от обслуживания, либо после окончания обслуживания очередной заявки и при наличии заявок в очереди.
180 Изменение времени обслуживания в каждом такте моделирования осуществляется идентификатором ВТ. Если в (Т-1)-м такте не окончено обслуживание заявки, то ВТ>0 (см. блок 1 на рис. 7.12). Затем проверяется условие, не будет ли окончено обслуживание в Т-м такте (см. блоки 2, 3 на рис. 7.12). Если обслуживание окончено, то формируются признаки выходного потока заявок К=1 (заявка покидает СМО обслуженной) и свободного прибора (L=0). Если в предшествующий такт обслуживание было окончено (ВТ=0), то имитируется время обслуживания В в подпрограмме OPRB (см. блок 6 на рис. 7.12) для принятой на обслуживание заявки. Время обслуживания В определяется исходя из задаваемого вида функции распределения вероятностей B(t). При имитации могут быть применены известные методы: метод обратных функций, метод ступенчатой аппроксимации и другие. Наращивается значение идентификатора PZ – периода занятости (см. блок 7 на рис. 7.12). Определяется идентификатор текущего времени ВТ=В и устанавливается признак занятости прибора L=1. На рис. 7.13 приведена структурная схема алгоритма подпрограммы STATB – набора статистических данных о времени обслуживания заявок. Статистические данные накапливаются в такты, при которых прибор занят и начато обслуживание очередной заявки (см. блоки 15, 16 на рис. 7.13) L=1 и B>0, то есть в такты принятия заявок на обслуживание. В алгоритме подпрограммы STATB организован цикл по переменной J (см. блоки 1, 2, 5 на рис. 7.13). Случайная величина В сравнивается с границами В[J], заданными с экрана дисплея (см. блок 3 на рис. 7.13).
181 4
Начало 1 2
0
3
J=0
1
5
K4[J]=K4[J]+1
J<JM4
J =J + 1 6 B ≤ B[J]
0 B=0 Конец
1
Рис. 7.13 В счетчиках K4[J] накапливаются величины, определяющие частоты, состоящие в том, что время обслуживания В меньше границы его оценки B[J], J = 1, JM4 . Частости этих событий определяются формулой K 4[J ] ρ*j = , j = 1, JM4 . K 4[JM4] На рис. 7.14 приведена структурная схема алгоритма подпрограммы STATW – набора статистических данных выходного потока обслуженных заявок. Набор статистических данных для исследования интервалов времени между обслуженными заявками осуществляется в такты, в которых истекает время обслуживания (L=0), обслуженная заявка покидает СМО, то есть признак наличия заявки выходного потока К=1 (см. блоки 15, 21 на рис. 7.3). В блоках 1, 2 (см. рис. 7.14) определяется интервал времени D3 между соседними обслуженными заявками. В блоке 3 начало нового интервала ТН3 между обслуженными заявками
182 определяется как интервала ТК3.
значение
конца
Начало 1 2 3
3 4
TK3 =T
J=0
5
D3=TK3–TH3 TH3 = TK3
предшествующего
J =J + 1 0
6
D3 ≤ D3[J]
4 1
7
K5[J]=K5[J]+1
8 J < JM5
9
1
0 K=0 Конец
Рис. 7.14 Логика работы алгоритма подпрограммы STATW подобного изменения значений идентификаторов ТН3, ТК3 и определения значений идентификатора D3 показана на рис. 7.15. В блоках 4,5,8 (см. рис. 7.14) организован цикл по переменной J, J = 1, JM5 . В счетчиках K5[J] накапливаются величины, определяющие события, состоящие в том, что длина интервала D3 между соседними обслуженными заявками
183 меньше либо равна границе оценки D3[J], а частости этих событий определятся как μ *j =
K 5[J ] , j = 1, JM5 . K 5[JM5]
Поток обслуженных заявок1 D3
ТК3 ТН3
D3
ТК3 ТН3
D3
ТК3 D3
ТН3
Рис. 7.15 На рис. 7.16 приведена структурная схема алгоритма подпрограммы STATPZ – набора статистических данных о длительности периода занятости. 4
K6[J]=K6[J]+1
Начало 1 2
J=0
0
5 J > JM5
J=J+1 6
0
3
PZ ≤ D4[J]
1
1 PZ=0 Конец
Рис. 7.16
184 Программа работает по аналогии с описанными выше программами набора статистических данных. Набор статистических данных длин отрезков периода занятости PZ фиксируется в такты, когда окончилось обслуживание, L=0, значение идентификатора PZ отлично от нуля и нет в системе очереди, М=0 (см. блоки 15, 18, 19 на рис. 7.3). В счетчиках К6[J] накапливаются частоты событий, состоящих в том, что длина периода занятости PZ меньше либо равна границам оценки D4[J]. Частоты этих событий определятся по формуле
K 6[J ] , j = 1, JM6 . K 6[JM6] Полученные статистические данные во всех программах STATP, STATT, STATO, STATB, STATPZ и STATW позволяют построить кумулятивные эмпирические функции распределения: - A*(t) – длин интервалов времени между заявками входного потока; - Z*(t) – длин интервалов времени между потерянными заявками; - W*(t) – времени задержки заявок в очереди; - D*(t) – длин интервалов времени между обслуженными заявками; - B*(t) – времени обслуживания заявок; - П*(t) - периода занятости. Пример построения эмпирических распределений на примере построения кумулятивной эмпирической функции распределения времени ожидания W*(t) показан на рис. 7.17. η*j =
185 W*(t) 1
w4* w3* w2* w1* W[1]=0 W[2]
W[3]
W[4]
…..
W[JM3-1]
W[JM3]
Рис. 7.17
7.7. Имитационные модели многофазных СМО Пусть СМО имеет структуру, показанную на рис. 7.18, т.е. обслуживание состоит из двух фаз. Входной поток заявок задан функцией распределения вероятностей длин интервалов между заявками A(t) и поступает на первый прибор с функцией распределения времени обслуживания B1(t). Поток заявок, обслуженных первым прибором, поступает на второй прибор, время обслуживания которого имеет распределение B2(t). A(t)
B1(t)
B2(t)
Рис. 7.18 Алгоритм имитационной модели, построенный в соответствии с принципом Δt–моделирования, представлен на рис. 7.19.
186 Начало 1 2 3 4
13 14
WWOD 42
15
T=T+1
5
0
L1=1
GEN
1 0
0
I1=1
16
B1>0 1
1 1
OBS1
17
STATB1
JP<JPM1 23 0
6
0 L1=0 8
1 7 9
10
STATT1
STATP1 1
OSTH1
PZ1=0 0
1
L1=1
18
1
19
M1=1
0 11
M1=1
0
20
1 12 13
0
WIB1 STATO1
21
22
0 STATPZ1
K1=1 1 STATW1
14 23
Рис. 7.19
187 11,16,17,21,23 34 0
23
I2=1
0
35
B2>0
1 1
24
1 36
JP
STATB2
0 25
0
27
L2=0
STATT2
1 26 28
1
29
34
STATP2 1
OSTH2
37
PZ2=0 0
L2=1
1
38
M2=1
0 30
0
M2=1 1
31 32 33
40
WIB2 STATO2
41
0
L2=1
0 K2=1 1 STATW2
2
42
T
1 37
STATPZ2
OBS2 1
34
0
39
43 35
WIW Конец
Рис. 7.19. Окончание
188 Делается предположение, что входной поток заявок является пуассоновским (простым). Как и при моделировании одноканальной СМО, введены идентификаторы состояний для первого и второго приборов обслуживания: - I1=1, I2=1, если за такт моделирования Т=Δt поступила заявка в первую СМО (СМО1), вторую СМО (СМО2); - L1=1, L2=1 – занятость обслуживанием соответственно первого и второго приборов; - K1=1, K2=1 – наличие заявок в выходных потоках первого и второго приборов соответственно (окончание обслуживания); - М1=1 (М2=1), если в СМО1 (СМО2) есть очередь на обслуживание. Названия подпрограмм идентичны по смыслу и по реализации алгоритмов подпрограмм имитационной модели одноканальной СМО M/G/1/JPM. Однако имеется незначительное отличие в реализации алгоритма подпрограммы OBS1 имитации процедуры обслуживания в первом приборе, которое будет показано ниже. Идентификаторы K1 и I2 имеют одинаковое смысловое значение, так как обслуженная заявка от СМО1 поступает на СМО2. Следовательно, в подпрограмме OBS1 необходимо определить I2=K1. Анализ структуры алгоритма имитационной модели двухфазной СМО (см. рис. 7.19) позволяет выделить две одинаковые последовательности блоков (от блока 4 до блока 22 и от блока 23 до блока 4I). Это понятно, так как процессы функционирования СМО1 и СМО2 полностью идентичны друг другу. Следовательно, весь алгоритм имитационной модели двухфазной СМО можно представить в виде, приведённом на рис. 7.20.
189 Начало 1 2 3 4 5
1
6
WWOD T =T + 1 GEN MOD1 MOD2
T < TZ
7
0 WIW Конец
Рис. 7.20 Подпрограмма MOD1 представляет собой имитационную модель процесса обслуживания первым прибором, а подпрограмма MOD2 - модель обслуживания вторым прибором. Алгоритм подпрограммы MOD1 включает блоки 4 – 22, а алгоритм подпрограммы MOD2 включает блоки 23 - 41 алгоритма имитационной модели двухфазной СМО (см. рис. 7.19).
190 На рис. 7.21 приведена структурная схема алгоритма подпрограммы обслуживания заявок в первом приборе OBS1. Начало
7 8 9 10
OPRB1 PZ1=PZ1+B1 BT1 = B1
0
1 BT1 > 0
4
K1 = 1
1
2
BT1 = B1 – 1
3 BT1 = 0
5 I2 = K1
L1 = 1
1
6
0
L1 = 0
Конец
Рис. 7.21 Очевидно, что если имеется некоторая многофазная СМО, состоящая из F фаз обслуживания (структура которой приведена на рис. 7.22), то структурная схема алгоритма имитационной модели данной СМО будет иметь вид, представленный на рис. 7.23. В каждой подпрограмме OBSJ ( J = 1, F ) выходной параметр KJ будет входным параметром I(J+1) для подпрограммы MOD[J+1] и будет при I(J+1)=1 свидетельствовать о наличии заявки на входе (J+1)-го прибора в такте моделирования Т.
191 A(t) B 1(t)
B 2(t)
B F(t)
Рис. 7.22 Начало 1 2 3 4 5
WWOD
1 T
T=T=1 0 GEN1
WIW
MOD1 Конец MOD2
MODF
Рис. 7.23
7.8. Имитационные модели многоканальных СМО 7.8.1. Модели систем с общей очередью. Рассмотрим задачу построения имитационной модели трехканальной СМО с общей очередью. Понятие общей очереди предусматривает, что заявки поступают в систему и становятся в общую очередь, из которой выбираются на обслуживание по мере освобождения приборов. Например, есть транспортер, по которому детали подаются на три
192 станка, выполняющих одну и ту же операцию. Существует распределительное устройство, которое по мере освобождения станков регулирует подачу деталей на свободный станок. Структура трехканальной СМО представлена на рис. 7.24. B1(t)
A(t)
B2(t)
B3(t)
P1(t)
P2(t)
P(t)
P3(t)
Рис. 7.24 На вход трехканальной СМО поступает поток заявок, интервалы времени между которыми имеют распределение A(t). Каждый прибор характеризуется функцией распределения времени обслуживания Bi(t), i=1,2,3. На выходе каждого i-го прибора существует выходной поток Pi(t) (i=1,2,3) обслуженных заявок, из которого образуется суммарный поток P(t) обслуженных заявок. Структурная схема алгоритма имитационной модели трехканальной данной СМО приведена на рис. 7.25. Работает алгоритм следующим образом. Алгоритм подпрограммы генерации заявок GEN идентичен алгоритму одноименной подпрограммы одноканальной СМО.
193 Начало 1 2 3 4
11
WWOD
12
37 T=T+1
0 GEN
13
0 14 1
0 15 1
0 37 1
L2=0 0
0 8
9
1 L3=0
L1=0 0
7
1 L2=0
JP<JPM 0
6
1 L1=0
0
I=1 1
5
1
M=1
16
L1=1
1 L3=0
1 0
0
17
L2=1
STATT 1
10 11
0
STATP
18
L3=1
OSTH 19 12
20
WIB STATO
21
Рис. 7.25
1
194 20 21
32 0
I1=0
33
K1=1
1
1 0
1
22
L1=0
34
1 K2=1
0 23 24
0
OBS1
0
35
STAT1 36
25
0
I2=0
2
1 37
1
0
0
28
T
L2=0 38
27
1 STATF 15
1 26
K3=1
OBS2
WIW Начало
STAT2
29
0
I3=0 1 1
30
L3=0 0
31 32
OBS3 STAT3
33
Рис. 7.25. Окончание
195 Если в данном такте моделирования Т возникла заявка, то идентификатор I=1. Если ёмкость очереди ограничена числом заявок JPM и число заявок в очереди меньше JPM, то заявка ставится в очередь на обслуживание (обращение к подпрограмме OSTH) после соответствующей фиксации её времени возникновения в подпрограмме набора статистических данных о входном потоке STATP (см. работу 4, 5, 6, 10, 11 на рис. 7.25). Число заявок в очереди JP может быть равно максимально допустимому значению JPM. В этом случае заявка не будет потеряна, если в предшествующем такте Т1 один из приборов освободился от обслуживания, то есть или L1, или L2, или L3 равны нулю (см. блоки 5 - 8). Действительно, в этом случае одна заявка из очереди будет взята на обслуживание и одна поставлена в очередь (переход от блоков 5 - 8 к блоку 10 на рис. 7.25). В противном случае, если I=1, JP=JPM, L1=L2=L3=1, то заявка теряется и информация о времени возникновения потерянной заявки фиксируется в подпрограмме набора статистических данных о потоке потерянных заявок STAТT (см. работу блоков 4, 5, 6, 7, 8, 9 на рис. 7.25). Алгоритмы подпрограмм STATP, STAТT, OSTH полностью аналогичны алгоритмам одноименных подпрограмм имитационной модели одноканальной СМО. При анализе функционирования трехканальной СМО можно воспользоваться понятием их состояния, определяемого состояниями очереди и приборов. Всевозможные комбинации состояний очереди и приборов обслуживания приведены в табл. 7.1. Первая строка состояний в табл. 7.1 соответствует ситуации, когда в СМО нет заявок и все приборы свободны. В этом случае после выявления данной ситуации (см. блоки 12,13,14,15 на рис. 7.25) управление передаётся блоку 37, в котором
196 проверяется условие имитации функционирования системы за заданное число тактов TZ. Особым набором состояний следует признать и последнюю строку табл. 7.1, когда все приборы заняты обслуживанием и имеется очередь. После работы блоков 12, затем 16,17,18 управление передаётся блоку 21. Затем следует анализ состояния первого прибора и имитация времени обслуживания в первом приборе, а затем и в последующих двух приборах.
M1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
L1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
L2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
L3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Таблица 7.1 Выбор на обслуживание Выбора нет Выбора нет Выбора нет Выбора нет Выбора нет Выбора нет Выбора нет Выбора нет Выбор есть Выбор есть Выбор есть Выбор есть Выбор есть Выбор есть Выбор есть Выбор есть
Состояния, когда нет очереди и занят обслуживанием, по крайней мере, один из приборов, анализируются в работе блоков 12,13,14,15. Затем управление передается блоку 21.
197 Состояния, когда есть очередь и свободен хотя бы один из приборов, анализируется работой блоков 12, 16, 17, 18, и управление передается подпрограмме выбора заявки на обслуживание WIB (см. блок 19 на рис. 7.25). Структурная схема алгоритма подпрограммы WIB определяется не только дисциплиной выбора заявки из очереди, но и правилами выбора прибора обслуживания, если два и более из них свободны от обслуживания. Здесь возможны следующие варианты: а) выбор по порядковому номеру, т.е. заявка поступает на тот из свободных приборов, у которого меньший (больший) порядковый номер; б) выбор по большей интенсивности обслуживания (по меньшему среднему времени обслуживания), то есть заявка поступает на тот из свободных приборов, у которого меньшее время обслуживания; в) случайный выбор одного из свободных приборов. На рис. 7.26 приведен алгоритм подпрограммы WIBN по порядковому номеру прибора и по правилу FIFO. Отличие этого алгоритма от алгоритма аналогичной подпрограммы одноканальной СМО (см. рис. 7.8) состоит в добавлении блоков 11 – 15. Назначение этих блоков состоит в анализе наличия свободных от обслуживания заявок приборов и присвоении идентификаторам I1, I2, I3 значения «единица», если заявка из очереди выбирается на обслуживание соответственно 1-м, 2-м или 3-м прибором (см. блоки 11 – 15). Если первый прибор свободен (L1=0), то I1=1, если свободен второй прибор (L2=0), то I2=1, если свободен третий прибор (L3=0), то I3=1. На рис. 7.27 приведена структурная схема алгоритма подпрограммы WIBS выбор заявки из очереди, согласно правилу FIFO, при случайном выборе одного из свободных приборов обслуживания. В блоках 1 – 7 реализована
198 имитация выбора заявки из очереди и упорядочивания номеров заявок в очереди. Начало 1 2
5
K = N[1] W=T-K
3
6
J < JP - 1
0
J=1
7 4
N[J]=N[J+1]
1 J=J+1
JP = 1 0 9 10
8
1 M=0 JP = 0
11 L1 = 0
1
0 1
12 L2 = 0 0 13 14 15
I3 = 1 I2 = 1 I1 = 1 Конец
JP = JP - 1
199 Рис. 7.26 Начало 1 2
4
N[J]=N[J+1]
K = N[1] 5
W=T–K J=1
0
J < JP – 1
3 JP = 1
1
6
0
J=J+1 7
8 9
1 M=0
10
JP = 0
11
12 13 14
15
18 B = 1 – L1
JP = JP – 1 RAN(X) A = 1 – L1
I1 = 1
C = 1 – L3 19
X=X×[A+B+C]
X≤A
I2 = 1
1 Конец
0 16
17
X ≤B 0 I3 = 1
1
200 Рис. 7.27 Случайный выбор прибора для обслуживания организован следующим образом. Генерируется подпрограммой RAN число равномерно распределенного ряда Х (см. блок 10 на рис .7.27). Затем в блоках 11 - 13 определяются числа А, В, С, принимающие значения «единица», если соответственно свободен от обслуживания первый, второй или третий прибор. Случайное число Х приводится к сумме чисел А, В, С путем умножения числа Х на полученную сумму A+B+C (см. блок 14 на рис. 7.27). Затем значения идентификаторов I1, I2, I3 определяются по известной схеме случайных событий. На рис. 7.28 приведена структурная схема алгоритма подпрограммы WIB1 выбора заявок из очереди, согласно правилу FIFO, и при условии поступления заявки на тот из свободных приборов, у которого меньше среднее время обслуживания. 8
Начало 1 2
K = N[1]
JP = 1
4
5 J < JP-1 1
10
1
L2 = 0
0
11 12
6
7 0
L3 = 0
J =J+1
1 I2 = 1
1 13
I3 = 1
0
0 N[J]=N[J+1]
JP = 0
4
W =T–K J=1
3
9
M=0
7
14 JP=JP–1
I1 = 1
5 10
Конец
201 Рис. 7.28 Рассмотрим работу алгоритма. Пусть среднее время обслуживания первого прибора больше среднего времени обслуживания третьего прибора, а среднее время обслуживания третьего прибора больше среднего времени обслуживания второго прибора. Как видно из рис. 7.26 и рис. 7.28, алгоритм подпрограммы WIB1 не отличается в реализации от алгоритма подпрограммы WIBN. В блоках 10 – 14 (см. рис. 7.28) реализован приоритет выбора приборов, исходя из меньшего среднего времени обслуживания. После работы подпрограммы WIB будут сформированы значения идентификаторов I1, I2, I3 – поступление заявок в такте Т на первый, второй, третий приборы соответственно и значение идентификатора W – время задержки для любой заявки, выбранной из очереди на обслуживание. Время задержки W фиксируется в подпрограмме набора статистических данных времени задержки STATO, которая по реализации идентична аналогичной подпрограмме в имитационной модели одноканальной СМО (см. рис. 7.11). Затем, если первый прибор в такте Т занят обслуживанием или поступили на него заявка в такте Т (I1=1) (см. блоки 21, 22 на рис. 7.25), то управление передается подпрограмме OBS1 имитации времени обслуживания в первом приборе(см. блок 23 на рис. 5.25). Структурная схема алгоритма подпрограммы OBS1 приведена на рис. 7.29. Затем управление передается подпрограмме STAT1 набора статистических данных о периоде занятости, времени обслуживания и выходном потоке обслуженных заявок первого прибора (см. блоки 24 на рис. 7.25). Алгоритм подпрограммы STAT1 представляет собой совокупность алгоритмов подпрограмм STATB, STATPZ и
202
STATW имитационной модели одноканальной СМО (см. блоки 15 - 22 на рис. 7.3). 6 7 8 9 10
2
OPRB
Начало
BT=BT–1
PZ=PZ+B 0 BT = B
1 BT1 > 0
1
0
3 BT = 0 1
L1 = 1
4
I1 = 0
5
K1 = 1 L1 = 0
Конец
Рис. 7.29 Аналогично работают подпрограммы моделирования времени обслуживания второго прибора (см. блоки 25 - 28 на рис. 7.25) и третьего прибора (см. блоки 29 - 32 на рис. 7.25). Реализации алгоритмов подпрограмм OBS2 и OBS3 аналогичны реализации алгоритма подпрограммы OBS1. Реализации алгоритмов подпрограмм STAT2, STAT3 аналогичны реализации алгоритма подпрограммы STAT1. Статистические данные о суммарном выходном потоке обслуженных заявок накапливаются в счетчиках подпрограммы STATF, алгоритм которой аналогичен по реализации алгоритму подпрограммы STATP имитационной модели одноканальной СМО (см. рис. 7.5), но в конце алгоритма необходимо добавить блоки, в которых определяются значения К1=0, К2=0, К3=0. Если блоки 21, 22, 23, 24 (см. рис. 7.25) рассматривать как алгоритм подпрограммы MOD1, блоки 25, 26, 27, 28 – как алгоритм подпрограммы MOD2, блоки 29, 30, 31, 32 – алгоритм подпрограммы MOD3, то для N – канальной
203 СМО структурная схема моделирующего алгоритма будет иметь вид, представленный на рис. 7.30. Начало 1 2 3 4
8 0
WWOD
9
15
13 1
MOD2 0
GEN
10
L1=0
…
1
0
I=1
MODN 0 …
1 K1=1
1 1
JP
0
LN=0 0 6
1 K2=1
0
1 L1=0
0 …
0 0 7
1
0
10
L1=1
1
L2=0
KN=1
1 0 …
0
7
STATT
14
1
0
15
10
STATP OSTH
1 T
2
L3=0 16
9
STATF
…
L3=0 0
0
L2=0 1
1
8
MOD1
M1=1
T=T+1
1 5
12
11
0 WIW
WIB Конец
12
STATO
12 13
Рис. 7.30
7.8.2. Модели СМО с очередью к каждому прибору. Рассмотрим задачу построения имитационной модели трехканальной СМО, в которой заявки, поступающие в
204 систему, ставятся в очередь только к одному прибору и потом поступают на обслуживание к этому прибору. Структурная схема такой СМО представлена на рис. 7.31. B1(t)
A(t)
B2(t)
B3(t)
P1(t)
P2(t)
P(t)
P3(t)
Рис. 7.31 Особенностью данной СМО является распределение заявок входного потока с функцией распределения A(t) в очереди к приборам обслуживания. Непосредственно выбор заявок из очереди и обслуживание в каждом приборе моделируются так же, как и в имитационной модели одноканальной СМО. На рис. 7.32 приведена структурная схема алгоритма имитационной модели рассматриваемой СМО. Работает алгоритм следующим образом. Реализация алгоритма и работа подпрограммы GEN генерации заявок не отличается от реализации подпрограммы GEN для одноканальной СМО (см. рис. 7.4). Отличие состоит в том, что, если в такте Т поступила заявка в рассматриваемую систему из трех приборов обслуживания (I=1 в блоке 4 на рис. 7.32), то анализируется условие JP<JPM (см. блоки 4, 5 на рис. 7.32). Под JP понимается сумма заявок, находящихся во всех трех очередях, то есть JP=JP1+JP2+JP3.
205
1 2 3
Начало
10
WWOD
11
T =T+ 1
12
GEN
13
4
14
0
I=1
1
1 5 JP < JPM
STATP ROSTH 9 MD1 MD2 MD3
15 T < TZ
1 16
0 WIW
0 6 L1 = 0
Конец
1
0 7 L2 = 0
1
0 8 L3 = 0
9
1
0 STATT 12
Рис. 7.32 Если это условие выполняется, то управление передается подпрограмме набора статистических данных входного протока STATP и затем подпрограмме
206 распределения заявок по очередям к приборам ROSTH (см. блоки 3, 4, 5,10, 11 на рис. 7.32). Если условие не выполняется, но есть хотя бы один из приборов, свободный от обслуживания, то заявка также не теряется (см. работу алгоритма по блокам 3, 4, 5, 6, 7, 8, 10, 11 на рис. 7.32). В противном случае, после работы алгоритма по блокам 3, 4, 5, 6, 7, 8, управление передается подпрограмме набора статистических данных потока потерянных заявок STATT. Особенности алгоритма модели данной СМО состоят в реализации вариантов алгоритмов подпрограммы ROSTH. В СМО могут быть следующие правила распределения заявок по приборам обслуживания: а) к прибору с меньшей очередью; б) случайным образом; в) по порядку следования номеров приборов; г) преимущественно к прибору с меньшим средним временем обслуживания. Очевидно, что могут существовать другие правила распределения заявок к приборам. На рис. 7.33 приведена структурная схема алгоритма подпрограммы ROSTHM распределения заявок к приборам с меньшей очереди. Как видно из схемы алгоритма, в нем существуют логические переходы, определенные состояниями очередей к приборам. В табл. 7.2 приведены комбинации возможных состояний очередей к приборам и действие алгоритма подпрограммы ROSTHM по выбору приборов при постановке поступившей заявки в очередь. В случае если максимально допустимые емкости очередей к каждому прибору одинаковые JPM1=JPM2=JPM3, то необходимость в блоках 16, 17, 18 (см. рис. 7.33) отпадает и выходы блоков 10, 11, 12 подаются на вход блока 13.
207
Начало 1
2 1
JP1=JPM1 1
10
11
3
4 0
0
JP2=JPM2 17 0
6
1
1
13
JP1≤JP2
7
12
0
1
1
1
JP2≤JP3
19
JP1=JP1+1 Конец
18
11 14 16 17
0
JP1
0
20
N2[JP2+1]=T JP2=JP2+1
1
0 8
JP3=JP3+1
JP1≤JP3 7
14
N1[JP1+1]=T
Конец
JP3=JPM3 0
18
L2=0
1 15
5 1
N3[JP3+1]=T 9
JP1≤JP2 0
1 L1=0
0
8
7 16
12,15,16,18
0
JP2<JP3
JP3=JPM3
JP3=IPM3 1
JP3=JPM3
1
0 1
0
0
0 9
1 JP2=JPM2
Конец
7 5
Рис. 7.33 Рассмотрим на некоторых примерах, как реализованы логические переходы в алгоритме подпрограммы ROSTHM при анализе состояний приборов и очередей заявок к приборам обслуживания. Пусть, например, поступила заявка и очереди ко всем приборам заполнены полностью, заняты обслуживанием первый и второй приборы, но в текущем такте Т освобождается от обслуживания третий прибор (последняя строка в табл. 7.2).
208 Таблица 4.2 JP1= JPМ1
JP2= JPM2
JP3= JPM3
JP1<JP2 <JP3 JP1<JP3 <JP2
JP2<JP1 <JP3 JP2<JP3 <JP1
JP3<JP1 <JP2 JP3<JP2 <JP1
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
0
1
0
0
0
1
1
0
0
0
1
0
0
0
1
0
1
0
1
0
0
1
0
0
0
0
1
1
0
0
0
1
0
0
1
1
1
0
0
1
0
1
0
1
0
1
1
0
0
0
1
1
1
1
1
1
1
Действие
Заявка к 3-у прибору Заявка ко 2-у прибору Заявка к 1-у прибору Заявка ко 2-у прибору Заявка к 1-у прибору Заявка к 3-у прибору Заявка к 1-у прибору Заявка к 3-у прибору Заявка ко 2-у прибору Заявка к 1-у прибору Заявка ко 2-у прибору Заявка к 3-у прибору Заявка к прибору, идентификатор занятости L которого равен нулю
В этом случае работа алгоритма происходит последовательно по блокам 1, 2, 3, 4, 6, 8, 9 (см. рис. 7.33). В результате заявка будет поставлена в очередь к третьему прибору обслуживания (см. блоки 8, 9 на рис. 7.33).
209 Пусть сложилась такая ситуация, что очереди в первом и втором приборе одинаковы, меньше их наибольшего значения и меньше очереди к третьему прибору обслуживания. В этом случае работа алгоритма происходит последовательно по блокам 1, 9, 10, 13, 15, 5, 19 (см. рис. 7.33). В результате поступившая в систему заявка будет поставлена в очередь к первому прибору обслуживания (см. блоки 5, 19 на рис. 7.33). Если же очередь к первому прибору меньше наибольшего значения JPM1, больше очереди ко второму прибору, а очереди к первому и второму приборам меньше очереди к третьему прибору обслуживания, то работа алгоритма происходит последовательно по блокам 1, 9, 10, 16, 7, 20 (см. рис. 7.33). В результате поступившая в систему заявка будет поставлена в очередь ко второму прибору обслуживания (см. блоки 7, 20 на рис. 7.33). На рис. 7.34 приведена структурная схема алгоритма подпрограммы ROSTHS распределения заявок к прибором случайным образом. Работает алгоритм следующим образом. Вначале проверяются условия, при которых в очередях к приборам обслуживания имеются свободные места JP1<JPM1, JP2<JPM2, JP3<JPM3 (см. блоки 1 – 3 на рис. 7.34). Если все эти условия выполняются, то равновероятно выбирается одна из очередей (см. работу блоков 4, 5, 6, 7 на рис. 7.34). Генерируется число Х, равномерно распределенное в интервале (0,1), которое затем приводится к отрезку (0,3). Если Х меньше либо равно единице, то заявка ставится в очередь к первому прибору (см. блоки 8, 20 на рис. 7.34). Если Х меньше либо равно двум, то заявка ставится в очередь ко второму прибору (см. блоки 9, 21 на рис. 7.34). Если Х меньше либо равно трем, то заявка ставится в очередь к третьему прибору (см. блоки 10, 22 на рис. 4.34).
210 Начало 1
JP1<JPM1
15 11
0
JP2<JPM2
1
JP2<JPM2
12
0
4 5
16
0
X≤0,5
0
JP3<JPM3
1
9
17 13
1 3
RAN
10
1
1 2
0
1
0 JP3<JPM3
15
8
2
RAN
0
17 14
0
X≤0,5
1 RAN
JP3<JPM3
10 1
18
1
RAN
9
X=X*3
1
19 6
X≤0,5
1 X≤1
8
0
0 7
10 1
X≤2
9 0
7,11,14,19
7,12,14,16
10 9
N2[JP2+1]=T 21
JP2=JP2+1
10
N3[JP3+1]=T
22
JP3=JP3+1 Конец
Конец
6,16,17,19 8
N1[JP1+1]=T
20
JP1=JP1+1 Конец
Рис. 7.34 Если JP1=JPM1, JP2<JPM2, JP3<JPM3, то равновероятно выбираются второй и третий приборы обслуживания (см. работу алгоритма по блокам 1, 11, 12, 13, 14 на рис. 7.34). Если JP1<JPM1, JP2=JPM2,
211
JP3<JPM3, то равновероятно выбирается первый и третий приборы (см. работу блоков 1, 2, 17, 18, 19 на рис. 7.34). Если из трех неравенств выполняется только одно, то заявка направляется к соответствующему прибору обслуживания. Например, при JP1<JPM1, JP2=JPM2, JP3=JPM3 заявка будет поставлена в очередь к первому прибору обслуживания (см. работу алгоритма по блокам 1, 2, 17, 8, 20 на рис. 7.34). На рис. 7.35 приведена структурная схема алгоритма подпрограммы ROSTHN распределения заявок в соответствии со следованием порядков номеров приборов обслуживания при неограниченных длинах очередей. Начало
1 F=0
2 3 9
1 N1[JP1+1]=T F=1 JP1 = JP1+1
0
4 F=1
5 6 10
1 N2[JP2+1]=T F=2 JP2 = JP2+1
0
7 8 11
1 N3[JP3+1]=T F=0 JP3 = JP3+1
Конец
Рис. 7.35 Принцип реализации алгоритма распределения заявок к приборам в соответствии с их порядковыми номерами основан на запоминании номеров прибора, в которых была направлена заявка. Следующая заявка будет направлена в прибор, номер которого на единицу больше. Для этого
212 вводится ключ F. Если значение ключа F=0, то заявка направлена в очередь к первому прибору (см. работу блоков 1, 2 на рис. 7.35). После чего значение F=1 и число заявок в очереди к первому прибору увеличивается на единицу (см. работу блоков 3, 9на рис. 7.35). Если значение ключа F=1, то заявка направлена в очередь ко второму прибору (см. работу блоков 1, 4, 5 на рис. 7.35). После чего значение F=2 и число заявок в очереди ко второму прибору увеличивается на единицу (см. работу блоков 6, 10 на рис. 7.35). Если значение ключа F не равно ни нулю, ни единице, то заявка направлена в очередь к третьему прибору (см. работу блоков 1, 4, 7). После чего значение F=0 и число заявок в очереди к третьему прибору увеличивается на единицу (см. работу блоков 8, 11на рис. 7.35). После работы подпрограммы ROSTH управление (см. рис. 7.32) передаётся подпрограммам MD1, MD2, MD3, в которых моделируются процессы обслуживания в каждом из каналов. Реализация каждой из подпрограмм одинакова и представляет собой последовательность блоков 9 – 22 имитационной модели одноканальной СМО (см. рис. 7.3).
7.9. Алгоритмизация имитационной модели СМО произвольной структуры Методика построения имитационной модели СМО сложной структуры сводится к разработке модульной структуры алгоритмической модели. Структуру СМО необходимо декомпозировать на отдельные модули генерации заявок, распределения заявок при постановке в очередь и выбора из очереди, обслуживания заявок и набора статистических данных. При алгоритмизации СМО
213 сложной структуры важно правильно выбрать последовательность обращений к подпрограммам в рассматриваемом такте моделирования. Построения имитационной модели СМО сложной структуры рассмотрим для структуры СМО, приведенной на рис. 7.36. A3(t) (I4) A1(t) (I1) I
B2(t)
B1(t)
(I6) B4(t)
(I2) A2(t)
II
B3(t) (I7) A4(t) (I5)
Рис. 7.36 На вход 1-го прибора поступают заявка первого приоритета с функцией распределения вероятностей поступления A1(t) и заявки второго приоритета с функцией распределения А2(t). Прибор характеризуется функцией распределения времени обслуживания заявок B1(t). С выхода 1-го прибора обслуженные заявки поступают на входы 2-го и 3-го приборов с функциями распределения времени обслуживания заявок B2(t) и B3(t). На 2-й и 3-й приборы поступают также потоки заявок с функциями распределения A3(t) и A4(t). Обслуженные заявки с выходом 2-го и 3-го приборов поступают на вход четвертого прибора, характеризующегося функцией распределения B4(t). Потоки заявок ко второму и третьему приборам обслуживания однородны (нет приоритетов). На рис. 7.37 приведена структурная схема алгоритма имитационной модели данной СМО.
214 12
Начало 1 2 3
WWOD
1
14
52 15 GEN1
I1=1
0 18
1 5 STATP1 6
19
8
11
GEN2
I2=1
0
22 23
16
33
OBS1 34 STAT1
I3=1
36
L1=1
24
1
M1=1 1 WIB1
0 14
26
GEN3 0
38
1
39
STATP3 40
OSTH3
41 L2=1
1 42
0 27
M3=1
0 43
STATO1 28 29
1 WIB3
44
STATO3 45 30
STAT2 27 GEN4
1 STATP4 OSTH4 1
L3=1
M4=1
0
1 WIB4 STATO4 OBS3 STATO3
I6=1
0
1 OSTH5
I7=1 1 OSTH5
32 46
Рис. 7.37
0
I5=1
0 37
I4=1
OBS2
0
OSTH2
25
13
STATO2
1 21 ROSTH
0 12
32
35
1 9 STATP2 10
0 WIB2
OSTH1 20
7
30 M2=1 31
T=T+1
17 4
26,29
0
215 45,44 46
L4=1
1
0 47
48 49 50 51 52
M5=1
0
1 WIB5 STATO5 OBS4 STAT4
T
0
53
WIW
1 2
Конец
Рис. 7.37. Окончание Блоками 3 – 10 реализован алгоритм моделирования процесса поступления заявок первого и второго потоков на первый прибор. Причем, если в очереди заявки первого приоритета, то они вначале выбираются на обслуживание (см. работу блоков 11, 12, 13, 16, 18 на рис. 7.37). Если заявок первого приоритета в очереди нет (M1=0), то выбираются заявки на обслуживание из очереди второго приоритета (см. работу блоков 11, 12, 14, 15, 17, 18 на рис. 7.37). Блоками 11 – 19 реализован алгоритм моделирования процесса обслуживания заявок первым прибором.
216 При наличии на выходе первого прибора обслуженной заявки идентификатор I3 принимает значение «единица». Идентификатор I3 определяется в подпрограмме OBS1 так же, как это делается в одноименной подпрограмме одноканальной СМО (см. рис. 7.12) с идентификатором K. Затем обслуженная в первом приборе заявка поступает для обслуживания на второй или третий приборы, что определяется в подпрограмме ROSTH (см. блок 21 на рис. 7.37). Алгоритм подпрограммы приведен на рис. 7.38. Начало
1 F=0
2 3 4
0 5
N3[JP3+1]+T
1 6
N2[JP2+1]+T
7
F=1
F=0 OSTH4
OSTH3
Конец
Рис. 7.38 В подпрограмме ROSTH введен ключ F. При значении ключа F=0 обслуженная в первом приборе заявка ставится в очередь ко второму прибору (см. блоки 1 - 4 на рис. 7.38). При значении ключа F=1 обслуженная в первом приборе заявка ставится в очередь к третьему прибору (см. блоки 1, 5 - 7 на рис. 7.38).
217 В подпрограмме GEN3 имитируется поступление заявки третьего входного потока. Если заявка поступила (I4=1), то она после набора соответствующих статистических данных ставится в очередь ко второму прибору (см. блоки 22 – 25 на рис. 7.37). Блоками 26 – 31 реализован алгоритм моделирования процесса функционирования второго прибора. В подпрограмме GEN4 имитируется поступление заявки четвертого входного потока. Если заявка поступила (I5=1), то она после набора соответствующих статистических данных ставится в очередь к третьему прибору (см. блоки 33 – 35 на рис. 7.37). Блоками 36 – 41 реализован алгоритм моделирования процесса функционирования третьего прибора. При наличии на выходе второго прибора обслуженной заявки идентификатор I6 принимает значение «единица», а при наличии на выходе третьего прибора обслуженной заявки идентификатор I7 также принимает значение «единица». Заявки, обслуженные вторым или третьим приборами, ставятся в очередь к четвертому прибору обслуживания (см. блоки 42 – 45 на рис. 7.37). Блоками 46 – 51 реализован алгоритм моделирования процесса функционирования четвертого прибора. Анализ алгоритма, приведенного на рис. 7.37, показывает, что для него сохранен модульный принцип построения. Подпрограммы GEN1, GEN2, GEN3, GEN4 предназначены для имитации процессов поступления заявок в соответствии с законами распределений A1(t), A2(t), A3(t), A4(t). Подпрограммы OSTH1, OSTH2, OSTH3, OSTH4, OSTH5 предназначены для моделирования процесса организации очередей к соответствующим приборам обслуживания. Подпрограммы WIB1, WIB2, WIB3, WIB4, WIB5 реализуют процедуры выбора заявок
218 на обслуживание из очередей к соответствующим приборам. Подпрограммы OBS1, OBS2, OBS3, OBS4, имитируют процедуры обслуживания в соответствующих приборах. Можно представить алгоритм рассмотренного примера в виде последовательных модулей, как это показано на рис. 7.39.
1 2 3 4 5 6
Начало
7
WWOD
8
T =T + 1
9 10
GEN1
MOD1 MOD2 MOD3 MOD4
GEN2 1 11 GEN3 12
GEN4
T < TZ 0 WIW Конец
Рис. 7.39 В подпрограммах GEN1, GEN2, GEN3, GEN4 осуществляется генерация заявок. Подпрограммы MODI включают в себя все подпрограммы, в которых осуществляется постановка и выбор заявок из очереди, обслуживание и набор всех требуемых статистических данных в каждом I–м приборе. Заметим, подпрограммы MOD2 и MOD3 могут «поменяться» местами, так как не
219 важна последовательность рассмотрения смены их состояний в общем алгоритме. Нельзя изменить, например, места подпрограмм MOD3 и MOD4, так как обслуженная заявка третьего прибора становится входной заявкой для четвертого прибора. Рекомендуется начинать составление схемы алгоритма моделирования СМО сложной структуры именно с такого блочного представления, которое показано на рис. 7.39. При разработке программного обеспечения подпрограммами WWOD и WIWOD реализован интерфейс пользователя. Разработчик программного приложения может проявить здесь свою фантазию. В качестве примера приводится интерфейсное окно на рис.7.40, позволяющее вводить исходные данные: - вероятности появления заявок в такте времени Δt; - параметры законов обслуживания; - параметры для набора статистических данных; - заданное число тактов для моделирования и прочие данные, которые студент сочтет, необходимы для проведения исследований. Приведенный пример не следует рассматривать как некоторый образец, так как разработка интерфейса - это искусство и вариантов интерфейсных окон может быть столько же, сколько и разработчиков. На рис. 7.41 приведен пример интерфейсного окна для вывода результатов моделирования. При моделировании можно варьировать исходными данными с целью определения параметров приборов обслуживания, которые могли бы обеспечить наименьшие значения времени задержки в очередях.
220
Рис. 7.40
221
Рис. 7.41
222
8. АЛГОPИТМИЗАЦИЯ ПPОЦЕCCОВ ФУНКЦИОНИPОВАНИЯ CИCТЕМ 8.1. Моделиpующие алгоpитмы Для моделиpования любого объекта, заданного пpи помощи математичеcкой модели, а также в виде последовательности процедур, имитирующих отдельные элементарные процессы, необxодимо поcтpоить cоответcтвующий моделиpующий алгоpитм. Cтpуктуpа пpогpаммы вычиcлений, cоcтавленная пpименительно к типу ЭВМ, завиcит от вида алгоpитма и от xаpактеpиcтик ЭВМ. Моделиpующий алгоpитм необxодимо запиcать в таком виде, котоpый бы отpажал, в пеpвую очеpедь, оcобенноcти его поcтpоения без излишниx втоpоcтепенныx деталей. Cоздание моделиpующего алгоpитма - этап иccледования, когда уже pешены вcе вопpоcы выбоpа математичеcкого аппаpата для иccледования. Необxодимо cделать запиcь алгоpитма незавиcимо от xаpактеpиcтик ЭВМ. Cпоcобы пpедcтавления моделиpующего алгоpитма cледующие: запиcь алгоpитмов пpи помощи опеpатоpныx cxем; запиcь в языкаx пpогpаммиpования; иcпользование методов пpикладныx пpогpамм. Пpименительно к имитационному моделиpованию это называетcя: опеpатоpные cxемы моделиpующиx алгоpитмов (ОCМА); языки пpогpаммиpования; унивеpcальные имитационные модели. ОCМА cодеpжит поcледовательноcть опеpатоpов, каждый из котоpыx изобpажает доcтаточно кpупную гpуппу элементаpныx опеpаций. Эта запиcь не cодеpжит
223 pазвеpнутыx cxем cчета, но доcтаточно полно отpажает логичеcкую cтpуктуpу моделиpующего алгоpитма. ОCМА не учитывает оcобенноcти cиcтемы команд. Это пpоиcxодит пpи поcтpоении пpогpаммы. Тpебования к опеpатоpам: опеpатоp должен иметь яcный cмыcл, cвязанный c пpиpодой моделиpуемого пpоцеccа; любой опеpатоp может быть выpажен поcледовательноcтью элементаpныx опеpаций. Опеpатоpы, cоcтавляющие моделиpующий алгоpитм, делятcя на оcновные, вcпомогательные и cлужебные. К оcновным опеpатоpам отноcятcя опеpатоpы, иcпользуемые для имитации отдельныx элементаpныx актов иccледуемого пpоцеccа и взаимодейcтвия между ними. Pеализуют cоотношения математичеcкой модели, опиcывающие пpоцеccы функциониpования pеальныx элементов cиcтемы c учетом воздейcтвия внешней cpеды. Вcпомогательные опеpатоpы не пpедназначены для имитации элементаpныx актов пpоцеccа. Пpоизводят вычиcление теx паpаметpов и xаpактеpиcтик, котоpые необxодимы для pаботы оcновныx опеpатоpов. Cлужебные опеpатоpы не cвязаны cоотношениями математичеcкой модели. Обеcпечивают взаимодейcтвие оcновныx и вcпомогательныx опеpатоpов, cинxpонизацию pаботы алгоpитма, пpоизводят фикcацию величин, являющиxcя pезультатами моделиpования, а также иx обpаботку. Пpи поcтpоении моделиpующего алгоpитма вначале намечают оcновные опеpатоpы для имитации пpоцеccов функциониpования отдельныx элементов cиcтемы. Они должны быть увязаны между cобой в cоответcтвии c фоpмализованной cxемой иccледуемого пpоцеccа. Выяcнив, какие опеpатоpы необxодимы для обеcпечения pаботы оcновныx опеpатоpов, в опеpатоpную cxему вводятcя
224 вcпомогательные опеpатоpы для вычиcления значений этиx паpаметpов. Оcновные и вcпомогательные опеpатоpы должны оxватывать вcе cоотношения математичеcкой модели, cоcтавляя главную чаcть моделиpующего алгоpитма. Затем вводятcя cлужебные опеpатоpы. Pаccматpиваетcя динамика функциониpования иccледуемой cиcтемы и учитываетcя взаимодейcтвие между pазличными фазами пpоцеccа, а также анализиpуетcя получение инфоpмации пpи моделиpовании. Для изобpажения опеpатоpной cxемы моделиpующиx алгоpитмов удобно пользоватьcя аpифметичеcкими и логичеcкими опеpатоpами. Аpифметичеcкие опеpатоpы пpоизводят дейcтвия, cвязанные c вычиcлениями. Обозначаютcя A14 аpифметичеcкий опеpатоp №14. Cвойcтво аpифметичеcкого опеpатоpа cоcтоит в том, что поcле выполнения изобpаженныx им опеpаций пеpедаетcя 16 дейcтвие дpугому опеpатоpу. A 14 - пеpедача упpавления от А14 к А16 (гpафичеcки отобpажаетcя cтpелкой). Логичеcкие опеpатоpы пpедназначены для пpовеpки cпpаведливоcти заданныx уcловий и выpаботки пpизнаков, обозначающиx pезультат пpовеpки. Cвойcтво логичеcкого опеpатоpа cоcтоит в том, что поcле его pеализации упpавление пеpедаетcя одному из двуx опеpатоpов алгоpитма, в завиcимоcти от значения пpизнака, выpабатываемого логичеcким опеpатоpом. Обозначаетcя в виде Pi, а гpафичеcки в виде круга или ромба, внутpи котоpого cимволичеcки запиcываетcя уcловие. Изобpажение пеpедачи упpавления - P35↑22↓12. Еcли уcловие выполняетcя, то упpавление пеpедаетcя опеpатоpу №22, еcли нет — то опеpатоpу №12.
225 Для опеpатоpов вcеx клаccов обозначение пеpедачи упpавления опеpатоpа, cледующему непоcpедcтвенно за ним, опуcкаетcя. Пеpедача упpавления данному опеpатоpу от дpугиx опеpатоpов обозначается 16,14A18. Опеpатоpу A18 упpавление пеpедаетcя от операторов №16 и №14.. Обозначение опеpатоpа, обозначающего окончание вычиcлений, - Я. Пpимеp. Рассмотрим решение уpавнения x2+px+q= 0,
x 12 = − p 2 ± p 2 4 − q . Введем опеpатоpы: A1 — вычиcление p/2; A2 — вычиcление p2/4-q; A3— вычиcление R = p 2 4 − q ; P4 — пpовеpка уcловия D≥0; A5 — опpеделение дейcтвительныx коpней x12=-(p/2)±R; A6 — опpеделение мнимыx коpней x12=-(p/2)±jR; Я — окончание вычиcлений и выдача (x1,x2). Опеpатоpная cxема алгоpитма A1 A2 A3 P4↓6 A57 A6, 5Я7. Опеpатоpную cxему алгоpитма можно заменить рисунком алгоритма, вид которого показан на рис.4.1. Операторные схемы алгоритмов позволяют перейти от схематического изображения алгоритма к его записи в виде формулы. Можно рассмотреть другие примеры построения операторных схем моделирующих алгоритмов. В качестве самостоятельного задания предлагается разработать операторные схемы моделирующих алгоритмов для получения случайных величин по методу обратных функций, методу ступенчатой аппроксимации,
226 для получения ноpмального закона pаcпpеделения с иcпользованием пpедельныx теоpем. Начало 1 2 3 4
Ввод p и q А1=p/2 A2=p2/4-q R=√ |p2/4-q| 0
5
2
p /4-q>0 1 6
x12=-(p/2)±R
7
x12=-(p/2)±jR
Конец
Рис. 8.1 Важнейшие типы опеpатоpов cледующие. Вычиcлительные опеpатоpы (опеpатоpы cчета) опиcывают cколь угодно cложную и гpомоздкую гpуппу опеpатоpов, еcли она удовлетвоpяет тpебованиям, пpедъявляемым к опеpатоpам алгоpитма (подготовленноcть иcxодныx данныx, пеpедача упpавления только одному опеpатоpу в
227 опеpатоpныx cxемаx моделиpующего алгоpитма). Обозначаютcя Ai. Опеpатоpы фоpмиpования pеализаций cлучайныx пpоцеccов pешают задачу пpеобpазования cлучайныx чиcел cтандаpтного вида в pеализации cлучайныx пpоцеccов c заданными cвойcтвами. Обозначаютcя Φi. Опеpатоpы фоpмиpования неcлучайныx величин фоpмиpуют pазличные конcтанты и неcлучайные функции вpемени. Обозначаютcя Fi. Cчетчики подcчитывают количеcтва pазличныx объектов, обладающиx заданными cвойcтвами. Обозначаютcя Ki.
8.2. Пpинципы поcтpоения моделиpующиx алгоpитмов для cложныx cиcтем Пpоцеcc функциониpования cложной cиcтемы можно pаccматpивать как поcледовательную cмену ее cоcтояний, опиcываемыx xаpактеpиcтиками z1(t),z2(t),...,zn(t) в nмеpном фазовом пpоcтpанcтве. Задачей моделиpования являетcя поcтpоение функций zi(t), а также вычиcление некотоpыx величин, завиcящиx от этиx функций. Математичеcкая модель cвязывает xаpактеpиcтики cоcтояний cиcтемы zi(t) c ее паpаметpами и вpеменем пpи начальныx уcловияx для t0 : zi(t0). Пуcть cущеcтвует cложная cиcтема c детеpминиpованными xаpактеpиcтиками. Пpеобpазуем cоотношения математичеcкой модели к виду, удобному для вычиcления значений zi(t+Δt) по извеcтным значениям zi(t), пpи Δt
t0+Δt опpеделим zi(t0+Δt) и т.д. Еcли шаг ΔtÆ0, то получим пpиближенные значения zi(t).
228 Pаccмотpим cложную cиcтему cо cтоxаcтичеcкими паpаметpами. Cоcтояние zi(t) и cоотношения математичеcкой модели опpеделяют pаcпpеделение веpоятноcтей величин zi(t+Δt), состояния также могут быть cлучайными и задаватьcя cоответcтвующими pаcпpеделениями веpоятноcтей. Cтpуктуpа моделиpующего алгоpитма для такиx cиcтем та же. Но вмеcто cоcтояния z(t+Δt) необxодимо вычиcлить pаcпpеделение веpоятноcтей для возможныx cоcтояний. В cоответcтвии c заданным pаcпpеделением веpоятноcтей выбиpаетcя одно из cоcтояний z i0 . Затем пpи
(t0+Δt) вычиcляетcя уcловное pаcпpеделение веpоятноcтей cоcтояний пpи уcловии z i0 . По жpебию опpеделяетcя cоcтояние zi(t0+Δt) и т.д. Пpинцип поcтpоения моделиpующего алгоpитма, позволяющий опpеделить поcледовательные cоcтояния cложной cиcтемы чеpез некотоpые интеpвалы вpемени, иногда называют "способ Δt-моделиpования" (неэкономичен c точки зpения pаcxода машинного вpемени). Пpи pаccмотpении некотоpыx cложныx cиcтем можно обнаpужить неpавномеpноcть cоcтояний cиcтемы в заданном интеpвале вpемени Δt. Выделяютcя два типа cоcтояний: обычные cоcтояния, в котоpыx cиcтема наxодитcя почти вcе вpемя; оcобые cоcтояния, xаpактеpные для cиcтемы в некотоpые изолиpованные моменты вpемени, cовпадающие c моментами поcтупления в cиcтему вxодныx cигналов от внешней cpеды, выxода xаpактеpиcтики zi(t) на гpаницу облаcти cущеcтвования и т.д. Кооpдинаты zi(t) в эти моменты вpемени могут изменятьcя cкачком.
229 Очевидно, что моделиpующие алгоpитмы, поcтpоенные по пpинципу Δt-моделиpования, оказываютcя не эффективными. Для данныx cиcтем моделиpующие алгоpитмы строятся по способу "оcобыx cоcтояний". Они отличаютcя от пpинципа Δt только тем, что включают в cебя пpоцедуpу опpеделения момента вpемени, cоответcтвующего cледующему оcобому cоcтоянию по извеcтным xаpактеpиcтикам данного или пpедыдущего cоcтояния. Пpи моделиpовании обpаботки заявок в cиcтемаx маccового обcлуживания cтpоитcя моделиpующий алгоpитм по способу поcледовательной пpоводки заявок. Идея этого способа cоcтоит в поcледовательном воcпpоизведении иcтоpии отдельныx заявок в поpядке поcтупления иx в cиcтему: алгоpитм обpащаетcя к cведениям о дpугиx заявкаx лишь в том cлучае, еcли это необxодимо для pешения задачи о дальнейшем поpядке обcлуживания данной заявки. Оператор имеет cложную логичеcкую cтpуктуpу, экономичен по машинному вpемени.
230
9. УНИФИЦИРОВАННЫЙ ЯЗЫК МОДЕЛИРОВАНИЯ UML 9.1. Основные компоненты После многх попыток создания унифицированных языков для решения задач моделирования был разработан и опробован объектно-ориентированный подход. Первый язык Simula-67, основанный на данном подходе, был создан в 1967 г, а в 1983 г. появился и язык С++. Объектно-ориентированный подход позволяет: - описывать структуру объекта; - описывать действия с объектами; - использовать специальные правила наследования объектов; - передавать сообщения между объектами. Основной задачей этапов разработки любого программного обеспечения, предшествующих непосредственному программированию, является спецификация предметной области в терминах, удобных для дальнейшего применения в процессе разработки. Объектно-ориентированный подход в моделировании называют объектно-ориентированным моделированием. Свое развитие он получил при переходе к компьютерному моделированию. В отличие от объектно-ориентированного программирования программные классы с их набором методов заменяются «классами-устройствами» с набором поведений, свойственных данному объекту. Если базовые классы заданы, то моделирование на вычислительной машине ничем не отличается от объектноориентированного моделирования. Ситуация изменяется, если разрабатывается модель системы впервые, а структура
231 и поведение системы подлежат анализу. Объектноориентированный подход предлагает строгую последовательность операций, знакомую разработчикам программных приложений. Язык Unified Modeling Language (UML) является унифицированным языком моделирования, в котором воплощены принципы объектно-ориентированного подхода. Рассмотрим назначение и основные компоненты UML [4, 21, 22]. UML относится к языкам визуального моделирования и реализует объектно-ориентированный подход к разработке сложных систем следующими средствами: - программная система представляется в виде множества самостоятельных сущностей, взаимодействующих друг с другом, реализующих свое собственное поведение и осуществляющей хранение информации, необходимой ддя ее функционирования, причем, с каждой сущностью связано понятие класса и объекта; - класс - это группа сущностей (объектов), обладающих сходными свойствами, а именно, данными и поведением, причем, отдельного представителя некоторого класса называют объектом класса или просто объектом; - каждый объект защищен системой правил, не позволяющих окружающим объектам произвольно менять его данные или влиять на его поведение, причем правила определяют способ взаимодействия с окружением (интерфейс) и скрывают детали реализации; - под поведением объекта в UML понимаются любые правила взаимодействия объекта с внешним миром и с данными самого объекта; - процесс разделения сущностей на классы и построение общей классификации осуществляются с помощью механизма наследования и полиморфизма;
232 - наследование - это отношение, определяющее уровень иерархии конкретного класса в графе классов, и показывающее, что потомки конкретного класса являются разновидностью класса-родителя, причем, механизм наследования реализуется с помощью копирования всех атрибутов предка (наследования) и их частичного переопределения, как данных, так и поведения (методы); - для удобства иерархического представления больших систем классы можно объединять в группы (пакеты) или использовать модульный подход при проектировании; - полиморфизм связан с переопределением поведения объектов, для описания полиморфизма вводятся понятия операции и метода. У каждого класса есть операции, которые определяют его поведение. Операции наследуются потомками, но каждый потомок класса может предоставить свой метод реализации любой унаследованной операции, отличный от соответствующего метода предка. С операцией связано качественное описание поведения объекта, а с методом - его конкретная реализация. Таким образом, можно наследуя операции, придавать им нужные свойства, присущие объектам класса-потомка.
9.2. Понятия и компоненты Сущности представляются парами «тип, экземпляр». Таких пар несколько: «класс, объект», «ассоциация, связь», «параметр, значение», «операция, вызов процедуры». Для изображения элементов этих пар на диаграммах обобщение и конкретный экземпляр геометрически представляются одинаково. Для всех типов диаграмм существует ряд общих элементов:
233 - строки - последовательности литералов, которые могут включать в себя практически любые символы, могут объединяться в параграфы, и среди строк выделяют: - имена, которые располагаются в специально отведенных местах элементов диаграмм; - пути, которые локализуют соответствующий элемент в иерархии описаний; - метки, которые несут дополнительную информацию об элементе, располагаются вблизи объекта и составляют с ним единое целое; - строки-характеристики, которые имеют заданный синтаксис и несут информацию об индивидуальных свойствах объекта, выражающуюся в присвоении атрибуту конкретного значения; - типы – аналог класса, т.к. разница между типом и классом условна, но UML различает эти два понятия, определяя, что атрибуты, переменные и параметры могут принадлежать к определенному типу. Сами типы не определяются, хотя предполагается, что они могут быть и предопределенными, и пользовательскими. Можно создать специальный класс «ТуреЕхргеssion» и поместить туда все необходимые определения и правила. Основные компоненты UML включают описание семантики UML, его графической нотации и дополнительных понятий, позволяющих расширить смысл основных понятий языка. Документация по UML содержит подробное описание этих компонентов и вместе с формальным описанием UML в виде семи pdf-файлов и представлена на сайте Rational Software (www.rational.com). Изучение UML следует начинать с изучения его графических образов (Notition Guide). Система представляется в виде объединения нескольких проекций. Каждая проекция описывает определенный аспект разрабатываемой системы, а вместе они определяют
234 систему во всей ее полноте. Эти проекции представляются диаграммами: - диаграммы классов (class diagrams); - диаграммы вариантов использования (use case diagrams); - диаграммы взаимодействия (ineraction diagrams); - диаграммы последовательности (seguence diagrams); - кооперативные диаграммы (collaboration diagrams); - диаграммы состояний (state diagrams); - диаграммы деятельностей (activity diagrams). - диаграммы реализации (implementation diagramms); - компонентные диаграммы (component diagramms); - диаграммы применения (развертывания) (deployment diagramms). Назначение диаграмм следующее. Диаграммы классов показывают статическую структуру системы. Диаграммы классов содержат набор статических (декларативных) элементов, таких как классы, типы и их связи, изображенных в виде графа. Диаграммы классов могут быть логически объединены в пакеты. Назначение диаграммы вариантов использования следующее. Сложные системы многофункциональны и существует много вариантов использования функций (сценариев). Одно и то же действующее лицо (actor) редко использует все функции системы, поэтому все действующие лица условно делят на группы, в соответствии с типичными сценариями использования определенных функций. Для каждой группы можно составить свой объединенный групповой сценарий (use case), представляющий собой набор всех возможных сценариев применения той или иной части системы. Список всех групповых сценариев определяет функциональные требования к системе, с помощью которых может быть сформулировано техническое задание.
235 Диаграммы вариантов использования представляют собой граф, с помощью которого показаны все типичные действующие лица и их взаимодействие с системой. Взаимодействие представлено сценариями применения. Диаграммы взаимодействия делят на диаграммы последовательности и кооперативные диаграммы, на которых представлена временная последовательность использования объектов при реализации конкретного сценария и сообщений обмена. Диаграммы последовательности показывают, в какой последовательности появляются объекты при выполнении операции (сценария) и какой поток сообщений при этом возникает. Диаграммы последовательности имеют две оси: вертикальная ось представляет время, горизонтальная ось различные объекты. На кооперативной диаграмме (collaboration diagrams) в виде графа изображаются объекты, участвующие в выполнении операции, их связь и последовательность появления. Сообщения, которыми обмениваются объекты, изображены в виде стрелок, чтобы отражать их временную последовательность, каждая стрелка пронумерована. Назначение диаграммы состояний следующее. Любой объект системы может менять свое поведение в зависимости от происходящих внутренних или внешних событий, т.е. он может реагировать на события, меняя свое состояние. Диаграммы состояний показывают последовательность состояний, в которых может оказаться объект в зависимости от происходящих событий. Диаграммы состояний описывают состояние только одного класса или объекта. Назначение диаграммы деятельностей следующее. Во многих случаях наблюдают смену состояний объекта, вызываемую внутренними причинами. Внутри объекта
236 выполняются последовательно или параллельно предопределенные длительные действия. Для такого типа систем применяют диаграммы деятельностей. Такая диаграмма предназначена для того, чтобы отразить переходы, вызванные внутренними процессами в противоположность внешним событиям. Диаграммы деятельностей используются для описания сложного поведения класса или сценария и представления сложных операций в виде последовательности параллельных и последовательных длительных действий. Диаграммы реализации состоят из компонентных диаграмм и диаграмм применения (развертывания). Они, в отличие от диаграмм состояния, взаимодействия, использования и классов, являющихся логическими представлениями системы в процессе ее разработки, дают физическое представления системы. Компонентные диаграммы показывают взаимосвязи между компонентами программного обеспечения. Некоторые компоненты могут существовать только во время исполнения, связывания (linking) или компиляции. Диаграммы применения (развертывания) используются для представления схемы расположения процессоров и устройств, задействованных в реализации системы, а также изображения соединений между ними - маршрутов передачи информации. Рассмотрим пример. Представим упрощенную модель автомобиля с массой m, как груз на пружине жесткости C. Груз движется с заданной постоянной горизонтальной скоростью V по дороге, имеющей профиль y=y(x), вторая производная которого известна. Предполагается, что колесо от дороги не отрывается, и колебания груза происходят только в вертикальной плоскости, как показано на рис 9.1.
237 y
ε
m
η L
x
Рис. 9.1 Составим уравнения движения автомобиля в подвижной системе координат (ε,η), начало которой жестко связано с центром колеса. Ось ε совместим с вертикальной осью подвески, а ось η расположена на расстоянии L от профиля дороги, т.е. L - высота расположения центра тяжести груза при его относительном покое. При движении по неровности абсолютная вертикальная координата y1 начала подвижной координатной системы определяется выражением y1=y(x)+L+ε. Переносное вертикальное w при постоянной скорости V, x=Vt определится по формуле d 2y(vt) , w(t) = dt 2 а переносная сила инерции груза Q определится по формуле Q(t) = m
d 2yd(vt) . dt 2
Получим уравнение d 2ε Cm Q(t) . + ε= 2 dt m m
Способ задания профиля дороги поясняется на рис. 9.2. Горизонтальная часть участка y=0, 0≤x≤l1 сменяет участок подьема y=H1(1-exp(-γ1x)), l1≤x≤l2, за которым следует
238 спуск y=H2(exp(-γ2x)), l2≤x≤l3. Затем профиль дороги повторяется. H
Hmax
H1 l1
H2 l2
l3
x
Рис. 9.2 Длины l1, l2 и l3, коэффициенты подъема и спуска γ1 и γ2, высоты H1 и H2 являются задаваемыми величинами. Высота Hmax является предельно допустимой. Если автомобиль превышает эту высоту, то подаетя сигнал опасности и скорость автоматически уменьшается на заданную величину. Если тряска (модуль первой производной) превышает заданную величину, то также вырабатывается сигнал опасности и скорость автоматически уменьшается на заданную величину. Если на протяжении заданного интервала времени Т сигналы тревоги не вырабатываются, то автомтическая система управления повышает скорость на заданную величину. Рассмотрим задачу создания тренажера для обучения водителя управлять движением автомобиля по дорогам с разными профилями. Водитель должен научиться выбирать скорость после получения соответствующих сигналов, двигаясь по дорогам с различным профилем (Hi, Hmax, γi, li) на различных автомобилях (m,С). Вначале выделим в приоектируемой системе независимые компоненты - автомобиль и дорогу. Автомобиль представим как подвеску, движущуюся по закону
239 d 2ε Cm Q(t) , + ε= dt 2 m m
где Q(t) - некоторое заданное возмущение, зависящее от скорости движения. Установим на подвеске датчик высоты центра тяжести, датчик вертикальной составляющей скорости, датчик «крутизны» дороги и систему управления скоростью. Система управления отображает сигналы тревоги, показывает «крутизну» дороги, позволяет снижать скорость на десять процентов нажатием кнопки «скорость» и автоматически повышает скорость, если сигнал тревоги отсутствует на протяжении времени Т.
9.3. Диаграммы вариантов использования Диаграммы вариантов использования являются графическим представлением взаимодействия пользователя и компьютерной модели. Каждый вариант использования охватывает некоторую очевидную для пользователей функцию системы и решает некоторую дискретную задачу пользователя. Список всех вариантов использования определяет функциональные требования к системе, с помощью которых может быть сформулировано техническое задание. Рассмотрим основные элементы диаграммы. Диаграмма вариантов использования представляет собой граф, описывающий взаимодействие действующих лиц с системой, представленное вариантами использования. Действующее лицо - это пользователь с некоторыми фиксированными требованиями к модели. Вариант использования представляет собой типичное взаимодействие пользователя и компьютерной системы и решает дискретную задачу пользователя. Каждый вариант
240 использования - это потенциальное требование к системе. Нотация варианта использования не должна содержать в себе подробные описания, достаточно несколькими предложениями описать выдвигаемое требование. На рис. 3.3 представлена диаграмма вариантов использования для рассматриваемого примера. Полигон
Испытания
Испытатель
Обучение
Наблюдение
Ученик
Зритель
Рис. 9.3 Действующее лицо представлено фигуркой человечка, а имя действующего лица располагается под фигуркой. Вариант использования представляется эллипсом, внутри которого располагается его имя. Предполагаем, что в модели будут применять три типа пользователей: - зрители, которые могут только наблюдать за движением конкретного автомобиля по конкретной трассе; - ученики, которые могут выбирать автомобиль и трассу; - испытатели, имеющие право выбирать значения параметров трассы. Рассмотрим связи в диаграмме вариантов использования. Значимыми являются следующие связи (см. рис. 9.3, рис. 9.4):
241 - коммуникация (communicatas) показывает участие действующего лица в варианте использования, соединяя символ действующего лица с символом варианта использования сплошной линией; - расширение (extends) - линия со стереотипом «extends», с незаполненной стрелкой на конце, соединяет базовый вариант использования с расширяющим его вариантом использования. Конец с незаполненной стрелкой указывает на вариант использования, являющийся расширением базового варианта. Такой тип связи используется, если один вариант использования подобен другому, но несет дополнительную нагрузку. Удобно использовать такой тип связи при описании обработки аварийных ситуаций, возникающих в системе, чтобы не перегружать основной вариант использования, описывающий нормальное поведение системы, излишней логикой (см. рис. 9.4); - использование (uses) - линия с надписью «uses», с незаполненной стрелкой на конце, соединяет один вариант использования с другим вариантом, который он использует. Такой тип связи применяется в тех случаях, когда имеется какой-либо фрагмент поведения системы, который повторяется более чем в одном варианте использования, и не хочется копировать его в каждом из этих вариантов. В этом случае данный фрагмент оформляется как отдельный вариант использования, и к нему проводятся соответствующие связи от других вариантов (см. рис. 9.4). На рис. 9.4 поясняется, чем отличается вариант использования испытателя от варианта использования ученика. Предполагается, что первоначально по новой трассе проезжает испытатель и подбирает параметры так, чтобы при определенном навыке управления по ней можно было проехать, не ударясь «головой» о потолок, и не испытывая
242 чрезмерной тряски, а затем фиксирует их. Так появляется новая трасса для ученика. Поездка ученика uses uses
Выбор машины
Выбор трассы
Поездка испытателя
extends
Поездка ученика
uses Выбор машины
uses Выбор трассы
uses Выбор параметров трассы
Рис. 9.4
9.4. Диаграммы классов Диаграммы классов (class diagrams) показывают статическую структуру системы. Диаграммы классов содержат набор статических элементов, как, например, классы, типы и их связи, объединенные в граф. Среди связей особо выделяют ассоциации и подтипы. На диаграммах классов также изображаются атрибуты классов, операции классов и ограничения, которые
243 накладываются на связи между объектами. Диаграммы классов могут быть логически объединены в пакеты. Класс (class) - это сущность, описывающая множество объектов со сходной структурой, поведением и связями с другими объектами. На диаграммах класс изображается в виде прямоугольника со сплошной границей, разделенного горизонтальными линиями на З секции, как показано на рис. .9.5. Машина Масса: Real Жесткость: Real Сила инерции: Real Движение ()
Рис. 9.5 Верхняя секция (секция имени) содержит имя класса и другие общие свойства (в частности, тип класса). В средней секции содержится список атрибутов, а в нижней - список операций. Атрибуты хранят инкапсулированные данные класса, а операции описывают поведение объектов класса. Любая из последних двух секций - атрибутов и операций - может не изображаться. Для отсутствующей секции не нужно рисовать разделительную линию и как-либо указывать на наличие или отсутствие элементов в ней. Классы могут объединяться в более крупные компоненты, называемые пакетами. Область видимости класса - это пакет, в котором он описан. По умолчанию считается, что указываемый класс определен в текущем пакете. Если необходимо сослаться на класс из другого пакета, это указывается явно:
244
<имя пакета>: :<имя класса>. Так как иерархия пакетов может иметь глубину вложенности большую, чем единица, то путь к классу может содержать более чем одну ссылку, при этом путь начинается от корня иерархии пакетов: <имя пакета1>::<имя пакета2>::...::<имя пакетаN>::<имя класса>. В секции имени класса могут находиться (по порядку сверху вниз): - тип класса (и/или значок типа в правом верхнем углу) необязательное поле, опускается, если речь идет о неспецифицированном классе; - имя класса (если класс абстрактный, то курсивом); - дополнительные свойства - имя автора и т.п. (необязательное поле). Средняя и нижняя секции прямоугольника класса содержат списки его атрибутов и операций. Атрибут (attribute) UML - это элемент данных класса, т.е. элемент данных, который содержится в объекте, принадлежащем описываемому классу. У атрибута должен быть тип (type exptession), который может представлять собой простой тип или быть сложным: Array, Real, Vektor, Matrix. Описание типа зависит от того, какой язык программирования используется разработчиками. Атрибуг изображается в виде текстовой строки, отражающей различные его свойства: <признак видимости><имя>::<тип>=<значение по умолчанию>{свойства}. Могут быть следующие свойства: а) признак видимости имеет С++-семантику видимости членов класса:
245 - общий атрибут (public) (помечается символом +) означает, что любая сущность, имеющая доступ к объекту определяемого класса, имеет доступ и к этому атрибугу; - защищенный атрибут (protected) (обозначается символом #) доступен только для методов класса и его потомков; - приватный атрибут (private) (обозначается символом -) доступен только методам класса; - признак области видимости может изображаться ключевым словом «public», «protected» или «private» или может быть спущен, что означает, что область видимости не показывается (а не то, что она не определена или «public» по умолчанию); б) имя - это идентификатор, представляющий имя атрибута; в) тип - зависящее от языка реализации описание типа атрибута; г) значение по умолчанию - зависящее от языка реализации выражение, задающее начальное значение для атрибута вновь созданного объекта; д) свойства - строка дополнительных свойств элемента (необязательная часть). Если свойства не указываются, скобки { } опускаются. Примером свойства может служить имя автора: {Author = Smith}. По умолчанию атрибут является изменяемым. Указав в его свойствах пометку {frozen}, можно объявить атрибут неизменяемым. Для атрибута можно указывать его множественность. Если она не обозначена, то предполагается, что атрибут может хранить ровно одно значение. Множественность может быть определена в квадратных скобках сразу после имени атрибута: cords[3]: integer. В программных классах операции и методы трактуются как программные процедуры, время выполнения которых
246 будет уточняться в диаграммах состояний и деятельностей. С точки зрения моделирования, длительность (непрерывные и дискретные процессы) тех или иных операций чрезвычайно важна на самом раннем этапе. Если длительностью некоторой операции можно пренебречь, то модель может существенно упроститься. Операция (operation) - это сущность, определяющая некое действие, которое может быть выполнено представителем класса. У операции есть имя и список аргументов. Операция изображается текстовой строкой, имеющей следующую грамматику: <признак видимости><имя>(список параметров):<тип выражения, возвращающего значения> {свойства}, где: признак видимости, имя и свойства имеют тот же смысл, что и для атрибута; список параметров - список формальных параметров, разделенных запятыми; тип выражения, возвращающего значения - зависящее от языка реализации описание типа значения, возвращаемого функцией. Если оно не указано, то предполагается, что функция не возвращает значения (void для С/С++). Каждый элемент списка параметров имеет следующий вид: <имя>: <тип>=<значение по умолчанию>, где: имя - имя параметра; тип - зависящее от языка реализации описание типа параметра; значение по умолчанию - значение параметра по умолчанию. Все операции, определенные в классе, можно разделить на две группы: операции класса и операции представителя. Операции класса присущи не объектам класса, а самому классу. Отсюда, в частности, следует, что операции класса не имеют доступа к атрибутам. Типичный пример операции класса функция создания нового объекта (представителя) класса. Операции класса вьщеляются подчеркиванием: new {Машина} [масса=100, жесткость=10];
247 Операция, не изменяющая состояние системы, помечается следующим образом: в список свойств операции помещается свойство {guery}. Элементы списков атрибутов и операций можно группировать по некоторым признакам. В этом случае перед группой элементов ставится заключенная в кавычки строка, определяющая свойство, причем это свойство распространяется на все нижестоящие элементы до нового свойства. Эта возможность хорошо иллюстрируется следующим примером: “параметры масины” жесткость подвески масса машины … У каждой секции прямоугольника класса может быть имя. Так как секция «имя класса» обязательна, то ее имя не указывается, как показано на рис. 9.6. Машина «атрибуты» Масса: Real Жесткость: Real Сила инерции: Real «поведение» Движение ( )
Рис. 9.6 Одним из самых важных понятий объектноориентированного программирования является понятие объекта (objekt). Объекты могут исполнять определенные роли. Роль определяет отношение между классом и его экземплярами, вьделяя определенное их подмножество. На диаграмме объект представляется как прямоугольник с двумя секциями (см. рис. 9.7). Верхняя секция содержит в
248 себе имя объекта и его класса, подчеркнутое сплошной линией и имеющего синтаксис: <имя объекта>:<имя класса> машина:Грузовик_1 Жесткость = 100
машина: Грузовик_1
Масса = 200 машина:Грузовик_1 Грузовик_1
Рис. 9.7 Имя класса, при необходимости, может содержать в себе полный путь к данному классу. Имена пакетов должны следовать перед именем класса и разделяться парами двоеточий. Например: вертикальная координата : : Подвеска : : Машина Имя объекта может быть опущено. В этом случае в первой секции пишется двоеточие и имя класса. Имя класса данного объекта также может быть опущено вместе с двоеточием. Вторая секция содержит в себе список имен атрибугов с их типами и значениями. Каждая строка из списка имеет следующий синтаксис: <имя атрибута>: <тип>=<значение> Указание типа атрибута и его значения не является обязательным. Некоторые из атрибутов, не представляющие интереса, также могут быть опущены. Объект может принимать некоторые состояния. Чтобы обозначить это, рядом с именем объекта в квадратных скобках указывается список его состояний, содержащий
249 состояния объекта, в которых он может находиться в течение жизненного цикла. Состояния объекта формируются на этапе анализа проектируемой системы, т.е. вьщеляются некоторые основные фазы, в которых может находиться объект, далее при проектировании системы эти состояния можно корректировать. Составной объект (composite objekt) - экземпляр составного класса, т.е. класса, имеющего отношение композиции с другими классами. Cоставной объект состоит из других, возможно, также составных объектов и представляется на диаграмме так же, как и простой объект. Имя объекта располагается в верхней секции прямоугольника, а в нижней секции вместо атрибугов объекта располагаются части составного объекта (см. рис. 9.8). Новый полигон : Полигон Трасса1:Дорога
«тряска»
«удар»
Грузовик:Автомобиль
Рис. 9.8 Содержание составного объекта может быть опущено и сообщения, предназначенные для внугренних составляющих объекта, могуг обращаться непосредственно к самому объекту. Внутренние сообщения, которыми обмениваются составляющие объекта, также могут быть опущены. Сообщения обычно показываются на одной диаграмме вместе с составляющими объекта.
250 Активный объект (active objekt) имеет возможность инициировать действие. Пассивный объект может содержать в себе данные, но не может инициировать действия. Однако пассивный объект может посылать сообщения в процессе обработки запроса, который он получил. Активный объект - это объект, имеющий поток управления. Он представляется на диаграмме как обычный объект, обведенный толстой сплошной линией. Часто он представляется как композиция из вложенных частей, как это показано на рис. 9.8.
9.5. Типы связей между классами Чтобы на диаграмме показать взаимодействие классов, между ними необходимо обозначить связь. Возможны связи следующих типов: ассоциации, зависимости, агрегации и сообщения. Ассоциация (association) определяет логическую связь между классами. В UML одна ассоциация может специфицировать связь между двумя и несколькими классами. Ассоциации первого типа называются бинарными, а второго типа - N-арными. Бинарная ассоциация (binary association) характеризует логическую связь между двумя классами. Возможна также связь класса с самим собой, которая называется рефлексивной ассоциацией. Изображается ассоциация в виде сплошной линии, соединяющей символы классов. Каждая ассоциация, как и любая связь, обладает направлением или в терминах UML - ролью (association role). Ролей может быть две, чтобы иметь возможность подчеркнуть возможные различия во «взаимоотношениях» между классами, например у «Начальника» могут быть
251 сосредоточены все права, а у «Подчиненного» - только обязанности. Рядом с линией, изображающей ассоциацию, мотут быть следующие пометки: - имя ассоциации определяет необязательное имя ассоциации; - класс ассоциации определяет для ассоциаций атрибуты, операции и другие свойства (соединяется с линией ассоциации пунктиром). Эта метка используется в случае, если необходимо присоединить к ассоциации некую дополнительную информацию. Роль (association role) - неотделимая часть ассоциации, описывающая роль класса в данной ассоциации. У роли могуг быть следующие свойства: - имя роли - строка, стоящая рядом с концом линии ассоциации, причем, поле не обязательное, но если имя задано, то оно должно отображаться на диаграмме; - навигация в направлении роли означает, что партнеры ассоциации могут просматривать объекты, соответствующие этой роли. Если в направлении, соответствующем роли есть навигация, то на конце линии может быть изображена стрелка; - множественность показывает количество конкретных объектов, которые могут быть связаны с данным партнером ассоциации, показывает нижнюю и верхнюю границы количества объектов, которые участвуют в ассоциации; - квалификатор представляет собой список атрибутов класса с противоположного конца линии ассоциации, по значениям которых можно однозначно разбить множество объектов этого класса на подмножества. Используется для связи объекта класса-партнера ассоциации с группой объектов другого класса-партнера ассоциации; - агрегация показывает, что ассоциация является отношением типа целое/часть.
252 Множественность (multiplicity) показывает возможное количество объектов, которые могут быть связаны в соответствии с этой ассоциацией. Множественность указывается для ролей ассоциации и имеет следующий формат (см. рис. 9.9): <нижняя граница>. . <верхняя граница>
Трасса
Машина 1
1..* Рис. 9.9
Верхняя граница и нижняя граница указывают минимальное и максимальное количество объектов, участвующих в ассоциации. Если для верхней границы стоит символ «*», то это значит, что она бесконечна. Пример 0. .1 10 0. . * 3. .5,10. .20,100,200. . * В работающей системе между объектами ассоциированных классов устанавливаются связи (экземпляры ассоциации). Но в некоторых случаях требуется, чтобы можно было разбить множество объектов одного класса, которые будут связаны с объектом другого класса в соответствии с данной ассоциацией, на подмножества по значениям некоторых атрибутов этих объектов, и наложить ограничения на число объектов в том или ином подмножестве. В UML предоставляется такая возможность: у ассоциации может быть атрибут под названием квалификатор (qualifier), который содержит один или несколько атрибутов класса, прикрепленного к другому
253 концу ассоциации. По значению этих атрибутов происходит групповая выборка объектов этого класса со стороны объекта противоположного по данной ассоциации класса. Квалификатор изображается в виде маленького прямоугольника, присоединенного к началу линии ассоциации (см. рис. 9.10). В нем указываются атрибуты другого класса-партнера ассоциации. Трасса вес машины #
*
0..1 Машина
Рис. 9.10 Квалификатор, приведенный на рис. 9.10, можно трактовать, как ограничение на использование трассы машинами с определенным весом, и на количество одновременно проезжающих по этой трассе машин. Если у роли ассоциации установлен атрибут «aggregation», то вся ассоциация является отношением агрегации. Такой атрибут может быть установлен только у одной из ролей. Агрегация (aggregation) - это отношение между классами типа целое/часть. Агрегируемый класс в той или иной форме является частью агрегата. На практике это может быть реализовано по-разному. Например, объект класса-агрегата может хранить объект агрегируемого класса, или хранить ссылку на него.
254 В UML допускается возможность агрегации одного класса многими, т.е. один класс может являться частью нескольких целых. Но имеется специальный вид агрегации, называемый композицией (composition), который этого не допускает. Композиция является специальным видом агрегации (так называемая сильная агрегация). Она указывает на то, что данный класс может являться частью только одного класса. В частности, агрегируемый объект может быть создан только тогда, когда создан агрегат, а с уничтожением агрегата уничтожаются и все агрегируемые объекты. Агрегация изображается на диаграмме полым ромбом на конце линии ассоциации со стороны агрегирующего класса (агрегата). Композиция показывается так же, как и агрегация, но ромбик рисуется не пустым, а заполненным (см. рис. 9.11). Трасса
горизонтальный участок
подъем спуск
Real Real
Real
Рис. 9.11 В некоторых случаях два и более элемента модели могут быть семантически связаны. Например, класс А использует методы класса В. При изменении класса В необходимо произвести соответствующие изменения в классе А. Поэтому в нотации UML предусмотрено такое отношение, как зависимость (dependency).
255 Для рассмотренного примера на диаграмме классов необходимо указать, что класс А зависит от класса В. Отношение зависимости является универсальным, если с помощью него можно связывать различные типы сущностей UML. Зависимость изображается пунктирной линией, проведенной между двумя элементами диаграммы, и считается, что элемент, «привязанный» к концу стрелки, зависит от элемента, «привязанного» к началу этой стрелки. Зависимость может быть снабжена именем и спецификатором. Существуют следующие виды зависимостей: - trace показывает историческую связь между двумя элементами, которые представляли одно и то же понятие на разных этапах; - refine - историческая связь между элементами, как правило, показывает, что один элемент как бы произошел от другого; - uses - ситуация, когда один элемент модели использует другой; - bind - устанавливается между шаблоном и экземпляром шаблона; - friend - аналог ключевого слова С++friend. Наследование (inheritance) - это отношение типа «общеечастное» между элементами модели. Наследование обозначается сплошной линией, идущей от частного элемента к более общему (в терминологии ООП - от потомка к предку или от подкласса к суперклассу). Со стороны более общего элемента рисуется большой полый треугольник. Один из атрибутов отношения наследования дискриминатор (discriminator) - строка, задающая имя группы потомков. Его использование полезно, если у данного класса много потомков, и необходимо разбить их на несколько групп. Отсутствие дискриминатора означает,
256 что дискриминатор - пустая строка (дискриминатор по умолчанию). Изображается дискриминатор текстовой строкой, стоящей возле линии наследования, как это показано на рис. 9.12. Трасса
Профиль {крутизна}
Легкая
Трудная
Средняя
Рис. 9.12
9.6. Расширения понятия класса в UML В UML существует несколько разновидностей класса: интерфейс, шаблон, утилита и др. Интерфейс (interface) - класс, задающий набор операций, но не содержащий в себе поля и реализации этих операций. Класс, реализующий интерфейс, сам определяет содержимое этих операций. Шаблон (template) или параметризованный класс (parameterixed class). Шаблоны UML очень похожи на шаблоны С++. Они определяют семейство классов, отличающихся значением некоторых формальных параметров. Утилита (utility) - класс, объединяющий группу общедоступных (глобальных) переменных и процедур.
257 Для указания вида класса в UML введено понятие стереотипа (stereotype). Стереотип как бы определяет подтип некоего глобального типа класс. Соответственно, классы-интерфейсы имеют стереотип «interface», а классы утилиты – «utility». Интерфейс (interface) в UML является описанием группы функций, которые он предоставляет другому классу. Логика работы этих функций не определяется. Имеется возможность задать неформальное описание того, что от них требуется. Класс поддерживает интерфейс, если он содержит методы, реализующие все операции интерфейса. На диаграмме классов UML интерфейс можно изобразить двумя способами: развернутым и сокращенным. В случае развернутого способа интерфейс изображается на диаграмме как класс со стереотипом «interface» и без секции атрибутов (см. рис. 9.13). Допустимо также сокращенное изображение интерфейса - небольшой кружок с именем интерфейса возле него. На рис. 9.13 изображен класс «Грузовая машина», который реализует интерфейс «Машина». Связь между ними называется детализацией и представляется на диаграмме в виде пунктирной линии с треугольником на конце. Класс «Грузовая машина» должен предоставить метод, реализующий операцию движение, унаследованную от интерфейса «Машина». На рис. 9.14 изображен класс «Грузовая машина», использующий интерфейс «Машина». Связь между ними называется зависимостью и представляется на диаграмме в виде пунктирной линии со стрелкой на конце. Такая связь говорит о том, что если интерфейс «Машина» изменить, то класс «Грузовая машина» тоже может претерпеть некоторые изменения.
258 Грузовая машина
«interfase» Машина Движение ( )
Рис. 9.13 Грузовая машина
«interfase» Машина Движение ( )
Рис. 9.14 В некоторых случаях в модели необходимы классы со схожей структурой, которые отличаются некоторыми параметрами. Например, имеется описание нескольких динамических массивов для элементов разных типов, а многие операции над их элементами совпадают. Целесообразно определить такую структуру данных, чтобы с ее помощью было бы легко получить динамические массивы, и делать это можно было бы уточнением параметров. Для этого в UML вводится понятие параметризованных классов (parameterixed class), которые еще называют шаблонами (template). Параметризованный класс или шаблон - это описание множества классов с одним или более неопределенным формальным параметром. Шаблон нельзя использовать как
259 обычный класс, т.к. его параметры должны быть привязаны к определенным значениям. Шаблон не может участвовать в большинстве отношений между классами. Существует два вида отношений, в которых он может участвовать связи между шаблоном и классом, порожденным от него подстановкой параметров (помечается ключевым словом «bind»), и направленные ассоциации. Направленная ассоциация должна идти от шаблона. Операции и атрибуты экземпляров шаблонов не отображаются на диаграмме. Иногда требуется добавить новые свойства в класс. В таких случаях следует создать новый класс, чьим предком будет экземпляр шаблона, и далее добавить нужные операции и атрибуты. Иногда при описании классов используют глобальные функции и переменные. Для удобства программирования введено понятие утилита (utility) - класс специального вида, в котором собираются подобные функции и переменные. На диаграмме утилита изображается как класс со стереотипом «utility», и может иметь как атрибуты, так и операции.
9.7. Связи между объектами Аналогично ключевому понятию модели классов понятию ассоциации, - для объектов существует понятие связи (link). Связь есть экземпляр ассоциации, установленной для объектов данных классов. Бинарная связь представляется как сплошная линия между двумя объектами. Объекты-партнеры связи исполняют определенные роли, имена которых изображаются на соответствующих концах связи. Связь не имеет собственного имени и характеризуется именами объектов, которые она соединяет. Поскольку связи являются экземплярами ассоциаций, то
260 для них не указывается множественность. Другие свойства, присущие ассоциациям, такие как агрегация, композиция, навигация, могут быть показаны на ролях связей аналогичным образом. Также можно указать и квалификатор, задающий тип связи (см. рис. 9.15). трудная трасса
испытатель
Мой Полигон:Полигон ученик
Тр1:Трасса трасса
трасса
Тр2:Трасса
трасса
легкая трасса
Тр3:Трасса
Рис. 9.15 – Связи Квалификаторы бывают следующих видов: - «association» задает тип связи как экземпляр ассоциации, соединяющей соответствующие классы. Так как все связи - экземпляры ассоциации, то указывать этот квалификатор не имеет смысла, т.к. соответствующий ему тип связи выставляется по умолчанию; - «parameter» указывает, что объект является параметром операции другого объекта-партнера связи; - «local» показывает, что объект - локальный параметр операции или метода другого объекта-партнера связи; - «global» - аналогично предыдущему, только здесь глобальный параметр; - «self» - применяется для обозначения связи объекта с самим собой. Используется для обозначения возможности посылки объектом сообщений самому себе.
261
N-арная связь представляется на диаграмме как ромб, от которого выходят соединения к объектам. Остальные атрибутьи N-арной связи такие же, как и у бинарной связи. В контексте диаграмм классов пакет (package) - это вместилище для некоторого набора классов и других пакетов. Пакет является самостоятельным пространством имен. В UML нет каких-либо ограничений на правила, по которым разработчики могут или должны группировать классы в пакеты. Но есть стандартные случаи, когда такая группировка уместна, например, тесно взаимодействующие классы, или разбиение системы на подсистемы. Пакет физически содержит сущности, определенные в нем. Это означает, что если будет уничтожен пакет, то будет уничтожено и все его содержимое. При описании классов пакета нередко бывает полезно сослаться на класс, определенный в другом пакете. Это можно сделать, импортировав нужный пакет. Это означает, что в импортирующем пакете станут доступными все классы импортируемого пакета. При этом пространства имен не объединятся. Для использования класса надо будет указать его имя с полным путем пакета, в котором он лежит. На рис. 9.16 показано, что пакет с именем «Трасса» импортирует пакет с именем «Подъем». Трасса
Подъем
Рис. 9.16
262
9.8. Диаграммы взаимодействия Взаимодействия между объектами в системе представляются диаграммами взаимодействия (interaction diagrams). Диаграммы взаимодействия подразделяются на два основных типа диаграмм: диаграммы последовательности (sequence diagrams) и кооперативные диаграммы (collaboration diagrams). Диаграммы последовательности имеют две размерности: обычно по вертикали представлено время, по горизонтали различные объекты. Оси координат могут меняться местами, ось времени может располагаться горизонтально, слева направо, а список объектов - вертикально. Объект на диаграмме изображается в виде прямоугольника на вершине вертикальной пунктирной линии, называемой линией жизни объекта (lifeline). Она представляет собой фрагмент жизненного цикла объекта в процессе взаимодействия. Если объект создается или уничтожается на отрезке времени, представленном на диаграмме, то его линия жизни начинается и заканчивается в соответствующих точках, в противном случае линия жизни объекта проводится от начала до конца диаграммы. Символ объекта рисуется в начале его линии жизни; если объект создается не в начале диаграммы, то сообщение о создании объекта рисуется со стрелкой, проведенной к символу объекта. Если объект уничтожается не в конце диаграммы, то момент его уничтожения помечается большим крестиком «×». Линия жизни может разветвляться на две (и более) параллельные линии, показанные условно. Каждая ответвляющаяся линия соответствует переходу в потоке сообщений. Линии жизни могут объединяться в некоторой последующей отметке. Для того чтобы проиллюстрировать данный вид диаграмм, обратимся к примеру. Пусть ученик сдает
263 экзамен на вождение. Трасса ученику не подбирается, и он едет по неизведанной трассе. Если на протяжении отрезка времени Т ученик получит не более двух сигналов тревоги, то экзамен сдан. Если между сигналами проходит отрезок времени больше Т/2, то предыдущий сигнал аннулируется. Построим диаграмму последовательности для одной из ситуаций, когда экзамен не сдан (см. рис. 9.17). Датчик
Система управления
а
Преподаватель
Старт
б
Сигнал тревоги
Сигнал тревоги
с
Сигнал тревоги
Сигнал тревоги
d
Сигнал тревоги
Сигнал тревоги
b-c≤T’/2
c-d≤T’/2
Экзамен не сдан Стоп
Рис. 9.17 Сообщения (message) связывают на диаграмме последовательности объекты между собой и передают информацию о выполняемом действии. Сообщение представляется на диаграмме сплошной линией со стрелкой на конце, проведенной от линии жизни одного объекта к линии жизни другого объекта. Возможна посылка сообщения объектом самому себе самоделегирование. В этом случае линия может начинаться и заканчиваться около символа объекта. Линия помечается
264 именем сообщения (операция или сигнал) и значениями его аргументов. Сообщения могут быть помечены условием перехода, которое располагается в квадратных скобках. Сообщения могуг быть следующих типов: - асинхронные сообщения рисуются линией с половинкой стрелки на конце. Они не блокируют работу вызывающего объекта, и он может продолжать свой собственный процесс. Асинхронные сообщения можно использовать для создания нового объекта или для установления связи с уже выполняемой ветвью процесса; - вызов процедуры рисуется как заполненная стрелка. Возвращение из процедуры подразумевается неявно и на диаграмме обычно не отображается. Оно обозначается явно в том случае, если это необходимо для большей ясности и представляется меткой (короткая поперечная линия), расположенной около адресата возврата. Обычно стрелка с сообщением рисуется горизонтально. Это симнолизирует, что сообщение передается мгновенно и ничего не может произойти в момент передачи. Если на передачу сообщения необходимо какое-то время, в течение которого может что-нибудь произойти (например, посылка сообщения в противоположном направлении), то линия со стрелкой может быть ломаной (конец стрелки располагается ниже ее начала). Объединенный набор сообщений может быть маркирован как итерация (ineration). Маркером итерации служит символ «*». Для сценария итерация указывает, что множество сообщений может передаваться многократно. Для процедуры условие продолжения итерации может указываться в конце итерации. Возможны случаи, когда часть сообщений является частью итерации, а остальные сообщения могут быть вьшолнены только однократно. Переходы (transition) рисуются как многократные стрелки, проведенные в одну точку, помеченные условием
265 перехода. Переход может быть именован. Имя представляет собой время посылки сообщения (например: А). В случае, когда передача сообщения происходит не мгновенно, время получения отмечается именем с апострофом (например: А’). Имя может быть проставлено слева от стрелки. Имя может быть использовано для выражения, ограничивающего время посылки сообщений. Ограничения помещаются в фигурных скобках. Диаграммы последовательности полезны для представления параллельных процессов. Для этого в диаграммах последовательности вводятся активации (activation), показывающие период времени, в течение которого объект выполняет действия непосредственно или через зависимую процедуру. Активация представляется на диаграмме длинным тонким прямоугольником, верхняя часть которого выравнивается с моментом, когда метод данного объекта становится активным, а нижняя часть - с моментом завершения работы данного метода. Выполняемое действие может быть помечено текстом справа от символа активации (или слева, в зависимости от стиля), поочередно входящие сообщения указывают действия, которые выполняются в данном методе. В потоке управления процедуры верхняя часть символа активации предупреждает о входящем сообщении (которое инициирует действие), а нижняя часть является началом посылки возвращаемого сообщения. Для параллельно работающих объектов (каждый из них с собственным потоком управления) активация показывает продолжительность выполнения операций каждым объектом. Для процедур активация показывает время, в течение которого процедура (или вложенная процедура) данного объекта активна. В случае рекурсивного вызова объекта вторая активация рисуется слегка правее первой, с
266 небольшим наложением на нее (рекурсивные вызовы могут иметь произвольную глубину). Кооперативные диаграммы (collaboration diagrams) предоставляют возможность пространственно располагать объект. На кооперативных диаграммах экземпляры объектов показываются в виде пиктограмм и отображаются лишь объекты, прямо или косвенно участвующие в выполнении данного варианта использования. Линии со стрелкой на конце обозначают сообщения, обмен которыми осуществляется в рамках данного варианта использования. Их временная последовательность указывается путем нумерации сообщений. Линия со стрелкой проводится около линии, соединяющей объекты, и указывает в направлении объекта, которому посылается сообщение. Для пометки различных сообщений могут использоваться следующие типы стрелок: - линия с заполненной стрелкой обозначает вызов процедуры и может использоваться также между параллельно работающими активными объектами для посылки сигналов и ожиданий; - линия с половинкой стрелки используется для явного указания на асинхронный обмен сообщениями между двумя объектами; - другие разновидности могут представлять разновидности управления, например, «balking» или «timeout», но они обычно воспринимаются как дополнительные возможности UML. Сообщения на кооперативной диаграмме помечаются номерами. Нумерация сообщений делает восприятие их последовательности более трудным, чем в случае расположения линий на странице сверху вниз. Принято применять вложенную систему нумерации, т.к. это позволяет понять, какая операция что вызывает.
267 Внутренние сообщения о выполнении операции нумеруются, начиная с единицы. В последовательности сообщений между объектами в параллельных процессах нумерация сообщений относится к одному уровню (нет вложенности). На кооперативной диаграмме сообщение можно снабдить такой же управляющей информацией, что и на диаграмме последовательности. Пиктограмма объекта на кооперативной диаграмме помечается строкой имени, имеющей вид: <ИмяОбъекта : ИмяКласса>, где ИмяОбъекта, либо ИмяКласса могут отсутствовать. Если имя объекта отсутствует, то перед именем класса сохраняется двоеточие. Вызов взаимодействия на диаграмме может быть представлен символом действующего лица. Так как в описанном ранее примере о сдаче учеником экзамена важна не только временная последовательность событий, но и отрезки времени между ними, то в данной задаче нет необходимости использовать кооперативную диаграмму. Поэтому проиллюстрируем данный вид диаграммы на следующей последовательности действий: ученику подается команда «Старт», команда передается системе управления и начинается движение. Если происходит какая-либо тревожная ситуация (удар о потолок или избыточная тряска), то датчик сигнализирует об этом системе управления машины ученика, а также преподавателям, принимающим экзамен. Система управления обязана на это отреагировать уменьшением скорости, а преподаватели - фиксацией ошибки ученика. Диаграмма, иллюстрирующая данный пример, представлена на рис. 9.18.
268 Сигнал управления
1: сигнал тревоги
2: уменьшить скорость
Датчик
1а: сигнал тревоги
Преподаватель
2а: защитать ошибку ученика
Рис. 9.18
9.9. Диаграммы состояний Диаграммы состояний (state diagram) определяют состояния, в которых может находиться конкретный объект, а также процесс смены состояний объекта в результате влияния некоторых событий. Диаграммы состояний строятся для единственного класса и описывают поведение единственного объекта. Эта диаграмма представляет собой граф состояний, в которых может находиться объект, и связей между ними. Состояния (state) представляют собой отрезок времени в жизни объекта, в течение которого является истиной некоторое условие, выполняются некие действия или ожидается некоторое событие. Состояние представляется на диаграмме как прямоугольник с закругленными углами (см. рис. 9.19). Он может иметь одну или несколько секций. В них содержатся: - имя состояния. Указание имени состояния необязательно. Два символа состояния с одним и тем же именем представляют на диаграмме одно и то же состояние
269 объекта. Использование нескольких символов одного и того же состояния используется в диаграмме для удобства представления (например, для того, чтобы не перегружать одно состояние подходящими к нему и исходящими из него связями); Увеличение скорости V:Real Entry/V:=1,05*V
Рис. 9.19 - переменные состояния. Указывается список переменных состояния, определенных в данном состоянии или в его подсостояниях. Переменные состояния имеют форму атрибутов. Выражение, описывающее их начальное значение, может содержать в себе атрибуты данного объекта, переменные состояния подсостояний и параметры входящих в состояние переходов; - внутреннее поведение. Указывается список внутренних действий, выполняемых, когда объект находится в данном состоянии. Каждое действие описывается следующим образом: <имя события><список параметров> ‘/’ <действие> В одном состоянии имя события может быть использовано неоднократно. Однако существует три зарезервированных действия, имеющих тот же формат описания, что и обычное действие, имена которых можно использовать только однократно: - ‘entry’ ‘/‘ <действие> - действие, выполняемое при входе в состояние;
270 - ‘exit’ ‘/’ <действие> - действие, выполняемое при выходе из состояния; - ‘do’ ‘/’ действие> — действие, выполняемое при нахождении в состоянии. В этих выражениях могут использоваться переменные состояния данного состояния и его подсостояний, атрибугы данного объекта и параметры входящих в состояние переходов (если они включены во все входящие маршруты). Состояние может иметь иерархическую структуру. Каждое подсостояние (substate) может иметь свое начальное и конечное псевдосостояния. Переход в такое состояние означает переход в начальное псевдосостояние внутри него. Переход в конечное псевдосостояние подсостояния означает завершение работы данного подсостояния. Завершение работы всех подсостояний означает завершение активности данного состояния и выход из него. Любое состояние может быть усовершенствовано введением в него последовательных подсостояний или параллельных подсостояний. Его подсостояния могут быть усовершенствованы первым или вторым способом. Расширение состояния представляют на диаграмме символом, аналогичным применяемому для изображения состояния. В нем, кроме секций для имени состояния, переменных состояния и внутреннего поведения, имеется секция для представления вложенной диаграммы состояний. Расширение состояния в виде параллельных подсостояний представляется как несколько окон, расположенных в данном состоянии одно под другим и разделенных пунктирной линией. Каждое подсостояние может иметь свое имя и содержать вложенную диаграмму непересекающихся состояний. Секции с текстовой
271 информацией при данном представлении отделяются сплошной линией. Диаграммы параллельных подсостояний используются в тех случаях, когда объект обладает набором независимых поведений. При попадании в такое сложное состояние, содержащее в себе несколько параллельно функционирующих подсостояний, объект начинает находиться в нескольких независимых состояниях одновременно. При выходе же из этих параллельных состояний объект оказывается в одном общем конечном состоянии, если он не покинул одну из параллельных ветвей ранее. Начальное псевдосостояние представляется маленьким черным кружком. Переход из начального псевдосостояния может быть помечен именем события - это говорит о переходе в активное состояние, вызванном данным событием. Если такой пометки нет, то считается, что происходит просто переход в активное состояние. Переход так же может иметь выполняемое действие. Конечное псевдосостояние представляется маленьким черным кружком, обведенным сплошной линией. Пусть в нашем примере с трассой при сдаче экзамена учеником предусматривается ситуация с проколом шины. На трассе существуют специальные съезды с трассы, на которые должен быть отбуксирован автомобиль с проколотой шиной. Там шину заменяют в течение времени Т и автомобиль возвращается на трассу. Этот процесс смены проколотой шины удобно представить в качестве диаграммы состояний с последовательными подсостояниями (см. рис. 9.20). Предположим, что пока происходит замена проколотой шины, необходимо заполнить на нее квитанцию. Причем процесс заполнения квитанции и ее подписание происходит одновременно с заменой шины. В этой ситуации удобно
272 использовать диаграмму состояний с параллельными подсостояниями (см. рис. 9.21). Замена шины
Найти ближайший съезд с трассы
Вернуться на трассу
[съезд найден]
[after T]
Отбуксировать туда машину
Заменить проколотую шину
Рис. 9.20
Замена шины Найти ближайший съезд с трассы
Вернуться на трассу
[съезд найден] Отбуксировать туда машину
Заменить проколотую шину
Заполнить квитанцию на новую шину
Подписать квитанцию
Рис. 9.21
[after T]
273 Событием (event) называется заслуживающее внимания происшествие. В диаграмме состояний оно может вызывать переход из одного состояния в другое. События могут быть различных видов: - обозначенное условие, обычно описанное булевским выражением, становится истинным, описывается условием перехода без определения имени события; - получение одним объектом сигнала от другого объекта, описывается именем события, вызывающим переход; - истечение определенного промежутка времени после обозначенного события, описывается временным интервалом, по истечении которого вызывается переход. Сигнал или вызов события может быть определен следующим образом: <имя события>’(‘<параметр>’,’ . . .’)’ Параметры имеют следующий формат: <имя параметра’:‘<тип> Сигнал может быть представлен как класс со стереотипом «signal» на диаграмме классов. Параметры будут в этом случае атрибутами класса. Сигнал также может быть определен как подкласс другого сигнала (см. рис. 9.22). «signal» Ошибка
«signal» Превышение уровня Hmax
«signal» Превышение порогового уровня тряски
Рис. 9.22
274 Событие, связанное с истечением промежутка времени, описывается выражением, в котором указывается данный отрезок модельного времени, например, «5 seconds». По умолчанию, по истечении данного отрезка времени происходит выход из текущего состояния. В противном случае подобные события могут быть описаны условным выражением, например: [date = Jan. 1, 2000] ИЛИ [10 seconds since exit from state А]. События могут быть объявлены на диаграмме классов как класс со стереотипом «event». Простой переход (simple transition) представляет собой связь между двумя состояниями объекта, показывающую, когда объект может перейти из первого состояния во второе, и обозначающее определенное действие, которое выполняется, если произошло определенное событие. Событие может иметь параметры, которые доступны для действий, определенных на переходе, или для действий, инициирующих последующее событие. События обрабатываются мгновенно. Если событие не вызывает никакого перехода, то оно просто игнорируется. Если вызывается сразу несколько переходов, то инициируется только один из них; выбор может быть недетерминированным, если переходы не имеют приоритетов. Переход на диаграмме состояний представляется сплошной линией со стрелкой на конце, проведенной от одного состояния (исходного) к другому (конечному), помеченной строкой перехода. Данная строка имеет следующий формат: <описание события>’[‘(условное выражение>]‘/’(действие>’^’ <посылка сообщения> где: - описание события описывает событие и его аргументы:
275
<имя события>’,’<параметр>’,’. . .’)’; - условное выражение является булевским выражением, описывающим условие, при выполнении которого происходит данное событие; - действие есть выражение, выполняемое при инициации данного перехода. Оно может содержать в себе операции, атрибуты, данного объекта и параметры вызванного события; - посылка сообщения определяет сообщение (или сигнал), посылаемое при возникновении данного события, и имеет следующий формат: <адресат>’.‘<имя сообщения>’(‘<параметр>’.’ . . ‘)‘, где: - адресат является выражением, определяющим объект (или множество объектов), которому посылается сообщение (сигнал); - имя сообщения содержит в себе имя события, о котором посылается сообщение (сигнал); - параметры передаются вместе с данным сообщением (сигналом) объекту-адресату. Переход может содержать несколько таких предложений. Порядок их расположения определяет порядок их выполнения; Один общий переход может иметь множество исходных и конечных состояний. Это представляется синхронизацией и/или разделением управления между параллельными ветвями в параллельных подсостояниях. Если данный объект одновременно находится во всех исходных состояниях данного перехода, то переход осуществляется. Если условие перехода становится истинным, то переход инициируется и выполняются действия, стоящие на данном переходе. Обычно все исходные состояния должны быть активны к тому моменту, когда инициируется сложный переход (complex transition). В более сложных ситуациях условие
276 перехода может быть расширено разрешением начал перехода при условии, что некоторое подмножество исходных состояний активно. Сложный переход представляется на диаграмме состояний вытянутым в вертикальном направлении закрашенным прямоугольником. От прямоугольника может исходить одна или несколько линий со стрелками на конце, проведенных к конечным состояниям. К символу сложного перехода могут быть проведены одна или несколько линий со стрелками на конце, проведенных от исходных состояний. Строка, описывающая условия перехода, располагается около данного символа. Отдельные линии, проведенные к определенным состояниям, не могут иметь своих строк с описанием условий перехода. Переход в состояние со сложной структурой эквивалентен переходу в его начальное псевдосостояние или в каждое из начальных псевдосостояний его подсостояний. Переход в состояние со сложной структурой «наследуется» каждым из вложенных подсостояний, на каком уровне вложенности они бы не находились. Переход на диаграмме состояний, введенный за границу сложного состояния, символизирует переход в сложное состояние. Начальное псевдосостояние также может быть представлено на диаграмме. Переход может быть проведен непосредственно к любому из подсостояний системы. Переход на диаграмме состояний, выходящий из-за границы сложного состояния, символизирует собой переход из сложного состояния в другое состояние. Переход может быть проведен непосредственно от любого подсостояния системы к состоянию, находящемуся вне сложного состояния. В случае перехода в сложное состояние для каждого из начальных подсостояний выполняются необходимые входные (“entry”) действия. При выходе из сложного состояния для каждого из
277 конечных подсостояний выполняются необходимые выходные (“exit”) действия. Состояние может содержать в себе индикатор предшествующего состояния (history state indicator), представляемый на диаграмме состояний как маленький кружок с буквой “Н” внутри. Индикатор предшествующего состояния может иметь любое количество входящих переходов, но не может иметь выходящих переходов. Если в него выполняется переход, то это означает, что объект возвращается в то состояние, в котором пребывал перед тем, как покинуть данное сложное состояние. Необходимые входные (“entry”) действия при этом также выполняются. Вложенность в сложном состоянии может быть скрыта. Переход во внутреннее состояние в подсостоянии или выход из подсостояния представляется как линия перехода, проведенная к так называемым условным псевдосостояниям (stubs). Условные псевдосостояния представляются на диаграмме как небольшие вертикальные линии, расположенные в поле сложного состояния. Условные псевдосостояния не могут представлять начальные или конечные псевдосостояния подсостояний. Выполняемое в объекте действие посылает сообщения множеству объектов-адресатов. Последнее может содержать в себе от одного объекта до всей системы. Посылка сообщения на диаграмме представляется сплошной линией со стрелкой на конце, проведенной от объекта-отправителя к объекту-адресату (см. рис. 9.23). Стрелка помечается именем события и списком его аргументов. Посылка сообщений между диаграммами состояний представляется пунктирной линией со стрелкой на конце, проведенной от отправителя к адресату.
278
Датчик Тревога 2 ’
’
[y >y max]/Сигнал [y>Hmax]/Сигнал тревоги 1 Ожидание
Тревога 1
Сигнал тревоги 2
Сигнал тревоги 1
Система управления Увеличение скорости Уменьшение скорости 2
entry/V:=1,05*V
after T
Нормальная езда
Сигнал тревоги 2
Сигнал тревоги 1
entry/V:=0,95*V
Уменьшение скорости 1 entry/V:=0,9*V
Рис. 9.23
279
9.10. Диаграммы деятельностей Диаграммы деятельностей (aktivity diagrams) предназначены для того, чтобы отразить переходы в рамках выполнения определенной задачи, вызванные внутренними процессами. Используются для моделирования потоков работ в различных вариантах использования, для анализа вариантов использования. Рассмотрим основные элементы диаграммы. Основным элементом диаграммы деятельностей является состояние действия (action state). Оно представляет собой состояние, в котором определено внутреннее действие, и имеющее хотя бы один выходящий из него переход, включающий в себя неявное событие завершения данного внутреннего действия. Состояния действия не могут иметь внутренних или внешних исходящих переходов, основывающихся на явных событиях; в таких ситуациях используются обычные состояния. За одним состоянием действия следует другое состояние. Вместе они образуют последовательность действий. Переходы, выходящие из состояния действия, неявно вызываются завершением некоего события в состоянии. Переходы могут включать в себя условия перехода и действия. Выполняемое действие может быть описано на естественном языке или на любом языке программирования. В диаграмме деятельностей может использоваться состояние, связанное с принятием решения - решение (decision). Решение используется в тех случаях, когда в зависимости от условий перехода может быть выбран тот или иной переход на диаграмме. Может показаться, что диаграмма действий является аналогом блок-схемы. Это не так. Рассмотрим диаграмму, представленную на рис. 9.24.
280 [after T]
Движение [совершил ошибку]
Команда «Стоп»
Послать сообщение об ошибке преподавателям
Послать сообщение об ошибке системе управления
Засчитать ошибку ученику
Сбросить скорость
[совершил менее трех ошибок]
[совершил три и более ошибки] Экзамен не сдан
[не совершал ошибок] Экзамен сдан
Экзамен сдан, но были ошибки
Рис. 9.24 Обнаружить разницу можно, посмотрев на состояние действия движение. Оно активизирует два действия, связанные с ожиданием ошибки и истечением отрезка времени Т. Предположим, что произошла ошибка и стали двигаться вниз по этому маршруту. Этот путь ведет к линейке синхронизации, с которой связана активизация
281 двух деятельностей - послать сообщение об ошибке преподавателям и послать сообщение об ошибке системе управления. Диаграмма указывает на то, что эти две деятельности могут выполняться параллельно и порядок их выполнения не играет роли. В этом и заключается главное различие между блок-схемой и диаграммой деятельностей. Блок схемы ограничивается последовательными процессами, а диаграммы деятельностей могут поддерживать параллельные процессы. Состояние действия на диаграмме представляется как прямоугольник со скругленными углами. Выражение, описывающее выполняемое действие, располагается внутри прямоугольника. Выражения на одной диаграмме могут дублироваться. Решение представляется на диаграмме как ромб с одним или более входящим в него переходом и с одним или более выходящим переходом. Диаграммы деятельностей отражают происходящие события, однако они ничего не говорят о том, кто участвует в реализации того или иного процесса. Один из способов решения этой проблемы снабдить каждое состояние действия меткой класса, который за него отвечает. Возможен и другой способ - применение так называемых плавательных дорожек (swimlines). В этом случае диаграмма деятельностей разделяется пунктирными линиями на вертикальные зоны. Каждая зона представляет собой зону ответственности конкретного класса, как это представлено на рис. 9.25. Любое состояние действия на диаграмме деятельностей может быть подвергнуто дальнейшей декомпозиции. Его описание может быть представлено в виде текста, кода или другой диаграммы деятельностей.
282 Преподаватели
Система управления
Датчик
[after T]
Движение [совершил ошибку]
Послать сообщение об ошибке преподавателям
Засчитать ошибку ученику
Послать сообщение об ошибке системе управления
Сбросить скорость
Команда «Стоп» [совершил три и более ошибки] Экзамен не сдан
[не совершал ошибок или совершил две до команды «Стоп»]
Экзамен сдан
Рис. 9.25 Если диаграмма деятельностей представляет собой декомпозицию состояния действия более высокого уровня, то на такой диаграмме должно быть только одно начальное псевдосостояние, но может быть несколько конечных псевдосостояний, в зависимости от того, сколько выходов имеется у состояния действия более высокого уровня.
283
10. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ МОДЕЛИРОВАНИЕ 10.1. Определение объекта Объектно-ориентированный подход в последнее время стал прочно ассоциироваться с программированием. Объектно-ориентированный подход развивался почти исключительно программистами. Итогом тридцатилетнего развития объектно-ориентированного программирования можно считать появление языка моделирования UML, предназначенного для создания объектно-ориентированных спецификаций программных систем на ранних этапах разработки. Сформулируем основные положения гипотетического языка объектного моделирования, который условно назовем OOML. Язык Modelica его авторы называют языком «физического» моделирования. На первый план выдвигаются проблемы компонентного моделирования с неориентированными блоками, а средства описания дискретных аспектов поведения и алгоритмических действий отступают на второй план и подчиняются исключительно требованиям автоматического анализа совокупной системы уравнений. Компонентное моделирование с неориентированными блоками является важной, но все же ограниченной областью моделирования при проектировании современных технических систем. В сложной технической системе на верхних и средних уровнях иерархии предположение о направленности связей обычно является вполне разумным. Неслучайно, что такие традиционные инструменты, как Simulink или VisSim,
284 продолжают широко использоваться, несмотря на свою «отсталость» в области ООМ. Современная техническая система является аппаратнопрограммной со встроенными компьютерами или микропроцессорами. Сейчас такие объекты, как автомобиль, стиральная машина, микроволновая печь и другие бытовые устройства трансформируются в сложные технические комплексы с иерархическими системами управления. При проектировании таких систем далеко не всегда на ранних этапах ясно, какая часть функций будет реализована аппаратно, а какая программно, и дискретная составляющая поведения играет не меньшую, а возможно и большую роль, нежели непрерывная. Язык ООМ должен поддерживать чрезвычайно актуальную в настоящее время технологию «сопроектирования» (codesign) программной и аппаратной составляющих сложных технических систем. Выбору в качестве основы языка моделирования алгоритмического языка, способствовало то, что первые языки программирования (Fortran, Algol) являлись действительно алгоритмическими языками. Впоследствии в алгоритмические языки практически всегда включались низкоуровневые конструкции, полезные для повышения эффективности кода, но чрезвычайно затрудняющие понимание программ (пример - язык С). Развитие программирования совершило очередной виток и появился новый объектно-ориентированный язык программирования Java, который является также алгоритмическим и не содержит никаких машинноориентированных конструкций. Однако Java и очень близкий к нему язык С# являются реальными кандидатами на роль базового языка для OOML. Использование Java удобно с практической точки зрения. Современный инструмент моделирования, входной язык которого допускает определение классов
285 пользователем, должен быть компилирующим. Практически всегда в компилирующих пакетах моделирования используется некоторый промежуточный язык программирования (Fortran, С, Pascal). При этом либо пользователь вынужден устанавливать у себя на компьютере конкретную версию компилятора этого языка, либо эта версия должна устанавливаться вместе с пакетом моделирования. Появляется ряд проблем. Java как промежуточный язык программирования является почти идеальным вариантом: минимальный набор инструментальных средств доступен всем и распространяется бесплатно, имеются версии ддя всех практически используемых платформ, достаточно жестко отслеживается совместимость версий «снизувверх», упрощается присоединение программного кода пользователя. Непосредственное встраивание Java в язык моделирования (любая переменная может быть объектом Java) имеет и ряд минусов: - необходимость откладывать до стадии компиляции контроль синтаксиса алгоритмических операторов; - отсутствие апробированных библиотек численных методов; - несколько меньшая скорость выполнения модели по сравнению с «родным» для данной платформы кодом. В настоящее время единственным инструментом моделирования гибридных систем с непосредственным встраиванием языка Java в качестве элемента языка моделирования является пакет AnyLogic. Более разумным представляется компромиссный вариант, когда пакет моделирования непосредственно поддерживает небольшое подмножество базового алгоритмического языка, позволяя одновременно использовать внешние алгоритмические объекты,
286 написанные на базовом языке или других объектноориентированных языках программирования и откомпилированные соответствующим компилятором. Для этого компилятору пакета моделирования должны быть доступны сведения о внешнем интерфейсе объектов. В случае использования Java это вполне возможно, если сам компилятор языка моделирования написан на Java. Особенно привлекательной для реализации такого подхода является среда MS NET Runtime, т.к.: - с помощью механизма рефлексии (reflection) доступна информация о внешнем интерфейсе объекта, созданного с помощью любого языка, поддерживающего соглашения этой среды; - можно без особых усилий использовать готовый программный код для платформы Intel_Windows, в частности, библиотеки на Fortrani в форме DDL. Рассмотрим понятие объекта в ООМ. Объектом принято называть некоторую сущность, которая инкапсулирует в себе данные и методы как единое целое и взаимодействует с внешним окружением через определенный интерфейс. С понятием объекта тесно связано отношение двойственности «класс-экземпляр». Каждый объект всегда является экземпляром какого-то класса (однако не каждый экземпляр класса - объект). Кандидатом на роль объекта в компонентном моделировании является блок. Блок - это совокупность переменных и поведения, он взаимодействует с внешним миром только через внешние переменные. Блок - всегда экземпляр некоторого класса. Например, когда в пакете Simulink, который формально не поддерживает ООМ, размещаете на функциональной схеме новый усилитель, то неявно порождаете новый экземпляр предопределенного класса Gain из библиотеки Linear blocks. Два усилителя, использованные в схеме, имеют один и тот же набор
287 переменных Х,Y,К, один и тот же интерфейс взаимодействия с внешним миром - вход Х и выход Y, один и тот же закон функционирования - описываемый формулой Y=КХ, но могут иметь различные значения переменных. В Simulink по умолчанию новые экземпляры анонимны (какой-то экземпляр класса Gain), но можно дать этим двум усилителям свои имена (например, G1 и G2). С точки зрения UML, объект - это совокупность данных (атрибутов), методов и «машины состояний» в случае активного объекта (см. далее), а «блок» («block») - это некоторый стереотип, указывающий на семантические ограничения для данной категории классов. Соответственно «параметр» («parameter»), «вход» («inputi») и «выход» («output») являются стереотипами, уточняющими семантику для этих групп переменных. Наличие внутренней структуры в блоке-контейнере с позиций ООМ означает наличие внутренних переменных типа «блок» и дополнительных функций, отражающих уравнения связей. К сожалению, точно уложиться в такую трактовку объекта для непрерывных блоков, как будет показано ниже, не всегда удается. В ООП различают объекты пассивные и активные. Пассивные объекты только «откликаются» на вызовы методов и сообщений извне, но сами не могут изменять значений своих данных по собственной инициативе. Активные объекты (например, экземпляры класса Thread в языке Java) имеют свою собственную «нить управления» и функционируют независимо от других объектов и параллельно с ними. В UML предлагается задавать функционирование активного объекта с помощью карты состояний, в которой узлам соответствуют некоторые виды деятельности, протяженные во времени, а переходам мгновенные реакции на внешние и внутренние события.
288 Однако при применении карты состояний для непрерывных блоков имеется ряд нюансов. Рассмотрим источник синусоидального сигнала, включающий в себя генератор и усилитель (см. рис. 10.1). SineSource Gen
Amp Y K
Рис. 10.1 Генератор непрерывно изменяет значение выхода у согласно формуле y=sin(2πωt+ϕ0). Усилитель непрерывно преобразует значение входа в значение выхода согласно формуле Y=КХ. Блок-контейнер непрерывно передает сигнал по связям согласно формулам Amp.X=Gen.y и Y=Amp.Y. Такие активные объекты, осуществляющие непрерывное отображение, называют активными динамическими объектами. Можно также полагать, что эти блоки реализуют особый вид деятельности, заключающийся в непрерывном поиске решения заданных систем уравнений, и выдаче его точки за точкой на выход блока. В то же время, в UML деятельность все же предполагает наличие потока управления, который выполняет некоторую последовательность действий параллельно и независимо от других потоков. Непрерывная деятельность не может выполняться независимо и параллельно. Можно лишь решать совокупную для всей модели систему уравнений. Например, для системы,
289 показанной на рис. 10.1, совокупное непрерывное поведение задается системой формул: ⎧Gen.y = sin(2πωt + j0 ); ⎪ Amp.Y = Gen.y; ⎪ ⎨ ⎪ Amp.Y = KAmp.X; ⎪⎩ Y = Amp.Y. Формулы можно вычислять только в таком порядке, в любом ином случае будет получено неверное решение. Таким образом, для реализации непрерывного поведения следует обращаться к некоторому внешнему по отношению к блокам процессу, к исполняющей системе, которая и решает совокупную систему алгебро-дифференциальных уравнений. В описании дискретной составляющей поведения остаются только дискретные действия, необходимые для инициализации нового непрерывного поведения. С позиций UML чисто непрерывный блок должен иметь вырожденную карту состояний, состоящую лишь из одного узла, которому приписана непрерывная деятельность, заданная некоторой системой уравнений. На рис 10.2 показана карта состояний ддя генератора синусоиды, где под SuneF подразумевается формула y=sin(2πωt+ϕ0). input
do SineF
Рис. 10.2
290 Для гибридных блоков можно вводить дополнительные узлы и переходы между ними. Опыт показал, что необходимость явно задавать карту состояний даже для чисто непрерывных блоков несколько запутывает пользователей. Представляется более удобным считать, что активный динамический объект всегда имеет вырожденную карту состояний верхнего уровня с анонимным начальным состоянием (узлом), а пользователь определяет лишь локальные деятельности (поведения) в этом состоянии. Эти локальные деятельности могут являться непрерывными (системы уравнений, в том числе и порожденные связями), дискретными (карта состояний - в этом случае начальное состояние будет являться гиперсостоянием) или комбинацией непрерывных и дискретных. Выполнение этих локальных деятельностей начинается при создании экземпляра блока и прекращается при его уничтожении. Соответственно входные действия этого начального состояния будут выполняться при создании экземпляра блока, а выходные действия - при его уничтожении. Опишем изображенную на рис. 10.1 систему с помощью OOML. Целью является иллюстрация основных идей ООМ, а не описание какого-то конкретного языка, поэтому в примерах используется Java-подобный синтаксис, не претендующий на полноту и строгость: block class CGain { parameter Real K = 1; input Real X = 0; output Real Y = 0; eguation class main { Е1: Y = КХ; }; behavior { do main;
291 }; }/*СGain*/ block class CSineGenerator { parameter Real Period = 2; output Real Y; eguation class main { Real Omega = 2*Pi/Period; Y = sin(Omega*time+InitialPhase; }; behavior { main; }; }/*CsineGenerator*/ block class CsineSource { parameter Real Amplitude = 1; parameter Real Frequency = 1; output Real Y; // structure CsineGenerator Gen = new CsineGenerator Gen (Period=1/Frequency); CGain Amp = new CGain (K=Amplitude); behavior ( do eguation class { connect(Gen.Y,Amp.Y,X); connect(Amp.Y,Amp.Y,X); }; }; }/*CsineSource*/. Обратите внимание, что формула в непрерывном поведении блока Cgain помечена специальной меткой E1. Это необходимо для ее переопределения в классе-потомке. Экземпляры блока могуг быть статическими и динамическими. Статический экземпляр блока создается автоматически при создании экземпляра, охватывающего блока. Например, блоки Gen и Amp возникнут
292 автоматически при создании экземпляра блока SineSource (см. рис. 10.1). Экземпляры блоков самого верхнего уровня вложенности создаются при запуске модели. Таким образом, если все блоки модели статические, то время их существования совпадает со временем прогона модели. Время существования динамических экземпляров блоков в общем случае меньше времени прогона модели. Заметим, что если динамический блок имеет статическую структуру, то она создается и уничтожается вместе с этим блоком. Например, при динамическом создании блока SineSource (рис. 10.1) блоки Gen и Amp будут созданы автоматически и автоматически уничтожены при динамическом уничтожении блока. В случае поддержки пакетом моделирования динамических блоков необходимо также поддерживать и динамическое создание и уничтожение связей между блоками. В языках моделирования принят способ обращения к конструктору объекта несколько иной, чем в большинстве языков программирования. Некоторая группа внешних переменных вьделяется как параметры. Значения параметров могут изменяться только при создании экземпляра блока, во время прогона модели этой константы. Например, для генератора синусоидального сигнала (рис. 10.1) такими параметрами могут являться амплитуда, период и начальная фаза сигнала. Если для данного экземпляра значение параметра должно быть отличным от указанного в определении класса, то это новое значение параметра указывают в вызове конструктора класса, например, CsineGenerator Gen = new CsineGenerator Gen (Period=1/Frequency); Удобной является возможность задания в вызове конструктора новых начальных значений переменных, отличных от указанных в определении класса, например,
293 CBall Ball = new Cball(y=10); В блоке могут быть также определены обычные алгоритмические процедуры и функции - методы объекта в программистском понимании. Их можно использовать в уравнениях и формулах, а также в последовательности мгновенных действий карты состояний. С точки зрения видимости, внешние переменные и методы имеют уровень public, а все остальные конструкции - уровень protected. В приведенных выше примерах на OOML отражена только функциональная сторона моделируемой системы. При описании примеров использовались также рисунки. Визуальное представление является первичным для современных инструментов моделирования, а соответствующее текстовое представление, как правило, генерируется автоматически. Поэтому в OOML должны предусматриваться средства задания графических образов. В языке Modelica это делается с помощью специальных операторов языка, в пакете MVS с помощью специального оператора PRAGMA. Другим претендентом на звание «объект» является локальное поведение, т.е. деятельность, выполняемая в узле карты состояний. Локальное поведение может быть дискретным, т.е. вложенной картой состояний или непрерывным - системой алгебро-дифференциальных уравнений и формул. Конкретное поведение может быть использовано как деятельность более чем в одном узле карты состояний. Очевидно, что поведение имеет смысл только в контексте своего блока, т.к. в уравнениях, формулах и мгновенных действиях используются переменные блока. Таким образом, описание поведения можно рассматривать как внутренний (inner) класс в описании класса блока (см. например внутренние классы Java или C#).
294 С другой стороны, не существует никакой принципиальной разницы между локальным поведением и элементарным блоком. Непрерывное локальное поведение это классическая динамическая система. Дискретное локальное поведение - это классическая карта состояний. Гибридная карта состояний и задает элементарный гибридный блок как «склейку» из классических блоков. Пусть, например, нам нужно создать комбинированный генератор сигнала, который выдавал бы на выходе в зависимости от положения переключателя (перечислимая переменная Mode) либо синусоиду, либо пилообразный сигнал, либо ничего. Можно написать формулу генерации синусоиды и нарисовать карту состояний для генерации «пилы» (см. рис. 10.3), но готовые отлаженные генераторы синусоиды и «пилы» (пусть эти классы называются CSinGen и CSanGen) имеются в библиотеке стандартных блоков любого пакета моделирования. Можно использовать главные поведения этих блоков как локальные для соответствующих состояний. Необходимо ассоциировать их внешние переменные с переменными используюшегося блока при создании экземпляра поведения. В данном примере выход комбинированного генератора используется вместо выходов Y в стандартных блоках: block class CGenerator { input enum {mNull,mSin,mSaw} Mode = mNull; atatechart class main { initial state NullGen entry actions (Y = 0); state SinGen do CSawGen (Period=2, V as Y); transition from NullGen to SinGen when Mode= =mSin; transition from SinGen to NullGen when Mode!=mSin; transition from NullGen to SawGen when Mode= =mSin; transition from SawGen to NullGen when Mode!=mSin; }/*main;
295
behavior do main; }/*GGenerator*/ do CSinGen when Mode=mSin
SinGen
when Mode/=mSin NullGen
when Mode/=mSaw entry action {Y:=0}
when Mode=mSaw
SawGen do CSawGen
Рис. 10.3 Если локальное поведение оформлено как класс, то при входе в соответствующий узел карты состояний должен создаваться экземпляр этого поведения, а при выходе уничтожаться. Не может быть выделена в отдельный класс локальная карта состояний, в которой имеются прямые переходы между локальными и внешними узлами, а такжке так называемые «исторические» состояния. Некоторые переменные блока могут являться обычными программными (алгоритмическими) объектами, например, Java-объектами.
10.2. Наследование
296 Наследование в ООМ понимается примерно так же, как и в ООП. Если объявляете класс с2 прямым потомком класса с1, то класс с2 наследует все элементы класса с1: переменные, методы, карту состояний, локальные поведения, локальную структуру - и все изменения в с1 автоматически отражаются на с2. Для обозначения отношения классов с1 и с2, помимо терминов «предокпотомок», часто используют также термины «родительнаследник», «базовый-производный» (класс), а также «суперкласс-подкласс» (superclass-subclass). В производном классе нельзя удалить элементы, унаследованные от базового класса. Часто используется понятие косвенного наследования, когда экземпляры одних классов входят как элементы в определение другого класса. Например, блок-контейнер на рис. 10.1 является косвенным наследником классов CSinGenerator и CGain. Целью наследования является модификация базового класса. Пусть, например, мы хотим создать усилитель с насыщением, статическая характеристика которого показана на рис. 10.4. Естественно строить описание этого специального усилителя на базе обычного линейного усилителя и сделать новый класс CSaturation прямым наследником класса CGain. Имеются два пути модификации. Первый путь состоит в добавлении новых элементов описания, изменяющих логику работы блока.
297 UpperLimit Y=KX X
LowerLimit
Рис. 10.4 Добавим две новые переменные Хmin=LowerLimit/K и Хmax=UpperLimit/K, а также введем в карту состояний блока два новых узла и четыре перехода, как показано на рис. 10.5. U_Saturation when X>=Xmax
entry action {Y:=UpperLimit} LunearZone
SawGen when X<Xmax
do main
when X>Xmin
when X<=Xmin
L_Saturation
entry action {Y:=LowerLimit}
Рис. 10.5 Новый блок ведет себя в линейной зоне как предок, а вне нее - своим особым образом. Аналогично можно добавить
298 новые локальные устройства и связи, процедуры и функции, анимационные отображения. block class CSaturation extends CGain { parameter Real UpperLimit = 1; parameter Real LowerLimit = -UpperLimit; statechart class Main { Real Xmax = if K>0 then UpperLimit/K else 0; Real Xmin = if K>0 then LowerLimit/K else 0; initial state LinearZone { do main; }; state U_Saturation { entry action {Y = UpperLimit } }; state L_Saturation { entry action {Y = LowerLimit} }; transition from LinearZone to U_Saturation when X>=Xmax; transition from U_Saturation to LinearZone when X<Xmax; transition from LinearZone to L_Saturation when X<=Xmin; transition from L_Saturation to LinearZone when X>Xmin; }/*Main*/; behavior { do Main; }; }/*CSaturation*/ Новые элементы в производном классе могут иметь те же идентификаторы, которые использованы в базовом. Например, в классе CSaturation можно ввести новую целую переменную с идентификатором K. Она будет скрывать или замещать в определении класса CSaturation вещественный параметр к классу CGain (например, в карте
299 состояний Main будет использоваться целая переменная), а в определении базового класса (уравнении Е1) попрежнему будет использоваться вещественный параметр K. В определении класса CSaturation можно обратиться к параметру K по имени superK. Такая трактовка замещения элементов характерна для языков программирования. Однако, в языке Omola целая переменная K заменит вещественный параметр K и в базовом классе. Второй путь состоит в переопределении элементов базового класса. Элемент производного класса с тем же идентификатором, что и некоторый элемент базового класса, замещает его в базовом классе не только в определении производного класса, но и в определении базового класса. Например, в приведенном примере можно не трогать карту состояний, а переопределить формулу Е1 в непрерывном поведении main, заменив ее на другую: Y = if Х<Хmin then LowerLimit else Х>Хmax then UpperLimit else K*X Почти все пакеты, работающие с гибридными системами, допускают подобного рода условные выражения в правых частях дифференциальных уравнений и формул. Формула другим способом задает ту же модифицированную карту состояний, и при прогоне модели переключения ветвей условного выражения будут интерпретироваться как специальные дискретные события. Для частного случая гибридной системы, когда состав уравнений не меняется, такой способ записи для пользователя гораздо удобнее. block class CSaturation extends CGain { parameter Real UpperLimit = 1; parameter Real LowerLimit = -UpperLimit; Real Xmax = if K>0 then UpperLimit/K else 0; Real Xmin = if K>0 then LowerLimit/K else 0; overrit equation class main {
300 Y = if Х<Хmin then LowerLimit else Х>Хmax then UpperLimit else K*X; }; }/*CSaturation*/ В данном случае переопределили всю систему уравнений main. Чтобы переопределить именно нужное уравнение, оставив остальные (в данном случае их нет) без изменений, следует написать так: overrit main.E1; Y = if Х<Хmin then LowerLimit else Х>Хmax then UpperLimit else K*X; В этом варианте переопределяем только уравнение, помеченное как Е1. Ясно, что если уравнение не помечено, то никоим образом не сможем догадаться, какое уравнение переопределяем.
10.3. Полиморфизм Полиморфизмом в ООП называется возможность использования вместо объектов одного декларированного класса объекты другого класса, называемого замещающим, совместимого с первым. Аналогом в языках программирования являются передача в качестве действительного параметра объекта другого класса, нежели объявленный класс формального параметра, а также присваивание указателю на объект ссылки на экземпляр иного класса, нежели декларированный класс указателя. Совместимость классов в традиционном понимании означает, что замещающий класс является потомком декларированного класса или декларирован интерфейс, а замещающий класс реализует этот интерфейс. Таким
301 образом, можно выделить «совместимость по наследованию» и «совместимость по интерфейсу». В ООМ объекты также могут быть формальными параметрами процедур и функций, а в системах с динамической структурой возможны присваивания переменным, являющимся указателями на блоки. Даже в системе со статической структурой локальные блоки и поведения можно рассматривать как указатели на экземпляры соответствующих классов, присваивание которым происходит один раз при создании блокаконтейнера или модели в целом. Поэтому вопросы переопределения переменных и локальных блоков тесно связаны с полиморфизмом. Совместимость по наследованию в ООМ ничем не отличается от ООП. Интерфейсом в ООП называется совокупность спецификаций процедур и функций (методов) без указания их реализации, т.е. совокупность абстрактных методов. Считается, что класс реализует (implements) некоторый интерфейс, если в определении класса имеются реализации для всех методов, указанных в определении интерфейса. Иное положение в ООМ. Устройства Gen и Amp на рис. 10.1 взаимодействуют с внешним окружением через свои внешние переменные, значение которых изменяется непрерывно. В практике программирования объектам случается взаимодействовать через свои видимые переменные. При наличии в этих объектах параллельных нитей управления возникает проблема синхронизации, одним из решений которой является, например, property (свойства), обращения к которым автоматически переводятся компилятором в вызов соответствуюших методов. Для реальных физических систем эта проблема решается самой природой, а для модели правильная синхронизация обеспечивается исполняющей системой пакета моделирования.
302 Под интерфейсом в ООМ следует понимать некоторую совокупность видимых компонентов объекта, т.е. для блока это внешние переменные и видимые извне (pablic) процедуры и функции. Если блок содержит совокупность видимых компонент с теми же именами, что и в декларации интерфейса, и с совместимыми типами, то блок реализует этот интерфейс. Каждый блок неявно задает определенный интерфейс - совокупность всех своих внешних компонентов. «Чистым» интерфейсом является блок, у которого не определено поведение. Тогда усилитель в схеме на рис. 10.1 можно заменить усилителем с насыщением, который совместим с ним по наследованию и по интерфейсу. Однако усилитель может быть также заменен и на интегратор, задаваемый уравнением dY = KX , который тоже имеет вход Х, выход Y dt
и параметр К того же вещественного типа и, следовательно, совместим с усилителем по интерфейсу, хотя и не имеет с ним ничего общего по наследованию. В языке Modelica в дополнение к паре «суперклассподкласс» (superclass-subclass) очень активно используется другая пара – «супертип-подтип» (supertype-subtype), ориентированная на совместимость по интерфейсу. Например, из класса CGain можно вывести производный класс (подкласс) CMulDiv (умножитель-делитель). Усилитель с насыщением в Modelica нельзя вывести из простого усилителя, поскольку карт состояния этот язык не поддерживает, а уравнения переопределять запрещает. model CGain parameter Real K = 1; input Real X (start=0); output Real Y; equation Y = K*X;
303
end CGain; model CMulGiv extends CGain; output Real Z; equation Z= X/K; end CMulGiv; Новый класс CMulGiv наследует от своего суперкласса CGain вход, выход, параметр и одно уравнение, а также добавляет один выход и одно уравнение. Определим теперь класс CSaturation вне всякой связи с CGain: model CSaturation parameter Real K = 1; parameter Real UpperLimit = 1; parameter Real LowerLimit = - UpperLimit; input Real X (start=0); input Real Y; protected Real Xmin (start=LowerLimit/K); Real Xmax (start=UpperLimit/K); equation Y = if X>Xmax then UpperLimit else if X<Xmin then LowerLimit else K*X; end Csaturation; CSaturation является подтипом класса CGain, а тот, в свою очередь, супертипом CSaturation, поскольку каждому public-элементу класса CGain соответствует совместимый по типу (в данном случае одного и того же типа) public элемент CSaturation. Для того чтобы в устройстве SineSource (см. рис. 10.1) простой усилитель можно было заменить на усилитель с насыщением, нужно этот блок параметризовать:
304 model CSineSource output Real Y; replaceable model Camp = CGain protected CsainGenerator Gen (Amplitude=2); Camp Amp (K=0.6); equation connect(Gem.Y,Amp.X); connect(Gem.Y,Y); end CSineSource; Далее нужно создать специальный класс CLimitedSineSource на основе СSineSource, переопределив параметризованный класс СAmp, и затем его использовать. Это можно сделать двумя способами: model CLimitedSineSource extends СSineSource (redeclare СSaturation CAmp); end ClimitedSineSource;
model ClimitedSineSource= СSineSource (redeclare model Camp=СSaturation); Modelica разрешает переопределять локальные блоки посредством параметризации класса. Аналогичным способом разрешается переопределять и коннекторы.
10.4. Типы данных и пакеты Для моделирования непрерывных систем необходим минимальный набор типов данных: скалярный вещественный тип, типы «вектор» и «матрица», а также целые числа для вычисления индексов векторов и матриц. Пакет Simulink, например, обходится вообще без скалярных вещественных переменных, используя вместо них матрицу размерности 1 × 1.
305 Для моделирования дискретных и гибридных систем необходимо также иметь более широкий спектр целых типов (байт, короткое целое, длинное целое), перечислимые, булевские, символьные и строковые типы, а также одномерные и двумерные массивы с элементами любого скалярного типа. Для систем со сложной структурой желательно наличие типа «запись» для передачи в компактной форме наборов взаимосвязанных данных между блоками. Для непрерывных моделей, где данные передаются в виде векторов, гораздо удобнее передавать набор {x,y,z,Vx,Vy,Vz}, чем вектор размерности шесть и помнить, что скорость по оси z - это 5-й элемент вектора. Для моделирования систем со сложными алгоритмами желательно использование алгоритмических (программных) объектов и массивов объектов. Для систем с динамической и регулярной структурой необходимы переменные типа «блок» и массивы блоков. В моделировании актуально использование ограниченных типов (например, type Voltage = Real 0. .240;) и типов с указанием единиц измерения. В UML «тип» трактуется просто как особый класс в Java. В языке Modelica тип считается особым видом класса и используется отношение наследования между типами для ограничения области значений или добавления новых компонентов в записи. При разработке конкретной модели достаточно следить за тем, чтобы ее компоненты (классы, константы, алгоритмические функции) имели уникальные имена. Задача усложняется, если необходимо использовать уже готовые компоненты, например, библиотеку стандартных блоков или вашу собственную библиотеку типовых для вашей прикладной области блоков. Требование уникальности имен компонентов становится практически
306 невыполнимым. Возникает естественное желание разделить области видимости компонентов. Для объединения элементов описания в группы ООП предлагает механизм пакетов. Пакет (package) - это контейнер для группы компонентов, ограничивающий область их видимости. Компоненты, объявленные как public, видимы извне под составным именем, включающим в качестве префикса имя пакета, например, Blocks, CGain, где Blocks имя библиотеки стандартных блоков. «Библиотека» в ООМ является практически синонимом термина «пакет». Остальные компоненты видимы только внутри данного пакета. UML рекомендует по умолчанию объявлять компоненты как public. Конкретная модель рассматривается как некоторый анонимный пакет. В отличие от языков программирования, где компонентами пакета являются только классы, естественными компонентами пакета в ООМ являются также константы и алгоритмические функции. Если язык моделирования включает в себя алгоритмические объекты, т.е. объекты в понимании языков программирования, например, Java-объекты, то в пакете можно объявить класс со статическими конечными (final) переменными и методами. Примером может служить класс Math в пакете java.langi, где, например, имеются статическая переменная PI и статическая функция sin. В противном случае константы и алгоритмические функции придется считать равноправными компонентами пакета. Для того чтобы в одном пакете был виден другой, его нужно импортировать, т.е. указать явным образом на его использование. Следует учитывать, что отношение импортирования не является транзитивным, т.е. если пакет Р2 импортирует пакет P1, а P3 импортирует Р2, то это вовсе не означает, что P3 импортирует P1. Импортирование пакета означает, что его имя становится видимым в
307 импортирующем пакете или модели. Следует отметить, что импорт собственно пакета в языке Java не требуется, поскольку используется понятие корневой точки CLASSPATH и соглашение о соответствии иерархии пакетов иерархии каталогов файловой системы. Поэтому все пакеты, определенные ниже указанной точки, автоматически становятся видимыми. Если же такого рода соглашения не используются, то импорт пакета нужно явно декларировать. package model { import Blocks; //объявление импорта 1 import Blocks.СGain; //объявление импорта 2 import Blocks.*; //объявление импорта 3 import LinearBlocks./; //объявление импорта 4 ….. Blocks.CGain Amp = new Blocks.CGain (K=2); // оператор 1 CGain Amp = new CGain (K=2); // оператор 2 LinearBlocks.CGain Amp2 = new LinearBlocks.CGain (K=100; // оператор 3 …… }; Таким образом, если в пакете или модели импортируется пакет (объявление импорта 1 в примере), то экспортируемые компоненты этого пакета доступны через префикс пакета (оператор 1 в примере). Если импортируется конкретный компонент (объявление импорта 2) или импортируются все компоненты пакета (объявление импорта 3), то компонент доступен по своему имени без префикса пакета (оператор 2). Если в данном пакете или модели определен свой компонент с таким же именем, например блок CGain, то он скрывает импортируемый компонент. Если компонент с одним и тем же именем определен более чем в одном импортируемом пакете, например, блок CGain определен в пакете Blocks
308 (объявление импорта 1) и в пакете LinearBlocks (объявление импорта 4), то возникает конфликт имен и к нужному компоненту придется обращаться через префикс соответствующего пакета (операторы 1 и 4). В качестве компонента пакета может выступать другой пакет. Например, если пакет Sources вложен в пакет Blocks, то обращаться извне к генератору синусоиды нужно как Blocks.Sources.CSineGenerator. Относительно видимости компонентов пакета во вложенных пакетах имеется два решения: - в Java и Modelica все компоненты охватывающего пакета видны во вложенном пакете. - в Java и пакетах Modelica со статусом encapsulated в пакете видимы только собственные и явно импортируемые компоненты. UML предполагает наследование пакетов, причем, в производном пакете наследуются все компоненты базового, есть возможность добавить новые компоненты и переопределить унаследованные. В пакете, соответствующем текущему проекту, имеется специальный класс с зарезервированным идентификатором (например, Model или TestBench), задающий блок-контейнер, в котором помещена структурная схема моделируемой системы или той ее части, с которой в данный момент проводится вычислительный эксперимент. Экземпляр именно этого класса должна создать исполняющая система пакета моделирования в начале прогона модели.
309
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Советов Б.Я., Яковлев С.А. «Моделирование систем». – М.: Высш. школа, 1985 – 271 с. 2. Бусленко Н.П. Моделирование сложных систем. – М.: Наука,1978. – 400 с. 3. Финаев В.И. Моделирование при проектировании информационно-управляющих систем: Учебное пособие. – Таганрог: Изд-во ТРТУ, 2002. 4. Бенькович Е.С., Колесов Ю.Б., Сениченков Ю.Б. Практическое моделирование динамических систем. – СПб.: БХВ-Петербург, 2002 – 464 с. 5. Гайдук А.Р. Теория автоматического управления. – Таганрог: Изд-во ТРТУ, 2004. – 208 с. 6. Черныш П.И. Математический ппарат непрерывных систем автомтического управления: Учебное пособие. – Таганрог: Изд-во ТРТУ, 2005. – 204 с. 7. Чирков М.К. Основы общей теории конечных автоматов. – М.: Наука, 1972. – 564 с. 8. Вентцель Е.С. Теория вероятностей. - М.: Наука, 1969. – 576 с. 9. Гихман И.И., Скороход А.В. Введение в теорию случайных процессов. – М.: Наука, 1977. – 568 с. 10. Соболь И.М. Метод Монте-Карло. - М.: Наука, 1978. - 64 с. 11. Голенко Д.И. Моделирование и статистический анализ псевдослучайных чисел на ЭВМ. - М.: Наука, 1965. 12. Смирнов Б.Я., Дунин-Барковский И.В. Краткий курс математической статистики для технических предложений. - М: Физматгиз, 1959. 13. Гмурман В.Е. Теория вероятностей и математическая статистика. - М.: Высшая школа, 1977. - 480 с.
310 14. Поспелов Д. А. Вероятностные автоматы. – М.:Наука, 1970. – 76 с. 15. Саати Т.Л. Элементы теории массового обслуживания и ее приложения. – М.: Сов. радио, 1971. – 520 с. 16. Гнеденко Б.В., Коваленко И.Н. Введение в теорию массового обслуживания. – М.: Наука, 1966. – 336 с. 17. Кофман А., Крюон Р. Массовое обслуживание. Теория и ее приложения. – М.: Наука, 1966. – 302 с. 18. Климов Г.П. Стохастические системы обслуживания. – М.: Мир, 1965. – 243 с. 19. Гнеденко Б.В., Даниелян Э.А., Димитров Б.Н. Приоритетные системы обслуживания. – М.: МГУ, 1973. – 326 с. 20. Финаев В.И. Алгоритмизация и имитационное моделирование с применением аппарата систем массового обслуживания: Учебное пособие. – Таганрог: ТРТУ, 2003. – 72 с. 21. Дал У., Мюрхауг Б., Нюгород К. СИМУЛА-67: Универсальный язык программирования. — М.: Мир, 1969. - 99 с. 22. Фаулер М., Скогг К. UML в кратком изложении. Применение стандартного языка моделирования. Пер. с англ. - М.: Мир, 1999. - 191 с.
311
Финаев Валерий Иванович Павленко Елена Николаевна Заргарян Елена Валерьевна
АНАЛИТИЧЕСКИЕ И ИМИТАЦИОННЫЕ МОДЕЛИ
Ответственный за выпуск Финаев В.И. Редактор Кочергина Т.Ф. Корректор Лунева Н.И.
ЛП №020565 Офсетная печать Заказ №_______
Подписано к печати Усл. п.л. – 19,3 Уч.-изд.л. – 19,1 Тирах 500 “С”
«С» __________________________________________________ Издательство Технологического института Южного федерального университета ГСП 17 А, Таганрог, 28, Некрасовский, 44 Типография Технологического института Южного федерального университета. ГСП 17А, Таганрог, 28, Энгельса, 1