Повышение эффективности оптимизации с помощью быстрого перезапуска (кода)

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

Как быстрый перезапуск ускоряет оптимизацию

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

Во время оптимизации модель неоднократно моделируется (часто в десятки или сотни раз) Fast Restart означает, что модель компилируется только один раз для этой симуляции по сравнению с нескоростным перезапуском, где модель перекомпилируется каждый раз.

Модели, где компиляция является значительным фрагментом общего времени симуляции, больше всего выигрывают от быстрого перезапуска. Кроме того, после компиляции модели могут быть изменены не все параметры модели, в частности могут быть изменены только настраиваемые параметры. Дополнительные сведения см. в разделе Запуске с быстрым перезапуском.

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

Загрузите модель дросселя двигателя. Цель состоит в том, чтобы настроить параметры модели, чтобы соответствовать измеренным данным. Для получения дополнительной информации о настройке задачи смотрите пример Estimate Model Parameter Values (GUI).

open_system('spe_engine_throttle')

Определите данные задачи оценки

Эти примеры фокусируются на интерфейсе командной строки для использования Fast Restart во время оценки. Подробное описание интерфейса командной строки оценки смотрите в Estimate Model Parameter Values (Code).

Задайте значения параметров модели для оценки и любые ограничения параметра.

p = sdo.getParameterFromModel('spe_engine_throttle',{'J','c','input_delay','k'});
p(1).Minimum = 0;
p(2).Minimum = 0;
p(3).Minimum = 0;
p(3).Maximum = 0.1;
p(4).Minimum = 0;

Определите эксперимент оценки. Измеренные данные эксперимента загружаются из sdoFastRestart_ExperimentData Файл MATLAB. Файл MATLAB содержит Input_SignalData и Output_SignalData переменная, задающая входы и выходного сигналов эксперимента.

load spe_engine_throttle_ExperimentData

Exp = sdo.Experiment('spe_engine_throttle');
Input = Simulink.SimulationData.Signal;
Input.Values    = Input_SignalData;
Input.BlockPath = 'spe_engine_throttle/Input';
Input.PortType  = 'inport';
Input.PortIndex = 1;
Input.Name      = 'spe_engine_throttle/Input:1';
Exp.InputData = Input;
Output = Simulink.SimulationData.Signal;
Output.Values    = Output_SignalData;
Output.BlockPath = 'spe_engine_throttle/Throttle';
Output.PortType  = 'outport';
Output.PortIndex = 1;
Output.Name      = 'spe_engine_throttle/Throttle:1';
Exp.OutputData = Output;

Создайте симулятор модели из эксперимента

Simulator = createSimulator(Exp);

Сконфигурируйте симулятор для быстрого перезапуска

Симулятор контролирует, моделируется ли модель с помощью быстрого перезапуска или нет. fastRestart команда используется, чтобы сконфигурировать симулятор для использования Fast Restart.

The spe_engine_throttle модель использует решатель с переменным шагом и может не выдавать значения в то время в измеренных данных эксперимента. Для вывода значений во время измеренных данных используйте set_param команда, чтобы задать время выхода журнала модели как переменную рабочей области. В целевой функции оценки переменная затем используется, чтобы задать время выхода, чтобы быть таким же, как измеренные данные эксперимента. Модель OutputTimes устанавливается перед конфигурированием симулятора для быстрого перезапуска, так как, когда модель сконфигурирована для быстрого перезапуска, строение регистрации модели не может измениться.

set_param('spe_engine_throttle','OutputOption','SpecifiedOutputTimes','OutputTimes','OutputTimesValues');
Simulator = fastRestart(Simulator,'on');

Симулятор теперь может использоваться во время оценки, и модель будет моделироваться с помощью быстрого перезапуска.

Запуск оценки

Создайте целевую функцию оценки, чтобы оценить, насколько близко выход симуляции, сгенерированный с использованием оцененных значений параметров, совпадает с измеренными данными. Используйте анонимную функцию с одним аргументом, который вызывает spe_engine_throttle_Objective функция. The spe_engine_throttle_Objective функция включает в себя Simulator аргумент, настроенный для использования быстрого перезапуска.

optimfcn = @(P) spe_engine_throttle_Objective(P,Simulator,Exp);

Установите опции оптимизации и запустите оптимизацию.

Options = sdo.OptimizeOptions;
Options.Method = 'lsqnonlin';
[pOpt,Info] = sdo.optimize(optimfcn,p,Options);
 Optimization started 27-Jan-2021 16:56:54

                                          First-order 
 Iter F-count        f(x)      Step-size  optimality
    0      9       32.048            1                                         
    1     18        12.24       0.6495           18
    2     27       3.5944       0.3919         8.65
    3     36      1.11908       0.1881         3.11
    4     45     0.648845        0.197         1.25
    5     54     0.288719        1.218         1.15
    6     63     0.147572       0.2943         0.42
    7     72    0.0874598       0.5345        0.102
    8     81    0.0668259       0.4315        0.169
    9     90    0.0668259        9.907        0.169
   10     99    0.0662283         2.33         0.27
   11    108    0.0491157        0.209       0.0989
   12    117    0.0491157       0.2997       0.0989
   13    126    0.0490206      0.07492       0.0663
Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.

Восстановите модель

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

Simulator = fastRestart(Simulator,'off');
set_param('spe_engine_throttle','OutputOption','RefineOutputTimes','OutputTimes','[]');

Похожие примеры

Можно также сгенерировать код, чтобы сконфигурировать модель для быстрого перезапуска в Parameter Estimator и Response Optimizer. Сконфигурируйте модель для быстрого перезапуска, как описано в Улучшении Эффективности Оптимизации с Использованием Быстрого Перезапуска (графического интерфейса пользователя). Затем используйте Generate MATLAB Code функция приложения.

Закройте модель.

bdclose('spe_engine_throttle')

См. также

|

Похожие примеры

Подробнее о