Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

El uso con un modelofminimaxSimulink

Otro enfoque para optimizar los parámetros de control en el modelo que se muestra en es utilizar la función.Simulink®Planta con saturación de actuadorfminimax En este caso, en lugar de minimizar el error entre la salida y la señal de entrada, se minimiza el valor máximo de la salida en cualquier momento entre 0 y 100.t

El código de este ejemplo, que se muestra a continuación, está contenido en la función, en la que la función objetiva es simplemente la salida devuelta por el comando.runtrackmmyoutsim Pero minimizar la salida máxima en todos los pasos de tiempo podría forzar la salida a estar muy por debajo de la unidad para algunos pasos de tiempo. Para mantener la salida anterior después de los primeros segundos, la función de restricción contiene la restricción de.0.9520trackmmconyout >= 0.95t=20t=100 Dado que las restricciones deben estar en el formulario, la restricción en la función es.g ≤ 0g = -yout(20:100)+.95

Ambos y utilizar el resultado de, calculado a partir de los valores actuales de PID.trackmmobjtrackmmconyoutsim Para evitar llamar a la simulación dos veces, tiene funciones anidadas para que el valor de se comparte entre las funciones objetivo y restricción.runtrackmmyout La simulación se llama sólo cuando cambia el punto actual.

A continuación se muestra el código para: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

Copie el código de un archivo denominado, colocado en una carpeta de la ruta de acceso.runtrackmmruntrackmm.mMATLAB®

Al ejecutar el código, devuelve los siguientes resultados:

[Kp,Ki,Kd] = runtrackmm
Done initializing optsim.

                  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.9995      0.007058            1         -0.0186    Hessian modified twice  
    4     29         0.9997     9.707e-07            1         0.00716    Hessian modified  

Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.

Kp =
    0.5910

Ki =
    0.0606

Kd =
    5.5383

El último valor de la columna de la salida muestra que el valor máximo para todos los pasos de tiempo es.Objective value0.9997 La respuesta de bucle cerrado con este resultado se muestra en la figura.Respuesta de bucle cerrado mediante fminimax

Esta solución difiere de la solución obtenida porque está resolviendo diferentes formulaciones problemáticas.lsqnonlin con un modeloSimulink

Respuesta de bucle cerrado mediante fminimax

Consulte también

Temas relacionados