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;
showexpr(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
showexpr(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)x^2/10 + exp(-exp(-x));
fun = fcn2optimexpr(f,x)
fun = 
  Nonlinear OptimizationExpression

    anonymousFunction1(x)

  where:

    anonymousFunction1 = @(x)x^2/10+exp(-exp(-x));

Найдите точку, которая минимизирует fun запуск с точки x0 = 0.

x0 = struct('x',0);
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

Создайте выражение оптимизации в двух переменных.

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

Для просмотра документации необходимо авторизоваться на сайте