制約条件の定式化で参考になった手法を記載します。
#2値
説明変数に2値(0:なし、1:あり)を使用ケースがありますが、その際に使用するテクニック
##選択
説明変数
x[j] (j:1~n)
x[j] ∈{0,1}
どちらか一方だけ必ず
x[j1] + x[j2] = 1
少なくとも一方
x[j1] + x[j2] ≧ 1
一方を優先
x[j1] ≧ x[j2]
応用が利きそうです。
##条件分岐
説明変数
y[j] (j:1~n)
0≦y[j]≦R
x[j] (j:1~n)
x[j] ∈{0,1}
if y[j] == 0
価値 = 0
else
価値 = 100
x[j] = 0 → 価値なし
x[j] = 1 → 価値あり
価値 = 100 × x[j]
y[j] ≦ R × x[j] :価値がない場合、y[j] = 0
0≦y[j]≦R
##制約条件の緩和
説明変数
y[j] (j:1~n)
0≦y[j]≦R
A[j] × y[j] ≦ C[j]
B[j] × y[j] ≦ C[j]
上記の制約条件があり片方だけ満足すればいい場合
x[A] Aの制約が有効・無効
X[B] Bの制約が有効・無効
x[A][B] ∈{0,1} 0:無効 1:有効
X[A] + X[B] = 1
A[j] × y[j] ≦ C[j] × Big-M(1 - x[A])
B[j] × y[j] ≦ C[j] × Big-M(1 - x[B])
Big-M 制約にならない大きな数字