Main Content

OptimizationExpression

Expresión aritmética o funcional en términos de variables de optimización

Descripción

Una OptimizationExpression es una expresión aritmética o funcional en términos de variables de optimización. Utilice una OptimizationExpression como una función objetivo o como parte de una desigualdad o igualdad en una restricción o ecuación.

Creación

Cree una expresión de optimización realizando operaciones en objetos OptimizationVariable. Utilice aritmética estándar de MATLAB®, incluyendo potencias, indexación y concatenación de variables de optimización para crear expresiones. Consulte Supported Operations for Optimization Variables and Expressions y Ejemplos.

También puede crear una expresión de optimización a partir de una función de MATLAB aplicada a las variables de optimización utilizandofcn2optimexpr. Para ver ejemplos, consulte Crear una expresión a partir de una función no lineal y Optimización no lineal basada en problemas.

Cree una expresión de optimización vacía mediante optimexpr. Habitualmente, luego se rellena la expresión en un bucle. Para ver ejemplos, consulte Crear una expresión de optimización mediante un bucle y la página de referencia de la función optimexpr.

Después de crear una expresión, úsela como una función objetivo o como parte de una restricción o ecuación. Para ver ejemplos, consulte la página de referencia de la función solve.

Propiedades

expandir todo

Nombres de índices, especificados como un arreglo de celdas de cadenas o vectores de caracteres. Para obtener más información sobre cómo utilizar nombres de índices, consulte Named Index for Optimization Variables.

Tipos de datos: cell

Esta propiedad es de solo lectura.

Variables de optimización en el objeto, especificadas como una estructura de objetos OptimizationVariable.

Tipos de datos: struct

Funciones del objeto

evaluateEvaluar una expresión de optimización
showMuestre información sobre el objeto de optimización
writeSave optimization object description

Ejemplos

contraer todo

Cree expresiones de optimización mediante operaciones aritméticas en variables de optimización.

x = optimvar('x',3,2);
expr = sum(sum(x))
expr = 
  Linear OptimizationExpression

    x(1, 1) + x(2, 1) + x(3, 1) + x(1, 2) + x(2, 2) + x(3, 2)

f = [2,10,4];
w = f*x;
show(w)
(1, 1)

  2*x(1, 1) + 10*x(2, 1) + 4*x(3, 1)

(1, 2)

  2*x(1, 2) + 10*x(2, 2) + 4*x(3, 2)

Cree una expresión de optimización transponiendo una variable de optimización.

x = optimvar('x',3,2);
y = x'
y = 
  2x3 Linear OptimizationExpression array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 struct] containing 1 OptimizationVariable

  See expression formulation with show.

Simplemente indexando en un arreglo de optimización no se crea una expresión, sino que se crea una variable de optimización que hace referencia a la variable original. Para verlo, cree una variable w que sea la primera y tercera fila de x. Tenga en cuenta que w es una variable de optimización, no una expresión de optimización.

w = x([1,3],:)
w = 
  2x2 OptimizationVariable array with properties:

  Read-only array-wide properties:
          Name: 'x'
          Type: 'continuous'
    IndexNames: {{}  {}}

  Elementwise properties:
    LowerBound: [2x2 double]
    UpperBound: [2x2 double]

  Reference to a subset of OptimizationVariable with Name 'x'.

  See variables with show.
  See bounds with showbounds.

Cree una expresión de optimización concatenando variables de optimización.

y = optimvar('y',4,3);
z = optimvar('z',4,7);
f = [y,z]
f = 
  4x10 Linear OptimizationExpression array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 struct] containing 2 OptimizationVariables

  See expression formulation with show.

Utilice optimexpr para crear una expresión vacía y después rellene la expresión en un bucle.

y = optimvar('y',6,4);
expr = optimexpr(3,2);
for i = 1:3
    for j = 1:2
        expr(i,j) = y(2*i,j) - y(i,2*j);
    end
end
show(expr)
(1, 1)

  y(2, 1) - y(1, 2)

(2, 1)

  y(4, 1) - y(2, 2)

(3, 1)

  y(6, 1) - y(3, 2)

(1, 2)

  y(2, 2) - y(1, 4)

(2, 2)

  y(4, 2) - y(2, 4)

(3, 2)

  y(6, 2) - y(3, 4)

Cree una expresión de optimización que corresponda a la función objetivo

f(x)=x2/10+exp(-exp(-x)).

x = optimvar('x');
f = x^2/10 + exp(-exp(-x))
f = 
  Nonlinear OptimizationExpression

    ((x.^2 ./ 10) + exp((-exp((-x)))))

Encuentre el punto que minimiza fun comenzando por el punto x0 = 0.

x0 = struct('x',0);
prob = optimproblem('Objective',f);
[sol,fval] = solve(prob,x0)
Solving problem using fminunc.

Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
sol = struct with fields:
    x: -0.9595

fval = 0.1656

Si f no fuera una función compatible, podría convertirla utilizando fcn2optimexpr. Consulte Supported Operations for Optimization Variables and Expressions y Convert Nonlinear Function to Optimization Expression.

f = @(x)x^2/10 + exp(-exp(-x));
fun = fcn2optimexpr(f,x)
fun = 
  Nonlinear OptimizationExpression

    ((x.^2 ./ 10) + exp((-exp((-x)))))

prob = optimproblem('Objective',fun);
[sol,fval] = solve(prob,x0)
Solving problem using fminunc.

Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
sol = struct with fields:
    x: -0.9595

fval = 0.1656

Copyright 2018–2020 The MathWorks, Inc.

Cree una expresión de optimización en dos variables.

x = optimvar('x',3,2);
y = optimvar('y',1,2);
expr = sum(x,1) - 2*y;

Evalúe la expresión en un punto.

xmat = [3,-1;
    0,1;
    2,6];
sol.x = xmat;
sol.y = [4,-3];
val = evaluate(expr,sol)
val = 1×2

    -3    12

Más acerca de

expandir todo

Historial de versiones

Introducido en R2017b