完全多項式時間近似スキーム(FPTAS)は、関数問題、特に最適化問題の近似解を求めるアルゴリズムです。FPTASは、問題のインスタンスとパラメータε > 0を入力として受け取ります。出力として、少なくとも1000以上の値を返します。 正しい値の倍数、最大正しい値を倍します。
最適化問題の文脈では、正しい値とは最適解の値であると理解されており、FPTASは有効な解(解の値だけではなく)を生成するべきであると暗黙のうちに示唆されていることが多い。問題が自己還元性を持つと仮定すれば、値を返すことと、その値を持つ解を見つけることは同等である。
重要な点として、FPTAS の実行時間は問題サイズと 1/ε に対して多項式です。これは、一般的な多項式時間近似スキーム(PTAS) とは対照的です。一般的な PTAS の実行時間は、特定の ε ごとに問題サイズに対して多項式ですが、1/ε に対して指数関数的になる可能性があります。[ 1 ]
FPTASという用語は、FPTASを持つ問題のクラスを指す場合にも使用されることがあります。FPTASはPTASの部分集合であり、P = NPでない限り、厳密な部分集合です。[ 2 ]
FPTASにおけるすべての問題は、標準的なパラメータ化に関して固定パラメータ扱い可能である。 [ 3 ]
目的関数が多項式で制限されている強力なNP困難な最適化問題は、 P=NPでない限りFPTASを持つことはできません。 [ 4 ]しかし、その逆は成り立ちません。例えば、PがNPと等しくない場合、 2つの制約を持つナップサック問題は強力なNP困難ではありませんが、最適な目的関数が多項式で制限されている場合でもFPTASは存在しません。[ 5 ]
Woeginger [ 6 ]は、ある種の動的プログラムをFPTAS に変換するための一般的なスキームを提示した。
この方式は、入力が以下のように定義される最適化問題を扱います。
この問題には、状態を用いた動的計画法(DP)アルゴリズムが存在すると仮定する。各状態は、いくつかの要素からなるベクトルである。非負整数、入力に依存しない。DPはnステップで動作する。各ステップiにおいて、入力x iを処理し、状態の集合S iを構築する。各状態は、入力x 1 ,..., x iを使用して、問題の部分解を符号化する。DPの構成要素は以下のとおりである。
DPのアルゴリズムは次のとおりです。
DP の実行時間は、可能な状態の数に対して線形です。一般に、この数は入力問題のサイズに対して指数関数的になる可能性があります。つまり、O(nVb) になることがあります。ここで、Vは状態に存在する最大の整数です。V が O( X )の場合、実行時間は O( nXb ) になりますが、これは問題のサイズ (O(log X ) )に対して指数関数的であるため、擬似多項式時間にすぎません。
計算量を多項式にする方法は、状態空間をトリミングすることです。つまり、各ステップですべての可能な状態を保持するのではなく、状態のサブセットのみを保持し、他の状態に「十分近い」状態を削除します。特定の条件下では、このトリミングを目的関数値を大きく変化させることなく行うことができます。
これを形式化するために、対象となる問題には非負の整数ベクトルd = ( d 1 ,..., d b ) があり、これを問題の次数ベクトルと呼ぶと仮定します。任意の実数r >1 に対して、2 つの状態ベクトルs 1、s 2が(d,r) 近接であるとは、 1,..., bの各座標jについて、次の条件が満たされる場合をいいます。 (特に、あるjに対してd j =0の場合、)
問題が極めて善意に満ちていると言えるのは、以下の3つの条件を満たす場合である。
極めて善意的な問題であれば、動的計画法をFPTASに変換できます。定義:
FPTASはDPと同様に動作しますが、各ステップで状態セットをより小さなセットT kにトリミングし、各rボックスにちょうど1つの状態が含まれるようにします。FPTASのアルゴリズムは次のとおりです。
FPTAS の実行時間は、各T iにおける可能な状態の総数に関する多項式であり、これは最大でrボックスの総数であり、これは最大でRであり、これはn、log( X )に関する多項式である。。
U kの 各状態s uに対して、その部分集合T kには、 s uに (d,r)-近い状態s t が少なくとも 1 つ含まれていることに注意してください。また、各U k は、元の (トリミングされていない) DP のS kの部分集合です。FPTAS の正当性を証明するための主な補題は次のとおりです。[ 6 ] :補題 3.3
0,..., nの 各ステップkに対して、 S kの各状態s sに対して、 s sに( d , r k )-近い状態s tがT kに存在する。
証明はkに関する帰納法による。k = 0 の場合、T k = S k となる。すべての状態はそれ自身に ( d ,1)-近い。補題が k -1 に対して成り立つと仮定する。S kのすべての状態s sに対して、 s s-をS k - 1のその前任者の1 つとすると、f ( s s − , x )= s sとなる。帰納法の仮定により、 T k-1にはs s −に( d , r k-1 )-近い状態s t-が存在する。遷移によって近接性が保存されるため (上記の条件 1)、f ( s t − , x ) はf ( s s − , x )= s sに ( d , r k-1 )-近い。このf ( s t − , x ) はU kに含まれる。トリミング後、T kにはf(s t- ,x)に( d , r )-近い状態s tが存在する。このs tはs sに( d , r k )-近い。
ここで、 S n内の状態s *を考えます。これは最適解 (つまり、g ( s* )=OPT) に対応します。上記の補題により、T n内にs *に( d , r n )-近い状態t *が存在します。近接性は価値関数によって保存されるため、最大化問題ではg (t*) ≥ r (-Gn) · g ( s* ) となります。rの定義により、。 それで同様の議論は最小化問題にも当てはまる。
上記の定理により FPTAS を持つ極めて善良な問題の例をいくつか挙げます。[ 6 ]
1.最大合計を最小化することを目的とした多方向数値分割(同等の同一マシンスケジューリング)は極めて寛容です。ここでは、 a = 1(入力は整数)で、b = ビンの数(固定とみなされる)です。各状態は、b個のビンの合計を表すb個の整数のベクトルです。b 個の関数があり、各関数j は次の入力をビンjに挿入することを表します。関数g ( s )はsの最大要素を選択します。S 0 = {(0,...,0)}。極めて寛容な条件は、次数ベクトルd =(1,...,1) およびG =1 で満たされます。マシンの数が固定されている場合( rボックスの数Rがbに対して指数関数的であるため、これは必要です)、結果は均一マシンスケジューリングおよび無関係マシンスケジューリングに拡張されます。Pm||または Qm||または Rm||。
2. 同一または均一な機械の任意の固定数でのジョブ完了時間の3乗の合計 - 後者はQm||で表される- は、 a = 1、b = 3、d = (1,1,3)の場合、元は善意です。完了時間の任意の固定べき乗に拡張できます。
3. 同一または均一な機械の任意の固定数における加重完了時間の合計 - 後者は Qm|| で表される。
4. 時間依存の処理時間を持つ、同一または均一な機械の任意の固定数での完了時間の合計: Qm|time-dep|これは、完了時間の加重合計の場合にも当てはまります。
5. 任意の固定数のマシンにおける共通の納期に関する加重早期遅延: m||。
単純な動的プログラムは、上記の定式化に以下の要素を追加します。
元のDPは以下のように変更されます。
以下の条件を満たす場合、その問題は善意の問題と呼ばれます(上記の条件1、2、3を拡張したものです)。
あらゆる善意の問題に対して、動的計画法は、上記と同様のFPTASに変換できますが、2つの変更点があります(太字部分)。
上記の定理により FPTAS を持つ、善意の問題の例をいくつか示します。[ 6 ]
1. 0-1ナップサック問題は善意の問題です。ここでは、a = 2 です。各入力は 2 ベクトル (重み、値) です。b = 2 の DP があります。各状態は (現在の重み、現在の値) をエンコードします。遷移関数は 2 つあります。f 1 は次の入力項目を追加することに対応し、f 2 は追加しないことに対応します。対応するフィルタ関数は次のとおりです。h 1 は次の入力項目の重みがナップサックの容量以下であることを検証します。h 2 は常に True を返します。値関数g ( s ) は s 2 を返します。初期状態セットは {(0,0)} です。次数ベクトルは (1,1) です。優位関係は自明です。準優位関係は重み座標のみを比較します。sがtを準優位するのはs 1 ≤ t 1の場合のみです。これは、状態t が状態sよりも高い重みを持つ場合、遷移関数はtとs の間の近接性を維持しなくてもよいことを意味します(たとえば、sには後継状態があり、tには対応する後継状態がない可能性があります)。同様のアルゴリズムは、以前に Ibarra と Kim によって発表されています。[ 7 ]この FPTAS の実行時間は、次のように改善できます。整数の演算。[ 8 ]指数は後に2.5に改善された。[ 9 ]
2. 単一の機械上で、遅延ジョブの加重数を最小化するか、または早期ジョブの加重数を最大化します。1|| と表記されます。。
3. 遅延ジョブの加重数を最小化するためのバッチスケジューリング: 1|バッチ|。
4.単一マシン上で劣化するジョブの完了時間: 1|劣化|。
5. 1台のマシンでの合計遅延作業: 1||。
6. 1台の機械での加重遅延作業の合計: 1||。
上記の結果は一般的に当てはまるものの、適用できない場合もある。
1. 総遅延問題 1||Lawler [ 10 ]の動的計画法の定式化では、古い状態空間のすべての状態をB回更新する必要があります。ここで、BはX (最大入力サイズ)のオーダーです。経済的ロットサイズ決定のための DP についても同様です。[ 11 ]これらの場合、 Fの遷移関数の数はBであり、これは log( X ) に対して指数関数的であるため、2 番目の技術的条件が満たされません。状態トリミング技術は役に立ちませんが、別の技術である入力丸めが FPTAS の設計に使用されています。[ 12 ] [ 13 ]
2. 分散最小化問題 1||目的関数は これは条件2に違反するため、定理は使用できません。しかし、FPTASを設計するためにさまざまな手法が使用されています。[ 14 ] [ 15 ]
FPTASが役立つ別の種類の問題は、実数を近似する有理数を見つけることです。たとえば、無限級数を考えてみましょう。和は無理数です。これを有理数で近似するには、ある有限のkに対して、最初のk個の要素の和を計算すればよいのです。近似誤差は約 であることが示せます。したがって、εの誤差を得るには、約要素数が少ないため、これは FPTAS です。この特定の和は、O(log(ε)) 個の要素しか必要としない別の和で表現できるため、実際には、この和は ε の符号化長に対して多項式時間で近似できることに注意してください。[ 16 ] : 35、Sec.1