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.
En este ejemplo se muestra cómo resolver un problema no lineal restringido mediante un solucionador.Optimization Toolbox™ En el ejemplo se muestra el flujo de trabajo típico: crear una función objetiva, crear restricciones, resolver el problema y examinar los resultados.
Para conocer el enfoque basado en problemas de este problema, consulte.Resuelva un problema no lineal restringido, basado en problemas
Considere el problema de minimizar La función de Rosenbrock
sobre el, es decir, el disco del radio 1 centrado en el origen.unidad de disco En otras palabras, encuentre x que minimiza la función f(x) sobre el conjunto . Este problema es una minimización de una función no lineal con una restricción no lineal.
Nota
La función de Rosenbrock es una función de prueba estándar en la optimización. Tiene un valor mínimo único de 0 alcanzado en el punto.[1,1]
Encontrar el mínimo es un desafío para algunos algoritmos porque la función tiene un mínimo superficial dentro de un valle profundamente curvado. La solución para este problema no está en el punto porque ese punto no satisface la restricción.[1,1]
Esta figura muestra dos vistas de la función de Rosenbrock en el disco de la unidad. El eje vertical se escala logaritmo; en otras palabras, la trama muestra log(1+f(x)). Las líneas de contorno se encuentran debajo del diagrama de superficie.
Función de Rosenbrock, escalado logaritmo: dos vistas.
La función f(x) se llama la función objetivo es la función que desea minimizar.objective function. La desigualdad se denomina restricciones limitan el conjunto de sobre el que un solucionador busca un mínimo.constraint.x Puede tener cualquier número de restricciones, que son desigualdades o ecuaciones.
Todas las funciones de optimización minimizan una función objetiva.Optimization Toolbox Para maximizar una función, aplique una rutina de optimización para minimizar –.ff Para obtener más detalles sobre cómo maximizar, vea.Maximizando un objetivo
Para utilizar el software, exprese su problema de la siguiente manera:Optimization Toolbox
Defina la función objetiva en el idioma, como un archivo de función o una función anónima.MATLAB® Este ejemplo utiliza un archivo de función.
Defina las restricciones como un archivo independiente o una función anónima.
Un archivo de función es un archivo de texto que contiene comandos y tiene la extensión.MATLAB.m
Cree un archivo de función en cualquier editor de texto o utilice el editor integrado como en este ejemplo.MATLAB
En la línea de comando, escriba:
edit rosenbrock
En el editor, escriba:MATLAB
%% ROSENBROCK(x) expects a two-column matrix and returns a column vector % The output is the Rosenbrock function, which has a minimum at % (1,1) of value 0, and is strictly positive everywhere else. function f = rosenbrock(x) f = 100*(x(:,2) - x(:,1).^2).^2 + (1 - x(:,1)).^2;
Nota
es una función vectorizada que puede calcular valores para varios puntos a la vez.rosenbrock
Ver.Vectorization Una función vectorizada es la mejor para trazar. Para una versión no vectorizada, escriba:
%% ROSENBROCK1(x) expects a two-element vector and returns a scalar % The output is the Rosenbrock function, which has a minimum at % (1,1) of value 0, and is strictly positive everywhere else. function f = rosenbrock1(x) f = 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
Guarde el archivo con el nombre.rosenbrock.m
Las funciones de restricción tienen el formato c(x) ≤ 0 O ceq(x) = 0. La restricción no está en la forma que maneja el solucionador. Para tener la sintaxis correcta, reformule la restricción como .
Además, la sintaxis de las restricciones no lineales devuelve restricciones de igualdad y desigualdad. Este ejemplo incluye solo una restricción de desigualdad, por lo que debe pasar una matriz vacía como la función de restricción de igualdad.[]
ceq
Teniendo en cuenta estas consideraciones, escriba un archivo de función para la restricción no lineal.
Cree un archivo con el nombre que contenga el código siguiente:unitdisk.m
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ];
Guarde el archivo.unitdisk.m
Hay dos maneras de ejecutar la optimización:
Utilice la aplicación de optimización; Ver.Minimice la función de Rosenbrock utilizando la aplicación de optimización
Usar funciones de línea de comandos; Ver.Minimice la función de Rosenbrock en la línea de comando
Nota
La aplicación Optimization advierte que se eliminará en una versión futura. Para alternativas, vea.Optimización de aplicaciones alternativas
Inicie la aplicación Optimization escribiendo en la línea de comandos.optimtool
Para obtener más información acerca de esta herramienta, consulte.Aplicación de optimización
El valor predeterminado,Solver fmincon - Constrained nonlinear minimization
, se selecciona. Este solucionador es apropiado para este problema porque la función de Rosenbrock es no lineal, y el problema tiene una restricción. Para obtener más información sobre cómo elegir un solucionador, consulte.Tabla de decisión de optimización
El valor predeterminado,Algorithm Interior point
, también se selecciona.
En el cuadro, escriba.Objective function@rosenbrock
El carácter @ indica el archivo.identificador de funciónrosenbrock.m
En el cuadro, escriba para especificar el punto inicial donde comienza su búsqueda de un mínimo.Start point[0 0]
fmincon
En el cuadro, escriba el identificador de función de.Nonlinear constraint function@unitdisk
unitdisk.m
Asegúrese de que el panel coincida con esta figura.Problem Setup and Results
En el panel, en (en la parte inferior del panel), seleccioneOptionsDisplay to command window
iterative
de la lista.Level of display (Si no ve la opción, haga clic en.) Display to command window Esta configuración muestra el progreso de la ventana de comandos.
fmincon
En el panel, en, haga clic en.Problem Setup and ResultsRun solver and view resultsStart
El siguiente mensaje aparece en el cuadro: el valor de la función objetiva puede diferir ligeramente, dependiendo de su sistema informático y la versión de.Run solver and view results
Optimization running. Objective function value: 0.04567482475812774 Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
El mensaje le dice que:
La búsqueda de un óptimo restringido finalizó porque la derivada de la función objetiva es casi 0 en las direcciones permitidas por la restricción.
La restricción se satisface con la precisión necesaria.
En la parte inferior del panel, el minimizador aparece debajo.Problem Setup and Resultsx
Final point Para obtener más información sobre los mensajes de salida, consulte.Salir de banderas y salir de mensajes
Puede ejecutar la misma optimización desde la línea de comandos.
Cree opciones que elijan la visualización iterativa y el algoritmo.interior-point
options = optimoptions(@fmincon,... 'Display','iter','Algorithm','interior-point');
Ejecute el solucionador con la estructura, informando tanto de la ubicación del minimizador como del valor obtenido por la función objetiva.fmincon
options
x
fval
[x,fval] = fmincon(@rosenbrock,[0 0],... [],[],[],[],[],[],@unitdisk,options)
Los seis conjuntos de corchetes vacíos representan restricciones opcionales que no se están utilizando en este ejemplo. Consulte las páginas de referencia de función para la sintaxis.fmincon
genera una tabla de iteraciones y los resultados de la optimización.MATLAB
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177 fval = 0.0457
El mensaje le indica que la búsqueda de un óptimo restringido finalizó porque la derivada de la función objetiva es casi 0 en las direcciones permitidas por la restricción, y que la restricción se satisface con la precisión necesaria. Varias frases del mensaje contienen vínculos a más información sobre los términos utilizados en el mensaje. Para obtener más información sobre estos vínculos, consulte.Mensajes de salida mejorados
La tabla de iteración en la ventana de comandos muestra cómo se busca el valor mínimo de la función de Rosenbrock en el disco de la unidad.MATLAB Esta tabla es la misma si utiliza la aplicación de optimización o la línea de comandos. informa de la minimización de la siguiente manera:MATLAB
First-order Norm of Iter F-count f(x) Feasibility optimality step 0 3 1.000000e+00 0.000e+00 2.000e+00 1 13 7.753537e-01 0.000e+00 6.250e+00 1.768e-01 2 18 6.519648e-01 0.000e+00 9.048e+00 1.679e-01 3 21 5.543209e-01 0.000e+00 8.033e+00 1.203e-01 4 24 2.985207e-01 0.000e+00 1.790e+00 9.328e-02 5 27 2.653799e-01 0.000e+00 2.788e+00 5.723e-02 6 30 1.897216e-01 0.000e+00 2.311e+00 1.147e-01 7 33 1.513701e-01 0.000e+00 9.706e-01 5.764e-02 8 36 1.153330e-01 0.000e+00 1.127e+00 8.169e-02 9 39 1.198058e-01 0.000e+00 1.000e-01 1.522e-02 10 42 8.910052e-02 0.000e+00 8.378e-01 8.301e-02 11 45 6.771960e-02 0.000e+00 1.365e+00 7.149e-02 12 48 6.437664e-02 0.000e+00 1.146e-01 5.701e-03 13 51 6.329037e-02 0.000e+00 1.883e-02 3.774e-03 14 54 5.161934e-02 0.000e+00 3.016e-01 4.464e-02 15 57 4.964194e-02 0.000e+00 7.913e-02 7.894e-03 16 60 4.955404e-02 0.000e+00 5.462e-03 4.185e-04 17 63 4.954839e-02 0.000e+00 3.993e-03 2.208e-05 18 66 4.658289e-02 0.000e+00 1.318e-02 1.255e-02 19 69 4.647011e-02 0.000e+00 8.006e-04 4.940e-04 20 72 4.569141e-02 0.000e+00 3.136e-03 3.379e-03 21 75 4.568281e-02 0.000e+00 6.437e-05 3.974e-05 22 78 4.568281e-02 0.000e+00 8.000e-06 1.083e-07 23 81 4.567641e-02 0.000e+00 1.601e-06 2.793e-05 24 84 4.567482e-02 0.000e+00 1.996e-08 6.916e-06
Su tabla puede diferir, dependiendo de la versión de Toolbox y la plataforma informática. La siguiente descripción se aplica a la tabla como se muestra.
La primera columna, etiquetada, es el número de iteración de 0 a 24. se tomaron 24 iteraciones para converger.Iter
fmincon
La segunda columna, etiquetada, informa del número acumulado de veces que se evaluó la función de Rosenbrock.F-count
La última fila muestra una de 84, indicando que evaluó la función de Rosenbrock 84 veces en el proceso de encontrar un mínimo.F-count
fmincon
La tercera columna, etiquetada, muestra el valor de la función objetiva.f(x)
El valor final, 0,04567482, es el mínimo notificado en el cuadro de la aplicación de optimización y al final del mensaje de salida en la ventana de comandos.Run solver and view results
La cuarta columna,, es 0 para todas las iteraciones.Feasibility
Esta columna muestra el valor de la función de restricción en cada iteración en la que la restricción es positiva.unitdisk
Dado que el valor de era negativo en todas las iteraciones, cada iteración satisfizo la restricción.unitdisk
Las otras columnas de la tabla de iteración se describen en.Visualización iterativa