Математическая логика в Юлии

Поддерживает ли Jump прямое использование математической логики в модели?

Я знаю, что он поддерживает условный индикатор, но как насчет этих условных операторов?

Например:

1- A bi-conditional indicator - это двоичная переменная, которая связана со статусами удовлетворенности и неудовлетворенности ограничением, касающимся текущего решения.

δi = 1 ⟺ sum(j, a_ij. x_j) <= b_i

2- Either-or Constraints обеспечение выполнения хотя бы одного из двух ограничений.

3- If-Then-Else Constraints описание ситуации, в которой мы хотим гарантировать, что если ограничение C1 выполняется, то ограничение C2 должно выполняться; в противном случае ограничение C3 должно выполняться


person linkho    schedule 31.05.2021    source источник


Ответы (2)


Поддерживает ли Юлия прямое использование математической логики в модели?

Полагаю, вы имеете в виду JuMP. (JuMP - это пакет для математической оптимизации, написанный на Julia.)

JuMP не имеет прямого синтаксиса для этих трех ограничений.

Однако все они могут быть сформулированы с помощью некоторых уловок.

В документации JuMP также есть несколько советов.

Точка (2) - это https://jump.dev/JuMP.jl/stable/tutorials/Mixed-integer%20linear%20programs/tips_and_tricks/#Big-M-Disjunctive-Constraints-(OR)

person Oscar Dowson    schedule 31.05.2021

(1) Ограничение

δ(i)=1 ⇔ sum(j, a(i,j)) ≤ b(i)

можно сформулировать как два индикаторных ограничения:

δ(i)=1 ⇒ sum(j, a(i,j)) ≤ b(i)
δ(i)=0 ⇒ sum(j, a(i,j)) ≥ b(i) + 0.0001
δ(i) ∈ {0,1} 

Я обычно опускаю 0,001 и позволяю проблеме быть немного двусмысленной при равенстве. Таким образом, решатель может выбрать лучшее. Если сумма длинная, используйте промежуточную переменную, чтобы предотвратить дублирование суммы.

(2) Или-или-ограничения. Та же идея:

δ=1 ⇒ linear constraint 1
δ=0 ⇒ linear constraint 2
δ ∈ {0,1} 

Одно из ограничений 1 или 2 будет принудительно

(3) Ограничения «если-то-еще». Т.е.

If constraint 1 then constraint 2 else constraint 3

Снова аналогично тому, что у нас было выше:

δ=1 ⇒ linear constraint 1
δ=1 ⇒ linear constraint 2
δ=0 ⇒ not linear constraint 1
δ=0 ⇒ linear constraint 3

Более сложный случай может выглядеть так:

δ=1 ⇒ y=b
δ=0 ⇒ y≠b

Второй вывод нужно разделить на две части, используя дополнительную двоичную переменную. Я оставлю это как упражнение.

person Erwin Kalvelagen    schedule 01.06.2021