OptimizationInequality

Ограничения неравенства

Описание

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

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

constrsum = sum(x,2) <= 1

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

Создание

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

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

prob = optimproblem;
x = optimvar(x,4,6);
SumLessThanOne = sum(x,2) <= 1;
prob.Constraints.SumLessThanOne = SumLessThanOne;

Можно также создать пустое неравенство оптимизации при помощи optimineq или 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 OptimizationInequality array with properties:

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

  See inequality 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.

Создайте ограничение что двухэлементная переменная x должен лечь в пересечениях многих дисков, центры которых и радиусы находятся в массивах centers и radii.

x = optimvar('x',1,2);
centers = [1 -2;3 -4;-2 3];
radii = [6 7 8];
constr = optimineq(length(radii));
for i = 1:length(constr)
    constr(i) = sum((x - centers(i,:)).^2) <= radii(i)^2;
end

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

show(constr)
  arg_LHS <= arg_RHS

  where:

    arg1 = zeros([3, 1]);
    arg1(1) = sum((x - extraParams{1}).^2);
    arg1(2) = sum((x - extraParams{2}).^2);
    arg1(3) = sum((x - extraParams{3}).^2);
    arg_LHS = arg1(:);
    arg1 = zeros([3, 1]);
    arg1(1) = 36;
    arg1(2) = 49;
    arg1(3) = 64;
    arg_RHS = arg1(:);

  extraParams

Вместо того, чтобы использовать цикл, можно создать те же ограничения при помощи операций над матрицей на переменных.

constr2 = sum(([x;x;x] - centers).^2,2) <= radii'.^2;

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

Введенный в R2019b