Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

OptimizationExpression

关于优化变量的算术或函数表达式

说明

OptimizationExpression 是关于优化变量的算术或函数表达式。将 OptimizationExpression 用作目标函数,或用作约束或方程中不等式或等式的一部分。

提示

有关完整的工作流,请参阅基于问题的优化工作流基于问题的方程求解工作流

创建对象

通过对 OptimizationVariable 对象执行操作来创建优化表达式。使用标准 MATLAB® 算术(包括幂、索引和优化变量的串联)来创建表达式。请参阅Supported Operations for Optimization Variables and Expressions示例

您也可以使用 fcn2optimexpr 基于应用于优化变量的 MATLAB 函数创建优化表达式。有关示例,请参阅基于非线性函数创建表达式基于问题的非线性优化

使用 optimexpr 创建一个空的优化表达式。通常,您可以继续使用循环方式填充表达式。有关示例,请参阅通过循环创建优化表达式optimexpr 函数参考页。

创建表达式后,将其用作目标函数或者约束或方程的一部分。有关示例,请参阅 solve 函数参考页。

属性

全部展开

索引名称,指定为字符串元胞数组或字符向量。有关使用索引名称的信息,请参阅Named Index for Optimization Variables

数据类型: cell

此 属性 为只读。

对象中的优化变量,指定为 OptimizationVariable 对象的结构体。

数据类型: struct

对象函数

evaluate计算优化表达式
show显示有关优化对象的信息
write保存优化对象描述

示例

全部折叠

通过对优化变量执行算术运算来创建优化表达式。

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)

通过转置优化变量来创建优化表达式。

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.

简单地对优化数组进行索引不会创建表达式,而是创建一个引用原始变量的优化变量。为此,请创建一个变量 w,它是 x 的第一行和第三行。请注意,w 是优化变量,而不是优化表达式。

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.

通过串联优化变量来创建优化表达式。

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.

使用 optimexpr 创建一个空表达式,然后使用循环方式填充该表达式。

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)

创建与目标函数对应的优化表达式

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)))))

从点 x0 = 0 开始,找到最小化 fun 的点。

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

如果 f 不是受支持的函数,您可以使用 fcn2optimexpr 对其进行转换。请参阅Supported Operations for Optimization Variables and Expressions将非线性函数转换为优化表达式

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.

用两个变量创建一个优化表达式。

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

计算该表达式在某点处的值。

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

    -3    12

详细信息

全部展开

版本历史记录

在 R2017b 中推出