Вы можете записать SimEvents® действия с использованием:
MATLAB® код - Использовать MATLAB. Для получения информации о рекомендациях по использованию кода MATLAB в качестве языка действий события, смотрите Инструкции по использованию MATLAB в качестве языка действий события
Simulink® functions - Используйте блок Simulink Function. Блок Simulink Function не принимает сущности как входные.
В целом использование MATLAB в качестве языка действий события SimEvents выполняется по тем же правилам, что и использование MATLAB в блоке MATLAB Function.
Включите префикс типа для идентификаторов перечисленных значений - Идентификатор TrafficColors.Red
действителен, но Red
нет.
Используйте формат MATLAB для комментариев - Используйте %
чтобы задать комментарии для согласованности с MATLAB. Для примера действителен следующий комментарий:
% This is a valid comment in the style of MATLAB
Используйте индексацию на основе одного для векторов и матриц - индексация на основе одного соответствует синтаксису MATLAB.
Используйте круглые скобки вместо скобок для индекса в векторы и матрицы - Этот оператор действителен:
a(2,5) = 0;
Недопустимый оператор:
a[2][5] = 0;
Инструкции по постоянным переменным:
Управляйте состояниями, которые не являются частью структуры сущности, используя постоянные переменные MATLAB.
Стойкие переменные, заданные в любом событии действия блока, масштабируются только к этому действию.
Блок может совместно использовать стойкие переменные во всех своих действиях события, управляя им в функции MATLAB по пути (которая вызывается из его действий события).
Два разных блока не могут совместно использовать одну и ту же постоянную переменную.
Присвойте начальное значение локальным и выходным данным - При использовании MATLAB в качестве языка действий данные, считанные без начального значения, вызывают ошибку.
Не используйте параметры, относящиеся к массиву ячеек типа данных.
Вы можете сгенерировать случайные числа с помощью различных распределений. Существует два подхода моделирования для использования начальных чисел во время генерации случайных чисел.
Можно использовать стойкие переменные для инициализации уникальных начальных чисел для каждого блока в вашей модели.
Можно использовать coder.extrinsic()
функция для генерации семян без стойких переменных.
Чтобы сгенерировать эти случайные распределения, используйте код в Usage столбце этой таблицы в блоках SimEvents, которые поддерживают действия события или временные действия межгенерации.
Распределение | Параметры | Использование | Требуется Statistics and Machine Learning Toolbox™ продукта |
---|---|---|---|
Экспоненциал | Среднее (м) |
-m * log(1-rand) | Нет |
Униформа | Минимум (м) Максимум (М) |
m + (M-m) * rand | Нет |
Бернуллиевый | Вероятность выхода 1 (P) |
binornd(1,P) | Да |
Двучлен | Вероятность успеха в одном исследовании (P) Количество испытаний (N) |
binornd(N,P) | Да |
Треугольный | Минимум (м) Максимум (М) Режим (режим) |
persistent pd if isempty(pd) pd = makedist('Triangular',... 'a',m,'b',mode,'c',M) end random(pd) | Да |
Гамма | Порог (T) Шкала (а) Форма (b) |
gamrnd(b,a) | Да |
Гауссов (нормальный) | Среднее (м) Стандартное отклонение (d) |
m + d*randn | Нет |
Геометрический | Вероятность успеха в одном исследовании (P) |
geornd(P) | Да |
Пуассон | Среднее (м) |
poissrnd(m) | Да |
Логарифмически нормальный | Порог (T) Му (му) Сигма (S) |
T + lognrnd(mu,S) | Да |
Логарифмическая логистика | Порог (T) Шкала (а) |
persistent pd if isempty(pd) pd = makedist('Loglogistic',... 'mu',m,'sigma',S); end random(pd) | Да |
Бета | Минимум (м) Максимум (М) Параметр формы a (a) Параметр формы b (b) |
betarnd(a,b) | Да |
Дискретная униформа | Минимум (м) Максимум (М) Количество значений (N) |
persistent V P if isempty(V) step = (M-m)/N; V = m : step : M; P = 0 : 1/N : N; end r = rand; idx = find(r < P, 1); V(idx) | Нет |
Weibull | Порог (T) Шкала (а) Форма (b) |
T + wblrnd(a,b) | Да |
Произвольный непрерывный | Вектор значений (V) Вектор совокупной функции вероятности (P) |
r = rand; if r == 0 val = V(1); else idx = find(r < P,1); val = V(idx-1) + ... (V(idx)-V(idx-1))*(r-P(idx-1)); end | Нет |
Произвольные дискретные | Вектор значений (V) Вектор вероятностей (P) |
r = rand; idx = find(r < cumsum(P),1); V(idx) | Нет |
Для получения примера смотрите Моделирование пересечений трафика как сети очереди.
Если вам нужны дополнительные распределения случайных чисел, см. Statistics and Machine Learning Toolbox.
Чтобы сгенерировать случайные числа, инициализируйте уникальный seed для каждого блока в вашей модели. Если вы используете статистический шаблон, можно вручную изменить начальное начальное значение на уникальное значение для каждого блока, чтобы сгенерировать независимые выборки из распределений.
Чтобы сбросить начальное начальное значение каждый раз, когда симуляция начинается, используйте код MATLAB, чтобы инициализировать постоянную переменную в действиях события, например:
persistent init if isempty(init) rng(12234); init=true; end
Вот пример кода. Вектор значений назначен FinalStop
:
% Set the initial seed. persistent init if isempty(init) rng(12234); init=true; end % Create random variable, x. x=rand(); % % Assign values within the appropriate range % using the cumulative probability vector. if x < 0.3 entity.FinalStop = 2; elseif x >= 0.3 && x< 0.6 entity.FinalStop = 3; elseif x >= 0.6 && x< 0.7 entity.FinalStop = 4; elseif x >= 0.7 && x< 0.9 entity.FinalStop = 5; else entity.FinalStop = 6; end
В некоторых сценариях вы генерируете случайные числа, не используя стойкие переменные. В этом случае используйте coder.extrinsic()
функция, чтобы убедиться, что SimEvents использует функцию в MATLAB, и в базовом рабочем пространстве MATLAB задан seed. Это может привести к снижению эффективности в симуляции.
Рассмотрим этот код как пример.
% Random number generation coder.extrinsic('rand'); value = 1; value = rand(); % Pattern: Exponential distribution mu = 0.5; dt = -1/mu * log(1 - value);
Выход внешней функции является mxArray
. Чтобы преобразовать его в известный тип, переменную val = 1
объявляется, чтобы задать его тип double и rand
присваивается этой переменной val=rand
. Для получения информации о внешних функциях см. Раздел «Работа с mxArrays».
Для получения примера смотрите Моделирование пересечений трафика как сети очереди.
Из действия события можно обратиться к этим параметрам:
Специфичные для маски параметры, заданные с помощью панели Parameters Редактор.
Любая переменная, которую вы задаете в рабочей области (такое как базовое рабочее пространство или рабочее пространство модели).
Параметры, которые вы определяете с помощью Simulink.Parameter
объект.
Примечание
С действиями SimEvents вы не можете:
Измените параметры из действия события.
Настройки параметров во время симуляции.
Действия события не поддерживаются с строкой типом данных сущности.
Entity Generator | Entity Queue | Entity Replicator | Entity Server | Entity Terminator | MATLAB Function | Multicast Receive Queue | Resource Acquirer | Simulink Function | Simulink.Parameter