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.

Resuelva un problema no lineal restringido, basado en Solver

Problema de optimización típico

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

Formulación del problema: función de Rosenbrock

Considere el problema de minimizar La función de Rosenbrock

f(x)=100(x2x12)2+(1x1)2,

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 x12+x221. 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.

 Código para generar la figura

La función f(x) se llama la función objetivo es la función que desea minimizar.objective function. La desigualdad x12+x221 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

Defina el problema en la sintaxis de Toolbox

Para utilizar el software, exprese su problema de la siguiente manera:Optimization Toolbox

  1. 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.

  2. Defina las restricciones como un archivo independiente o una función anónima.

Archivo de función para la función objetiva

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

  1. En la línea de comando, escriba:

    edit rosenbrock
  2. 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.Vectorización (MATLAB) 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;
  3. Guarde el archivo con el nombre.rosenbrock.m

Archivo de función para Constraint

Las funciones de restricción tienen el formato c(x) ≤ 0 O ceq(x) = 0. La restricción x12+x221 no está en la forma que maneja el solucionador. Para tener la sintaxis correcta, reformule la restricción como x12+x2210.

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.

  1. 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 = [ ];
  2. Guarde el archivo.unitdisk.m

Ejecute la optimización

Hay dos maneras de ejecutar la optimización:

Minimice la función de Rosenbrock utilizando la aplicación de optimización

Nota

La aplicación Optimization advierte que se eliminará en una versión futura. Para alternativas, vea.Optimización de aplicaciones alternativas

  1. 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.

  2. En el cuadro, escriba.Objective function@rosenbrock El carácter @ indica el archivo.identificador de función (MATLAB)rosenbrock.m

  3. En el cuadro, escriba para especificar el punto inicial donde comienza su búsqueda de un mínimo.Start point[0 0]fmincon

  4. En el cuadro, escriba el identificador de función de.Nonlinear constraint function@unitdiskunitdisk.m

    Asegúrese de que el panel coincida con esta figura.Problem Setup and Results

  5. 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

  6. 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.
Optimization Toolbox

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 ResultsxFinal point Para obtener más información sobre los mensajes de salida, consulte.Salir de banderas y salir de mensajes

Minimice la función de Rosenbrock en la línea de comando

Puede ejecutar la misma optimización desde la línea de comandos.

  1. Cree opciones que elijan la visualización iterativa y el algoritmo.interior-point

    options = optimoptions(@fmincon,...     'Display','iter','Algorithm','interior-point');
  2. Ejecute el solucionador con la estructura, informando tanto de la ubicación del minimizador como del valor obtenido por la función objetiva.fminconoptionsxfval

    [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

Interprete el resultado

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.Iterfmincon

  • 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-countfmincon

  • 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

Consulte también

Temas relacionados