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

Копирайт 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