Этот пример показывает, как использовать Быструю функцию Перезапуска Simulink®, чтобы ускорить оптимизацию модели. Вы используете Быстрый Перезапуск, чтобы оценить параметры модели дросселя механизма.
Симуляция моделей Simulink требует, чтобы модель была скомпилирована, прежде чем это будет моделировано. В этой компиляции контекста средних значений модели анализировать и отформатировать модель так, чтобы это могло быть моделировано. Идея Быстрого Перезапуска состоит в том, чтобы выполнить образцовую компиляцию однажды и снова использовать скомпилированную информацию для последующих симуляций, видеть, "Как Быстрый Перезапуск Улучшает Итеративные Симуляции" в документации Simulink для описания Быстрого Перезапуска.
Во время оптимизации неоднократно моделируется модель (часто десятки или сотни времен), Быстрый Перезапуск означает, что модель только скомпилирована однажды для них симуляция по сравнению с небыстрым перезапуском, где модель перекомпилирована каждый раз.
Модели, где компиляция является значительным фрагментом полного преимущества времени симуляции больше всего от Быстрого Перезапуска. Далее, если модель скомпилирована не, все параметры модели могут быть изменены, в частности только настраиваемые параметры могут быть изменены, видеть, "что Факторы Влияют на Быстрый Перезапуск" в документации Simulink для получения дополнительной информации.
Загрузите модель дросселя механизма. Цель состоит в том, чтобы настроить параметры модели, чтобы совпадать с результатами измерений. Для получения дополнительной информации на настройке задач смотрите "Оценочные Значения Параметра модели (графический интерфейс пользователя)" пример.
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;
Задайте эксперимент оценки. Измеренные данные об эксперименте загружаются от файла MATLAB sdoFastRestart_ExperimentData
. файл 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 11-Jan-2019 03:25:26 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.188 3.11 4 45 0.648733 0.1968 1.25 5 54 0.287473 1.092 1.11 6 63 0.150608 0.323 0.407 7 72 0.0911952 0.564 0.0916 8 81 0.0707626 0.4742 0.145 9 90 0.0571975 1.43 0.12 10 99 0.0571975 10 0.12 11 108 0.0571975 0.9756 0.12 12 117 0.0569405 0.2439 0.0889 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 Estimation и Response Optimization. Сконфигурируйте модель для быстрого перезапуска, как описано в "Улучшающейся Производительности Оптимизации с помощью Быстрого Перезапуска (графический интерфейс пользователя)". Затем используйте функцию Generate MATLAB Code
инструмента.
Закройте модель.
bdclose('spe_engine_throttle')
fastRestart
| sdo.SimulationTest