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.

lsqnonlin con un modeloSimulink

Supongamos que desea optimizar los parámetros de control en el modeloSimulink® optsim.mdl. (Este modelo se puede encontrar en la carpeta.optim/optimdemos Tenga en cuenta que debe estar instalado en el sistema para cargar este modelo.)Simulink El modelo incluye una planta de proceso no lineal modelada como un diagrama de bloques.Simulink

Planta con saturación de actuador

La planta es un modelo de tercer orden bajo amortiguado con límites de actuador. Los límites del actuador son un límite de saturación y un límite de velocidad de montón. El límite de saturación del actuador corta los valores de entrada superiores a 2 unidades o menos de – 2 unidades. El límite de velocidad de giro del actuador es de 0,8 unidades/seg. La respuesta de bucle cerrado del sistema a una entrada de paso se muestra en.Respuesta de bucle cerrado Puede ver esta respuesta abriendo el modelo (tipo optsim en la línea de comando o haga clic en el nombre del modelo) y seleccione en el menú.RunSimulation La respuesta se traza en el ámbito.

Respuesta de bucle cerrado

El problema es diseñar un bucle de control de retroalimentación que realiza un seguimiento de una entrada de paso de unidad al sistema. La planta de bucle cerrado se introduce en términos de los bloques en los que la planta y el actuador se han colocado en un bloque jerárquico del subsistema. Un bloque Scope muestra las trayectorias de salida durante el proceso de diseño.

Modelo de bucle cerrado

Una manera de resolver este problema es minimizar el error entre la salida y la señal de entrada. Las variables son los parámetros del controlador de derivativo integral proporcional (PID). Si solo necesita minimizar el error en una unidad de tiempo, sería una función objetiva única. Pero el objetivo es minimizar el error para todos los pasos de tiempo de 0 a 100, produciendo así una función multiobjetivo (una función para cada paso de tiempo).

La rutina se utiliza para realizar un ajuste de mínimos cuadrados en el seguimiento de la salida.lsqnonlin El seguimiento se realiza a través de la función, que devuelve la señal de error, la salida calculada por llamada, menos la señal de entrada.tracklsqyoutsim1 El código está contenido en el archivo, que se muestra a continuación.tracklsqruntracklsq.m

La función configura todos los valores necesarios y, a continuación, llama con la función objetiva, que está anidada dentro.runtracklsqlsqnonlintracklsqruntracklsq La variable pasada define los criterios y las características de visualización.Opcioneslsqnonlin En este caso usted pide la salida, utiliza el algoritmo, y da las tolerancias de terminación para el paso y la función objetiva en el orden de.'levenberg-marquardt'0.001

Para ejecutar la simulación en el modelo, las variables,,, y (y son variables en el bloque Plant) deben definirse todas. , y son las variables a optimizar.optsimKpKiKda1a2a1a2KpKiKd La función está anidada dentro de modo que las variables y se comparten entre las dos funciones.tracklsqruntracklsqa1a2 Las variables y se inicializan en.a1a2runtracklsq

La función objetiva ejecuta la simulación.tracklsq La simulación se puede ejecutar en el espacio de trabajo base o en el espacio de trabajo actual, es decir, el espacio de trabajo de la llamada de función, que en este caso es el espacio de trabajo de.simtracklsq En este ejemplo, la opción está configurada para que se ejecute la simulación en el espacio de trabajo actual.SrcWorkspace'Current'sim La simulación se realiza en segundos.100

Cuando se completa la simulación, el objeto se crea en el espacio de trabajo actual (es decir, el espacio de trabajo de).myobjtracklsq El bloque Outport del modelo de diagrama de bloques coloca el campo del objeto en el espacio de trabajo actual al final de la simulación.yout

A continuación se muestra el código para:runtracklsq

function [Kp,Ki,Kd] = runtracklsq % RUNTRACKLSQ demonstrates using LSQNONLIN with Simulink.  optsim                       % Load the model pid0 = [0.63 0.0504 1.9688]; % Set initial values a1 = 3; a2 = 43;             % Initialize model plant variables options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt',...    'Display','off','StepTolerance',0.001,'OptimalityTolerance',0.001); pid = lsqnonlin(@tracklsq, pid0, [], [], options); Kp = pid(1); Ki = pid(2); Kd = pid(3);       function F = tracklsq(pid)       % Track the output of optsim to a signal of 1                % Variables a1 and a2 are needed by the model optsim.       % They are shared with RUNTRACKLSQ so do not need to be       % redefined here.       Kp = pid(1);       Ki = pid(2);       Kd = pid(3);        % Set sim options and compute function value       myobj = sim('optsim','SrcWorkspace','Current', ...           'StopTime','100');       F = myobj.get('yout') - 1;     end end

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

Cuando se ejecuta, la optimización da la solución para las ganancias proporcionales, integrales y derivadas (,,) del controlador:runtracklsqKpKiKd

[Kp, Ki, Kd] = runtracklsq
Kp =     3.1330  Ki =     0.1465  Kd =    14.3918

Esta es la respuesta de paso de bucle cerrado resultante.

Respuesta de bucle cerrado mediante lsqnonlin

Nota

La llamada a los resultados en una llamada a uno de los solucionadores de la ecuación diferencial ordinaria (ODE).simSimulink Se debe elegir el tipo de solucionador a utilizar. Desde el punto de vista de la optimización, un Solucionador de paso fijo es la mejor opción si eso es suficiente para resolver el ODE. Sin embargo, en el caso de un sistema rígido, un método de paso variable puede ser necesario para resolver el ODE.

La solución numérica producida por un solucionador de paso variable, sin embargo, no es una función suave de los parámetros, debido a los mecanismos de control de tamaño de paso. Esta falta de suavidad puede impedir la convergencia de la rutina de optimización. La falta de suavizado no se introduce cuando se utiliza un solucionador de paso fijo. (Para una explicación más detallada, véase.)[53]

SimulinkDesign Optimization™ se recomienda el software para resolver problemas de optimización multiobjetivo junto con los solucionadores de pasos variables.Simulink Proporciona un cálculo de gradiente numérico especial que funciona con y evita la introducción de un problema de falta de suavidad.Simulink