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