web-dev-qa-db-ja.com

整数線形プログラムの*内*での最小/最大の使用

私は、目的関数がmaxにそれぞれの係数を乗じた決定変数から追加の重みを加える線形プログラムをセットアップしようとしています。

これを念頭に置いて、minまたはmax演算子を使用する方法はありますか 以内に 線形プログラムの目的関数?

例:

Minimize
    (c1 * x1) + (c2 * x2) + (c3 * x3) + (c4 * max(c1*x1, c2*x2, c3*x3)) 
subject to
    #some arbitrary integer constraints:
    x1 >= ...
    x1 + 2*x2 <= ... 
    x3 >= ...
    x1 + x3 == ...

ご了承ください (c4 * max(c1*x1, c2*x2, c3*x3))は、私が懸念している「余分な重み」の用語です。 c4は「追加の重み」係数を示します。また、x1x2x3は 整数 この特定の例では。

上記は線形計画法が提供する範囲の外にあるかもしれないと思います。しかし、おそらくこれをハック/再フォーマットして有効な線形プログラムにする方法はありますか?

この問題が完全に線形計画の範囲外である場合、おそらく誰かがこのタイプの問題により適した最適化パラダイムを推奨できますか? (すべての可能な解決策を手動で列挙およびチェックすることを回避できるものであれば何でも役に立ちます。)

28
solvingPuzzles

X4などの補助変数を制約付きで追加します。

x4 >= c1*x1
x4 >= c2*x2
x4 >= c3*x3  
Objective += c4*x4
44
fairidox