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.
fminimax
SimulinkOtro 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.runtrackmm
yout
sim
(Simulink) 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.95
20
trackmmcon
yout >= 0.95
t=20
t=100
Dado que las restricciones deben estar en el formulario, la restricción en la función es.g ≤ 0
g = -yout(20:100)+.95
Ambos y utilizar el resultado de, calculado a partir de los valores actuales de PID.trackmmobj
trackmmcon
yout
sim
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.runtrackmm
yout
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.runtrackmm
runtrackmm.m
MATLAB®
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 value
0.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