OptimizationExpression

Арифметическое или функциональное выражение в терминах переменных оптимизации

Описание

OptimizationExpression арифметическое или функциональное выражение в терминах переменных оптимизации. Используйте OptimizationExpression как целевая функция, или как часть неравенства или равенства в ограничении или уравнении.

Создание

Создайте выражение оптимизации путем выполнения операций на OptimizationVariable объекты. Используйте стандартный MATLAB® арифметика включая взятия власти, индексацию и конкатенацию переменных оптимизации, чтобы создать выражения. Смотрите Поддерживаемые Операции для Переменных и выражений Оптимизации и Примеров.

Можно также создать выражение оптимизации из функции MATLAB, применился к переменным оптимизации при помощи fcn2optimexpr. Для примеров смотрите, Создают Выражение из Нелинейной Функции и Основанной на проблеме Нелинейной Оптимизации.

Создайте пустое выражение оптимизации при помощи optimexpr. Как правило, вы затем заполняете выражение в цикле. Для примеров смотрите, Создают Выражение Оптимизации Цикличным выполнением и optimexpr страница ссылки на функцию.

После того, как вы создадите выражение, используйте его или в качестве целевой функции, или в качестве части ограничения или уравнения. Для примеров смотрите solve страница ссылки на функцию.

Свойства

развернуть все

Имена индексов в виде массива ячеек строк или векторов символов. Для получения информации об использовании имен индексов смотрите Названный индекс для Переменных Оптимизации.

Типы данных: 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)))))

Найдите точку, которая минимизирует fun запуск с точки 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

Если f если бы  поддерживаемый функция не были, вы преобразовали бы это с помощью fcn2optimexpr. Смотрите поддерживаемые операции для переменных и выражений оптимизации и преобразуйте нелинейную функцию в выражение оптимизации.

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

    anonymousFunction1(x)

  where:

    anonymousFunction1 = @(x)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