変数を追加できます y そして線形等式 y=cTx+c0 いくつかのための c0。次に、元の問題は最大化に相当しますy 新しいシステムで。
状態を除いて y≥0。そこはc0 私たちは作る必要があります c0十分な大きさのためにそのいくつかの実現可能x (あれは Ax=b そして x≥0 ホールド)私たちは持っています cTx+c0≥0。その場合、非否定性が実現可能な空間の一部を切り取ることは問題ではありません。最適値は同じです。
だから選択する方法 c0?私は線形最適化の専門家ではありません。実現可能なものを見つけていますx0目的関数を最大化するものを見つけるよりも簡単ですか?もしそうなら、私たちは取ることができますc0 することが −cTx0。
与えられた係数が有理である場合、別の方法があります。まず、実現可能な多面体であることを確立しましょうx 頂点があります(空でない場合):みましょう p前記ポリトープの最小次元境界セル内の点である。矛盾するため、このセルの次元は≥1。次に、別のポイントがありますq同じセルで。セルには最小の寸法があるため、セルは無制限なので、フォームのポイントr=p+t(q−p)同じセルにあり、したがってポリトープにあります。なのでq−p≠0、そのようないくつか r 負の座標を持ち、ポリトープ条件と矛盾する r≥0。
次に、すべての係数を A そして b共通の分母を掛けて整数。しましょうn 次元(ベクトルの長さ) c)そしてましょう M 任意の係数の最大絶対値 A、 b、または c。次に、実行可能なポリトープの任意の頂点の座標をn!⋅Mn。したがって、選択c0:=n⋅n!⋅Mn+1。
[編集]
さらにもう1つの方法は、オラクルを複数回呼び出したい場合です。最初に、上記の c0=0。解または「無制限」の回答が得られれば、問題ありません。答えが「解決できない」場合、目的関数が負の解があるかどうかを調べる必要があります。したがって、設定z=−cT そして最大化 z代わりに。解決策を得たら、次のように使用できますx0。あなたが再び「解けない」を得るならば、あなたも同様に行われます。最後のケースは「無制限」の答えです。次に、これまで以上に大きなサイズを試す必要がありますc0 (少数のoracle呼び出しの場合は、急成長する関数を使用します。アッカーマン関数が使用する場合があります)。