В этом примере показано, как использовать функцию быстрого перезапуска Simulink ® для ускорения оптимизации модели. Быстрый перезапуск используется для оценки параметров модели дроссельной заслонки двигателя.
Моделирование моделей Simulink требует компиляции модели перед ее моделированием. В этом контексте компиляция модели означает анализ и форматирование модели так, чтобы ее можно было моделировать. Идея быстрого перезапуска состоит в том, чтобы выполнить компиляцию модели один раз и повторно использовать скомпилированную информацию для последующего моделирования. Дополнительные сведения о том, когда использовать быстрый перезапуск, см. в разделе Как быстрый перезапуск улучшает итеративное моделирование.
Во время оптимизации модель многократно моделируется (часто десятки или сотни раз) Быстрый перезапуск означает, что модель компилируется только один раз для этого моделирования по сравнению с небыстрым перезапуском, где модель перекомпилируется каждый раз.
Модели, в которых компиляция является значительной частью общего времени моделирования, в наибольшей степени выигрывают от быстрого перезапуска. Кроме того, после компиляции модели могут быть изменены не все параметры модели, а только настраиваемые параметры. Дополнительные сведения см. в разделе Начало работы с быстрым перезапуском.
Загрузить модель дроссельной заслонки двигателя. Цель - настроить параметры модели на соответствие измеренным данным. Дополнительные сведения о настройке проблемы см. в примере оценки значений параметров модели (GUI).
open_system('spe_engine_throttle')

В этом примере основное внимание уделяется интерфейсу командной строки для использования функции быстрого перезапуска во время оценки. Подробное описание интерфейса командной строки оценки см. в разделе Значения параметров модели оценки (код).
Укажите значения параметров модели для оценки и любые границы параметров.
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 используется для настройки симулятора на использование функции быстрого перезапуска.
spe_engine_throttle модель использует решатель с переменным шагом и не может выводить значения в момент времени в измеренных данных эксперимента. Для вывода значений во время измерения используйте set_param для задания времени вывода журнала модели в качестве переменной рабочей области. В целевой функции оценки переменная затем используется для указания времени вывода, которое должно совпадать с измеренными экспериментальными данными. Модель OutputTimes устанавливается перед конфигурированием симулятора для быстрого перезапуска, поскольку после настройки модели для быстрого перезапуска конфигурация регистрации модели не может быть изменена.
set_param('spe_engine_throttle','OutputOption','SpecifiedOutputTimes','OutputTimes','OutputTimesValues'); Simulator = fastRestart(Simulator,'on');
Симулятор теперь может использоваться во время оценки, и модель будет моделироваться с помощью быстрого перезапуска.
Создайте целевую функцию оценки, чтобы оценить, насколько точно результаты моделирования, сгенерированные с использованием оценочных значений параметров, соответствуют измеренным данным. Используйте анонимную функцию с одним аргументом, вызывающим spe_engine_throttle_Objective функция. 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). Настройте модель для быстрого перезапуска, как описано в разделе Повышение производительности оптимизации с помощью быстрого перезапуска (GUI). Затем используйте Generate MATLAB Code функция приложения.
Закройте модель.
bdclose('spe_engine_throttle')
fastRestart | sdo.SimulationTest