Имитационное моделирование в равной степени пригодно как для решения детерминированных задач, так и для исследования ситуаций, зависящих от случайных факторов. При создании моделей с помощью универсальных языков программирования аппаратный или программный датчик случайных чисел – единственный инструмент разработчика для моделирования всех видов случайных факторов: случайных событий, случайных величин и случайных процессов. У того, кто использует Xcos, арсенал значительно шире. В этой статье рассматривается процесс моделирования случайных событий с использованием таких блоков Xcos как RAND_m, RELATIONALOP, HYSTHERESIS, DLR, CSCOPE, CONST, CLOCK_c, AFFICH_m.
Моделирование случайных событий
Случайным называют событие, которое в результате испытания может наступить, а может и не наступить (в отличие от достоверного события, которое при реализации данного комплекса наступает всегда, и невозможного события, которое при реализации данного комплекса условий не наступает никогда). Исчерпывающей характеристикой случайного события является вероятность его наступления. Примерами случайных событий являются отказы в экономических системах, объемы выпускаемой продукции каждым предприятием в каждый день, котировки валют в обменных пунктах, состояние рынка ценных бумаг и биржевого дела и т.п. Моделирование случайного события заключается в определении («розыгрыше») факта его наступления.
Рис. 1. Моделирование случайных событий при помощи блоков RAND_m и RELATIONALOP
Случайное событие считается наступившим, если сформированное датчиком случайное число попало в заданный диапазон. Следовательно, разработанная модель должна содержать компоненты, которые выполняют следующие действия:
- генерируют случайное число;
- определяют попадание полученного числа в заданный диапазон значений;
- идентифицируют состояние события (наступило/не наступило).
В Xcos-модели эти действия можно реализовать при помощи следующих блоков:
- RAND_m (раздел библиотеки «Источники сигналов и воздействий»);
- CONST (раздел библиотеки «Источники сигналов и воздействий»);
- RELATIONALOP (раздел библиотеки «Общеупотребительные блоки»);
- CLOCK_c (раздел библиотеки «Обработка событий»);
- AFFICH_m (раздел библиотеки «Регистрирующие устройства»).
Приступим к созданию модели, для чего запустим программную среду Scilab, а затем в основном меню «Инструменты» выберем пункт «Визуальное моделирование Xcos». В результате чего будет открыто окно обозревателя разделов библиотеки Xcos и новый файл модели. Выберем из указанных разделов библиотеки Xcos нужные блоки и разместим их в рабочей области программы, а затем соединим блоки между собой так, как показано на рисунке 1. Логика работы разрабатываемой модели следующая. Блок RELATIONALOP выполняет сравнение полученных от двух источников чисел. При этом первое число генерируется при помощи блока RAND_m, а второе задается разработчиком самостоятельно при помощи блока CONST и является константой. Если сгенерированное случайное число меньше константы, то событие считается таким, что наступило (блок AFFICH_m отображает значение 1), в противном случае событие будет считаться не наступившим (блок AFFICH_m отображает значение 0).
Для генерации случайных чисел в разрабатываемой модели используется блок RAND_m, для которого настраиваются следующие параметры (рис. 2а):
- Datatype (1=real double 2=complex) – тип выходных данных: 1 – действительные числа, 2 – комплексные числа;
- flag – флаг, определяющий вид закона распределения: 0 – равномерное, 1 – нормальное (гауссовское);
- A – нижняя граница диапазона генерации случайных чисел;
- B – верхняя граница диапазона;
- SEED – числа, используемые для инициализации машинного генератора псевдослучайных чисел. Первое значение относится к действительной, а второе к мнимой части выходного сигнала.
Рис. 2. Окно настроек параметров блока: (а) RAND_m, (б) CONST, (в) RELATIONALOP, (г) AFFICH_m
Источником сигнала активации для блока RAND_m является блок CLOCK_c. Блок CONST формирует постоянную величину. Значение константы вводится в окне настроек параметров данного блока в поле Constant (рис. 2б). Оператор отношения указывается в поле Operator окна настроек параметров блока RELATIONALOP (рис. 2в). В операции отношения первым операндом является сигнал, подаваемый на первый (верхний) вход блока, а вторым операндом – сигнал, подаваемый на второй (нижний) вход. Выходным сигналом блока является 1, если результат вычисления операции отношения есть «истина» и 0, если результат – «ложь».
Блок AFFICH_m при моделировании играет роль обзорного окна и предназначен для отображения на экране численных значений входных величин, фигурирующих в блок-диаграмме. В нашей модели данный блок показывает состояние события (событие наступило/не наступило). Для блока можно настроить следующие параметры (рис. 2г):
- Input Size – размерность матрицы входных значений;
- Font number – номер шрифта;
- Font size – размер шрифта;
- Color – цвет шрифта;
- Number of rational part digits – количество знаков после запятой;
- Block inherits (1) or not (0) – обрыв управляющей связи с блоком.
Блок AFFICH_m может использоваться для вывода как скалярных, так и векторных величин. Если отображаемая величина является вектором, то размер блока необходимо будет увеличить – растянуть при помощи мыши. Для этого следует выделить блок, подвести курсор мыши к одному из его углов, нажать левую клавишу мыши и, не отпуская ее, растянуть изображение блока до нужных размеров.
После того как блок-диаграмма собрана, а параметры всех ее блоков настроены, можно запускать моделирование. Однако, не забудьте предварительно сохранить модель на диск компьютера при помощи команды основного меню «Файл/Сохранить как». Теперь посредством нажатия кнопки «Запустить» на панели инструментов окна модели Xcos можно провести пробное моделирование, результат которого представлен на рисунке 3.
Рис. 3. Результат работы модели случайных событий
Появление случайного события можно интерпретировать еще одним способом: событие произошло, если некоторое связанное с ним число (признак) попало в заданный интервал. Этот вариант может быть реализован посредством использования блока HYSTHERESIS (раздел библиотеки «Системы с разрывами»). На рисунке 4 показана блок-диаграмма, при помощи которой выполняется регистрация моментов попадания случайного числа в заданный интервал. При этом подсчет числа попаданий выполняется при помощи блока DLR (раздел библиотеки «Системы с дискретным временем»), блок AFFICH_m выводит результат подсчета, а блок CSCOPE (раздел библиотеки «Регистрирующие устройства») отображает в графическом виде сгенерированные при помощи блока RAND_m случайным образом числа и попадание сгенерированных чисел в заданный интервал – при этом попадание числа соответствует в числовом виде 1, а промах – 0. Проверка на попадание сгенерированного числа в заданный интервал выполняется при помощи блока HYSTHERESIS. Этот интервал задается в окне настроек данного блока (рис. 5) в полях output when on (нижняя граница) и switch on at (верхняя граница). На рисунке 6 показана работа спроектированной модели в динамике. Логика работы нашей модели следующая. После запуска модели на выполнение производится генерация случайных чисел распределенных на интервале [0;9]. После чего выполняется проверка на попадание сгенерированных чисел в диапазон [0;3] и подсчет числа попаданий. Верхний график отображает попадания/промахи сгенерированных случайным образом чисел в заданный интервал. Последовательность сгенерированных чисел отображается на нижнем графике.
Рис. 4. Моделирование случайных событий при помощи блоков HYSTHERESIS и DLR
Рис. 5. Окно настроек параметров блока HYSTHERESIS
Рис. 6. Работа спроектированной модели регистрации моментов попадания случайного числа в заданный интервал в динамике
Использование случайных величин является наиболее универсальным и поэтому наиболее распространенным способом учета в модели случайных факторов, присущих реальным системам или процессам. В одной и той же имитационной модели могут быть разные случайные факторы. Одни могут быть представлены как случайные события, другие – как случайные величины, распределенные по различным законам. Если моделирование всех случайных факторов выполняется с использованием одного генератора, который генерирует одну общую последовательность случайных чисел, то с математической точки зрения их нельзя считать независимыми. Поэтому для моделирования каждого случайного фактора пытаются использовать отдельный генератор или обеспечить создание новой последовательности случайных чисел.
Александр Чёрный
Горячие темы