В этом примере показано, как создать модель SimEvents ® для представления сети трафика транспортных средств и исследовать среднее время ожидания транспортных средств, когда сеть находится в устойчивом состоянии.
Предположим, что сеть движения транспортного средства состоит из двух точек входа транспортного средства и двух точек выхода транспортного средства, представленных коричневыми и зелеными узлами на следующем рисунке. Каждый синий узел в сети представляет пересечение трассы со светофором, а стрелки представляют соединения трассы на каждом пересечении. Значения рядом со стрелками представляют процент транспортных средств, проходящих маршрут на этом перекрестке.

Скорость входа транспортного средства в сеть представлена процессами Пуассона со скоростями 0.5 для ввода 1 и 0.15 для ввода 2. Тарифы на обслуживание представляют собой время, затрачиваемое транспортными средствами на каждом перекрестке, которое берется из экспоненциального распределения со средним значением 1. Значения стрелок - это вероятности выбора трассы для транспортных средств на перекрестке.
Для представления сети трафика транспортного средства в этой модели используются блоки Генератор сущностей, Сервер сущностей, Очередь сущностей, Коммутатор ввода сущностей, Коммутатор вывода сущностей и Терминатор сущностей.
model = 'QueueServerTransportationNetwork';
open_system(model);

Два блока генератора объектов представляют точки входа в сеть. Для создания процесса прихода Пуассона устанавливается время между поколениями их сущностей.
Это код в поле действия «Время между поколениями» записи 1 блок.
% Random number generation coder.extrinsic('rand'); ValEntry1 = 1; ValEntry1 = rand(); % Pattern: Exponential distribution mu = 0.5; dt = -1/mu * log(1 - ValEntry1);
В коде, mu - коэффициент поступления Пуассона. coder.extrinsic('rand') используется, поскольку для рандомизации не назначено уникальное начальное число. Дополнительные сведения о создании случайных чисел в действиях события см. в разделах Языки действий события и Создание случайных чисел. Дополнительные сведения о внешних функциях см. в разделе Работа с mxArrays.
Объекты имеют Route атрибут, принимающий значение 1 или 2. Значение атрибута определяет выходной порт, из которого объекты отходят от блока коммутатора вывода объектов.
Этот код в действии Entry сервера сущностей 1 представляет случайный выбор маршрута транспортных средств на перекрестке, представленном узлом 1.
Coin1 = 1; coder.extrinsic('rand'); Coin1 = rand; if Coin1 <= 0.2 entity.Route = 1; else entity.Route = 2; end
Это пример случайного Route назначения атрибутов при входе объектов в блок Entity Server 1. Значение Route назначается на основе значения случайной величины rand который принимает значения между 0 и 1. Route становится 1 если rand меньше или равно 0.2, или 2 если rand больше, чем 0.2.
Каждый синий узел представляет пересечение маршрутов и включает в себя бесконечную очередь емкости и сервер с временем обслуживания, взятым из экспоненциального распределения со средним значением 1.
Сервер сущностей 1 содержит этот код.
% Pattern: Exponential distribution coder.extrinsic('rand'); Val1 = 1; Val1 = rand(); mu = 1; dt = -mu * log(1 - Val1);
Сеть построена как открытая сеть Джексона, которая удовлетворяет этим условиям.
Все прибывшие транспортные средства могут выйти из сети.
Прибытие транспортного средства представлено процессом Пуассона.
Транспортные средства отправляются на перекресток в качестве первых. Время ожидания в пересечении экспоненциально распределяется со средним значением 1.
Транспортное средство, выезжающее на перекресток, либо занимает доступный маршрут, либо покидает сеть.
Коэффициент использования каждой очереди на пересечение трафика меньше 1.
В установившемся состоянии каждая очередь в открытой сети Джексона ведет себя независимо как очередь M/M/1. Поведение сети - произведение отдельных очередей в равновесных распределениях. Для получения дополнительной информации о M/M/1 очередях, см., что M/M/1 Стоит в очереди Система.
Скорость прибытия транспортного средства для каждого узла
рассчитывается по этой формуле.

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

Здесь,
является матрицей маршрутизации, и каждый элемент представляет вероятность перехода от узла
к узлу.
Для исследуемой здесь сети это матрица маршрутизации.
![$\theta = \left[\begin{array}{cccc} 0 & 0.2 & 0.8 & 0\\ 0 & 0 & 0.7 & 0.3\\ 0 & 0 & 0 & 0.4\\ 0 & 0 & 0 & 0 \end{array}\right]$](../../examples/simevents/win64/RandomNumberQueuingNetworkExample_eq11265828881743676478.png)
- вектор внешних поступлений в каждый узел.
![$R = \left[\begin{array}{cccc} 0.5 & 0 & 0 & 0.15 \end{array}\right]$](../../examples/simevents/win64/RandomNumberQueuingNetworkExample_eq03081052342975917286.png)
С помощью этих значений вычисляется средняя скорость поступления для каждого узла.
![$\lambda = \left[ \begin{array}{cccc} 0.5 & 0.1 & 0.47 & 0.368 \end{array}\right]$](../../examples/simevents/win64/RandomNumberQueuingNetworkExample_eq14296769138282456934.png)
Каждый узел ведет себя как независимая очередь M/M/1, и среднее время ожидания для каждого узла
рассчитывается по этой формуле. См. раздел Система очередей M/M/1.

Среднее время ожидания для каждого узла вычисляется путем включения каждого элемента.
![$\rho = \left[\begin{array}{cccc} 1 & 0.11 & 0.88 & 0.58 \end{array}\right]$](../../examples/simevents/win64/RandomNumberQueuingNetworkExample_eq04088365742333225799.png)
Смоделировать модель и убедиться, что среднее время ожидания в каждой очереди в сети соответствует вычисленным теоретическим результатам.
Время ожидания очереди в узле 1 сходится к 1.

Время ожидания очереди в узле 2 сходится к 0.11.

Время ожидания очереди в узле 3 сходится к 0.88.

Время ожидания очереди в узле 4 сходится к 0.58.

[1] Джексон, Джеймс Р. Операционное исследование Том 5, № 4 (август, 1957), стр. 518-521.