- •Конспект лекций по моделированию систем
- •§ 1. Основные понятия.
- •§ 2. Классификация моделей
- •§ 3. Этапы составления и исследования моделей.
- •§ 4. Имитационное моделирование.
- •§ 5.Элементы теории вероятности.
- •Способы вычисления вероятности
- •§ 6.Примеры основных случайных величин и их характеристик
- •§ 7.Построение датчика псевдослучайных чисел.
- •§ 7.1 Датчики для равномерного закона распределения
- •§ 7.2 Построение датчика псевдослучайных чисел для любого закона распределения
- •§ 7.3 Построение датчика по показательному закону распределения
- •§ 7.4 Построение датчика с помощью таблицы квантилей
- •§ 8. Потоки случайных событий. Пуассоновский поток.
- •§ 9.Связь потока Пуассона с показательным законом распределения
- •§ 10. Минимизация конечных автоматов.
- •§ 11. Моделирование работы конечного автомата
- •§12. Моделирование работы системы массового обслуживания
- •§ 13. Двумерные случайные величины и их законы распределения
- •§ 14.Понятие зависимых и независимых случайных величин
- •§15 Условное математическое ожидание линии регрессии.
- •§16 Числовые характеристики двумерных случайных величин Корреляционный момент
- •§17 Виды зависимости между случайными величинами.
- •§18 Нахождение на практике линейной регрессии.
§ 11. Моделирование работы конечного автомата
Требуется составить программу, которая имитирует работу конечного автомата при переходе из одного состояния в другое при различных входных сигналах. При этом требуется просчитать общее время нахождения автомата в каждом состоянии, вероятность каждого состояния, количество каждого состояния в % соотношении. Найти среднее состояние автомата.
Пусть дан конечный автомат:
-
Z
S
1
2
3
1
2
3
1
1
2
3
0
1
3
2
1
1
1
3
6
4
3
1
1
2
1
0
0
Сигналы поступают в автомат в случайный момент времени и образуют простейший поток.
Δt – случайная величина по показательному закону,
λ = 2 (сигналов в единицу времени)
(среднее время между сигналами)
S |
1 |
2 |
3 |
p |
0,2 |
0,5 |
0,3 |
S |
1 |
2 |
3 |
pN |
0,2 |
0,7 |
1 |
Датчик:
function n=diskrdat(pN)
r=rand;
[a,n]=min(pN<r); % массив сравнивается с r (pN<r)
Пример: r=0,5
pN<r = [1 0 0]
min(pN<0,5)=[0,2], где 0,2 – номер интервала куда попало случайное число.
Модель автомата(modelavt)
function modelavt;
global t Tmod lambda pN avt
init; % Инициализация исходных данных
while t < Tmod; % Цикл по времени до конца моделирования
[dT,S]=generat[pN,lambda] ; % Генерируются pN
t=t+dT;
[Vhd,Avt]=avtwork(Avt,S);
end
pprint ; % Вывод результатов
function init;
global t Tmod lambda pN avt
t=0; % Текущее модельное время
Tmod=1000; % Время окончания моделирования
lambda=1; % Интенсивность появления заявок
pN=[0.2 0.7 1]
Avt=struct(... % Структура автомата
'Z',1,... % Текущее состояние автомата, нач.сост.=1
'Tvh',0,... % Время входа в текущее состояние
'nZ',[1,0,0],... % Счетчики состояний
'tZ',[0,0,0],... % Счетчики продолжительности состояний
'mZ',0,... % Подсчет среднего состояния
'TabZ',[1,2,3;1,1,1; 1,1,2],... % Автоматная таблица состояний
'TabVs',[0,1,3; 3,6,4;1,0,0]); % Таблица выходных сигналов
function [dT,Sign]=generat[pN,lambda];
Sign=diskrdat(pN);
dT=pokdat(lambda);
function n=diskrdat(pN);
r=rand;
[a,n]=min(pN<r);
function Z=pokdat(lambda);
t=rand; % Случайное значение на отрезке [0,1]
while
t==1; t=rand;
end; % Пока значение равно 1, повторяем выбор
z=-(1/Lambda)*log(1-t);
function [Vhd,avt]=avtwork(avt,s);
global t
Zst=avt.Z; % Запоминаем текущее состояние автомата
Znov=avt.TabZ(Zst,s); % Находим по таблице новое состояние
Vhd =avt.TabVs(Zst,s); % Определяем выходной сигнал
if Zst ~= Znov % Если состояние изменилось
dT=t-avt.Tvh; % Время, которое провел автомат в старом состоянии
if dT > 0 % Если это время не нулевое
avt.nZ(Zst)=avt.nZ(Zst)+1; % Увеличиваем счетчик старого состояния
avt.tZ(Zst)=avt.tZ(Zst)+ dT; % Находим общее время для старого состояния
avt.mZ = avt.mZ + Zst*dT; % Подсчитываем среднее состояние автомата
end
avt.Tvh=t; % Запоминаем время входа в новое состояние
avt.Z=Znov; % Делаем текущим состоянием новое состояние
end
function pprint(avt);
global Tmod
Nz=sum(Avt.nZ); % Суммируем число всех наблюдаемых состояний
procZ=Avt.nZ/Nz*100 % Процент количества каждого состояния среди всех
sredT=Avt.tZ./Avt.nZ % Среднее время нахождения в каждом состоянии
verZ=Avt.tZ./Tmod % Вероятность каждого состояния