Дисциплина Моделирование элементов вс - umotnas.ru o_O
Главная
Поиск по ключевым словам:
Похожие работы
Название работы Кол-во страниц Размер
Лингвистика Дисциплина: Основы языкознания 1 280.58kb.
Дисциплина Математическое и компьютерное моделирование химических... 1 59.98kb.
Одномерные массивы 1 47.63kb.
Моделирование чувствительных элементов мма и ммг на пав в программе... 1 69.88kb.
Рабочая учебная программа По дисциплине: Имитационное моделирование... 1 110.34kb.
Моделирование деформации эластичных прокладок для рельсовых скреплений 1 122.77kb.
Лабораторная работа №3 Множества 1 59.3kb.
Приложение 4 Попытки классификации химических элементов 1 15.02kb.
Рабочей программы Дисциплина «Психология бизнеса» 1 16.84kb.
Проектирование многоразрядного десятичного сумматора комбинационного... 2 498.61kb.
Проектирование многоразрядного десятичного сумматора комбинационного... 3 554.43kb.
Общая часть. План ответа на билет: «Что такое?», «Какие примеры? 1 313.26kb.
Викторина для любознательных: «Занимательная биология» 1 9.92kb.

Дисциплина Моделирование элементов вс - страница №2/3

Марковская модель вычислительных процессов.


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

матрицей вероятностей переходов



и распределением вероятностей (a0,…,aH+1) состояний S0,…,SH+1 в момент времени 0.

Элементы Pij матрицы P определяют вероятности перехода процесса из состояния Si в состояние Sj, т.е. вероятности того, что процесс, находящийся в состоянии Si в следующий момент времени будет находиться в состоянии Sj. Матрица P – стохастическая матрица, построчные суммы элементов которой .

Вероятности ai определяют первое возможное состояние St0 процесса. Будем считать, что вычислительный процесс развивается следующим образом. Процесс начинается с состояния S0, т.е. программа начинает выполняться с этапа счета. Этап ввода-вывода может быть инициирован только процессором, т.е. может следовать только за этапом счета. Это одновременно означает, что после каждого этапа ввода-вывода следует этап счета. В таком случае вероятности начальных состояний (a0,a1,a2,…,aH+1)=(1,0,0,…,0) и матрица вероятностей переходов



Из состояния счета S0 процесс с соответствующей вероятностью может перейти в состояния S1,…,SH, представляющие собой этапы обращения к файлам F1,…,FH, или в поглощающее состояние SH+1. Из состояний S1,…,SH процесс с вероятностью 1 возвращается в состояние счета S0. Достигнув поглощающего состояния SH+1 процесс с вероятностью 1, навсегда остается в нем. Порядок смены состояний можно представить на графе марковской цепи. Переходы между состояниями S0,…,SH+1 представляются на графе дугами, на которых обозначены вероятности переходов, отличные от 1.

З
начения вероятностей P01,…,P0,H+1 предопределяют ход вычислительного процесса и зависят от параметров трудоемкости алгоритма. Эти значения вычисляются следующим образом. Трудоемкость алгоритма определяет, в частности, среднее число N1…NH обращений к файлам F1,…FH. Следовательно, среднее число переходов из состояния S0 в состояние S1…SH должно быть (N1+…+NH). Один раз процесс переходит из состояния S0 в поглощающее состояние SH+1.Таким образом, вычислительный процесс должен выходить из состояния S0 в среднем раз, т.е. в процессе реализации алгоритма этапы счета встречаются в среднем N раз. Значение P0h определяет долю переходов в состояние Sh по отношению к всевозможным переходам из состояния S0 в состояния S1…SH+1.

Эта доля равна в среднем Nh/N, где Nh- среднее число переходов в состояние Sh. Следовательно:

P0, h=Nh/N, h=1,2…H

P0,H+1=1/N.

Количество работы, выполняемой на каждом из этапов, характеризуется параметрами 1,…, H алгоритма. Значение  определяет среднее количество процессорных операций, выполняемых за одну реализацию алгоритма, и значения 1,…, H – среднюю трудоемкость этапов, соответствующих состояниям S1…SH. Средняя трудоемкость этапа счета

0=/N, где N-среднее число этапов счета.

Трудоемкость каждого этапа будем рассматривать как случайную величину h с математическим ожиданием H, h=0,1,…,H.

