exponenta event banner

Используя fminimax с моделью Simulink ®

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

Установка с насыщением исполнительного механизма

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

Отклик по замкнутому контуру

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

Модель с замкнутым контуром

Чтобы оптимизировать эту систему, минимизируйте максимальное значение выходного сигнала в любой момент времени t между 0 и 100. (Напротив, в примере lsqnonlin с моделью Simulink ® решение включает минимизацию ошибки между выходом и входным сигналом.)

Код для этого примера содержится в функции помощника runtrackmm в конце этого примера. Целевая функция - это просто вывод yout возвращено sim команда. Но минимизация максимального выхода на всех шагах времени может заставить выход быть намного ниже единицы в течение некоторых шагов времени. Чтобы сохранить выход выше 0,95 после первых 20 секунд, функция ограничения trackmmcon содержит ограничение yout >= 0.95 от t = 20 кому t = 100. Поскольку ограничения должны быть в форме g≤0, ограничение в функции 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

См. также

Связанные темы