OptimizationEquality

Равенства и ограничения равенства

Описание

OptimizationEquality объект содержит равенства и ограничения равенства в терминах OptimizationVariable объекты или OptimizationExpression объекты. Каждое равенство использует оператор сравнения ==.

Отдельный оператор может представлять массив равенств. Например, можно выразить равенства что каждая строка матричной переменной x суммы одной в этом отдельном операторе:

constrsum = sum(x,2) == 1

Используйте OptimizationEquality объекты как ограничения в OptimizationProblem, или как уравнения в EquationProblem.

Создание

Создайте равенства с помощью выражений оптимизации с оператором сравнения ==.

Включайте равенства в Constraints свойство задачи оптимизации или Equations свойство проблемы уравнения, при помощи записи через точку.

prob = optimproblem;
x = optimvar(x,4,6);
SumToOne = sum(x,2) == 1;
prob.Constraints.SumToOne = SumToOne;
% Or for an equation problem:
eqprob = eqnproblem;
eqprob.Equations.SumToOne = SumToOne;

Можно также создать пустое равенство оптимизации при помощи optimeq или optimconstr. Как правило, вы затем устанавливаете равенства в цикле. Для примера смотрите, Создают Равенства в Цикле. Однако для самой эффективной формулировки задачи, постарайтесь не устанавливать равенства в циклах. Смотрите Создают Эффективные Задачи оптимизации.

Свойства

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

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

Типы данных: cell

Это свойство доступно только для чтения.

Переменные оптимизации в объекте, заданном как структура OptimizationVariable объекты.

Типы данных: struct

Функции объекта

infeasibilityНарушение ограничений в точке
showОтобразите объект оптимизации
writeСохраните описание объекта оптимизации

Примеры

свернуть все

Создайте 4 6 матрица переменной оптимизации, названная x.

x = optimvar('x',4,6);

Создайте равенства, которые каждая строка x суммирует одному.

constrsum = sum(x,2) == 1
constrsum = 
  4×1 Linear OptimizationEquality array with properties:

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

  See equality formulation with show.

Просмотрите равенства.

show(constrsum)
(1, 1)

  x(1, 1) + x(1, 2) + x(1, 3) + x(1, 4) + x(1, 5) + x(1, 6) == 1

(2, 1)

  x(2, 1) + x(2, 2) + x(2, 3) + x(2, 4) + x(2, 5) + x(2, 6) == 1

(3, 1)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) + x(3, 6) == 1

(4, 1)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) + x(4, 6) == 1

Чтобы включать равенства в задачу оптимизации, установите Constraints свойство к constrsum при помощи записи через точку.

prob = optimproblem;
prob.Constraints.constrsum = constrsum
prob = 
  OptimizationProblem with properties:

       Description: ''
    ObjectiveSense: 'minimize'
         Variables: [1×1 struct] containing 1 OptimizationVariable
         Objective: [0×0 OptimizationExpression]
       Constraints: [1×1 struct] containing 1 OptimizationConstraint

  See problem formulation with show.

Точно так же, чтобы включать равенства в проблему уравнения, установите Constraints свойство к constrsum при помощи записи через точку.

eqnprob = eqnproblem;
eqnprob.Equations.constrsum = constrsum
eqnprob = 
  EquationProblem with properties:

    Description: ''
      Variables: [1×1 struct] containing 1 OptimizationVariable
      Equations: [1×1 struct] containing 1 OptimizationEquality

  See problem formulation with show.

Создайте пустой OptimizationEquality объект.

eq1 = optimeq;

Создайте массив переменной оптимизации 5 на 5 под названием x.

x = optimvar('x',5,5);

Создайте равенства та строка i из x суммы к i2.

for i = 1:size(x,1)
    eq1(i) = sum(x(i,:)) == i^2;
end

Просмотрите получившиеся равенства.

show(eq1)
(1, 1)

  x(1, 1) + x(1, 2) + x(1, 3) + x(1, 4) + x(1, 5) == 1

(1, 2)

  x(2, 1) + x(2, 2) + x(2, 3) + x(2, 4) + x(2, 5) == 4

(1, 3)

  x(3, 1) + x(3, 2) + x(3, 3) + x(3, 4) + x(3, 5) == 9

(1, 4)

  x(4, 1) + x(4, 2) + x(4, 3) + x(4, 4) + x(4, 5) == 16

(1, 5)

  x(5, 1) + x(5, 2) + x(5, 3) + x(5, 4) + x(5, 5) == 25

Использовать eq1 как ограничение в задаче оптимизации, набор eq1 как Constraints свойство при помощи записи через точку.

prob = optimproblem;
prob.Constraints.eq1 = eq1;

Точно так же использовать eq1 как набор уравнений в проблеме уравнения, набор eq1 как Equations свойство при помощи записи через точку.

eqprob = eqnproblem;
eqprob.Equations.eq1 = eq1;

Введенный в R2019b