Задайте пользовательскую цель сигнала с неопределенной переменной (GUI)

Этот пример показывает, как задать пользовательскую целевую функцию для сигнала модели. Вы вычисляете значение целевой функции с помощью переменной, которая моделирует неопределенность параметра.

Модель конкурентной динамики населения

Модель Simulink sdoPopulation моделирует простую экологию двух организмов, используя конкурентные уравнения Лоток-Вольтерра:

$$\frac{d P_1}{dt} = R_1 P_1 (1 - \frac{P_1(t-\tau_1)+\alpha
P_2(t-\tau_2)}{K})$$

$$\frac{d P_2}{dt} = R_2 P_2 (1 - \frac{P_2(t-\tau_2)+\alpha
P_1(t-\tau_1)}{K})$$

  • $P_n$ - население размер n-го организма.

  • $R_n$ - характерные для каждого организма темпы роста на душу населения.

  • $\tau_n$ - конкурентная задержка для каждого организма.

  • $K$ - грузоподъемность окружения организма.

  • $\alpha$ близость двух населений и то, насколько сильно они влияют друг на друга.

В модели используются нормированные модули.

Откройте модель.

open_system('sdoPopulation')

Двумерный сигнал, P, моделирует размеры населения для P1 (первый элемент) и P2 (второй элемент). Модель первоначально сконфигурирована с одним организмом, P1, доминируя в экологии. The Population возможности показывают P1 население, колеблющаяся между высокими и низкими значениями, в то время как P2 является постоянным в 0,1. The Population Phase Portrait блок показывает размеры населения двух организмов относительно друг друга.

Задача проекта стабилизации населения

Настройте $R_2$$\tau_2$$\alpha$значения, и, чтобы соответствовать следующим проектным требованиям:

  • Минимизируйте область значений населений, то есть максимальное различие между P1 и P2.

  • Стабилизируйте P1 и P2, то есть убедитесь, что ни одно население организма не отмирает или не растет чрезвычайно большой.

Необходимо настроить параметры для различных значений грузоподъемности,. $K$Это обеспечивает робастность к неопределенности пропускной способности окружения.

Откройте Response Optimizer

Дважды кликните Open Optimization Tool блокируйте в модели, чтобы открыть предварительно сконфигурированный сеанс Response Optimizer. Сеанс задает следующие переменные:

  • DesignVars - Проект переменных для $R_2, \tau_2$$\alpha$параметров, и модели.

  • K_unc - Неопределенный параметр, моделирующий грузоподъемность окружения организма (). $K$K_unc задает номинальное значение и два выборочных значения.

  • P1 и P2 - Зарегистрированные сигналы, представляющие населениям двух организмов.

Задайте пользовательскую целевую функцию сигнала

Задайте пользовательское требование, чтобы минимизировать максимальное различие между двумя размерами населения. Примените это требование к P1 и P2 моделировать сигналы.

  1. Откройте диалоговое окно «Создание требования». В списке Создать выберите Пользовательское требование.

  2. В диалоговом окне «Создание требования» задайте следующее:

  • Имя - Введите PopulationRange.

  • Тип - Выберите Минимизировать выход функции из списка.

  • Функция - Введите @sdoPopulation_PopRange. Для получения дополнительной информации об этой функции см. Раздел «Детали пользовательской целевой функции сигнала».

  • Выберите сигналы и системы для ограничения (необязательно) - выберите P1 и P2 флажки.

3. Нажмите кнопку ОК.

Новая переменная, PopulationRange, появляется в браузере Response Optimizer.

Пользовательские данные целевой функции сигнала

PopulationRange использует sdoPopulation_PopRange функция. Эта функция вычисляет максимальное различие между населениями для различных значений пропускной способности окружения. Путем минимизации этого значения можно достичь обеих целей проекта. Функция вызывается оптимизатором на каждом шаге итерации.

Чтобы просмотреть функцию, введите edit sdoPopulation_PopRange. Ниже рассматриваются детали этой функции.

Ввод/вывод

Функция принимает data, структура со следующими полями:

  • DesignVars - Значения Current iteration, $R_2, \tau_2$и.$\alpha$

  • Nominal - Записанные данные сигнала, полученные путем симуляции модели с помощью значений параметров, заданных data.DesignVars и номинальные значения для всех других параметров. The Nominal поле само по себе является структурой с полями для каждого записанного сигнала. Имена полей являются именами зарегистрированных сигналов. Пользовательское требование использует записанные сигналы, P1 и P2. Поэтому data.Nominal.P1 и data.Nominal.P2 являются ли объекты timeseries соответствующими P1 и P2.

  • Uncertain - Записанные данные сигнала, полученные путем симуляции модели с использованием выборки значений неопределенной переменной K_unc. The Uncertain поле является вектором N структуры, где N - количество выборочных значений, заданное для K_unc. Каждый элемент этого вектора похож на data.Nominal и содержит результаты симуляции, полученные из соответствующего значения выборки, заданного для K_unc.

Функция возвращает максимальное различие между размерами населения для различных провозных мощностей. Следующее фрагмент кода в функции выполняет это действие:

val = max(maxP(1)-minP(2),maxP(2)-minP(1));

Временные Области значений данных

При вычислении целей проекта отбрасывайте данные о росте начальные генеральные совокупности, чтобы исключить смещения из начального условия. Следующее фрагмент кода в функции выполняет это действие:

%Get the population data
tMin = 5; %Ignore signal values prior to this time
iTime = data.Nominal.P1.Time > tMin;
sigData = [data.Nominal.P1.Data(iTime), data.Nominal.P2.Data(iTime)];

iTime представляет интересующий вас временной интервал и столбцы sigData содержат P1 и P2 данные для этого интервала.

Оптимизация для различных значений грузоподъемности

Функция включает эффекты изменения грузоподъемности путем итерации через элементы data.Uncertain. Следующее фрагмент кода в функции выполняет это действие:

...
for ct=1:numel(data.Uncertain)
   iTime = data.Uncertain(ct).P1.Time > tMin;
   sigData = [data.Uncertain(ct).P1.Data(iTime), data.Uncertain(ct).P2.Data(iTime)];
   maxP = max([maxP; max(sigData)]);  %Update maximum if new signals are bigger
   minP = min([minP; min(sigData)]);  %Update minimum if new signals are smaller
end
...

Максимальные и минимальные населения получаются во всех симуляциях, содержащихся в data.Uncertain.

Оптимизируйте проект

Нажмите «Оптимизировать».

Оптимизация сходится после ряда итераций.

The P1,P2 график показывает динамику населения, с первым населением организма в синем и вторым населением организма в красном цвете. Пунктирные линии указывают динамику населения для различных значений емкости окружения. The PopulationRange график показывает, что максимальное различие между двумя населениями организма уменьшается с течением времени.

The Population Phase Portrait блок показывает населения, первоначально изменяющуюся, но в конечном счете они сходятся к стабильным размерам населения.

% Close the model
bdclose('sdoPopulation')