Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

createOptimProblem

Crear estructura de problema de optimización

Descripción

problem = createOptimProblem(solverName) crea una estructura de problema de optimización vacía para el solucionador solverName.

problem = createOptimProblem(solverName,Name,Value) especifica opciones adicionales utilizando uno o más argumentos de nombre-valor.

ejemplo

Ejemplos

contraer todo

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 x es f(x)=100(x2-x12)2+(1-x1)2 (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

contraer todo

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

contraer todo

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 en x. El solucionador intenta satisfacer c(x) <= 0 para todas las entradas de c.

  • ceq(x) es el arreglo de restricciones de igualdad no lineal en x. El solucionador intenta satisfacer ceq(x) = 0 para todas las entradas de ceq.

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 y lsqcurvefit, la función objetivo debe aceptar un arreglo x y devolver un escalar. Si la opción SpecifyObjectiveGradient es true, entonces la función objetivo debe devolver una segunda salida, un vector que representa el gradiente del objetivo. Para obtener más detalles, consulte fun.

  • Para lsqnonlin, la función objetivo debe aceptar un vector x y devolver un vector. Si la opción SpecifyObjectiveGradient es true, entonces la función objetivo debe devolver una segunda salida, una matriz que representa el jacobiano del objetivo. Para obtener más detalles, consulte fun.

  • Para lsqcurvefit, la función objetivo debe aceptar dos entradas, x y xdata, y devolver un vector. Si la opción SpecifyObjectiveGradient es true, entonces la función objetivo debe devolver una segunda salida, una matriz que representa el jacobiano del objetivo. Para obtener más detalles, consulte fun.

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

contraer todo

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