[英]MIP/MIQP Solver for an optimization problem with a logical function and exclusive conditions
我有以下問題:
Maximize: F1(I1) + F2(I2) + F3(I3)
Subject to:
I1 in [min1, max1] U 0
I2 in [min2, max2] U 0
I3 in [min3, max3] U 0
I1 + I2 + I3 <= Constant
Exclusive condition: When I1 > 0 I2 must be zero and vice-versa.
An arbitrary number of exclusive conditions may be provided.
Where:
F1(x) = {
0.15 x if x in [min1, min1 + 100]
0.1 x if x in [min1 + 101, min1 + 200]
0.05 x if x in [min1 + 201, max]
}
The ranges and quotients for x are arbitrary and provided as a
part of the optimization problem.
我在排他條件和邏輯 function 上苦苦掙扎,我沒有找到任何能夠處理這種情況的求解器。
有沒有能夠處理這種優化的求解器?
PS 我有一個強烈的印象,這根本不屬於 MIP/MQP 域。
我們這里有三個概念:
我將在下面討論所有這些。
第一個約束:
x ∈ [L,U] ∪ {0}
通常被描述為 x 是一個半連續變量。 許多求解器對此有直接支持。 如果不是,您可以使用二進制變量 δ:
δ⋅L ≤ x ≤ δ⋅U
δ ∈ {0,1}
第二個約束
x*y = 0
是一個非凸二次約束。 這有時稱為互補性約束。 一些求解器可以直接處理這個問題。 我們還可以使用指標約束或二元變量。 例如,我們可以使用與以前相同的二進制變量:
δ(i)⋅L(i) ≤ x(i) ≤ δ(i)⋅U(i) # all x(i) are semi-continuous
δ(1) + δ(2) ≤ 1 # x(1)*x(2) = 0
δ(i) ∈ {0,1}
(Assumed:L(i) > 0 or U(i) < 0).
最后一件事( F1(x)
)只是一個分段線性 function 。 這可以通過多種方式實現。 一些求解器為此提供了特殊功能。 否則,最簡單的方法是使用所謂的 SOS2 集。 許多求解器都支持這些。 參見例如: https://yetanothermathprogrammingconsultant.blogspot.com/2019/02/piecewise-linear-functions-and.html 。 可以在以下位置找到一個很好的解釋: https://www.amazon.com/Model-Building-Mathematical-Programming-Williams/dp/1118443330 。
結論:稍加努力,這可以以線性方式編寫。 精確的實現很大程度上取決於所使用的建模工具或求解器。 有關更多信息,請參閱這些文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.