В этом примере показано, как использовать Optimization™ Simulink Design для оптимизации проекта с точки эффективность и стоимости. В этом примере мы настраиваем автомобильный контроллер скорости вращения двигателя, одновременно снижая затраты контроллера, настраивая точность датчика и время отклика привода.
Откройте модель автомобильного двигателя с помощью команды ниже. Следующие подсистемы моделируют ответ двигателя: Throttle & Manifold
, Induction to Power Stroke Delay
, Combustion
, Drag Torque
и Vehicle Dynamics
. Основным сигналом интереса в модели является скорость вращения двигателя в об/мин. Система управления состоит из задержки вывода Controller
, rpm Sensor
, и Throttle actuator
блоки. Модель управляется шагом изменения скорости в ссылке.
open_system('enginetradeoff_demo')
Проект преследует следующие цели:
Цель производительности двигателя:
Двигатель должен реагировать на изменения шага в ссылке скорости со следующими характеристиками:
Максимальное перерегулирование 2%
Время подъема 4 секунд, чтобы достичь 90% задающей скорости
Время урегулирования 7,5 секунд до достижения в пределах 2% от задающей скорости
Эта цель включена в качестве ограничения в Performance requirement
блок. Входом для этого блока является скорость вращения двигателя, которая нормирована эталонным значением скорости. Это означает, что, несмотря на изменение опорной скорости, требования к эффективности остаются неизменными.
Цель минимизации затрат:
Проектная стоимость контроллера должна быть минимизирована. Эта цель использует параметризацию датчика и привода, чтобы вычислить проект стоимость. Стоимость проекта вычисляется так, чтобы она всегда была больше 1, и оптимизация пытается довести стоимость до 1.
Мы используем пользовательское требование, чтобы минимизировать эту стоимость. The enginetreadeoff_cost
функция, используемая пользовательским требованием, просто возвращает значение затрат, которое должно быть минимизировано.
type enginetradeoff_cost
function Cost = enginetradeoff_cost(u) %Compute controller cost based on sensor accuracy, actuator response, and %controller sampling time. % Copyright 2013 The MathWorks, Inc. %Cost constants min_cost = 1; %Minimum cost > 0 sensor_var_min = 1e-3; %Minimum sensor variance (most expensive) sampling_min = 1e-2; %Minimum controller sampling time (most expensive) throttle_max = 2*pi*10; %Maximum actuator response frequency (most expensive) %Get variable names varnames = {u.DesignVars.Name}; %Form cost Cost = min_cost; %Add sensor cost index = strcmp(varnames, 'sensor_std'); if any(index) Cost = Cost + sensor_var_min./max(u.DesignVars(index).Value,sensor_var_min); end %Add sampling cost index = strcmp(varnames, 'Ts'); if any(index) Cost = Cost+ sampling_min./max(u.DesignVars(index).Value,sampling_min); end %Add throttle cost index = strcmp(varnames, 'Tthrottle'); if any(index) Cost = Cost + u.DesignVars(index).Value/throttle_max; end
Model parameterization:
Для достижения целей эффективности и стоимости, мы параметрируем следующее в модели:
Конечное значение шага опорной скорости: Это гарантирует, что проект работает в области значений рабочих точек, от низкой скорости до высоких значений скорости.
Усиление, шест и нули значений контроллера: Это позволяет нам изменить эффективность контроллера. Мы настраиваем эти значения с помощью оптимизации.
Время отклика привода дросселя: Время отклика оптимизировано для минимизации затрат контроллера. Стоимость привода обратно пропорциональна времени отклика, т.е. более быстрое время отклика подразумевает более дорогой привод.
Точность датчика частоты вращения: Точность задается стандартным значением отклонения и оптимизирована, чтобы минимизировать стоимость контроллера. Стоимость датчика обратно пропорциональна стандартному отклонению, то есть меньшее стандартное отклонение подразумевает более точный датчик, который дороже.
Оптимизация контроллера двигателя для эффективности и затрат включает в себя:
Оптимизация параметров контроллера, датчика и привода.
Оптимизация отклика при различных условиях работы.
С проблемами этого типа рекомендуется создавать проект итеративно, а не оптимизировать для всех целей вместе. Здесь мы используем стратегию разделения и покорения, как показано в таблице ниже. Идея состоит в том, чтобы использовать оптимизированные значения параметров из одного этапа в качестве начального предположения для следующего этапа.
Можно запустить Response Optimizer с помощью меню Приложения на панели инструментов Simulink или sdotool
команда в MATLAB. Можно запустить предварительно сконфигурированную задачу оптимизации в Response Optimizer, сначала открывая модель и дважды кликнув по оранжевому блоку в нижней части модели. В Response Optimizer нажмите кнопку Plot Model Response, чтобы симулировать модель и показать, насколько хорошо исходная конструкция удовлетворяет требованиям проекта.
Проект оптимизации, сохраненный в примере, соответствует этапу 2. На этом этапе мы оптимизируем параметры контроллера в рабочей области значений. Для этого уточняем K
, P
и Z
как настроенные параметры и окончательное значение шага, final_step
, из опорного сигнала как неопределенный параметр. На данном этапе пользовательская цель затрат контроллера не включается в задачу оптимизации.
Мы вводим цель стоимости контроллера на этапе 3, конфигурируя модель следующим образом:
Откройте Uncertain Variables
редактор из Response Optimizer и затем снимите флажок для final_step
. Это удаляет развертку модели по различным рабочим точкам из задачи оптимизации и, таким образом, уменьшает вычислительную нагрузку.
Откройте Design Variables
редактор из Response Optimizer и затем установите флажок для sensor_std
чтобы настроить этот параметр.
Нажмите кнопку «Выбрать» в Response Optimizer, чтобы открыть Design Requirements
редактор, а затем установите флажок для пользовательских Cost
. Это учитывает цель минимизации затрат во время оптимизации.
Запускаем оптимизацию нажатием кнопки Optimize из Response Optimizer. Графики обновляются, чтобы указать, что требования проекта теперь удовлетворены.
Чтобы сконфигурировать оптимизацию для этапа 4:
Откройте Design Variables
редактор из Response Optimizer и затем установите флажок для Tthrottle
чтобы настроить этот параметр.
Начать оптимизацию можно нажав кнопку Оптимизировать (Optimize) из Оптимизатора отклика (Response Optimizer).
Чтобы сконфигурировать оптимизацию для этапа 5:
Откройте Uncertain Variables
редактор из Response Optimizer и затем установите флажок для final_step
чтобы перенести модель в рабочую область значений.
Начать оптимизацию можно нажав кнопку Оптимизировать (Optimize) из Оптимизатора отклика (Response Optimizer).
% Close the model bdclose('enginetradeoff_demo')