Т
аким образом, под моделью вычислительного процесса будем понимать марковскую цепь с (H+2) состояниями, начальным состоянием S0 и матрицей вероятностей переходов. Реализация вычислительного процесса – случайная последовательность состояний S0,St1,St2,…,Stm, порядок смены которых определяется в вероятностном смысле матрицей вероятностей переходов. С состояниями S0…SH связано определенное количество работы, характеризуемое значениями случайных величин 0…H соответственно. Диаграмма вычислительного процесса, порождаемого марковской моделью имеет вид:


Значение ij определяет трудоемкость соответствующего этапа и представляет собой j-е значение случайной величины i, математическое ожидание которой i . В данном случае состояние S3 является поглощающим: достигнув его, процесс прекращается.

Рассмотрим пример. Пусть задан алгоритм, трудоемкость которого характеризуется следующими параметрами:

=100 млн. операций;

N1=19 обращений к файлу F1;

N2=180 обращений к файлу F2;

1=2000 байтов;

2=500 байтов за обращение к файлу.

Построим марковскую модель вычислительного процесса, порождаемого этим алгоритмом. Среднее число этапов счета при одном прогоне алгоритма N=N1+N2+1=200. Вероятности перехода процесса из состояния счета S0 в состояния S1,S2 и S3 равны соответственно:

P01=N1/N=19/200=0,095

P02=N2/N=180/200=0,9

P03=1/N=1/200=0,005

Подставляя эти значения, получаем следующую матрицу вероятностей переходов:



Из матрицы видно, что с вероятностью 0,095 за этапом счета произойдет обращение к файлу F1, с вероятностью 0,9 – F2, и с 0,005 – вычислительный процесс прекратится. Средняя трудоемкость этапа счета 0=/N=100/200=0,5 млн. операций.


Оценка трудоемкости алгоритмов методами теории марковских цепей.


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

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



  • имеется только одна начальная и только одна конечная вершина;

  • для каждой вершины кроме начальной существует, по крайней мере, один путь, ведущий в эту вершину из начальной;

  • из каждой вершины кроме конечной существует, по крайней мере, один путь, ведущий из этой вершины в конечную;

  • выход из любой вершины должен вести только к одной вершине графа;

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

Приведем пример графа алгоритма:

У
словимся, вершины графа обозначать номерами 0,1,2,…,К. О - соответствует начальной вершине графа, К – конечной вершине; 1,2,…,К-1 идентифицируют операторы алгоритма. В программировании графы алгоритмов изображаются с использованием набора фигур, обозначающих тип оператора, и называются схемами алгоритмов.

Граф выделяет структуру алгоритма, определяет множество операторов

V={V1, V2, …, Vk-1}

и множество дуг, связывающих операторы

D={(i, j)} i=0, 1, …, K-1 j=1,2,…,K

Для оценки трудоемкости алгоритма необходимо:


  1. Разбить множество операторов на классы:

    • основных операторов

S0={V1, V2, …, Vm0} VkV

  • операторов ввода-вывода

Sh={V1,V2, …, Vmh} h=1,2,…,H каждый из этих операторов задает обращение к одному и тому же файлу Fh.

  1. Для каждого основного оператора V необходимо определить среднее количество операций k, составляющих оператор, и для каждого оператора ввода-вывода V - среднее количество информации h, передаваемой при выполнении оператора.

  2. Переходы между операторами Vi и Vj следует рассматривать как случайные события и характеризовать их вероятностями Pij, т.е. каждая дуга (i,j) графа алгоритма должна быть отмечена вероятностью перехода Pij, с которой переход из вершины Vi выполняется именно по этой дуге, т.е. к вершине Vj.

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

, I=0,1,2,…,К-1

Значения Pij определяются вероятностями значений предикатами. Другими словами, вероятности Pij зависят от вероятностей выполнения условия, проверяемого оператором i с целью выбора пути перехода. Например, пусть оператор 2 порождает переход к оператору 3 при отрицательном значении некоторой переменной Х и к оператору 4 при Х0. Если известно, что величина Х равномерно распределена в диапазоне (-1;+3), то с вероятностью 0,25 ее знак отрицателен и с вероятностью 0,75 положителен. Из этого следует, что переход к оператору 3 происходит с вероятностью Р2,3=0,25 и переход к оператору 4 – с вероятностью Р2,4=0,75. Пусть далее оператор 7, замыкающий цикл, порождает переход к оператору 1 в девяти случаях, а в одном случае переход происходит в конец алгоритма (цикл, начинающийся от оператора 1 и заканчивающийся оператором 7, выполняется 10 раз). Тогда вероятности переходов Pi,1=0,9 Pi,k=0,1. Если за оператором i непременно выполняется оператор j, то Pij=1. Пусть П12,…,ПК-1 – среднее число обращений к операторам V1,V2,…,VK-1 за один прогон алгоритма. В таком случае характеристики трудоемкости могут быть вычислены следующим образом:



  • среднее число операций, выполняемых при одном прогоне алгоритма



  • среднее число обращений к файлу Fh

