exponenta event banner

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 = 
  4x1 Linear OptimizationEquality array with properties:

    IndexNames: {{}  {}}
     Variables: [1x1 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: [1x1 struct] containing 1 OptimizationVariable
         Objective: [0x0 OptimizationExpression]
       Constraints: [1x1 struct] containing 1 OptimizationConstraint

  See problem formulation with show.

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

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

    Description: ''
      Variables: [1x1 struct] containing 1 OptimizationVariable
      Equations: [1x1 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