fminimax с моделью Simulink ®В этом примере показано, как настроить параметры модели Simulink. Модель, optsim, включен в optim/demos папки установки MATLAB ®. Модель включает нелинейную технологическую установку, смоделированную как блок-схема Simulink.

Установка с насыщением исполнительного механизма
Установка представляет собой недампированную модель третьего порядка с ограничениями привода. Пределы исполнительного механизма являются пределом насыщения и пределом скорости нарастания. Предел насыщения исполнительного механизма отсекает входные значения, превышающие 2 единицы или менее -2 единиц. Предел скорости вращения привода составляет 0,8 ед./с. Отклик системы по замкнутому контуру на ввод шага показан в отклике по замкнутому контуру. Этот ответ можно увидеть, открыв модель (тип optsim в командной строке или щелкните имя модели) и выберите команду Выполнить (Run) в меню Моделирование (Simulation). Ответ отражает объем работ.

Отклик по замкнутому контуру
Проблема состоит в том, чтобы сконструировать контур управления с обратной связью, который отслеживает ввод шага блока в систему. Установка с замкнутым контуром вводится в виде блоков, где установка и исполнительный механизм расположены в иерархическом блоке подсистемы. Блок «Область» отображает выходные траектории в процессе проектирования.

Модель с замкнутым контуром
Чтобы оптимизировать эту систему, минимизируйте максимальное значение выходного сигнала в любой момент между 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 использовать результат yout из sim, рассчитывается на основе текущих значений PID. Чтобы избежать двойного вызова моделирования, 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.272e-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
Последнее значение в Objective value столбец выходных данных показывает, что максимальное значение для всех временных шагов находится чуть ниже 1. Отклик по замкнутому контуру с этим результатом показан на рисунке Отклик по замкнутому контуру с использованием fminimax.
Этот раствор отличается от раствора, полученного в lsqnonlin с моделью Simulink ®, потому что вы решаете различные проблемные формулировки.

Реакция с замкнутым контуром с использованием fminimax
Следующий код создает runtrackmm функция помощника.
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