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.

Cuando el Solver se ejecuta correctamente

¿Qué puede estar mal si el solucionador se realiza correctamente?

Un solucionador puede notificar que una minimización se realizó correctamente y, sin embargo, la solución notificada puede ser incorrecta. Para un ejemplo bastante trivial, considere la posibilidad de minimizar la función f(x) = x3 entre – 2 y 2, comenzando desde el punto:x1/3

options = optimoptions('fmincon','Algorithm','active-set'); ffun = @(x)x^3; xfinal = fmincon(ffun,1/3,[],[],[],[],-2,2,[],options)           Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in feasible directions, to within the default   valueof the function tolerance, and constraints were satisfied  to within the default value of the constraint tolerance.  No active inequalities.  xfinal =  -1.5056e-008

El verdadero mínimo se produce en. proporciona este informe porque la función () es tan plana cerca dex = -2fminconfx x = 0.

Otro problema común es que un solucionador encuentra un mínimo local, pero es posible que desee un mínimo global. Para obtener más información, consulte.Local vs global optima

Lección: Compruebe los resultados, incluso si el solucionador informa de que "encontró" un mínimo local, o "resuelto" una ecuación.

Esta sección proporciona técnicas para verificar los resultados.

1. cambie el punto inicial

El punto inicial puede tener un gran efecto en la solución. Si obtiene las mismas o peores soluciones de varios puntos iniciales, se vuelve más confiado en su solución.

Por ejemplo, minimice f(x) = x3 + x4 a partir del punto 1/4:

ffun = @(x)x^3 + x^4; options = optimoptions('fminunc','Algorithm','quasi-newton'); [xfinal fval] = fminunc(ffun,1/4,options)  Local minimum found.  Optimization completed because the size of the gradient  is less than the default value of the function tolerance.  x =  -1.6764e-008  fval =  -4.7111e-024

Cambie el punto inicial por una pequeña cantidad y el solucionador encontrará una solución mejor:

[xfinal fval] = fminunc(ffun,1/4+.001,options)  Local minimum found.  Optimization completed because the size of the gradient  is less than the default value of the function tolerance.  xfinal =    -0.7500  fval =    -0.1055

es la solución global; a partir de otros puntos no puede mejorar la solución.x = -0.75

Para obtener más información, consulte.Local vs global optima

2. comprobar puntos cercanos

Para ver si hay mejores valores que una solución notificada, evalúe la función objetiva y las restricciones en varios puntos cercanos.

Por ejemplo, con la función objetiva de, y el punto final, calcular para algunos:ffun¿Qué puede estar mal si el solucionador se realiza correctamente?xfinal = -1.5056e-008ffun(xfinal±Δ)Δ

delta = .1; [ffun(xfinal),ffun(xfinal+delta),ffun(xfinal-delta)]  ans =    -0.0000    0.0011   -0.0009

La función objetivo es menor en, por lo que el solucionador informó de una solución incorrecta.ffun(xfinal-Δ)

Un ejemplo menos trivial:

options = optimoptions(@fmincon,'Algorithm','active-set'); lb = [0,-1]; ub = [1,1]; ffun = @(x)(x(1)-(x(1)-x(2))^2); [x fval exitflag] = fmincon(ffun,[1/2 1/3],[],[],[],[],...                            lb,ub,[],options)  Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in feasible directions, to within the default   valueof the function tolerance, and constraints were satisfied  to within the default value of the constraint tolerance.  Active inequalities (to within options.ConstraintTolerance = 1e-006):   lower      upper     ineqlin   ineqnonlin     1                                   x =   1.0e-007 *          0    0.1614  fval =  -2.6059e-016  exitflag =      1

La evaluación en puntos factibles cercanos muestra que la solución no es un verdadero mínimo:ffunx

[ffun([0,.001]),ffun([0,-.001]),...     ffun([.001,-.001]),ffun([.001,.001])]  ans =   1.0e-003 *    -0.0010   -0.0010    0.9960    1.0000

Los dos primeros valores enumerados son más pequeños que el mínimo calculado.fval

Si tiene un Global Optimization Toolbox licencia, puede utilizar la función para comprobar los puntos cercanos.patternsearch

3. Compruebe las funciones de objetivo y restricción

Comprueba la función objetivo y las funciones de restricción para asegurarte de que corresponden al problema que pretendes resolver. Sugerencias:

  • Compruebe la evaluación de su función objetiva en unos pocos puntos.

  • Compruebe que cada restricción de desigualdad tiene el signo correcto.

  • Si ha realizado una maximización, recuerde tomar el negativo de la solución notificada. (Este Consejo asume que maximizó una función minimizando el negativo del objetivo.) Por ejemplo, para maximizar f(x) = x – x2Minimizar g(x) = –x + x2:

    options = optimoptions('fminunc','Algorithm','quasi-newton'); [x fval] = fminunc(@(x)-x+x^2,0,options)  Local minimum found.  Optimization completed because the size of the gradient is  less than the default value of the function tolerance.  x =     0.5000  fval =    -0.2500

    El máximo de es 0,25, el negativo de.ffval

  • Compruebe que un punto no factible no provoque un error en sus funciones; Ver.Las iteraciones pueden violar restricciones