難治性への対処:NP完全問題


43

私はプログラマーであり、NP完全な問題があり、それを解決する必要があると仮定します。NPCの問題に対処するための方法は何ですか?このトピックに関する調査などがありますか?


4
どの問題を抱えているかを述べると便利です。
デイブクラーク

2
この質問は特定の問題に関するものではありません。必要に応じて将来それらを適用できるように、テクニックを知りたいです。
匿名

1
これは単に尋ねるようなものです。一般に多項式時間で問題を解決するにはどうすればよいですか?問題は無数にあり、それぞれに専用の解決策があります。
デイブクラーク

3
@DaveClarke:確立されたテクニックがあるので、質問は有効なものだと思います。ただし、より焦点を絞った質問の方が良いかもしれません。
ラファエル

回答:


54

よく研究された戦略がいくつかあります。アプリケーションに最適なのは状況に依存します。

  • 最悪の場合の実行時間の改善
    問題固有の洞察を使用すると、多くの場合、素朴なアルゴリズムを改善できます。たとえば、[1]の頂点カバーにはアルゴリズムがあります。これは、素朴なよりも大幅に改善されており、インスタンスサイズが適切なものになる可能性があります。O(cn)c<1.3Ω2n

  • 予想される実行時間の改善
    ヒューリスティックを使用すると、多くのインスタンスで高速なアルゴリズムを頻繁に考案できます。それらが実際に出会うもののほとんどを含む場合、あなたは黄金です。例としては、非常に複雑なソルバーが存在するSATや、シンプレックスアルゴリズム(多項式問題を解決しますが、それでも)があります。しばしば役立つ基本的なテクニックの1つは、ブランチアンドバウンドです。

  • 問題を制限
    する入力についてより多くの仮定を立てることができる場合、問題は簡単になる可能性があります。

    • 構造プロパティ
      入力には、問題の解決を簡素化するプロパティがあります。たとえば、平面性、二部性、グラフのマイナーの欠落などです。CLIQUEが簡単なグラフクラスの例については、こちらをご覧ください。
    • 入力の境界関数
      注目すべきもう1つのことは、パラメーター化された複雑さです。いくつかの問題は、時間で可解であるためのいくつかのインスタンス・パラメータ(最大ノード次数、最大エッジ重み、...)と定数。設定で多対数関数によってをバインドできる場合、多項式アルゴリズムを取得します。Saeed Amiri彼の答えで詳細を述べていますO2knmkmkn
    • 入力量の制限
      さらに、いくつかの問題は、擬似多項式時間で実行されるアルゴリズムを認めます。つまり、そのランタイムは、入力の一部である数の多項式関数によって制限されます。素朴な素数チェックは一例です。これは、インスタンスでエンコードされた数量が適切なサイズである場合、適切に動作する単純なアルゴリズムがある可能性があることを意味します。
  • 結果を
    弱めるこれは、エラーまたは不完全な結果を許容することを意味します。2つの主なフレーバーがあります。

    • 確率的アルゴリズム
      ある程度の確率でのみ正しい結果が得られます。いくつかの亜種、最も注目に値するがあるモンテカルロラス・ベガスのアルゴリズムが。有名な例は、Miller-Rabinの素数性検定です。
    • 近似アルゴリズム
      最適なソリューションを探すのではなく、ほぼ最適なソリューションを探します。いくつかのアルゴリズムは相対誤差を許容し(「最適値の2倍以上」)、他のアルゴリズムは誤差の絶対値(「 +最適値以上」)を制限します。多くの問題については、どれだけうまく近似できるかが公開されています。多項式時間で任意に近似できるものもありますが、それを許可しないものもあります。多項式時間近似スキームの理論を確認してください。5

徹底的な処理については、Hromkovičによる困難な問題のアルゴリズムを参照してください。


  1. シンプルさが美しさ:頂点カバーの改善された上限は、 Chen Jianer、Iyad A. Kanj、Ge Xia(2005)

4
もちろん、モンテカルロまたはラスベガスアルゴリズムがNP困難な問題でポリタイムで実行される可能性は非常に低いです
Sasho Nikolov

12

他の回答では、より理論的な観点からこれに対処しています。より実用的なアプローチを次に示します。


「典型的な」NP完全決定問題(「これらの制約をすべて満たすものが存在するか?」)の場合、これは私が常に最初に試みることです:

  1. 問題のインスタンスをSATインスタンスとしてエンコードする簡単なプログラムを作成します

  2. 次に、優れたSATソルバーを使用して実行し(たまたま最速のマルチコアコンピューターを使用して)、何が起こるかを確認します。

最初に小さいインスタンスで試して、どれくらい時間がかかるかを理解してください。


