В этом примере показано, как использовать функцию быстрого перезапуска 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')
fastRestart
| sdo.SimulationTest