Основные понятия распределения вероятностей ль Определения Простые примеры Класс ProbabilityDistribution иа Класс DiscreteProbability Класс ContinuousProbability Дискретные распределения вероятностей ен ц Распределение Бернулли Биномиальное распределение Геометрическое распределение Распределение Пуассона Непрерывные распределения вероятностей нф ид Равномерное распределение Экспоненциальное распределение Гамма-распределение Ко Нормальное распределение но 22 Распределение вероятностей но Основные понятия распределения вероятностей1 ль В прикладных программах, таких как моделирование, часто желательно получить значения, связанные с результатами экспериментов. В таких экспериментах, могут возникать следующие вопросы: • Какова вероятность появления определенного события? Какова вероятность одного из нескольких возможных событий? • Чему равна вероятность того, что в следующих N испытаниях, произойдет по крайней мере одно успешное событие? • Сколько успешных событий произойдет в следующих N испытаниях? • Сколько надо провести испытаний до следующего успешного события? иа • Определения Ко нф ид ен ц В терминологии моделирования, испытание — это шаг часов модели (шаг часов может быть представлен секундой, минутой, часом, днем, месяцем или годом, в зависимости от единицы времени, подходящей для данной модели). Событие или успех — это возникновение некоторого типа работы, например, прибытие автомобиля на мойку, приход клиента в банк, поступление неработающего компьютера в мастерскую по ремонту. В области статистики вероятность того, что событие произойдет, обычно определяется из большого числа наблюдений реально проведенных испытаний. Например, необходим длинный ряд наблюдений за ремонтной мастерской, чтобы определить вероятность того, что в течении фиксированного интервала времени неработающий компьютер поступит в мастерскую. В течении этого интервала времени, вообще говоря, могут произойти несколько событий. Множество всех возможных событий называется выборочным пространством. Функция вероятности на выборочном пространстве определяется сопоставлением числа между 0 и 1 каждому событию из выборочного пространства. Вероятность или возможность того, что произойдет по крайней мере одно событие из выборочного пространства, определяется как 1; если p — вероятность того, что произойдет событие E, то вероятность того, что E не произойдет, определяется как 1 – p. Выборочные пространства разделяются на дискретные и непрерывные. Выборочное пространство дискретно, если оно содержит конечное число возможных событий или бесконечное число событий, которое взаимно однозначно отображается на множество положительных целых чисел. Например, шесть возможных исходов бросания игральной кости составляют дискретное выборочное пространство. Выборочное пространство непрерывно, если оно содержит упорядоченное бесконечное множество событий, например, любое число между 1.0 и 4.0. Функции вероятностей на каждом из этих типов выборочных пространств называются, соответственно, дискретными функциями вероятностей и непрерывными функциями вероятностей. Случайная переменная (или случайная величина) — вещественнозначная функция, определенная на событиях из выборочного пространства. Прилагательные “дискретная” и “непрерывная” применяются к случайным величинам согласно характеристике их выборочного пространства. Функция вероятностей случайной величины называется распределением вероятностей; значения этой функции суть вероятности выпадения возможных значений случайной величины. Плотность — функция, которая определяет вероятность в допустимой области случайной величины. Любая функция может быть 1 Точные определения теории вероятностей, а также полное математическое описание всех распределений вероятностей, которые будут реализованы далее в виде классов, можно найти в книге Феллера В., Введение в теорию вероятностей и ее приложения, т.1. — М.: Мир, 1964; т.2. — М.: Мир, 1967. — примеч. перев. ль но функцией плотности (дискретной или непрерывной), если она положительна и сумма ее значений (ее интеграл) равен 1. Другая полезная функция, которая играет важную роль в моделировании называется (кумулятивной) функцией распределения. Она определяет вероятность того, что значение случайной переменной попадает внутрь заданной области. Например, функция распределения отвечает на вопрос: какова вероятность того, что при броске игральной кости выпавшее число очков будет меньше или равно 4? Математическое ожидание (или среднее) случайной величины определяется как среднее значение, которое может принимать случайная величина. Дисперсия — мера разброса распределения — определяется как среднее квадратичное отклонение от математического ожидания. Простые примеры c(a,b) = Ëa g(X) b ен ц иа До введения детального описания классов вероятностей рассмотрим два примера выборочных пространств. Предположим, что выборочное пространство — возможные результаты бросания игральной кости. Оно состоит из событий: событие1: выпала 1 событие2: выпала 2 событие3: выпала 3 событие4: выпала 4 событие5: выпала 5 событие6: выпала 6. Тогда для этого дискретного распределения вероятностей функция вероятностей для каждого события равна f(событие) = 1/6 Если X — случайная величина над этим выборочным пространством, то g(X) — функция распределения вероятностей X такова: g(X=1) = f(событие1) = 1/6, ... , g(X=6) = f(событие6) = 1/6 Функция плотности в данном случае для всех значений X равна 1/6. Кумулятивная функция распределения X имеет вид Ко нф ид Например, c(2,4) = g(X=2) + g(X=3) + g(X=4) = 1/6 + 1/6 + 1/6 = 1/2 Теперь пример непрерывного распределения вероятностей. Пусть выборочным пространством будет интервал времени, который начинается в 00:00 ночи и заканчивается в 23:59:59.99... ночи. Функция вероятностей f(событие) = вероятность (событиеi <= время < событиеj) где событиеi < событиеj. Функция плотности X такова: g(X = любое заданное время) = 0 Предположим, у нас 24-часовые часы. Тогда вероятность того, что взглянув на часы, мы обнаружим часовую стрелку между 1:00 и 3:00 после полудня, определяется кумулятивной функцией распределения: 3,00 с(1:00, 3:00) = 8 g(X) 1,00 g(X) постоянна на всем 24-часовом интервале. Поэтому c(1:00, 3:00) = c(1:00, 2:00) + c(2:00, 3:00) = 1/24 + 1/24 = 1/12. Класс ProbabilityDistribution Класс ProbabilityDistribution (РаспределениеВероятностей) — это суперкласс всех классов распределения вероятностей, который обеспечивает протокол для получения одной или нескольких случайных выборок из заданного распределения, для вычисления функции плотности и кумулятивной функции распределения. Он имеет переменную класса U, superclass class variable names class methods class initialization ль ProbabilityDistribution Stream U class name но которая является экземпляром класса Random. Класс Random позволяет получить равномерно распределенную на интервале [0,1] случайную величину. Как и класс Random, класс ProbabilityDistribution — это поток, в котором очередной доступный элемент порождается алгоритмически. Всякий раз, когда требуется случайная next. величина, распределению вероятностей посылается сообщение Класс ProbabilityDistribution реализует сообщение next как результат посылки сообщения inverseDistribution: var, где переменная var - случайное число между 0 и 1. Подклассы ProbabilityDistribution или должны реализовывать сообщение inverseDistribution: для того, чтобы отображать интервал [0,1] на свое выборочное пространство, или, иначе, они должны переопределять сообщение next. Сообщение next: наследуется из суперкласса Stream. иа initialize "Равномерно распределенные случайные числа в интервале [0,1]" U à Random new instance creation xself basicNew instance methods random sampling ен ц new нф ид next "Это общий метод порождения случайного числа, подчиняющегося любому вероятностному закону. Метод использует равномерно распределенную на интервале (0,1) случайную величину U как значение соответствующей функции распределения. Получает очередное случайное значение и выполняет обращение. Метод обращения определяется подклассом." xself inverseDistribution: U next testing atEnd xfalse probability functions Ко density: x "Это функция плотности" self subclassResponsibility distribution: aCollection "Это кумулятивная функция распределения. Аргумент aCollection – область последовательных значений случайной величины. Распределение с точки зрения математики - площадь области под кривой вероятности (функцией плотности) на заданном интервале." self subclassResponsibility private inverseDistribution: x self subclassResponsibility но computeSample: m outOf: n "Вычислить число размещений без повторений по m элементов из набора размера n." m > n ifTrue: [x0.0]. xn factorial / (n – m) factorial ль Чтобы инициализировать переменную класса U, необходимо выполнить выражение ProbabilityDistribution initialize Вычисление числа размещений без повторений из n элементов по m предоставляет полезный метод, разделяемый подклассами. иа Класс DiscreteProbability Два типа распределения вероятностей, дискретный и непрерывный, определяются как подклассы класса ProbabilityDistribution. Каждый обеспечивает реализацию кумулятивной функции распределения, которая зависит от функции плотности. Эти реализации предполагают, что функция плотности будет определена в подклассах. superclass instance methods probability functions DiscreteProbability ProbabilityDistribution ен ц class name нф ид distribution: aCollection "Возвращает сумму дискретных значений функции плотности от каждого элемента из набора aCollection." |t| t à 0.0. aCollection do: [ :i | t à t + (self density: i)]. xt Класс ContinuousProbability class name superclass ContinuousProbability ProbabilityDistribution instance methods probability functions Ко distribution: aCollection "Это медленный и грубый метод трапеций для вычисления интеграла, определяющего площадь области под кривой вероятности y=density(x), когда x принадлежит заданному численно упорядоченному набору aCollection." | t aStream x1 x2 y1 y2 | t 0.0. aStream ReadStream on: aCollection. x2 aStream next. y2 self density: x2. [x1 x2. x2 aStream next] whileTrue: [y1 y2 . y2 self density: x2. t xt * 0.5 t + ((x2 – x1) * (y2 + y1))]. ль Дискретные распределения вероятностей но Для того, чтобы определить различные виды распределения вероятностей через подклассы класса DiscreteProbability или класса ContinuousProbability, необходимо реализовать функцию плотности и функцию обращения распределения (или переопределить ответ на сообщение next). число студентов 3 2 4 3 5 3 ен ц рост в дюймах 60" 62" 64" 66" 68" 70" иа Как пример дискретного распределения вероятностей, определим рост студентов из группы в 20 человек и составим таблицу, в которой укажем число студентов, имеющих одинаковый 2 рост (рост дается в дюймах ). Таблица могла бы быть, например, такой: Получив эту информацию, мы можем задать вопрос: какова вероятность случайного выбора студента ростом в 5 футов 4 дюйма? На этот вопрос можно ответить, вычисляя функцию плотности дискретной вероятности, связанную с полученной информацией. В частности, мы можем определить функцию плотности с помощью следующей таблицы: плотность 3/20 2/20 4/20 3/20 5/20 3/20 нф ид рост 60" 62" 64" 66" 68" 70" Ко Предположим, что мы определяем подкласс класса DiscreteProbability, который называем SampleSpace (ПространствоИспытаний), и определяем вышеупомянутую таблицу как значение переменной экземпляра класса SampleSpace. Ответом на сообщение density: x будет значение, связанное с x из таблицы (в примере, значение x — возможный рост студента группы); значение плотности в точке x, когда x вне таблицы, полагаем равным 0. Вероятность выбора студента заданного роста, очевидно, равна соответствующему значению функции плотности, то есть числу студентов группы заданного роста, деленному на число всех студентов в группе. Реализация кумулятивной функции распределения наследуется из суперкласса. class name superclass instance variable names SampleSpace DiscreteProbability data class methods 2 1 дюйм = 2,54 см; 1 фут = 12 дюймам. — примеч. перев. instance creation instance methods probability functions inverseDistribution: x xdata at: (x * data size) truncated + 1 setData: aCollection data aCollection иа private ль density: x "Аргумент x должен быть из выборочного пространства; вероятность должна суммироваться по всем вхождениям x в выборочное пространство" (data includes: x) ifTrue: [x(data occurrencesOf: x) / data size] ifFalse: [x0] но data: aCollection xself new setData: aCollection Предположим, что heights - экземпляр класса SampleSpace. Его переменная экземпляра date — массив из 20 элементов, представляющий рост каждого студента из примера, то есть: SampleSpace data: ен ц heights # (60 60 60 62 62 64 64 64 64 66 66 66 68 68 68 68 68 70 70 70) Ко нф ид Теперь мы можем спросить у объекта heights, какова вероятность случайного выбора студента с ростом 64 дюйма или какова вероятность случайного выбора студента с ростом между 60 и 64 дюймами? Ответ на первый вопрос — значение функции плотности, то есть, ответ на сообщение density: 64. Ответ на второй вопрос — значение кумулятивной функции распределения, то есть, ответ на сообщение distribution: (60: to: 64 by: 2). Экземпляр класса SampleSpace имеет много общего с дискретным равномерным распределением. Вообще говоря, дискретное равномерное распределение определяется над конечной областью значений. Например, мы можем определять равномерное распределение для шести значений: 1, 2, 3, 4, 5, 6, соответствующих сторонам кости. Функция плотности, константа 1/6, указывает, что кость — правильная, то есть, вероятность выбросить каждую из сторон одна и та же. Мы определим четыре типа дискретных распределений вероятностей, которые полезны в исследовании моделей. Это распределение Бернулли, биномиальное, геометрическое и распределение Пуассона. Распределение Бернулли отвечает на вопрос, будет ли успешным следующее испытание? Биномиальное распределение представляет повторение N независимых распределений Бернулли, когда N больше или равно единицы. Оно отвечает на вопрос, сколько будет успешных испытаний в следующих N испытаниях? Становясь на несколько отличную точку зрения, геометрическое распределение отвечает на вопрос, сколько независимых испытаний Бернулли необходимо провести до первого успешного испытания? Распределение Пуассона используется, когда необходимо ответить на вопрос, сколько событий произойдет в заданном интервале времени? В частности, с помощью распределения Пуассона можно определить вероятность того, что в некотором интервале времени произойдет K событий, где K больше или равно 0. Распределение Бернулли Распределение Бернулли используется в случае, когда выборочное пространство состоит всего из двух возможностей, успеха и неудачи, каждая с заданной вероятностью. Выборочные пространства с двумя возможностями возникают в следующих испытаниях. Бросание игральной кости, когда спрашивается, выпадет ли число 4? Вероятность успеха, если кость правильная, 1/6; вероятность неудачи 5/6. • Бросание монеты, когда спрашивается, выпадет ли решка?. Вероятность успеха, если монета правильная, 1/2; вероятность неудачи тоже 1/2. • Сдача из колоды карты, когда спрашивается, выпадет ли дама червей? Вероятность успеха, если колода стандартная (52 листа), 1/52; вероятность неудачи 51/52. но • В соответствии с определением класса Bernoulli (Бернулли), мы создадим пример распределение Бернулли, выполнив выражение ль Bernoulli parameter: 0.17 иа В этом примере создано распределение Бернулли с вероятностью успеха равной 0.17. Вероятность успеха в распределении Бернулли равна математическому ожиданию. Аргумент сообщения parameter:, назовем его prob, — число из интервала (0,1), равное вероятности одного из двух возможных исходов. Обычно оно обозначает вероятность успеха. Функция плотности отображает два возможных исхода, 1 или 0, соответственно, на аргумент prob или на его обращение 1–prob. Кумулятивная функция распределения наследуется из суперкласса и может возвращать только значения prob или 1. Bernoulli DiscreteProbability prob class name superclass class methods instance creation ен ц instance variable names parameter: aNumber (aNumber between: 0.0 and: 1.0) ifTrue: [xself new setParameter: aNumber] ifFalse: [self error: 'Вероятность должна быть между 0.0 и 1.0] instance methods accessing нф ид mean xprob variance xprob * (1.0 – prob) probability functions density: x "Пусть 1 обозначает успех" x = 1 ifTrue: [xprob]. "Пусть 0 обозначает неудачу" x = 0 ifTrue: [x1.0 – prob]. self error: 'исход испытания Бернулли должен быть равен 1 или 0' Ко private inverseDistribution: x "В зависимости от случайной переменной x, случайный выбор будет равен 1 или 0, то есть, успеху или неудаче испытания Бернулли" x < = prob ifTrue: [x1] ifFalse: [x0] setParameter: aNumber prob aNumber но Предположим, что в некоторый момент игры в карты, мы хотим определить, будет ли туз первой сданной картой колоды? Тогда возможный (случайно определенный) ответ можно получить выборкой из распределения Бернулли с аргументом 4/52: (Bernoulli parameter: 4/52) next иа ль Давайте проследим как происходит выполнение этого выражения. Метод, связанный с унарным сообщением next, будет найден в словаре методов класса ProbabilityDistribution. Метод возвращает значение выражения self inverseDistribution: U next. То есть, случайное число между 0 и 1, полученное как результат выполнения выражения U next, становиться аргументом сообщения inverseDistribution:. Метод, связанный с сообщением inverseDistribution:, будет найден в словаре методов класса Bernoulli. Это функция обращения распределения, отображение значения prob кумулятивной функции распределения на значение x, при котором prob — вероятность того, что случайная величина меньше или равна x. В распределении Бернулли x может принимать только два значения, которые обозначаются целыми числами 1 и 0. Биномиальное распределение нф ид ен ц Когда нужно выяснить, произойдет или нет некоторое событие, например, прибудет ли в следующую секунду автомобиль на мойку или принесут ли сегодня неработающий компьютер в мастерскую, используется распределение Бернулли. Биномиальное распределение отвечает на вопрос: сколько успешных событий произойдет в следующих N испытаниях? Функция плотности распределения Бернулли определяет вероятность того, что случится одно из двух возможных событий. Функция плотности биномиального распределения отвечает на вопрос о том, какова вероятность того, что в следующих N испытания x испытаний окажутся успешными? Биномиальное распределение представляет N повторений независимых испытаний Бернулли. При N = 1 оно совпадает с распределением Бернулли. Класс Binomial — подкласс класса Bernoulli, определяющий дополнительную переменную экземпляра N, которая представляет число испытаний. Экземпляр этого класса в ответ на сообщение next возвращает результат ответа на вопрос: сколько будет успешных испытаний среди N испытаний? 3 Функция распределения вероятностей для биномиального распределения равна N! x N–x p (1-p) x! (N-x)! где x — число успешных испытаний, а p — вероятность успеха при каждом испытании. Обозначение “!” представляет математическую функцию факториал. Первое выражение в формуле можно рассматривать как результат деления числа размещений из N элементов по x на число размещений из x элементов по x. Таким образом, в определяемых ниже методах будет использоваться реализованный в суперклассе ProbabilityDistribution метод computeSample: a outOf: b. class name superclass instance variable names Binomial Bernoulli N Ко class methods instance creation events: n mean: m n truncated <= 0 ifTrue: [self error: 'Число событий должно быть > 0']. xself new events: n mean: m 3 Здесь и далее речь идет о функции плотности распределения вероятностей. — примеч. перев. instance methods random sampling ль но next |t| "Надежный, но медленный метод реализации N испытаний Бернулли. Так как распределение Бернулли возвращает 0 или 1, данный метод возвращает число между 0 и N." t 0. N timesRepeat: [t t + super next]. xt probability functions иа density: x (x between: 0 and: N) ifTrue: [x((self computeSample: x outOf: N) / (self computeSample: x outOf: x)) * (prob raisedTo: x) * (1.0 – prob) raisedTo: N – x] ifFalse: [x0.0] private events: n mean: m N n truncated. self setParameter: m/N "Метод setParameter: реализован в суперклассе." ен ц Пусть, например, подбрасывают монету и проводится пять испытаний, в каждом из которых вероятность выпадения решки равна 0.5. Тогда экземпляр класса Bernoulli c параметром 0.5 представляет одно испытание: sampleA Bernoulli parameter: 0.5 Результатом выражения нф ид sampleA next будет 1 или 0, отвечая на вопрос, выпала ли решка? Теперь создадим экземпляр класса Binomial: sampleB Binomial events: 5 mean: 2.5 Результатом выражения sampleB next будет число между 0 и 5, отвечающее на вопрос, сколько раз выпала решка в 5 испытаниях. Сообщение sampleB density: 3 возвращает число между 0 и 1, отвечая на вопрос, какова вероятность выпадения 3-х решек в 5 испытаниях? Ко Геометрическое распределение Предположим, что мы хотим получить ответ на вопрос: сколько независимых испытаний Бернулли необходимо провести до первого успешного испытания? Этот новый взгляд на распределение Бернулли и есть геометрическое распределение. Как и в предыдущих случаях, вероятность успеха расположена между 0.0 и 1.0; математическое ожидание для геометрического распределения есть величина обратная вероятности успеха. Так, если мы создадим геометрическое распределение с помощью выражения Geometric mean: 5 Geometric Bernoulli class name иа superclass ль но то математическое ожидание будет равно 5, а вероятность успеха 1/5. Величина математического ожидания должна быть больше или равна 1. Геометрическое распределение больше подходит для построения управляемых событиями моделей, чем распределения Бернулли или биномиальное. Вместо того, чтобы спрашивать, сколько автомобилей прибудет на мойку в следующие 20 секунд (биномиальное распределение), геометрическое распределение определит число секунд до прибытия следующего автомобиля. В управляемых событиями моделях часы модели сразу перейдут на время следующего события. Таким образом, используя геометрическое распределение, мы можем определять время, когда произойдет следующее событие, и соответственно этому устанавливать часы модели. Затем мы можем выполнять все необходимые действия, потенциально “сохраняя” большую часть реального времени. Функция распределения вероятностей равна x–1 p(1–p) где x — число требуемых испытаний, а p — вероятность успеха в единичном испытании. class methods instance creation instance methods accessing mean x1.0 / prob ен ц mean: m xself parameter: 1/m "Сообщение parameter: реализовано в суперклассе." variance x(1.0 – prob) / prob squared нф ид probability functions density: x x > 0 ifTrue: [xprob * ((1.0 – prob) raisedTo: x – 1)] ifFalse: [x0.0] private inverseDistribution: x "Метод взят из книги Д.Кнута, т.2, стр. 145-146." x(x ln / (1.0 – prob) ln) ceiling Предположим, что в среднем каждую минуту на переправу прибывает два автомобиля. Мы можем выразить эту статистическую информацию как sample Geometric mean: 60/2 Ко Функцию плотности можно использовать для ответа на вопрос: какова вероятность того, что потребуется N испытаний до следующего успешного испытания? Например, какова вероятность того, что пройдет 30 секунд прежде, чем прибудет следующий автомобиль? sample density: 30 Кумулятивную функцию распределения можно использовать для ответа на вопрос: какова вероятность того, что следующий автомобиль прибудет через 30 - 40 секунд? sample distribution: (30 to: 40) Распределение Пуассона ен ц иа ль но Пусть требуется выяснить, сколько событий произойдет в единицу времени (или в интервале пространства)? Биномиальное распределение рассматривает случай из двух независимых событий, таких как вытаскивание короля червей или короля пик из полной колоды карт. Однако, существуют случайные события, которые происходят в случайные моменты времени или в случайных точках пространства. Такие события не являются результатами испытаний. В этих обстоятельствах нет смысла рассматривать вероятность успешного или неуспешного события. Нет смысла спрашивать, сколько автомобилей не прибудет на паром или сколько самолетов не приземлится в аэропорту. Разумнее спросить, сколько автомобилей прибудет на паром или сколько самолетов приземлится в аэропорту в следующую единицу времени? Распределение Пуассона применяется в моделировании при выборке потенциальных запросов клиентов к системе обслуживания, например, к кассирам, коммивояжерам, техникам или копировальным аппаратам фирмы Xerox. Опыт показал, что частота обслуживания клиентов хорошо апроксимируется вероятностным законом Пуассона. Закон Пуассона описывает вероятность того, что в точности x событий произойдет за единичный интервал времени, когда средняя частота событий за единицу времени задается переменной mu, где mu >= 0. Тогда для интервала времени dt соответствующая вероятность равна mu * dt. Функция распределения вероятностей Пуассона равна x -a a e / x! где a — средняя частота (mu), e — основание натурального логарифма, x — число событий за единицу времени, ! — знак факториала. Poisson DiscreteProbability mu class name superclass instance variable names class methods instance creation нф ид mean: p "p - среднее число событий, случившихся на единичном интервале" p > 0.0 ifTrue: [xself new setMean: p] ifFalse: [self error: ' среднее должно быть больше 0.0'] instance methods accessing mean xmu variance xmu random sampling Ко next "Сколько событий произойдет на следующем единичном интервале?" |pnq| p mu negated exp. n 0. q 1.0. [q q * U next. q >= p] whileTrue: [n n + 1]. xn density: x "Вероятность того, что в единичном интервале времени произойдет x событий" x >= 0 ifTrue: [x((mu raisedTo: x) * (mu negated exp)) / x factorial] ifFalse: [x0.0] private setMean: p mu p. ль но probability functions иа Результат, возвращаемый сообщением next, отвечает на вопрос, сколько событий происходит в единичном интервале времени (или пространства). Функция плотности определяет вероятность того, что в единичном интервале (времени или пространства) произойдет x событий. Кумулятивная функция распределения от x определяет вероятность того, что в единичном интервале произойдет x или меньше событий. ен ц Непрерывные распределения вероятностей нф ид Непрерывную случайную величину можно понимать как любое значение из интервала или совокупности интервалов. В случае непрерывного распределения возможны вопросы, подобные тем, что задавались в дискретных случаях, и непрерывные распределения вероятностей показывают полное соответствие с дискретными. В случае непрерывного распределения, например, возможен вопрос: какова вероятность получить данную температуру в определенный момент времени? Температура — это физическое свойство, которое измеряется на непрерывной шкале. Мы определим четыре вида непрерывного распределения вероятностей; это равномерное, экспоненциальное, нормальное и гамма распределения. Равномерное распределение отвечает на вопрос, какое событие произойдет из данного набора равновероятных событий? Экспоненциальное распределение используется тогда, когда надо определить, сколько пройдет времени до первого (или следующего) события, при условии, что события подчиняются распределению Пуассона? Гамма-распределение имеет отношение к ответу на вопрос о том, сколько необходимо времени чтобы произошло N событий? Нормальное распределение (или, иначе, распределение Гаусса) полезно при апроксимации предельных форм других распределений. Оно играет значительную роль в статистике, поскольку его просто использовать, оно симметрично относительно математического ожидания, полностью определяется двумя параметрами — математическим ожиданием и дисперсией, и, наконец, отражает распределение повседневных событий. Равномерное распределение Ко Мы уже исследовали равномерное распределение как разновидность выбора дискретных элементов из конечного выборочного пространства. Вопрос был такой: дан набор равновероятных событий, которое из них следующее? В непрерывном случае выборочное пространство представляет собой бесконечное множество, такое как время или интервал между 0 и 1. Определяемый ниже класс Uniform расширяет возможности класса Random, генерируя в ответ на сообщение next случайную величину внутри любого интервала. class name superclass instance variable names Uniform ContinuousProbability startNumber stopNumber class methods instance creation но from: begin to: end begin > end ifTrue: [self error: 'неправильный интервал'] ifFalse: [xself new setStart: begin toEnd: end] instance methods mean x(startNumber + stopNumber) / 2 variance x(stopNumber – startNumber) squared / 12 иа probability functions ль accessing density: x (x between: startNumber and: stopNumber) ifTrue: [x1.0 / (stopNumber – startNumber)] ifFalse: [x0] ен ц private inverseDistribution: x "x случайное число между 0 и 1" xstartNumber + (x * (stopNumber – startNumber)) setStart: begin toEnd: end startNumber begin. stopNumber end нф ид Экспоненциальное распределение Ко Экспоненциальное распределение определяет, сколько времени пройдет до следующего события, при условии, что события подчиняются распределению Пуассона. Это распределение предпочтительнее для компьютерного моделирования, чем распределение Пуассона, по тем же причинам, по которым геометрическое распределение предпочтительнее биномиального. Благодаря ему, мы можем сразу установить часы модели на время следующего события, вместо того, чтобы шагать последовательно через заданную единицу времени. Как пример использования выборки с экспоненциальным распределением, мы могли бы спросить, когда следующий автомобиль прибудет на мойку? Значение функции плотности от аргумента x равно вероятности того, что следующее событие произойдет в интервале времени x. Пример такого рода вопроса: какова вероятность того, что следующий автомобиль прибудет на мойку в следующие 10 минут? Экспоненциальное распределение обычно используется в тех моделях, для которых ситуация ухудшается со временем. Например, нужно определить вероятность того, что лампа накаливания или часть электронного оборудования выйдет из строя до некоторого времени x. В таких случаях применяется экспоненциальное распределение, поскольку чем дольше мы используем оборудование, тем больше шансов, что оно перестанет функционировать. Подобно случаю распределения Пуассона, параметр экспоненциального распределения mu задается в терминах событий на единицу времени, хотя область определения этого распределения — время (не события). Функция экспоненциального распределения вероятностей следующая x/a e /a где a — среднее время ожидания между событиями (mu= 1/a). superclass instance variable names Exponential ContinuousProbability mu но class name class methods instance creation ль mean: p "Так как экспоненциальный параметр mu тот же, что и у распределения Пуассона, если задано среднее экспоненциального распределения, то берем обратную величину для получения параметра вероятности" xself parameter: 1.0 / p иа parameter: p p > 0.0 ifTrue: [xself new setParameter: p] ifFalse: [self error: 'Параметр вероятности (среднее) должен быть больше 0.0'] instance methods mean x1.0 / mu variance x1.0 / (mu * mu) probability functions ен ц accessing нф ид density: x x > 0.0 ifTrue: [xmu * (mu * x) negated exp] ifFalse: [x0.0] distribution: anInterval anInterval last <= 0.0 ifTrue: [x0.0] ifFalse: [x1.0 – (mu * anInterval last) negated exp – (anInterval first > 0.0 ifTrue: [self distribution: (0.0 to: anInterval first)] ifFalse: [0.0])] private Ко inverseDistribution: x "Реализация согласно книге Д. Кнута, т.2, стр. 141-142." xx ln negated / mu setParameter: p mu p Гамма-распределение Гамма-распределение относится к экспоненциальному распределению, которое отвечает на вопрос: сколько времени должно пройти, чтобы произошло N событий? Например, мы можем использовать гамма-распределение, чтобы определить сколько времени надо ждать но прибытия N-го автомобиля на паром. Каждый экземпляр класса Gamma представляет N-е событие и вероятность появления этого N-го события (наследуется из суперкласса Exponential). Переменная N, определяемая в классе Gamma, должна быть положительным целым числом. Функция вероятностей для гамма-распределения равна − − − Gamma Exponential N class name superclass иа instance variable names ль где mu = 1/a — параметр вероятности, e — основание натурального логарифма, k — целое положительное число. Как известно, знаменатель (k–1)! равен значению гамма-функции Эйлера от аргумента k, когда известно, что k – целое число большее 0. Реализация класса Gamma, приведенная ниже, не делает этого предположения. class methods instance creation events: k mean: p | events | events k truncated. events > 0 ifTrue: [x(self parameter: events / p) setEvents: events] ifFalse: [self error: 'число событий должно быть больше 0'] instance methods accessing mean xsuper mean * N ен ц нф ид variance xsuper variance * N probability functions density: x |t| x > 0.0 ifTrue: [t mu * x. x(mu raisedTo: N) / (self gamma: N) * (x raisedTo: N – 1) * t negated exp] ifFalse: [x0.0] private Ко gamma: n |t| t n – 1.0. xself computeSample: t outOf: t setEvents: events N events Нормальное распределение − π class name superclass Normal ContinuousProbability mu sigma нф ид instance variable names ен ц иа ль но Нормальное распределение, называемое также распределением Гаусса, применяется для обобщения или апроксимации других распределений. С помощью нормального распределения можно ответить на вопрос о том, сколько времени надо ждать следующего успешного события (подобно дискретному биномиальному распределению) или сколько событий произойдет в определенном интервале времени (подобно дискретному распределения Пуассона)? Нормальное распределение может быть использовано для апроксимации биномиального распределения, когда число событий очень велико, или распределения Пуассона, когда велико математическое ожидание. Однако, такие апроксимации точны только в малой окрестности математического ожидания и ошибка приближения возрастает при удалении от него. Нормальное распределение применяется, когда есть центральное доминирующее значение (математическое ожидание) и вероятность уменьшается с увеличением отклонения от математического ожидания. Если построить график функции плотности нормального распределения с аргументами на оси x и с соответствующими вероятностями на оси y, получившаяся кривая будем иметь форму колокола. Эта форма кривой определена условиями, что вероятности симметричны относительно математического ожидания, возможные значения аргументов из выборочного пространства заполняют бесконечную числовую прямую, а площадь области под кривой (сумма всех вероятностей) равна 1. Нормальное распределение применяется для определения вероятности измерений, например, когда измеряется размер шара. Результатами измерения будут величины, группирующиеся, за малым исключением, около центрального значения — математического ожидания. Параметры нормального распределения — математическое ожидание mu и стандартное отклонение sigma, которое должно быть большее 0. Функция вероятностей равна class methods instance creation mean: a deviation: b b > 0.0 ifTrue: [xself new setMean: a standardDeviation: b] ifFalse: [self error: 'стандартное отклонение должно быть больше 0.0'] instance methods accessing Ко mean xmu variance xsigma squared random sampling next "Полярный метод для нормального распределения, Д.Кнут, т.2, стр. 130, 140." | vl v2 s rand u | но rand Uniform from: –1.0 to: 1:0. [v1 rand next. v2 rand next. s vl squared + v2 squared. s > = 1] whileTrue. u (-2.O * s ln / s) sqrt. xmu + (sigma * v1 * u) private setMean: m standardDeviation: s mu m. sigma s иа density: x | twoPi t | twoPi 2 * 3.1415926536. t x – mu / sigma. x(–0.5 * t squared) exp / (sigma * twoPi sqrt) ль probability functions Ко нф ид ен ц В последующих главах мы приведем примеры определения и использования классов, которые поддерживают дискретные управляемые событиями модели. Распределения вероятностей, определенные в этой главе, будут активно использоваться во всех примерах моделей.