驚くべきことに、このアプローチは、現在の問題に特化した独自のソルバーを実装するよりもはるかに優れています。

  • SATソルバーは非常に賢く、最適化されています。バックトラッキング検索の独自の実装よりも、コードの最適化にどれだけ時間が無駄になっても簡単に実行できます。また、整数線形計画法ソルバーなど、多くの市販の代替品よりも簡単に優れています。

  • これには、プログラミングはほとんど必要ありません。ステップ1は比較的簡単で、パフォーマンスは重要ではありません。Pythonなどのスクリプト言語を使用できます。他の誰かが、ステップ2に必要なすべての実装をすでに行っています。


典型的なNPハード最適化問題(「これらの制約をすべて満たす最小のものを見つける」)の場合、このアプローチは機能する場合としない場合があります。

それを簡単決定問題変えることができるなら(「これらの制約をすべて満たすサイズ4のものがありますか?」「サイズ3はどうですか?」)、素晴らしい、決定問題で上記と同じアプローチに従ってください。

そうでない場合は、小さなソリューション(必ずしも最小のソリューションである必要はありません)を見つけようとするヒューリスティックソルバーに頼ることができます。例えば:

  1. 問題を(重み付き)MAX-SATインスタンスとしてエンコードします。

  2. UBCSATパッケージのヒューリスティックソルバーを使用します。ヒューリスティックソルバーは簡単に並列化します。数百台のコンピューターがあるコンピュータークラスターを見つけようとします。必要なだけソルバーを実行して、これまでに見つけた最適なソリューションを使用できます。


8

パラメータ化された複雑さ

難治性を攻撃する1つの方法は、パラメーター化された複雑さのコンテキストで問題を考えることです。

kfkpnkfk

Onfk

これらは、W階層のさまざまなクラスのサンプルです。

  1. 頂点カバーはFPTです(無向グラフ上の頂点の分離パスも同様です)
  2. 独立集合とクリークは両方ともW [1]完全です
  3. 支配的なセットはW [2] -Completeです。

これらは、NP問題をより正確な方法で分類するための別のレベルの複雑さであり、さらに必要な場合は、パラメーター化された回路の複雑さおよび Downey et al(1998)によるW階層を参照できます。

また、さらに必要な場合は、Flum and GroheのParameterized Complexity Theoryを読んでください。

そして最後に:

パラメータ化された複雑さ対近似アルゴリズム:

問題にFPTAS(完全な多項式時間近似スキーム)がある場合、FPT(明らか)であることが知られていますが、逆方向にはよく知られているものはなく、PTASとXPの関係に関するいくつかの作業もありますが、 PTASとW階層との密接な関係ではありません(少なくとも現時点ではわかりません)。

また、いくつかの異なるパラメータを修正する場合もあります。たとえば、グラフ内の最長パスの長さは制限され、ソリューションのサイズは制限されます(たとえば、フィードバック頂点セット)。

実用的な使用例:

一部の人々は、パラメータ化された複雑さは実際には役に立たないと信じているかもしれません。しかし、これは間違っています。パラメーター化されたアルゴリズムの多くは、いくつかのパラメーターを修正できる実際のアプリケーションで発見されています。以下に例を示します。

  1. 22On2Okk=10

  2. TSPの最速かつ最も正確なヒューリスティックアルゴリズムの1つは次のとおりです。問題のパラメーター化を使用するツアーマージと分岐分解(直接ではなく、分岐分解と使用する動的プログラミングアプローチはいくつかの適切な仮定に基づいています)。


5

NPの完全性は、最悪の場合の難治性です。どの問題に取り組んでいるかに応じて、多くのクラスのインスタンスが実際には妥当な時間で解決可能になる場合があります(ただし、適切なランタイムを取得するには、より特殊なアルゴリズムが必要になる場合があります)。

問題から、ブール充足可能性や整数線形計画法などの優れたソルバーを使用できる問題への効率的な削減があるかどうかを検討してください。


4

vvjvkGG許容できるアルゴリズムを使用して、指数関数的な時間で問題を解決します。指数アルゴリズムの中で、問題の入力サイズが特定の値よりも小さい場合、それらの一部の実行時間は許容できる場合があります。


2

いくつかの回答で簡単に触れましたが、実際には、NP完全問題は常に解決(または近似)されていることを強調させてください。NP完全問題を実際に解決できる主な理由は次のとおりです。

実際に遭遇するインスタンスは「最悪のケース」ではありません。

不一致のもう1つの理由は次のとおりです。

ヒューリスティックアルゴリズムを正式に分析することは困難です。

実際には、ヒューリスティックアルゴリズムを使用してNP完全問題を解決し、最善の結果を期待します。結果はしばしば驚くべきものです。

他の回答で触れられた別の問題は次のとおりです。

指数アルゴリズムが十分に速い場合があります。

それはもちろん問題に依存します。ビッグデータが関係する場合、反対の格言があります。

実行可能な唯一のアルゴリズムが準線形である場合もあります。


ここの群衆はむしろ理論的に傾いているのではないかと思う。メインのstackexchangeサイトでより良い答えを得るかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.