В этом примере показано, как программно оптимизировать параметры контроллера, чтобы удовлетворить требования переходного процесса с помощью sdo.optimize
функция.
Модель watertank_stepinput
Simulink® включает нелинейный Системный объект Бака с водой и ПИ-контроллер в одноконтурной системе с обратной связью.
Блок 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®, которые указывают, что требованиям, заданным в блоке, не удовлетворяют.
Исследуйте нелинейные ограничения неравенства.
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
указывает, что решатель оптимизации нашел решение, которое соответствует конструктивным требованиям в заданных допусках. Для получения дополнительной информации о выводах, отображенных во время оптимизации, смотрите Итеративное Отображение (Optimization Toolbox).
Исследуйте информацию о завершении оптимизации, содержавшуюся в 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);
Simulink.SimulationData.SignalLoggingInfo
| param.Continuous
| sdo.OptimizeOptions
| sdo.SimulationTest
| sdo.getParameterFromModel
| sdo.optimize
| sdo.requirements.StepResponseEnvelope