createOptimProblem
Crear estructura de problema de optimización
Descripción
crea una estructura de problema de optimización vacía para el solucionador problem
= createOptimProblem(solverName
)solverName
.
especifica opciones adicionales utilizando uno o más argumentos de nombre-valor.problem
= createOptimProblem(solverName
,Name,Value
)
Ejemplos
Cree una estructura de problema con las siguientes especificaciones:
solucionador
fmincon
Algoritmo
"interior-point"
Punto inicial aleatorio 2-D
x0
La función de Rosenbrock como objetivo
Límites inferiores de –2
Límites superiores de 2
La función de Rosenbrock para una variable 2-D es (para más detalles, consulte Problema no lineal restringido utilizando la tarea Optimize de Live Editor o el solver). Para especificar el algoritmo "interior-point"
", cree opciones utilizando optimoptions
.
anonrosen = @(x)(100*(x(2) - x(1)^2)^2 + (1-x(1))^2); opts = optimoptions(@fmincon,Algorithm="interior-point"); rng default % For reproducibility problem = createOptimProblem("fmincon",... x0=randn(2,1),... objective=anonrosen,... lb=[-2;-2],... ub=[2;2],... options=opts);
Resuelva el problema comenzando desde problem.x0
llamando a fmincon
.
[x,fval] = fmincon(problem)
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance.
x = 2×1
1.0000
1.0000
fval = 2.0603e-11
Busque una mejor solución llamando a GlobalSearch
.
gs = GlobalSearch; [x2,fval2] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points. All 16 local solver runs converged with a positive local solver exit flag.
x2 = 2×1
1.0000
1.0000
fval2 = 2.1093e-11
En este caso, tanto fmincon
como GlobalSearch
llegan a la misma solución.
Argumentos de entrada
Solucionador de optimización, especificado como uno de los siguientes.
Para
GlobalSearch
, especifique"fmincon"
o@fmincon
.Para
MultiStart
, especifique"fmincon"
o@fmincon
,"fminunc"
o@fminunc
,"lsqnonlin"
o@lsqnonlin
, o"lsqcurvefit"
o@lsqcurvefit
.
Ejemplo: "fmincon"
Tipos de datos: char
| string
| function_handle
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: createOptimProblem("fmincon","x0",x0,"objective",fun,"lb",zeros(size(x0)))
Restricciones de igualdad lineales, especificadas como una matriz real. Aeq
es una matriz Me
por nvars
, donde Me
es el número de igualdades.
Aeq
codifica las Me
igualdades lineales
Aeq*x = beq
,
donde x
es el vector columna de N
variables x(:)
y beq
es un vector columna con Me
elementos.
Por ejemplo, para especificar
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
Dar estas restricciones:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Ejemplo: Para especificar que las variables de control suman 1, proporcione las restricciones Aeq = ones(1,N)
y beq = 1
.
Tipos de datos: double
Restricciones de desigualdad lineales, especificadas como una matriz real. Aineq
es una matriz M
por nvars
, donde M
es el número de desigualdades.
Aineq
codifica las M
desigualdades lineales
Aineq*x <= bineq
,
donde x
es el vector columna de nvars
variables x(:)
y bineq
es un vector columna con M
elementos.
Por ejemplo, para especificar
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
Dar estas restricciones:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
Ejemplo: Para especificar que las variables de control suman 1 o menos, proporcione las restricciones Aineq = ones(1,N)
y bineq = 1
.
Tipos de datos: double
Restricciones de igualdad lineales, especificadas como un vector real. beq
es un vector de Me
elementos relacionado con la matriz Aeq
. Si pasa beq
como un vector fila, los solvers convierten internamente beq
en el vector columna beq(:)
.
beq
codifica las Me
igualdades lineales
Aeq*x = beq
,
donde x
es el vector columna de N
variables x(:)
y Aeq
es una matriz de tamaño Meq
por N
.
Por ejemplo, para especificar
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
Dar estas restricciones:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Ejemplo: Para especificar que las variables de control suman 1, proporcione las restricciones Aeq = ones(1,N)
y beq = 1
.
Tipos de datos: double
Restricciones de desigualdad lineales, especificadas como un vector real. bineq
es un vector de M
elementos relacionado con la matriz Aineq
. Si pasa bineq
como un vector fila, los solvers convierten internamente bineq
en el vector columna bineq(:)
.
bineq
codifica las M
desigualdades lineales
Aineq*x <= bineq
,
donde x
es el vector columna de N
variables x(:)
y Aineq
es una matriz de tamaño M
por N
.
Por ejemplo, para especificar
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
Dar estas restricciones:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
Ejemplo: Para especificar que las variables de control suman 1 o menos, proporcione las restricciones Aineq = ones(1,N)
y bineq = 1
.
Tipos de datos: double
Límites inferiores, especificados como un vector real o un arreglo de dobles. lb
representa los límites inferiores elemento por elemento en lb
≤ x
≤ ub
.
Internamente, createOptimProblem
convierte un arreglo lb
en el vector lb(:)
.
Ejemplo: lb = [0;-Inf;4]
significa x(1) ≥ 0
, x(3) ≥ 4
.
Tipos de datos: double
Restricciones no lineales, especificadas como un identificador de función o un nombre de función. nonlcon
es una función que acepta un arreglo x
y devuelve dos arreglos, c(x)
y ceq(x)
.
c(x)
es el arreglo de restricciones de desigualdad no lineal enx
. El solucionador intenta satisfacerc(x) <= 0
para todas las entradas dec
.ceq(x)
es el arreglo de restricciones de igualdad no lineal enx
. El solucionador intenta satisfacerceq(x) = 0
para todas las entradas deceq
.
Por ejemplo, nonlcon
es una función MATLAB® como la siguiente:
function [c,ceq] = nonlcon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
Para obtener más información, consulte Restricciones no lineales.
Tipos de datos: char
| string
| function_handle
Función objetivo, especificada como un identificador de función o un nombre de función.
Para todos los solucionadores excepto
lsqnonlin
ylsqcurvefit
, la función objetivo debe aceptar un arreglox
y devolver un escalar. Si la opciónSpecifyObjectiveGradient
estrue
, entonces la función objetivo debe devolver una segunda salida, un vector que representa el gradiente del objetivo. Para obtener más detalles, consultefun
.Para
lsqnonlin
, la función objetivo debe aceptar un vectorx
y devolver un vector. Si la opciónSpecifyObjectiveGradient
estrue
, entonces la función objetivo debe devolver una segunda salida, una matriz que representa el jacobiano del objetivo. Para obtener más detalles, consultefun
.Para
lsqcurvefit
, la función objetivo debe aceptar dos entradas,x
yxdata
, y devolver un vector. Si la opciónSpecifyObjectiveGradient
estrue
, entonces la función objetivo debe devolver una segunda salida, una matriz que representa el jacobiano del objetivo. Para obtener más detalles, consultefun
.
Ejemplo: @sin
Ejemplo: "sin"
Tipos de datos: char
| string
| function_handle
Opciones de optimización, especificadas como la salida de optimoptions
.
Ejemplo: optimoptions("fmincon","SpecifyObjectiveGradient",true)
Límites superiores, especificados como un vector real o un arreglo de dobles. ub
representa los límites superiores elemento por elemento en lb
≤ x
≤ ub
.
Internamente, createOptimProblem
convierte un arreglo ub
en el vector ub(:)
.
Ejemplo: ub = [Inf;4;10]
significa x(2) ≤ 4
, x(3) ≤ 10
.
Tipos de datos: double
Punto inicial, especificado como un vector real o un arreglo real. Los solvers utilizan el número de elementos en x0
y el tamaño de x0
para determinar el número y el tamaño de las variables que fun
acepta.
Ejemplo: x0 = [1,2,3,4]
Tipos de datos: double
Datos de entrada para el modelo, especificados como un vector real o un arreglo real. El modelo es
ydata = fun(x,xdata)
,
donde xdata
e ydata
son arreglos fijos, y x
es el arreglo de parámetros que lsqcurvefit
cambia para buscar una suma mínima de cuadrados.
Ejemplo: xdata = [1,2,3,4]
Tipos de datos: double
Datos de respuesta del modelo, especificados como un vector real o un arreglo real. El modelo es
ydata = fun(x,xdata)
,
donde xdata
e ydata
son arreglos fijos, y x
es el arreglo de parámetros que lsqcurvefit
cambia para buscar una suma mínima de cuadrados.
El arreglo ydata
debe ser del mismo tamaño y la misma forma que el arreglo fun(x0,xdata)
.
Ejemplo: ydata = [1,2,3,4]
Tipos de datos: double
Argumentos de salida
Problema de optimización, devuelto como estructura. Utilice problem
como segundo argumento de entrada de run
, como en los siguientes ejemplos:
x = run(gs,problem) x = run(ms,problem,k)
También puedes resolver el problema llamando al solucionador nombrado en el problema. Por ejemplo, si se crea problem
para fmincon
, ingrese
x = fmincon(problem)
Historial de versiones
Introducido en R2010a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)