(h=1,2,…,H)

  • среднее количество информации, передаваемое при одном обращении к файлу Fh

В последних выражениях суммирование выполняется по всем вершинам, относящимся к классу основных операторов S0 или классу операторов ввода-вывода Sh, обращающихся к файлу Fh.

Таким образом, для оценки трудоемкости алгоритма необходимо определить среднее число обращений n1,n2,…,nk-1 к операторам. Допустим, что вероятности переходов Pkj постоянны и после выполнения оператора Vk (k=1,2,…,k-1) переход к следующему оператору определяется только распределением вероятностей Pkj, т.е. не зависит от хода вычислительного процесса в прошлом – до перехода к оператору Vk. При указанных допущениях процесс выполнения алгоритма является марковским процессом с К состояниями S1,S2,…,Sk соответствующими пребыванию процесса в вершинах V1,V2,…,Vk алгоритма. Состояния S1,S2,…,Sk-1- невозвратные (процесс после какого-то числа шагов непременно покидает их), состояние Sk – поглощающее (достигнув его, процесс прекращается). Начальным является состояние Si, определенное дугой (0,i), выходящей из начальной вершины графа. Для упрощения обозначений условимся, что i=1, т.е. начальное состояние – S1. Порядок изменения состояний определяется графом алгоритма, дуги которого отмечены вероятностями переходов Pij. Отмеченный граф алгоритма можно рассматривать как граф марковской цепи.

Среднее число П12,…,Пk-1 пребывания марковского процесса в невозвратных состояниях S1,S2,…,Sk-1 определяется корнями системы линейных алгебраических уравнений

ni=1,i+ (i=1,2,…,k-1), где 1,i – символ Кронекера 1,i=

Система этих уравнений строится исходя из следующих соображений. Значение ni будет равно, по крайней мере, одному, если процесс начинается от состояния с номером i=1, что отмечено символом 1,i. В остальных случаях процесс попадает в состояние Si только из других состояний j=1,2,…,k-1 с вероятностью Pij. Если процесс находился в состоянии j nj раз и Pji0, то процесс из этого состояния попадет в состояние i в среднем Pijnj раз. Суммированием значений Pijnj по всем j находится число попаданий процесса в состояние из всех других состояний j. Значения П12,…,Пk-1 определяются решением системы линейных алгебраических уравнений, каноническая запись которой имеет вид:

(p1,1-1)n1+p2,1n2+…+pk-1,1nk-1= -1

p1,2n1+(p2,2-1)n2+…+pk-1,2nk-1=0

…………………………………

p1,k-1n1+p2,k-1n2+…+(pk-1,k-1-1)nk-1=0

Для примера определим трудоемкость алгоритма, заданного ранее приведенным графом. Для простоты примем, что все операторы алгоритма – основные (операторы ввода-вывода отсутствуют) и количество операций Ki, порождаемых каждым оператором, постоянно и равно 1.

На основе графа и формы строим систему из семи линейных алгебраических уравнений:

-n1+0,9n2=-1

n1-n2=0

0,25n2-n3=0

0,75n2-n4=0

0,5n3+0,2n4-n5=0

0,8n4-n6=0

0,5n3+n5+n6-n7=0

Решая систему, определяем среднее число попаданий вычислительного процесса в состояния S1,S2,…,S7:

n1=10; n2=10;n3=2,5; n4=7,5; n5=2,75; n6=6; n7=10.

Подставляя полученные значения, получаем оценку трудоемкости алгоритма:



ni=10+10+2,5+7,5+2,75+6+10=48,75

Рассмотренный способ определения трудоемкости алгоритмов является универсальным, позволяя получать оценки для алгоритмов с любой структурой, прост с точки зрения программирования, но требует решения системы алгебраических уравнений обычно высокого порядка. Поэтому данный способ предполагает использование ЭВМ для выполнения необходимых расчетов.


  следующая страница >>