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
fminconAlgoritmo
"interior-point"Punto inicial aleatorio 2-D
x0La 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) <= 0para todas las entradas dec.ceq(x)es el arreglo de restricciones de igualdad no lineal enx. El solucionador intenta satisfacerceq(x) = 0para 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
lsqnonlinylsqcurvefit, la función objetivo debe aceptar un arregloxy devolver un escalar. Si la opciónSpecifyObjectiveGradientestrue, 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 vectorxy devolver un vector. Si la opciónSpecifyObjectiveGradientestrue, 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,xyxdata, y devolver un vector. Si la opciónSpecifyObjectiveGradientestrue, 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)