Этот пример показывает, как программно оптимизировать параметры контроллера, чтобы удовлетворить требования к переходной характеристике, используя sdo.optimize
функция.
Simulink® модели watertank_stepinput
включает нелинейную систему Бака с водой объекта и ПИ-контроллера в системе обратной связи с одним циклом.
Блок Step применяет шаговый вход. Можно также использовать другие типы входов, такие как наклон, чтобы оптимизировать ответ, генерируемый такими входами.
Этот рисунок показывает систему бака с водой.
Вода входит в бак в верхнюю часть со скоростью, пропорциональной открытию клапана. Открытие клапана пропорционально напряжению, V, приложенному к насосу. Вода уходит через отверстие в основе бака со скоростью, пропорциональной квадратному корню уровня воды, H. Присутствие квадратного корня в скорости потока жидкости воды приводит к нелинейному объекту.
Следующая таблица описывает переменные, параметры, дифференциальные уравнения, состояния, входы и выходы системы бака с водой.
Переменные |
H - высота воды в баке. Vol - объем воды в баке. V - напряжение, приложенное к насосу. |
Параметры |
A - площадь поперечного сечения бака. b является константой, связанной со скоростью потока жидкости в бак. a является константой, связанной со скоростью потока жидкости из бака. |
Дифференциальное уравнение |
|
Государства | H |
Исходные данные | V |
Выходы | H |
Высота воды в баке, H
, должны соответствовать следующей переходной характеристикой требованиям:
Время нарастания менее 2,5 секунд
Время урегулирования менее 20 секунд
Перерегулирование менее 5%
Откройте модель Simulink.
sys = 'watertank_stepinput';
open_system(sys);
Логгирование уровня воды, H
.
Во время оптимизации модель моделируется с помощью текущего значения параметров модели, и записанный сигнал используется для оценки требований к проекту.
PlantOutput = Simulink.SimulationData.SignalLoggingInfo
;
PlantOutput.BlockPath = [sys '/Water-Tank System'];
PlantOutput.OutputPortIndex = 1;
PlantOutput.LoggingInfo.NameMode = 1;
PlantOutput.LoggingInfo.LoggingName = 'PlantOutput';
Сохраните регистрационную информацию.
simulator = sdo.SimulationTest
(sys);
simulator.LoggingInfo.Signals = PlantOutput;
simulator
является sdo.SimulationTest
объект, который вы также используете позже, чтобы симулировать модель.
Задайте требования к переходной характеристике.
StepResp = sdo.requirements.StepResponseEnvelope; StepResp.RiseTime = 2.5; StepResp.SettlingTime = 20; StepResp.PercentOvershoot = 5; StepResp.FinalValue = 2; StepResp.InitialValue = 1;
StepResp
является sdo.requirements.StepResponseEnvelope
объект. Значения, присвоенные StepResp.FinalValue
и StepResp.InitialValue
соответствуют шаговому изменению высоты бака с водой от 1
на 2
.
Когда вы оптимизируете ответ модели, программное обеспечение изменяет значения параметров (конструктивной переменной), чтобы удовлетворить требования проекта.
Выберите параметры модели для оптимизации. Здесь оптимизируйте параметры ПИД-регулятора.
p = sdo.getParameterFromModel
(sys,{'Kp','Ki'});
p
массив из 2 param.Continuous
объекты.
Чтобы ограничить параметры положительными значениями, установите минимальное значение каждого параметра равным 0
.
p(1).Minimum = 0; p(2).Minimum = 0;
Создайте конструкторскую функцию, чтобы оценить производительность системы для набора значений параметров.
evalDesign = @(p) sldo_model1_design(p,simulator,StepResp);
evalDesign
является анонимной функцией, которая вызывает функцию затрат sldo_model1_design
. Функция стоимости моделирует модель и оценивает требования проекта.
Совет
Тип edit sldo_model1_design
чтобы просмотреть эту функцию.
Оцените текущий ответ. (Необязательно)
Вычислите ответ модели с помощью текущих значений конструктивных переменных.
initDesign = evalDesign(p);
Во время симуляции блок Step Response выдает предупреждения об утверждениях в MATLAB® prompt, который указывает, что требования, указанные в блоке, не удовлетворены.
Исследуйте нелинейные ограничения неравенства.
initDesign.Cleq
ans = 0.1739 0.0169 -0.0002 -0.0101 -0.0229 0.0073 -0.0031 0.0423
Некоторые Cleq
значения положительны, за пределами заданного допуска, что указывает на ответ с использованием текущих значений параметров нарушает требования проекта.
Задайте опции оптимизации.
opt = sdo.OptimizeOptions
;
opt.MethodOptions.Algorithm = 'sqp';
Программное обеспечение настраивает opt
использовать метод оптимизации по умолчанию, fmincon
, и последовательный алгоритм квадратичного программирования для fmincon
.
Оптимизируйте ответ.
[pOpt,optInfo] = sdo.optimize
(evalDesign,p,opt);
При каждой итерации оптимизации программное обеспечение моделирует модель и решатель оптимизации по умолчанию fmincon
изменяет конструктивные переменные в соответствии с требованиями проекта. Для получения дополнительной информации см. «Как алгоритм оптимизации формулирует задачи минимизации».
После завершения оптимизации в командном окне отображаются следующие результаты:
max Step-size First-order Iter F-count f(x) constraint optimality 0 5 0 0.1739 1 10 0 0.03411 1 0.81 2 15 0 0 0.235 0.0429 3 15 0 0 2.26e-18 0 Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the selected value of the function tolerance, and constraints are satisfied to within the selected value of the constraint tolerance.
Сообщение Local minimum found that satisfies the constraints
указывает, что решатель оптимизации нашел решение, которое удовлетворяет требованиям проекта в пределах заданных допусков. Для получения дополнительной информации о выходах, отображаемых во время оптимизации, смотрите Итеративное отображение.
Исследуйте информацию об окончании оптимизации, содержащуюся в optInfo
выходной аргумент. Эти сведения помогают вам проверить, соответствует ли ответ переходной характеристики требованиям.
Для получения примера проверьте следующие поля:
Cleq
, что показывает оптимизированные нелинейные ограничения неравенства.
optInfo.Cleq
ans = -0.0001 -0.0028 -0.0050 -0.0101 -0.0135 -0.0050 -0.0050 -0.0732
Все значения удовлетворяют Cleq
≤ 0
в пределах оптимизационных допусков, что указывает на соответствие переходной характеристики требованиям.
exitflag
, что определяет, почему оптимизация завершена.
Значение 1
, что указывает на то, что решатель нашел решение, которое было меньше заданных допусков по значению функции и нарушениям ограничений.
Просмотрите оптимизированные значения параметров.
pOpt
pOpt(1,1) = Name: 'Kp' Value: 2.0545 Minimum: 0 Maximum: Inf Free: 1 Scale: 1 Info: [1x1 struct] pOpt(2,1) = Name: 'Ki' Value: 0.3801 Minimum: 0 Maximum: Inf Free: 1 Scale: 1 Info: [1x1 struct]
Симулируйте модель с оптимизированными значениями.
Обновите оптимизированные значения параметров в модели.
sdo.setValueInModel(sys,pOpt);
Симулируйте модель.
sim(sys);
param.Continuous
| sdo.getParameterFromModel
| sdo.optimize
| sdo.OptimizeOptions
| sdo.requirements.StepResponseEnvelope
| sdo.SimulationTest
| Simulink.SimulationData.SignalLoggingInfo