fminimax
с моделью Simulink®В этом примере показано, как настроить параметры модели Simulink. Модель, optsim
, поставки в optim
/demos
папка вашей установки MATLAB®. Модель включает нелинейный обрабатывающий завод, смоделированный как Диаграмму Simulink.
Объект с насыщением привода
Объект под - ослабленная модель третьего порядка с пределами привода. Пределы привода являются пределом насыщения и пределом скорости нарастания. Предел насыщения привода отключает входные значения, больше, чем 2 модуля или меньше чем-2 модуля. Предел скорости нарастания привода является 0,8 модулями/секунда. Ответ с обратной связью системы к входу шага показывают в Ответе С обратной связью. Вы видите, этот ответ путем открытия модели (введите optsim
в командной строке или нажатии кнопки имя модели), и Run выбора в меню Simulation. Графики отклика к осциллографу.
Ответ с обратной связью
Проблема состоит в том, чтобы спроектировать цикл управления с обратной связью, который отслеживает модульный вход шага к системе. Объект с обратной связью вводится в терминах блоков, куда объект и привод были помещены в иерархический блок Subsystem. Блок Scope отображает выходные траектории во время процесса проектирования.
Модель с обратной связью
Чтобы оптимизировать эту систему, минимизируйте максимальное значение выхода в любое время между 0 и 100. (В отличие от этого в lsqnonlin с Simulink® Моделируют решение, включает минимизацию ошибки между выходом и входным сигналом.)
Код для этого примера содержится в функциональном runtrackmm
в конце этого примера. Целевой функцией является просто выход yout
возвращенный sim
команда. Но минимизация максимального выхода на всех временных шагах может обеспечить выход, чтобы быть далекой ниже единицы, в течение некоторого времени продвигается. Чтобы сохранить выход выше 0.95 после первых 20 секунд, ограничение функционирует trackmmcon
содержит ограничение yout >= 0.95
от t = 20
к t = 100
. Поскольку ограничения должны быть в форме , ограничением в функции является g = -yout(20:100) + 0.95
.
Оба trackmmobj
и trackmmcon
используйте результат ваш от sim
, вычисленный от текущих значений ПИДа. Постараться не вызывать симуляцию дважды, runtrackmm
имеет вложенные функции так, чтобы значение yout
совместно используется ограничительными функциями и целью. Симуляция называется только, когда текущая точка изменяется.
Вызовите runtrackmm
.
[Kp,Ki,Kd] = runtrackmm
Objective Max Line search Directional Iter F-count value constraint steplength derivative Procedure 0 5 0 1.11982
1 11 1.184 0.07978 1 0.482
2 17 1.012 0.04285 1 -0.236
3 23 0.9996 0.00397 1 -0.0195 Hessian modified twice
4 29 0.9996 3.464e-05 1 0.000687 Hessian modified
5 35 0.9996 2.273e-09 1 -0.0175 Hessian modified twice Local minimum possible. Constraints satisfied. fminimax stopped because the predicted change in the objective function is less than the value of the function tolerance and constraints are satisfied to within the value of the constraint tolerance.
Kp = 0.5894
Ki = 0.0605
Kd = 5.5295
Последнее значение в Объективном столбце значений выхода показывает, что максимальное значение для все время шагов только находится под 1. Ответ замкнутого цикла этим результатом является показанным на рисунке Ответом С обратной связью Используя fminimax.
Это решение отличается от решения, полученного в lsqnonlin с Моделью Simulink®, потому что вы решаете различные формулировки задачи.
Ответ с обратной связью Используя fminimax
function [Kp, Ki, Kd] = runtrackmm optsim % initialize Simulink(R) pid0 = [0.63 0.0504 1.9688]; % a1, a2, yout are shared with TRACKMMOBJ and TRACKMMCON a1 = 3; a2 = 43; % Initialize plant variables in model yout = []; % Give yout an initial value pold = []; % tracks last pid opt = simset('solver','ode5','SrcWorkspace','Current'); options = optimset('Display','iter',... 'TolX',0.001,'TolFun',0.001); pid = fminimax(@trackmmobj,pid0,[],[],[],[],[],[],... @trackmmcon,options); Kp = pid(1); Ki = pid(2); Kd = pid(3); function F = trackmmobj(pid) % Track the output of optsim to a signal of 1. % Variables a1 and a2 are shared with RUNTRACKMM. % Variable yout is shared with RUNTRACKMM and % RUNTRACKMMCON. updateIfNeeded(pid) F = yout; end function [c,ceq] = trackmmcon(pid) % Track the output of optsim to a signal of 1. % Variable yout is shared with RUNTRACKMM and % TRACKMMOBJ updateIfNeeded(pid) c = -yout(20:100)+.95; ceq=[]; end function updateIfNeeded(pid) if ~isequal(pid,pold) % compute only if needed Kp = pid(1); Ki = pid(2); Kd = pid(3); [~,~,yout] = sim('optsim',[0 100],opt); pold = pid; end end end