Funciones de gráfica
Representar una optimización durante la ejecución
Puede representar varias medidas de progreso mientras se ejecuta un solver. Establezca el par nombre-valor PlotFcn
en optimoptions
y especifique una o varias funciones de representación para que el solver las llame en cada iteración. Pase un identificador de función o un arreglo de celdas de identificadores de función.
Hay disponible una variedad de funciones de gráfica predefinidas. Consulte la descripción de la opción PlotFcn
en la página de referencia de la función del solver.
También puede utilizar una función de gráfica escrita de forma personalizada. Escriba un archivo de función con la misma estructura que una función de salida. Para obtener más información sobre esta estructura, consulte Output Function and Plot Function Syntax.
Utilizar una función de gráfica
Este ejemplo muestra cómo utilizar funciones de gráfica para visualizar el progreso del algoritmo fmincon
'interior-point'
. El problema se ha tomado de Resolver un problema no lineal restringido basado en solvers.
Escriba la función objetivo no lineal y la función de restricción, incluyendo sus gradientes. La función objetivo es la función de Rosenbrock.
type rosenbrockwithgrad
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
Guarde este archivo como rosenbrockwithgrad.m
.
La función de restricción es que la solución cumpla norm(x)^2 <= 1
.
type unitdisk2
function [c,ceq,gc,gceq] = unitdisk2(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ]; if nargout > 2 gc = [2*x(1);2*x(2)]; gceq = []; end
Guarde este archivo como unitdisk2.m
.
Cree opciones para el solver que incluyan llamar a tres funciones de gráfica.
options = optimoptions(@fmincon,'Algorithm','interior-point',... 'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,... 'PlotFcn',{@optimplotx,@optimplotfval,@optimplotfirstorderopt});
Cree el punto inicial x0 = [0,0]
y establezca las entradas restantes en vacías ([]
).
x0 = [0,0]; A = []; b = []; Aeq = []; beq = []; lb = []; ub = [];
Llame a fmincon
, incluyendo las opciones.
fun = @rosenbrockwithgrad; nonlcon = @unitdisk2; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
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 = 1×2
0.7864 0.6177