solve
Resolver un problema de optimización o un problema de ecuación
Sintaxis
Descripción
Utilice solve
para encontrar la solución a un problema de optimización o un problema de ecuación.
Sugerencia
Para ver el flujo de trabajo completo, consulte Flujo de trabajo de optimización basada en problemas o Flujo de trabajo basado en problemas para resolver ecuaciones.
modifica el proceso de resolución utilizando uno o más argumentos de par nombre-valor además de los argumentos de entrada de sintaxis previas.sol
= solve(___,Name,Value
)
[
también devuelve un indicador de salida que describe la condición de salida, una estructura sol
,fval
,exitflag
,output
,lambda
] = solve(___)output
que contiene información adicional sobre el proceso de resolución y, para problemas de optimización no enteros, una estructura de multiplicadores de Lagrange.
Ejemplos
Resolver un problema de programación lineal
Resuelva un problema de programación lineal definido por un problema de optimización.
x = optimvar('x'); y = optimvar('y'); prob = optimproblem; prob.Objective = -x - y/3; prob.Constraints.cons1 = x + y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob)
Solving problem using linprog. Optimal solution found.
sol = struct with fields:
x: 0.6667
y: 1.3333
Resolver un problema de programación no lineal utilizando un enfoque basado en problemas
Encuentre un mínimo de la función peaks
, que se incluye en MATLAB®, en la región . Para hacerlo, cree las variables de optimización x
e y
.
x = optimvar('x'); y = optimvar('y');
Cree un problema de optimización con peaks
como la función objetivo.
prob = optimproblem("Objective",peaks(x,y));
Incluya la restricción como una desigualdad en las variables de optimización.
prob.Constraints = x^2 + y^2 <= 4;
Establezca el punto inicial para x
en 1 y para y
en –1 y resuelva el problema.
x0.x = 1; x0.y = -1; sol = solve(prob,x0)
Solving problem using fmincon. 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.
sol = struct with fields:
x: 0.2283
y: -1.6255
Las funciones no compatibles requieren fcn2optimexpr
Si las funciones objetivo o las funciones de restricción no lineal no están totalmente compuestas por funciones elementales, deberá convertir las funciones en expresiones de optimización utilizando fcn2optimexpr
. Consulte Convert Nonlinear Function to Optimization Expression y Supported Operations for Optimization Variables and Expressions.
Para convertir el presente ejemplo:
convpeaks = fcn2optimexpr(@peaks,x,y); prob.Objective = convpeaks; sol2 = solve(prob,x0)
Solving problem using fmincon. 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.
sol2 = struct with fields:
x: 0.2283
y: -1.6255
Copyright 2018–2020 The MathWorks, Inc.
Resolver un programa lineal de enteros mixtos comenzando por el punto inicial
Compare el número de pasos para resolver un problema de programación de enteros tanto con un punto factible inicial como sin él. El problema tiene ocho variables de enteros y cuatro restricciones de igualdad lineales, y todas las variables están restringidas para ser positivas.
prob = optimproblem; x = optimvar('x',8,1,'LowerBound',0,'Type','integer');
Cree cuatro restricciones de igualdad lineales e inclúyalas en el problema.
Aeq = [22 13 26 33 21 3 14 26 39 16 22 28 26 30 23 24 18 14 29 27 30 38 26 26 41 26 28 36 18 38 16 26]; beq = [ 7872 10466 11322 12058]; cons = Aeq*x == beq; prob.Constraints.cons = cons;
Cree una función objetivo e inclúyala en el problema.
f = [2 10 13 17 7 5 7 3]; prob.Objective = f*x;
Resuelva el problema sin utilizar un punto inicial y examine la visualización para ver el número de nodos de ramificación y acotación.
[x1,fval1,exitflag1,output1] = solve(prob);
Solving problem using intlinprog. LP: Optimal objective value is 1554.047531. Cut Generation: Applied 8 strong CG cuts. Lower bound is 1591.000000. Branch and Bound: nodes total num int integer relative explored time (s) solution fval gap (%) 10000 0.40 0 - - 18025 0.67 1 2.906000e+03 4.509804e+01 21857 0.85 2 2.073000e+03 2.270974e+01 23544 0.92 3 1.854000e+03 1.180593e+01 24097 0.95 3 1.854000e+03 1.617251e+00 24293 0.96 3 1.854000e+03 0.000000e+00 Optimal solution found. Intlinprog stopped because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
Encuentre la solución utilizando un punto factible inicial y compare.
x0.x = [8 62 23 103 53 84 46 34]'; [x2,fval2,exitflag2,output2] = solve(prob,x0);
Solving problem using intlinprog. LP: Optimal objective value is 1554.047531. Cut Generation: Applied 8 strong CG cuts. Lower bound is 1591.000000. Relative gap is 59.20%. Branch and Bound: nodes total num int integer relative explored time (s) solution fval gap (%) 3627 0.20 2 2.154000e+03 2.593968e+01 5844 0.29 3 1.854000e+03 1.180593e+01 6204 0.31 3 1.854000e+03 1.455526e+00 6400 0.31 3 1.854000e+03 0.000000e+00 Optimal solution found. Intlinprog stopped because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
fprintf('Without an initial point, solve took %d steps.\nWith an initial point, solve took %d steps.',output1.numnodes,output2.numnodes)
Without an initial point, solve took 24293 steps. With an initial point, solve took 6400 steps.
Proporcionar un punto inicial no siempre mejora el problema. Para este problema, utilizar un punto inicial ahorra tiempo y pasos computacionales. Sin embargo, para algunos problemas, un punto inicial puede provocar que solve
necesite más pasos.
Especificar puntos de inicio y valores para surrogateopt
, basado en problemas
Para algunos solvers, puede pasar los valores de la función objetivo y la función de restricción, si los hay, a solve
en el argumento x0
. Esto puede ahorrar tiempo en el solver. Pase un vector de objetos OptimizationValues
. Cree este vector con la función optimvalues
.
Los solvers que pueden utilizar los valores de la función objetivo son los siguientes:
ga
gamultiobj
paretosearch
surrogateopt
Los solvers que pueden utilizar los valores de la función de restricción no lineal son los siguientes:
paretosearch
surrogateopt
Por ejemplo, minimice la función peaks
utilizando surrogateopt
, comenzando por valores de una cuadrícula de puntos iniciales. Cree una cuadrícula desde –10 a 10 en la variable x
y de –5/2
a 5/2
en la variable y
con un espaciado de 1/2. Calcule los valores de la función objetivo en los puntos iniciales.
x = optimvar("x",LowerBound=-10,UpperBound=10); y = optimvar("y",LowerBound=-5/2,UpperBound=5/2); prob = optimproblem("Objective",peaks(x,y)); xval = -10:10; yval = (-5:5)/2; [x0x,x0y] = meshgrid(xval,yval); peaksvals = peaks(x0x,x0y);
Pase los valores en el argumento x0
mediante optimvalues
. Esto ahorra tiempo para solve
, ya que solve
no necesita calcular los valores. Pase los valores como vectores fila.
x0 = optimvalues(prob,'x',x0x(:)','y',x0y(:)',... "Objective",peaksvals(:)');
Resuelva el problema utilizando surrogateopt
con los valores iniciales.
[sol,fval,eflag,output] = solve(prob,x0,Solver="surrogateopt")
Solving problem using surrogateopt.
surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
sol = struct with fields:
x: 0.2283
y: -1.6256
fval = -6.5511
eflag = SolverLimitExceeded
output = struct with fields:
elapsedtime: 15.0098
funccount: 200
constrviolation: 0
ineq: [1x1 struct]
rngstate: [1x1 struct]
message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ...'
solver: 'surrogateopt'
Minimizar una función no lineal con un solver de inicio múltiple, basado en problemas
Encuentre un mínimo local de la función peaks
en el rango comenzando por el punto [–1,2]
.
x = optimvar("x",LowerBound=-5,UpperBound=5); y = optimvar("y",LowerBound=-5,UpperBound=5); x0.x = -1; x0.y = 2; prob = optimproblem(Objective=peaks(x,y)); opts = optimoptions("fmincon",Display="none"); [sol,fval] = solve(prob,x0,Options=opts)
sol = struct with fields:
x: -3.3867
y: 3.6341
fval = 1.1224e-07
Intente encontrar una solución mejor con el solver GlobalSearch
. Este solver ejecuta fmincon
varias veces, lo que puede proporcionar una solución mejor.
ms = GlobalSearch; [sol2,fval2] = solve(prob,x0,ms)
Solving problem using GlobalSearch. GlobalSearch stopped because it analyzed all the trial points. All 15 local solver runs converged with a positive local solver exit flag.
sol2 = struct with fields:
x: 0.2283
y: -1.6255
fval2 = -6.5511
GlobalSearch
encuentra una solución con un valor mejor (más bajo) de la función objetivo. El mensaje de salida muestra que fmincon
, el solver local, se ejecuta 15 veces. La solución devuelta tiene un valor de la función objetivo de aproximadamente –6,5511, que es inferior al valor de la primera solución, 1,1224e–07.
Resolver un problema de programación de enteros con opciones no predeterminadas
Resuelva el problema
sin mostrar una visualización iterativa.
x = optimvar('x',2,1,'LowerBound',0); x3 = optimvar('x3','Type','integer','LowerBound',0,'UpperBound',1); prob = optimproblem; prob.Objective = -3*x(1) - 2*x(2) - x3; prob.Constraints.cons1 = x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; options = optimoptions('intlinprog','Display','off'); sol = solve(prob,'Options',options)
sol = struct with fields:
x: [2x1 double]
x3: 1
Estudie la solución.
sol.x
ans = 2×1
0
5.5000
sol.x3
ans = 1
Utilizar intlinprog
para resolver un programa lineal
Restrinja solve
para que utilice intlinprog
como el solver para un problema de programación lineal.
x = optimvar('x'); y = optimvar('y'); prob = optimproblem; prob.Objective = -x - y/3; prob.Constraints.cons1 = x + y <= 2; prob.Constraints.cons2 = x + y/4 <= 1; prob.Constraints.cons3 = x - y <= 2; prob.Constraints.cons4 = x/4 + y >= -1; prob.Constraints.cons5 = x + y >= 1; prob.Constraints.cons6 = -x + y <= 2; sol = solve(prob,'Solver', 'intlinprog')
Solving problem using intlinprog. LP: Optimal objective value is -1.111111. Optimal solution found. No integer variables specified. Intlinprog solved the linear problem.
sol = struct with fields:
x: 0.6667
y: 1.3333
Devolver todas las salidas
Resuelva el problema de programación lineal de enteros mixtos descrito en Resolver un problema de programación de enteros con opciones no predeterminadas y examine todos los datos de salida.
x = optimvar('x',2,1,'LowerBound',0); x3 = optimvar('x3','Type','integer','LowerBound',0,'UpperBound',1); prob = optimproblem; prob.Objective = -3*x(1) - 2*x(2) - x3; prob.Constraints.cons1 = x(1) + x(2) + x3 <= 7; prob.Constraints.cons2 = 4*x(1) + 2*x(2) + x3 == 12; [sol,fval,exitflag,output] = solve(prob)
Solving problem using intlinprog. LP: Optimal objective value is -12.000000. Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
sol = struct with fields:
x: [2x1 double]
x3: 1
fval = -12
exitflag = OptimalSolution
output = struct with fields:
relativegap: 0
absolutegap: 0
numfeaspoints: 1
numnodes: 0
constrviolation: 0
message: 'Optimal solution found....'
solver: 'intlinprog'
Para un problema sin restricciones de enteros, también puede obtener una estructura de multiplicadores de Lagrange no vacía como quinta salida.
Visualizar una solución con variables de índice
Cree y resuelva un problema de optimización utilizando variables de índice con nombre. El problema consiste en maximizar el flujo de fruta ponderado según beneficios a varios aeropuertos, sujeto a restricciones en los flujos ponderados.
rng(0) % For reproducibility p = optimproblem('ObjectiveSense', 'maximize'); flow = optimvar('flow', ... {'apples', 'oranges', 'bananas', 'berries'}, {'NYC', 'BOS', 'LAX'}, ... 'LowerBound',0,'Type','integer'); p.Objective = sum(sum(rand(4,3).*flow)); p.Constraints.NYC = rand(1,4)*flow(:,'NYC') <= 10; p.Constraints.BOS = rand(1,4)*flow(:,'BOS') <= 12; p.Constraints.LAX = rand(1,4)*flow(:,'LAX') <= 35; sol = solve(p);
Solving problem using intlinprog. LP: Optimal objective value is -1027.472366. Heuristics: Found 1 solution using ZI round. Upper bound is -1027.233133. Relative gap is 0.00%. Optimal solution found. Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).
Encuentre el flujo óptimo de naranjas y bayas a Nueva York y Los Ángeles.
[idxFruit,idxAirports] = findindex(flow, {'oranges','berries'}, {'NYC', 'LAX'})
idxFruit = 1×2
2 4
idxAirports = 1×2
1 3
orangeBerries = sol.flow(idxFruit, idxAirports)
orangeBerries = 2×2
0 980.0000
70.0000 0
Esta visualización indica que no se envían naranjas a NYC
, se envían 70 bayas a NYC
, se envían 980 naranjas a LAX
y no se envían bayas a LAX
.
Enumere el flujo óptimo de las siguientes frutas:
Fruit Airports
----- --------
Berries NYC
Apples BOS
Oranges LAX
idx = findindex(flow, {'berries', 'apples', 'oranges'}, {'NYC', 'BOS', 'LAX'})
idx = 1×3
4 5 10
optimalFlow = sol.flow(idx)
optimalFlow = 1×3
70.0000 28.0000 980.0000
Esta visualización indica que se envían 70 bayas a NYC
, se envían 28 manzanas a BOS
y se envían 980 naranjas a LAX
.
Resolver un sistema de ecuaciones no lineal, basado en problemas
Para resolver el sistema de ecuaciones no lineal
utilizando el enfoque basado en problemas, defina primero x
como una variable de optimización de dos elementos.
x = optimvar('x',2);
Cree la primera ecuación como una expresión de igualdad de optimización.
eq1 = exp(-exp(-(x(1) + x(2)))) == x(2)*(1 + x(1)^2);
De forma similar, cree la segunda ecuación como una expresión de igualdad de optimización.
eq2 = x(1)*cos(x(2)) + x(2)*sin(x(1)) == 1/2;
Cree un problema de ecuación y coloque las ecuaciones en el problema.
prob = eqnproblem; prob.Equations.eq1 = eq1; prob.Equations.eq2 = eq2;
Revise el problema.
show(prob)
EquationProblem : Solve for: x eq1: exp((-exp((-(x(1) + x(2)))))) == (x(2) .* (1 + x(1).^2)) eq2: ((x(1) .* cos(x(2))) + (x(2) .* sin(x(1)))) == 0.5
Resuelva el problema comenzando por el punto [0,0]
. Para el enfoque basado en problemas, especifique el punto inicial como una estructura, con los nombres de variable como campos de la estructura. Para este problema solo existe una variable, x
.
x0.x = [0 0]; [sol,fval,exitflag] = solve(prob,x0)
Solving problem using fsolve. Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
sol = struct with fields:
x: [2x1 double]
fval = struct with fields:
eq1: -2.4070e-07
eq2: -3.8255e-08
exitflag = EquationSolved
Visualice el punto de solución.
disp(sol.x)
0.3532 0.6061
Las funciones no compatibles requieren fcn2optimexpr
Si las funciones de la ecuación no están compuestas por funciones elementales, deberá convertir las funciones en expresiones de optimización utilizando fcn2optimexpr
. Para el presente ejemplo:
ls1 = fcn2optimexpr(@(x)exp(-exp(-(x(1)+x(2)))),x); eq1 = ls1 == x(2)*(1 + x(1)^2); ls2 = fcn2optimexpr(@(x)x(1)*cos(x(2))+x(2)*sin(x(1)),x); eq2 = ls2 == 1/2;
Consulte Supported Operations for Optimization Variables and Expressions y Convert Nonlinear Function to Optimization Expression.
Argumentos de entrada
prob
— Problema de optimización o problema de ecuación
Objeto OptimizationProblem
| Objeto EquationProblem
Problema de optimización o problema de ecuación, especificado como objeto OptimizationProblem
u objeto EquationProblem
. Cree un problema de optimización con optimproblem
; cree un problema de ecuación con eqnproblem
.
Advertencia
El enfoque basado en problemas no es compatible con valores complejos en una función objetivo, igualdades no lineales o desigualdades no lineales. Si el cálculo de una función tiene un valor complejo, incluso como valor intermedio, el resultado final puede ser incorrecto.
Ejemplo: prob = optimproblem; prob.Objective = obj; prob.Constraints.cons1 = cons1;
Ejemplo: prob = eqnproblem; prob.Equations = eqs;
x0
— Punto inicial
estructura | vector de objetos OptimizationValues
Punto inicial, especificado como estructura con nombres de campo idénticos a los nombres de variables de prob
.
Para algunos solvers de Global Optimization Toolbox, x0
puede ser un vector de objetos OptimizationValues
que representa varios puntos iniciales. Cree los puntos utilizando la función optimvalues
. Estos solvers son:
ga
(Global Optimization Toolbox),gamultiobj
(Global Optimization Toolbox),paretosearch
(Global Optimization Toolbox) yparticleswarm
(Global Optimization Toolbox). Estos solvers aceptan varios puntos de inicio como miembros de la población inicial.MultiStart
(Global Optimization Toolbox). Este solver acepta varios puntos iniciales para un solver local comofmincon
.surrogateopt
(Global Optimization Toolbox). Este solver acepta varios puntos iniciales para ayudar a crear un sustituto inicial.
Para ver un ejemplo donde se utiliza x0
con variables de índice con nombre, consulte Create Initial Point for Optimization with Named Index Variables.
Ejemplo: Si prob
tiene variables llamadas x
e y
: x0.x = [3,2,17]; x0.y = [pi/3,2*pi/3]
.
Tipos de datos: struct
ms
— Solver de inicio múltiple
Objeto MultiStart
| Objeto GlobalSearch
Solver de inicio múltiple, especificado como objeto MultiStart
(Global Optimization Toolbox) u objeto GlobalSearch
(Global Optimization Toolbox). Cree ms
utilizando los comandos MultiStart
o GlobalSearch
.
En este momento GlobalSearch
solo es compatible con el solver local fmincon
y MultiStart
solo es compatible con los solvers locales fmincon
, fminunc
y lsqnonlin
.
Ejemplo: ms = MultiStart;
Ejemplo: ms = GlobalSearch(FunctionTolerance=1e-4);
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN
, donde Name
es el nombre del argumento y Value
el valor correspondiente. Los argumentos nombre-valor deben aparecer tras otros argumentos, aunque no importa el orden de los pares.
En versiones anteriores a R2021a, utilice comas para separar cada nombre y valor, y encierre Name
entre comillas.
Ejemplo: solve(prob,'Options',opts)
MinNumStartPoints
— Número mínimo de puntos iniciales para MultiStart
20 (predeterminado) | entero positivo
Número mínimo de puntos iniciales para MultiStart
(Global Optimization Toolbox), especificado como entero positivo. Este argumento se aplica únicamente cuando llama a solve
con el argumento ms
. solve
utiliza todos los valores de x0
como puntos de inicio. Si MinNumStartPoints
es mayor que el número de valores de x0
, solve
genera más puntos de inicio de forma uniforme y aleatoria dentro de los límites del problema. Si un componente está desacotado, solve
genera puntos utilizando los límites artificiales predeterminados para MultiStart
.
Ejemplo: solve(prob,x0,ms,MinNumStartPoints=50)
Tipos de datos: double
Options
— Opciones de optimización
objeto creado por optimoptions
| estructura de opciones
Opciones de optimización, especificadas como objeto creado por optimoptions
o estructura de opciones como la creada por optimset
.
Internamente la función solve
llama a un solver relevante, como se detalla en la referencia del argumento 'solver'
. Asegúrese de que options
es compatible con el solver. Por ejemplo, intlinprog
no permite que las opciones sean una estructura y lsqnonneg
no permite que las opciones sean un objeto.
Para sugerencias sobre ajustes de opciones para mejorar una solución intlinprog
o la velocidad de una solución, consulte Tuning Integer Linear Programming. Para linprog
, el algoritmo 'dual-simplex'
predeterminado es normalmente rápido y eficiente en lo que se refiere a la memoria. Ocasionalmente, linprog
resuelve un problema grande más rápidamente cuando la opción Algorithm
es 'interior-point'
. Para sugerencias sobre ajustes de opciones para mejorar la solución a un problema no lineal, consulte Optimization Options in Common Use: Tuning and Troubleshooting y Mejorar los resultados.
Ejemplo: options = optimoptions('intlinprog','Display','none')
Solver
— Solver de optimización
'intlinprog'
| 'linprog'
| 'lsqlin'
| 'lsqcurvefit'
| 'lsqnonlin'
| 'lsqnonneg'
| 'quadprog'
| 'fminunc'
| 'fmincon'
| 'fzero'
| 'fsolve'
| 'coneprog'
| 'ga'
| 'gamultiobj'
| 'paretosearch'
| 'patternsearch'
| 'particleswarm'
| 'surrogateopt'
| 'simulannealbnd'
Solver de optimización, especificado como nombre de un solver de la lista. En el caso de los problemas de optimización, esta tabla contiene los solvers disponibles para cada tipo de problema, incluyendo solvers de Global Optimization Toolbox. Los detalles de los problemas de ecuación aparecen debajo de los detalles del solver de optimización.
Para convertir problemas no lineales con restricciones de enteros mediante prob2struct
, la estructura de problema resultante puede depender del solver elegido. Si no cuenta con licencia para Global Optimization Toolbox, deberá especificar el solver. Consulte Integer Constraints in Nonlinear Problem-Based Optimization.
El solver predeterminado para cada tipo de problema de optimización se enumera aquí.
Tipo de problema | Solver predeterminado |
---|---|
Programación lineal (LP) | linprog |
Programación lineal de enteros mixtos (MILP) | intlinprog |
Programación cuadrática (QP) | quadprog |
Programación de cono de segundo orden (SOCP) | coneprog |
Mínimos cuadrados lineales | lsqlin |
Mínimos cuadrados no lineales | lsqnonlin |
Programación no lineal (NLP) |
|
Programación no lineal de enteros mixtos (MINLP) | ga (Global Optimization Toolbox) |
Multiobjetivo | gamultiobj (Global Optimization Toolbox) |
En esta tabla, indica que el solver está disponible para el tipo de problema, x indica que el solver no está disponible.
Tipo de problema | LP | MILP | QP | SOCP | Mínimos cuadrados lineales | Mínimos cuadrados no lineales | NLP | MINLP |
---|---|---|---|---|---|---|---|---|
Solver | ||||||||
linprog | | x | x | x | x | x | x | x |
intlinprog | | | x | x | x | x | x | x |
quadprog | | x | | | | x | x | x |
coneprog | | x | x | | x | x | x | x |
lsqlin | x | x | x | x | | x | x | x |
lsqnonneg | x | x | x | x | | x | x | x |
lsqnonlin | x | x | x | x | | | x | x |
fminunc | | x | | x | | | | x |
fmincon | | x | | | | | | x |
patternsearch (Global Optimization Toolbox) | | x | | | | | | x |
ga (Global Optimization Toolbox) | | | | | | | | |
particleswarm (Global Optimization Toolbox) | | x | | x | | | | x |
simulannealbnd (Global Optimization Toolbox) | | x | | x | | | | x |
surrogateopt (Global Optimization Toolbox) | | | | | | | | |
gamultiobj (Global Optimization Toolbox) | | | | | | | | |
paretosearch (Global Optimization Toolbox) | | x | | | | | | x |
Nota
Si elige lsqcurvefit
como solver para un problema de mínimos cuadrados, solve
utiliza lsqnonlin
. Los solvers lsqcurvefit
y lsqnonlin
son idénticos para solve
.
Precaución
En problemas de maximización (prob.ObjectiveSense
es "max"
o "maximize"
), no especifique un solver de mínimos cuadrados (uno con un nombre que comience por lsq
). Si lo hace, solve
genera un error porque estos solvers no pueden realizar una maximización.
Para resolución de ecuaciones, esta tabla contiene los solvers disponibles para cada tipo de problema. En esta tabla,
* indica el solver predeterminado para el tipo de problema.
Y indica un solver disponible.
N indica un solver no disponible.
Solvers compatibles para ecuaciones
Tipo de ecuación | lsqlin | lsqnonneg | fzero | fsolve | lsqnonlin |
---|---|---|---|---|---|
Lineal | * | N | Y (solo escalar) | Y | Y |
Lineal con límites | * | Y | N | N | Y |
Escalar no lineal | N | N | * | Y | Y |
Sistema no lineal | N | N | N | * | Y |
Sistema no lineal con límites | N | N | N | N | * |
Ejemplo: 'intlinprog'
Tipos de datos: char
| string
ObjectiveDerivative
— Indicación para utilizar diferenciación automática para la función objetivo
'auto'
(predeterminado) | 'auto-forward'
| 'auto-reverse'
| 'finite-differences'
Indicación para utilizar diferenciación automática (AD) para la función objetivo no lineal, especificada como 'auto'
(utilice AD si es posible), 'auto-forward'
(utilice AD progresiva si es posible), 'auto-reverse'
(utilice AD inversa si es posible), o 'finite-differences'
(no utilice AD). Las opciones que incluyen auto
provocan que el solver subyacente utilice información de gradiente al resolver el problema, siempre que sea compatible con la función objetivo, como se describe en Supported Operations for Optimization Variables and Expressions. Para ver un ejemplo, consulte Effect of Automatic Differentiation in Problem-Based Optimization.
Los solvers eligen de forma predeterminada el siguiente tipo de AD:
Para una función objetivo no lineal general,
fmincon
recurre de forma predeterminada a la AD inversa para la función objetivo.fmincon
recurre de forma predeterminada a la AD inversa para la función de restricción no lineal cuando el número de restricciones no lineales es inferior al número de variables. De lo contrario,fmincon
recurre de forma predeterminada a la AD progresiva para la función de restricción no lineal.Para una función objetivo no lineal general,
fminunc
recurre de forma predeterminada a la AD inversa.Para una función objetivo de mínimos cuadrados,
fmincon
yfminunc
recurren de forma predeterminada a la AD progresiva para la función objetivo. Para ver la definición de una función objetivo de mínimos cuadrados basada en problemas, consulte Write Objective Function for Problem-Based Least Squares.lsqnonlin
recurre de forma predeterminada a la AD progresiva cuando el número de elementos del vector objetivo es mayor que o igual al número de variables. De lo contrario,lsqnonlin
recurre de forma predeterminada a la AD inversa.fsolve
recurre de forma predeterminada a la AD progresiva cuando el número de ecuaciones es mayor que o igual al número de variables. De lo contrario,fsolve
recurre de forma predeterminada a la AD inversa.
Ejemplo: 'finite-differences'
Tipos de datos: char
| string
ConstraintDerivative
— Indicación para utilizar diferenciación automática para funciones de restricción
'auto'
(predeterminado) | 'auto-forward'
| 'auto-reverse'
| 'finite-differences'
Indicación para utilizar diferenciación automática (AD) para funciones de restricción no lineal, especificada como 'auto'
(utilice AD si es posible), 'auto-forward'
(utilice AD progresiva si es posible), 'auto-reverse'
(utilice AD inversa si es posible), o 'finite-differences'
(no utilice AD). Las opciones que incluyen auto
provocan que el solver subyacente utilice información de gradiente al resolver el problema, siempre que sea compatible con las funciones de restricción, como se describe en Supported Operations for Optimization Variables and Expressions. Para ver un ejemplo, consulte Effect of Automatic Differentiation in Problem-Based Optimization.
Los solvers eligen de forma predeterminada el siguiente tipo de AD:
Para una función objetivo no lineal general,
fmincon
recurre de forma predeterminada a la AD inversa para la función objetivo.fmincon
recurre de forma predeterminada a la AD inversa para la función de restricción no lineal cuando el número de restricciones no lineales es inferior al número de variables. De lo contrario,fmincon
recurre de forma predeterminada a la AD progresiva para la función de restricción no lineal.Para una función objetivo no lineal general,
fminunc
recurre de forma predeterminada a la AD inversa.Para una función objetivo de mínimos cuadrados,
fmincon
yfminunc
recurren de forma predeterminada a la AD progresiva para la función objetivo. Para ver la definición de una función objetivo de mínimos cuadrados basada en problemas, consulte Write Objective Function for Problem-Based Least Squares.lsqnonlin
recurre de forma predeterminada a la AD progresiva cuando el número de elementos del vector objetivo es mayor que o igual al número de variables. De lo contrario,lsqnonlin
recurre de forma predeterminada a la AD inversa.fsolve
recurre de forma predeterminada a la AD progresiva cuando el número de ecuaciones es mayor que o igual al número de variables. De lo contrario,fsolve
recurre de forma predeterminada a la AD inversa.
Ejemplo: 'finite-differences'
Tipos de datos: char
| string
EquationDerivative
— Indicación para utilizar diferenciación automática para ecuaciones
'auto'
(predeterminado) | 'auto-forward'
| 'auto-reverse'
| 'finite-differences'
Indicación para utilizar diferenciación automática (AD) para funciones de restricción no lineal, especificada como 'auto'
(utilice AD si es posible), 'auto-forward'
(utilice AD progresiva si es posible), 'auto-reverse'
(utilice AD inversa si es posible), o 'finite-differences'
(no utilice AD). Las opciones que incluyen auto
provocan que el solver subyacente utilice información de gradiente al resolver el problema, siempre que sea compatible con las funciones de ecuación, como se describe en Supported Operations for Optimization Variables and Expressions. Para ver un ejemplo, consulte Effect of Automatic Differentiation in Problem-Based Optimization.
Los solvers eligen de forma predeterminada el siguiente tipo de AD:
Para una función objetivo no lineal general,
fmincon
recurre de forma predeterminada a la AD inversa para la función objetivo.fmincon
recurre de forma predeterminada a la AD inversa para la función de restricción no lineal cuando el número de restricciones no lineales es inferior al número de variables. De lo contrario,fmincon
recurre de forma predeterminada a la AD progresiva para la función de restricción no lineal.Para una función objetivo no lineal general,
fminunc
recurre de forma predeterminada a la AD inversa.Para una función objetivo de mínimos cuadrados,
fmincon
yfminunc
recurren de forma predeterminada a la AD progresiva para la función objetivo. Para ver la definición de una función objetivo de mínimos cuadrados basada en problemas, consulte Write Objective Function for Problem-Based Least Squares.lsqnonlin
recurre de forma predeterminada a la AD progresiva cuando el número de elementos del vector objetivo es mayor que o igual al número de variables. De lo contrario,lsqnonlin
recurre de forma predeterminada a la AD inversa.fsolve
recurre de forma predeterminada a la AD progresiva cuando el número de ecuaciones es mayor que o igual al número de variables. De lo contrario,fsolve
recurre de forma predeterminada a la AD inversa.
Ejemplo: 'finite-differences'
Tipos de datos: char
| string
Argumentos de salida
sol
— Solución
estructura | vector OptimizationValues
Solución, devuelta como una estructura o un vector OptimizationValues
. sol
es un vector OptimizationValues
cuando el problema es multiobjetivo. Para problemas de un único objetivo, los campos de la estructura devuelta son los nombres de las variables de optimización del problema. Consulte optimvar
.
fval
— Valor de la función objetivo en la solución
número real | vector real | matriz real | estructura
Valor de la función objetivo en la solución, devuelto como una de las siguientes opciones:
Tipo de problema | Valor(es) devuelto(s) |
---|---|
Optimizar función objetivo escalar f(x) | Número real f(sol) |
Mínimos cuadrados | Número real, la suma de cuadrados de los valores residuales en la solución |
Resolver ecuación | Si prob.Equations es una entrada única: vector real de valores de función en la solución, es decir, el lado izquierdo de las ecuaciones menos el lado derecho |
Si prob.Equations tiene múltiples campos con nombre: estructura con mismo nombre que prob.Equations , donde cada valor de campo es el lado izquierdo de las ecuaciones nombradas menos el lado derecho | |
Multiobjetivo | Matriz con una fila para cada componente de la función objetivo y una columna para cada punto de solución. |
Sugerencia
Si olvida pedir fval
para un objetivo definido como una expresión de optimización o expresión de ecuación, puede calcularlo utilizando
fval = evaluate(prob.Objective,sol)
Si el objetivo se define como una estructura con un solo campo,
fval = evaluate(prob.Objective.ObjectiveName,sol)
Si el objetivo es una estructura con varios campos, escriba un bucle.
fnames = fields(prob.Equations); for i = 1:length(fnames) fval.(fnames{i}) = evaluate(prob.Equations.(fnames{i}),sol); end
exitflag
— Razón por la que el solver se ha detenido
variable de enumeración
Razón por la que el solver se ha detenido, devuelta como una variable de enumeración. Puede convertir exitflag
a su equivalente numérico utilizando double(exitflag)
y a su equivalente de cadena utilizando string(exitflag)
.
Esta tabla describe los indicadores de salida para el solver intlinprog
.
Indicador de salida para intlinprog | Equivalente numérico | Significado |
---|---|---|
OptimalWithPoorFeasibility | 3 | La solución es factible con respecto a la tolerancia |
IntegerFeasible | 2 | intlinprog se ha detenido prematuramente y ha encontrado un punto factible de enteros. |
OptimalSolution |
| El solver ha convergido a una solución |
SolverLimitExceeded |
|
Consulte Tolerancias y criterios de detención. |
OutputFcnStop | -1 | intlinprog detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound |
| No se ha encontrado ningún punto factible. |
Unbounded |
| El problema está desacotado. |
FeasibilityLost |
| El solver ha perdido factibilidad. |
Los exitflag 3
y -9
están relacionados con soluciones que tienen infactibilidades amplias. Estas normalmente surgen de matrices de restricciones lineales que tienen un elevado número de condiciones, o de problemas que tienen un elevado número de componentes de solución. Para corregir estos problemas, intente escalar las matrices de coeficientes, eliminar las restricciones lineales redundantes o establecer límites más estrictos en las variables.
Esta tabla describe los indicadores de salida para el solver linprog
.
Indicador de salida para linprog | Equivalente numérico | Significado |
---|---|---|
OptimalWithPoorFeasibility | 3 | La solución es factible con respecto a la tolerancia |
OptimalSolution | 1 | El solver ha convergido a una solución |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
NoFeasiblePointFound | -2 | No se ha encontrado ningún punto factible. |
Unbounded | -3 | El problema está desacotado. |
FoundNaN | -4 | Se ha encontrado un valor |
PrimalDualInfeasible | -5 | Ni el problema primal ni el dual son factibles. |
DirectionTooSmall | -7 | La dirección de búsqueda es demasiado pequeña. No se puede seguir progresando. |
FeasibilityLost | -9 | El solver ha perdido factibilidad. |
Los exitflag 3
y -9
están relacionados con soluciones que tienen infactibilidades amplias. Estas normalmente surgen de matrices de restricciones lineales que tienen un elevado número de condiciones, o de problemas que tienen un elevado número de componentes de solución. Para corregir estos problemas, intente escalar las matrices de coeficientes, eliminar las restricciones lineales redundantes o establecer límites más estrictos en las variables.
Esta tabla describe los indicadores de salida para el solver lsqlin
.
Indicador de salida para lsqlin | Equivalente numérico | Significado |
---|---|---|
FunctionChangeBelowTolerance | 3 | El cambio en el valor residual es menor que la tolerancia especificada |
StepSizeBelowTolerance |
| Tamaño de paso menor que |
OptimalSolution | 1 | El solver ha convergido a una solución |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
NoFeasiblePointFound | -2 | Para problemas de optimización, el problema no es factible. O, para el algoritmo No se ha encontrado ninguna solución para los problemas de ecuación. |
IllConditioned | -4 | Las condiciones mal definidas no permiten seguir optimizando. |
NoDescentDirectionFound | -8 | La dirección de búsqueda es demasiado pequeña. No se puede seguir progresando. (Algoritmo |
Esta tabla describe los indicadores de salida para el solver quadprog
.
Indicador de salida para quadprog | Equivalente numérico | Significado |
---|---|---|
LocalMinimumFound | 4 | Mínimo local encontrado; el mínimo no es único. |
FunctionChangeBelowTolerance | 3 | El cambio en el valor de la función objetivo es menor que la tolerancia especificada |
StepSizeBelowTolerance |
| Tamaño de paso menor que |
OptimalSolution | 1 | El solver ha convergido a una solución |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
NoFeasiblePointFound | -2 | El problema no es factible. O, para el algoritmo |
IllConditioned | -4 | Las condiciones mal definidas no permiten seguir optimizando. |
Nonconvex |
| Problema no convexo detectado. (Algoritmo |
NoDescentDirectionFound | -8 | No se ha podido calcular una dirección de paso. (Algoritmo |
Esta tabla describe los indicadores de salida para el solver coneprog
.
Indicador de salida para coneprog | Equivalente numérico | Significado |
---|---|---|
OptimalSolution | 1 | El solver ha convergido a una solución |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
NoFeasiblePointFound | -2 | El problema no es factible. |
Unbounded | -3 | El problema está desacotado. |
DirectionTooSmall |
| La dirección de búsqueda se ha vuelto demasiado pequeña. No se puede seguir progresando. |
Unstable | -10 | El problema es numéricamente inestable. |
Esta tabla describe los indicadores de salida para el solver lsqcurvefit
o lsqnonlin
.
Indicador de salida para lsqnonlin | Equivalente numérico | Significado |
---|---|---|
SearchDirectionTooSmall | 4 | La magnitud de la dirección de búsqueda era menor que |
FunctionChangeBelowTolerance | 3 | El cambio en el valor residual era inferior a |
StepSizeBelowTolerance |
| Tamaño de paso menor que |
OptimalSolution | 1 | El solver ha convergido a una solución |
SolverLimitExceeded | 0 | El número de iteraciones ha sobrepasado |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | Para problemas de optimización, el problema no es factible: los límites No se ha encontrado ninguna solución para los problemas de ecuación. |
Esta tabla describe los indicadores de salida para el solver fminunc
.
Indicador de salida para fminunc | Equivalente numérico | Significado |
---|---|---|
NoDecreaseAlongSearchDirection | 5 | La reducción prevista en la función objetivo es inferior a la tolerancia |
FunctionChangeBelowTolerance | 3 | El cambio en el valor de la función objetivo es inferior a la tolerancia |
StepSizeBelowTolerance |
| El cambio en |
OptimalSolution | 1 | La magnitud del gradiente es menor que la tolerancia |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
Unbounded | -3 | La función objetivo en la iteración actual está por debajo de |
Esta tabla describe los indicadores de salida para el solver fmincon
.
Indicador de salida para fmincon | Equivalente numérico | Significado |
---|---|---|
NoDecreaseAlongSearchDirection | 5 | La magnitud de la derivada direccional en la dirección de búsqueda es inferior a 2* |
SearchDirectionTooSmall | 4 | La magnitud de la dirección de búsqueda es inferior a 2* |
FunctionChangeBelowTolerance | 3 | El cambio en el valor de la función objetivo es inferior a |
StepSizeBelowTolerance |
| El cambio en |
OptimalSolution | 1 | La medida de optimalidad de primer orden es inferior a |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | No se ha encontrado ningún punto factible. |
Unbounded | -3 | La función objetivo en la iteración actual está por debajo de |
Esta tabla describe los indicadores de salida para el solver fsolve
.
Indicador de salida para fsolve | Equivalente numérico | Significado |
---|---|---|
SearchDirectionTooSmall | 4 | La magnitud de la dirección de búsqueda es inferior a |
FunctionChangeBelowTolerance | 3 | El cambio en el valor de la función objetivo es inferior a la tolerancia |
StepSizeBelowTolerance |
| El cambio en |
OptimalSolution | 1 | La medida de optimalidad de primer orden es inferior a |
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | Ha convergido a un punto que no es una raíz. |
TrustRegionRadiusTooSmall | -3 | Ecuación no resuelta. El radio de la región de confianza se ha vuelto demasiado pequeño (algoritmo |
Esta tabla describe los indicadores de salida para el solver fzero
.
Indicador de salida para fzero | Equivalente numérico | Significado |
---|---|---|
OptimalSolution | 1 | Ecuación resuelta. |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
FoundNaNInfOrComplex | -4 | Se ha encontrado |
SingularPoint | -5 | Puede haber convergido a un punto singular. |
CannotDetectSignChange | -6 | No ha encontrado dos puntos con signos opuestos del valor de función. |
Esta tabla describe los indicadores de salida para el solver patternsearch
.
Indicador de salida para patternsearch | Equivalente numérico | Significado |
---|---|---|
SearchDirectionTooSmall | 4 | La magnitud del paso es inferior a la precisión de máquina y la vulneración de restricciones es inferior a |
FunctionChangeBelowTolerance | 3 | Tanto el cambio en |
StepSizeBelowTolerance |
| Tanto el cambio en |
SolverConvergedSuccessfully | 1 | Sin restricciones no lineales: la magnitud del tamaño de malla es inferior a la tolerancia especificada y la vulneración de restricciones es inferior a |
Con restricciones no lineales: la magnitud de la medida de complementariedad (definida después de esta tabla) es inferior a | ||
SolverLimitExceeded | 0 | Se ha alcanzado el número máximo de evaluaciones de función o de iteraciones. |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | No se ha encontrado ningún punto factible. |
En el solver de restricción no lineal, la medida de complementariedad es la norma del vector cuyos elementos son ciλi, donde ci es la vulneración de la restricción de desigualdad no lineal y λi es el correspondiente multiplicador de Lagrange.
Esta tabla describe los indicadores de salida para el solver ga
.
Indicador de salida para ga | Equivalente numérico | Significado |
---|---|---|
MinimumFitnessLimitReached | 5 | Se ha alcanzado el límite de aptitud mínimo |
SearchDirectionTooSmall | 4 | La magnitud del paso es inferior a la precisión de máquina y la vulneración de restricciones es inferior a |
FunctionChangeBelowTolerance | 3 | El valor de la función de aptitud no ha cambiado en |
SolverConvergedSuccessfully | 1 | Sin restricciones no lineales: el cambio acumulativo promedio en el valor de la función de aptitud a lo largo de |
Con restricciones no lineales: la magnitud de la medida de complementariedad (consulte Complementarity Measure (Global Optimization Toolbox)) es inferior a | ||
SolverLimitExceeded | 0 | Se ha sobrepasado el número máximo de generaciones |
OutputFcnStop | -1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | No se ha encontrado ningún punto factible. |
StallTimeLimitExceeded | -4 | Se ha sobrepasado el límite de tiempo de detención |
TimeLimitExceeded | -5 | Se ha sobrepasado el límite de tiempo |
Esta tabla describe los indicadores de salida para el solver particleswarm
.
Indicador de salida para particleswarm | Equivalente numérico | Significado |
---|---|---|
SolverConvergedSuccessfully | 1 | El cambio relativo en el valor objetivo a lo largo de las últimas |
SolverLimitExceeded | 0 | El número de iteraciones ha sobrepasado |
OutputFcnStop | -1 | Iteraciones detenidas por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | Los límites son inconsistentes: para algunos |
Unbounded | -3 | El mejor valor de la función objetivo está por debajo de |
StallTimeLimitExceeded | -4 | El mejor valor de la función objetivo no ha cambiado en un intervalo de |
TimeLimitExceeded | -5 | El tiempo de ejecución ha sobrepasado |
Esta tabla describe los indicadores de salida para el solver simulannealbnd
.
Indicador de salida para simulannealbnd | Equivalente numérico | Significado |
---|---|---|
ObjectiveValueBelowLimit | 5 | El valor de la función objetivo es inferior a |
SolverConvergedSuccessfully | 1 | El cambio promedio en el valor de la función objetivo a lo largo de |
SolverLimitExceeded | 0 | Se ha sobrepasado el número máximo de generaciones |
OutputFcnStop | -1 | Optimización terminada por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | No se ha encontrado ningún punto factible. |
TimeLimitExceeded | -5 | Se ha sobrepasado el límite de tiempo. |
Esta tabla describe los indicadores de salida para el solver surrogateopt
.
Indicador de salida para surrogateopt | Equivalente numérico | Significado |
---|---|---|
BoundsEqual | 10 | El problema tiene una solución factible única debido a uno de los siguientes motivos:
|
FeasiblePointFound | 3 | Punto factible encontrado. El solver se ha detenido porque no se han encontrado suficientes puntos factibles nuevos para continuar. |
ObjectiveLimitAttained | 1 | El valor de la función objetivo es inferior a |
SolverLimitExceeded | 0 | El número de evaluaciones de función sobrepasa |
OutputFcnStop | -1 | Optimización terminada por una función de salida o una función de gráfica. |
NoFeasiblePointFound | -2 | No se ha encontrado ningún punto factible debido a uno de los siguientes motivos:
|
Esta tabla describe los indicadores de salida para los solvers MultiStart
y GlobalSearch
.
Indicador de salida para MultiStart o GlobalSearch | Equivalente numérico | Significado |
---|---|---|
LocalMinimumFoundSomeConverged | 2 | Se ha encontrado al menos un mínimo local. Algunas ejecuciones del solver local han convergido. |
LocalMinimumFoundAllConverged | 1 | Se ha encontrado al menos un mínimo local. Todas las ejecuciones del solver local han convergido. |
SolverLimitExceeded | 0 | No se ha encontrado ningún mínimo local. El solver local se ha llamado al menos una vez y al menos una llamada de solver ha agotado las iteraciones. |
OutputFcnStop | –1 | Detenido por una función de salida o una función de gráfica. |
NoFeasibleLocalMinimumFound | –2 | No se ha encontrado ningún mínimo local factible. |
TimeLimitExceeded | –5 | Límite MaxTime sobrepasado. |
NoSolutionFound | –8 | No se ha encontrado ninguna solución. Todas las ejecuciones tenían indicador de salida de solver local –2 o inferior, pero no todos iguales a –2. |
FailureInSuppliedFcn | –10 | Se han encontrado fallos en la función objetivo o de restricción lineal. |
Esta tabla describe los indicadores de salida para el solver paretosearch
.
Indicador de salida para paretosearch | Equivalente numérico | Significado |
---|---|---|
SolverConvergedSuccessfully | 1 | Se cumple una de las siguientes condiciones:
|
SolverLimitExceeded | 0 | El número de iteraciones sobrepasa options.MaxIterations o el número de evaluaciones de función sobrepasa options.MaxFunctionEvaluations . |
OutputFcnStop | –1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | –2 | El solver no puede encontrar un punto que cumpla todas las restricciones. |
TimeLimitExceeded | –5 | El tiempo de optimización sobrepasa options.MaxTime . |
Esta tabla describe los indicadores de salida para el solver gamultiobj
.
Indicador de salida para paretosearch | Equivalente numérico | Significado |
---|---|---|
SolverConvergedSuccessfully | 1 | El promedio geométrico del cambio relativo en el valor de la distribución a lo largo de options.MaxStallGenerations generaciones es inferior a options.FunctionTolerance y la distribución final es inferior a la distribución promedio a lo largo de las últimas options.MaxStallGenerations generaciones. |
SolverLimitExceeded | 0 | El número de generaciones sobrepasa options.MaxGenerations . |
OutputFcnStop | –1 | Detenido por una función de salida o una función de gráfica. |
NoFeasiblePointFound | –2 | El solver no puede encontrar un punto que cumpla todas las restricciones. |
TimeLimitExceeded | –5 | El tiempo de optimización sobrepasa options.MaxTime . |
output
— Información sobre el proceso de optimización
estructura
Información sobre el proceso de optimización, devuelta como estructura. La estructura de salida contiene los campos del campo de salida del solver subyacente relevante, en función del solver solve
al que se llama:
'ga'
output
(Global Optimization Toolbox)'gamultiobj'
output
(Global Optimization Toolbox)'paretosearch'
output
(Global Optimization Toolbox)'particleswarm'
output
(Global Optimization Toolbox)'patternsearch'
output
(Global Optimization Toolbox)'simulannealbnd'
output
(Global Optimization Toolbox)'surrogateopt'
output
(Global Optimization Toolbox)
'MultiStart'
y'GlobalSearch'
devuelven la estructura de salida del solver local. Asimismo, la estructura de salida contiene los siguientes campos:globalSolver
: o'MultiStart'
o'GlobalSearch'
.objectiveDerivative
: toma los valores descritos al final de esta sección.constraintDerivative
: toma los valores descritos al final de esta sección o"auto"
cuandoprob
no tiene restricción no lineal.solver
: el solver local, como'fmincon'
.local
: estructura que contiene información adicional sobre la optimización.sol
: soluciones locales devueltas como un vector de objetosOptimizationValues
.x0
: puntos iniciales para el solver local, devueltos como un arreglo de celdas.exitflag
: indicadores de salida de soluciones locales, devueltos como un vector de enteros.output
: arreglo de estructura, con una fila para cada solución local. Cada fila es la estructura de salida local que corresponde a una solución local.
solve
incluye el campo adicional Solver
de la estructura output
para identificar al solver utilizado, como 'intlinprog'
.
Cuando Solver
es un solver no lineal de Optimization Toolbox™, solve
incluye uno o dos campos adicionales que describen el tipo de estimación de derivada. Los campos objectivederivative
y, si fuera apropiado, constraintderivative
pueden tomar los siguientes valores:
"reverse-AD"
para diferenciación automática inversa"forward-AD"
para diferenciación automática progresiva"finite-differences"
para estimación de diferencias finitas"closed-form"
para funciones lineales o cuadráticas
lambda
— Multiplicadores de Lagrange en la solución
estructura
Multiplicadores de Lagrange en la solución, devueltos como una estructura.
Nota
solve
no devuelve lambda
para problemas de resolución de ecuaciones.
Para los solvers intlinprog
y fminunc
, lambda
está vacía, []
. Para los otros solvers, lambda
tiene estos campos:
Variables
: contiene campos para cada variable del problema. Cada nombre de variable del problema es una estructura con dos campos:Lower
: multiplicadores de Lagrange asociados a la variable propiedadLowerBound
, devueltos como un arreglo del mismo tamaño que la variable. Las entradas distintas de cero indican que la solución se encuentra en el límite inferior. Estos multiplicadores tienen la estructuralambda.Variables.
.variablename
.LowerUpper
: multiplicadores de Lagrange asociados a la variable propiedadUpperBound
, devueltos como un arreglo del mismo tamaño que la variable. Las entradas distintas de cero indican que la solución se encuentra en el límite superior. Estos multiplicadores tienen la estructuralambda.Variables.
.variablename
.Upper
Constraints
: contiene un campo para cada restricción del problema. Cada restricción del problema tiene una estructura cuyo nombre es el nombre de la restricción y cuyo valor es un arreglo numérico del mismo tamaño que la restricción. Las entradas distintas de cero indican que la restricción se encuentra activa en la solución. Estos multiplicadores tienen la estructuralambda.Constraints.
.constraintname
Nota
Todos los elementos de un arreglo de restricción tienen la misma comparación (
<=
,==
o>=
) y todos son del mismo tipo (lineales, cuadráticos o no lineales).
Algoritmos
Conversión a formato de solver
Internamente, la función solve
resuelve problemas de optimización llamando a un solver. Para saber cuál es el solver predeterminado para el problema y cuáles son los solvers compatibles para el problema, consulte la función solvers
. Puede anular el valor predeterminado utilizando el argumento de par nombre-valor 'solver'
al llamar a solve
.
Antes de que solve
pueda llamar a un solver, los problemas deben convertirse a formato de solver, ya sea mediante solve
o a través de algún otro objeto o función asociados. Esta conversión implica, por ejemplo, que las restricciones lineales tengan una representación de matriz en lugar de una expresión de variable de optimización.
El primer paso del algoritmo tiene lugar cuando se colocan expresiones de optimización en el problema. Un objeto OptimizationProblem
tiene una lista interna de las variables utilizadas en sus expresiones. Cada variable cuenta con un índice lineal en la expresión y con un tamaño. Por ello, las variables del problema tienen un formato de matriz implícito. La función prob2struct
realiza la conversión de formato de problema a formato de solver. Para ver un ejemplo, consulte Convert Problem to Structure.
Para problemas de optimización no lineales, solve
utiliza diferenciación automática para calcular los gradientes de la función objetivo y de las funciones de restricción no lineal. Estas derivadas se aplican cuando la función objetivo y la función de restricción están compuestas por Supported Operations for Optimization Variables and Expressions. Cuando la diferenciación automática no se aplica, los solvers estiman derivadas utilizando diferencias finitas. Para ver detalles sobre la diferenciación automática, consulte Automatic Differentiation Background. Puede controlar cómo solve
usa la diferenciación automática con el argumento nombre-valor ObjectiveDerivative
.
Para ver el algoritmo que intlinprog
utiliza para resolver problemas MILP, consulte intlinprog Algorithm. Para ver los algoritmos que linprog
utiliza para resolver problemas de programación lineal, consulte Linear Programming Algorithms. Para ver los algoritmos que quadprog
utiliza para resolver problemas de programación cuadrática, consulte Quadratic Programming Algorithms. Para ver algoritmos de solver de mínimos cuadrados lineales o no lineales, consulte Algoritmos de mínimos cuadrados (ajuste de modelos). Para ver algoritmos de solver no lineales, consulte Unconstrained Nonlinear Optimization Algorithms y Constrained Nonlinear Optimization Algorithms. Para ver los algoritmos de los solvers de Global Optimization Toolbox, consulte la documentación de Global Optimization Toolbox.
Para la resolución de ecuaciones no lineales, solve
representa internamente cada ecuación como la diferencia entre el lado izquierdo y el lado derecho. Entonces, solve
intenta minimizar la suma de cuadrados de los componentes de la ecuación. Para ver los algoritmos para resolver sistemas de ecuaciones no lineales, consulte Algoritmos de resolución de ecuaciones. Cuando el problema también tiene límites, solve
llama a lsqnonlin
para minimizar la suma de cuadrados de los componentes de la ecuación. Consulte Algoritmos de mínimos cuadrados (ajuste de modelos).
Nota
Si su función objetivo es una suma de cuadrados y desea que solve
la reconozca como tal, escríbala como norm(expr)^2
o sum(expr.^2)
y no como expr'*expr
o cualquier otro formato. El analizador interno reconoce una suma de cuadrados solo cuando se representa como el cuadrado de una norma o una suma explícita de cuadrados. Para obtener más detalles, consulte Write Objective Function for Problem-Based Least Squares. Para ver un ejemplo, consulte Nonnegative Linear Least Squares, Problem-Based.
Diferenciación automática
La diferenciación automática (AD) se aplica a las funciones solve
y prob2struct
en las siguientes condiciones:
La función objetivo y la función de restricción son compatibles, como se describe en Supported Operations for Optimization Variables and Expressions. No necesitan utilizar la función
fcn2optimexpr
.El solver al que llama
solve
esfmincon
,fminunc
,fsolve
olsqnonlin
.Para problemas de optimización, los argumentos de par nombre-valor
'ObjectiveDerivative'
y'ConstraintDerivative'
parasolve
oprob2struct
se establecen en'auto'
(predeterminado),'auto-forward'
o'auto-reverse'
.Para problemas de ecuación, la opción
'EquationDerivative'
está establecida en'auto'
(predeterminado),'auto-forward'
o'auto-reverse'
.
Cuando se aplica AD | Son compatibles todas las funciones de restricción | Hay una o más restricciones no compatibles |
---|---|---|
Función objetivo compatible | AD utilizada para objetivo y restricciones | AD utilizada solo para objetivo |
Función objetivo no compatible | AD utilizada solo para restricciones | AD no utilizada |
Cuando no se cumplen estas condiciones, solve
estima gradientes mediante diferencias finitas y prob2struct
no crea gradientes en sus archivos de función generados.
Los solvers eligen de forma predeterminada el siguiente tipo de AD:
Para una función objetivo no lineal general,
fmincon
recurre de forma predeterminada a la AD inversa para la función objetivo.fmincon
recurre de forma predeterminada a la AD inversa para la función de restricción no lineal cuando el número de restricciones no lineales es inferior al número de variables. De lo contrario,fmincon
recurre de forma predeterminada a la AD progresiva para la función de restricción no lineal.Para una función objetivo no lineal general,
fminunc
recurre de forma predeterminada a la AD inversa.Para una función objetivo de mínimos cuadrados,
fmincon
yfminunc
recurren de forma predeterminada a la AD progresiva para la función objetivo. Para ver la definición de una función objetivo de mínimos cuadrados basada en problemas, consulte Write Objective Function for Problem-Based Least Squares.lsqnonlin
recurre de forma predeterminada a la AD progresiva cuando el número de elementos del vector objetivo es mayor que o igual al número de variables. De lo contrario,lsqnonlin
recurre de forma predeterminada a la AD inversa.fsolve
recurre de forma predeterminada a la AD progresiva cuando el número de ecuaciones es mayor que o igual al número de variables. De lo contrario,fsolve
recurre de forma predeterminada a la AD inversa.
Nota
Para utilizar derivadas automáticas en un problema convertido por prob2struct
, pase opciones que especifiquen estas derivadas.
options = optimoptions('fmincon','SpecifyObjectiveGradient',true,... 'SpecifyConstraintGradient',true); problem.options = options;
En este momento, la AD funciona únicamente para primeras derivadas; no se aplica a segundas derivadas o superiores. De este modo, por ejemplo, si desea utilizar una matriz hessiana analítica para acelerar la optimización, no puede utilizar solve
directamente y en su lugar deberá utilizar el enfoque descrito en Supply Derivatives in Problem-Based Workflow.
Capacidades ampliadas
Soporte paralelo automático
Acelere código mediante la ejecución automática de cálculo paralelo mediante Parallel Computing Toolbox™.
solve
estima derivadas en paralelo para solvers no lineales cuando la opción UseParallel
para el solver es true
. Por ejemplo:
options = optimoptions('fminunc','UseParallel',true); [sol,fval] = solve(prob,x0,'Options',options)
solve
no utiliza estimación paralela de derivadas cuando todas las funciones objetivo y de restricción no lineal consisten solo en operaciones compatibles, tal y como se describe en Supported Operations for Optimization Variables and Expressions. En este caso, solve
utiliza diferenciación automática para calcular derivadas. Consulte Diferenciación automática.
Puede anular la diferenciación automática y utilizar estimaciones de diferencias finitas en paralelo estableciendo los argumentos 'ObjectiveDerivative'
y 'ConstraintDerivative'
en 'finite-differences'
.
Cuando especifica un solver de Global Optimization Toolbox compatible con la computación paralela (ga
(Global Optimization Toolbox), particleswarm
(Global Optimization Toolbox), patternsearch
(Global Optimization Toolbox) y surrogateopt
(Global Optimization Toolbox)), solve
realiza el cálculo en paralelo cuando la opción UseParallel
para el solver es true
. Por ejemplo:
options = optimoptions("patternsearch","UseParallel",true); [sol,fval] = solve(prob,x0,"Options",options,"Solver","patternsearch")
Historial de versiones
Introducido en R2017bR2018b: Las sintaxis solve(prob,solver)
, solve(prob,options)
y solve(prob,solver,options)
se han eliminado
Para escoger opciones o el solver subyacente para solve
, utilice pares nombre-valor. Por ejemplo:
sol = solve(prob,'options',opts,'solver','quadprog');
Las sintaxis previas no eran tan flexibles, estándar o extensibles como los pares nombre-valor.
Consulte también
evaluate
| OptimizationProblem
| EquationProblem
| optimoptions
| prob2struct
| fcn2optimexpr
| optimvalues
| solvers
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)