
- •Глава 6. Симула - универсальный процессо-ориентированный язык моделирования
- •Классы и объекты
- •Декларации класса
- •Подклассы
- •Объекты. Создание и средства доступа к атрибутам объекта
- •2.3. Средства доступа е атрибутам объектов
- •Квазипараллельное выполнение
- •Оператор detach (открепить)
- •Оператор resume (возобновить)
- •Выход через «end» объекта
- •Операторы перехода
- •Обработка упорядоченных множеств
- •Планирование процессов. Системный класс simulation
- •Статистические аспекты языка симула
- •Общая структура программы моделирования
- •Программное моделирование работы карьера
- •Описание классов
- •Текст программы
- •Ввод-вывод в симула
- •Понятие текста
- •Text array таблица [1:n];
- •Создание текстовых объектов
- •Процедуры работы с частью текста
- •Процедуры обработки текстов
- •Взаимное преобразование текстовых и арифметических значений
- •Сравнение текстов
- •Организация ввода – вывода
- •Процедуры ввода
- •Процедуры вывода
- •Контрольные вопросы и задания Литература
Статистические аспекты языка симула
При разработке систем моделирования очень часто возникает необходимость создания процессов в случайные моменты времени, для задания различного рода случайных факторов при имитационном моделировании определен набор встроенных процедур, позволяющих задавать получение псевдослучайных чисел, распределенных по любому нужному закону.
Все процедуры случайной выборки в языке СИМУЛА используют один и тот же прием получения «главной выборки» из равномерного распределения на интервале (0,1). Процедура главной выборки заменяет значение указанной целой переменной новым значением в соответствии с некоторым алгоритмом, определяемым в реализации языка ( см. приложение 1).
Каждая из перечисленных далее процедур осуществляет случайный выбор того или иного рода. Если явно не указано, выбор выполняется посредством одной процедуры главной выборки, т. е. процедуры с побочным эффектом продвижения на один шаг по указанной последовательности псевдослучайных чисел.
Для формальных параметров процедур случайного выбора в случае
необходимости выполняется преобразование типа фактических параметров,
кроме последнего фактического параметра, которым всегда должна быть переменная типа integer, указывающая последовательность псевдослучайных чисел.
Рассмотрим эти процедуры:
Процедура psrand (u).
real procedure psrand (u); name u; integer u;
Данная процедура предназначена для получения последовательностей псевдослучайных чисел, равномерно распределенных на интервале [0,1]. При многократной обращении к данной процедуре будет выдаваться последовательность а1, а2, …, аn, …, которая однозначно определяется начальным значением переменной u. Данная процедура называется процедурой главной выборки, с ее помощью получают все остальные распределения.
2. Процедура draw (a,u).
Boolean procedure draw (a, u); name u; real a; integer u;
Эта процедура доставляет значение true с вероятностью а и значение false с вероятностью (1-а), при а=>1 всегда доставляется true, а при a<=0 – false.
3. Процедура randint (a,b,u).
integer procedure randint (a, b, u); name u; integer a, b, u;
Процедура доставляет с равной вероятностью одно из целых значений: а, а + 1, ..., b - 1, b. Предполагается, что b >= а, при b < а выдается сообщение об ошибке.
Процедура uniform (a,b,u).
real procedure uniform (a, b, u); name u; real a, b; integer u;
Процедура доставляет значение, равномерно распределенное по полусегменту [а, b). При b < а выдается сообщение об ошибке.
Процедура normal (a,b,u).
real procedure normal (a, b, u); name u; real a, b; integer u;
С помощью этой процедуры можно получать псевдослучайные числа, распределенные по нормальному закону с математическим ожиданием а и среднеквадратическим отклонением b.
Процедура negexp (a,u).
real procedure negexp (a, u); name u; real a; integer u;
Процедура доставляет значения, распределенные по экспоненциальному закону со средним a.
Процедура Poisson (a,u).
integer procedure Poisson (a, u); name u; real a; integer u;
Значениями этой процедуры являются целые числа, распределенные по закону Пуассона с параметром a.
Процедура Erlang (a, b, u).
real procedure Erlang (a, b, u); name u; integer u; real a, b;
Доставляет значение, распределенное по закону Эрланга со средним 1/а и стандартным отклонением l/(a*sqrt(b)).
Для облегчения программирования типовых примеров статистического анализа результатов моделирования в языке имеются две встроенные процедуры, позволяющие накапливать гистограммы значений случайных величии в ходе работы модели интегрирование по системному времени.
Для накопления гистограмм служит процедура histo (A,B,c,d)
procedure histo (A, В, с, d); array A, В ; real с, d;
где A,B – одномерные массивы арифметического типа, задающие гистограмму, c – наблюдаемое значение некоторой арифметической величины, для которой строится гистограмма, d – арифметическая величина, равная весу значения с.
Значения элементов массива В трактуются как правые границы интервалов аргумента гистограммы, а в массиве А накапливаются данные о попаданиях исследуемой величины в заданные интервалы. Количество элементов в массиве А должно быть на 1 больше, чем в массиве В.
Встроенная процедура accum (a, b, c, d)
procedure accum (a, b, с, d) ; name a, b, с; real a, b, c, d;
может использоваться для накопления в переменной а интеграла по системному времени от переменной с, параметр b используется для фиксации момента времени, когда значения а и с обновляются в последний раз, а формальный параметр d трактуется как приращение переменной со времени ее предыдущего приращения.