Проект Engine и компромиссы затрат

В этом примере показано, как использовать 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')