最適化アルゴリズムの最適性を評価する一般的な方法はありますか。たとえば、NPハード問題またはNP完全問題を解くアルゴリズムなどです。
これまでに私が思いついた唯一の方法は、アルゴリズムの結果を既知の最適解と比較することです。
そうでない場合、いくつかの特別な問題のための特定の方法はありますか?
編集明確にするために:最適性とは、結果が最適解の結果にどれだけ近いかを意味します。
最適化アルゴリズムの最適性を評価する一般的な方法はありますか。たとえば、NPハード問題またはNP完全問題を解くアルゴリズムなどです。
これまでに私が思いついた唯一の方法は、アルゴリズムの結果を既知の最適解と比較することです。
そうでない場合、いくつかの特別な問題のための特定の方法はありますか?
編集明確にするために:最適性とは、結果が最適解の結果にどれだけ近いかを意味します。
回答:
問題の種類によって異なります。
ある場合は多項式時間近似スキーム(PTAS)の問題(例えばユークリッドTSP)は、その後、あなたは近い多項式時間で最適解に任意だ解決策を得ることができます。つまり、e > 0 ごとに、問題の近似解を見つける多項式時間アルゴリズムがあり、最適解の(1+ e)内にあることが保証されています。その場合、eの同じ値に対して2つのアルゴリズムのランタイム/メモリの複雑さを比較するだけです。あるアルゴリズムが他のアルゴリズムと同じ「最適性保証」を行うことができるが、実行時間/メモリコストが低い場合は、おそらくそれがより良いアルゴリズムです。
問題がAPXであるがPTASではない場合、つまり、最適解の定数係数内の解を生成することが保証されている多項式時間近似アルゴリズムがある場合は、その定数係数を比較できます。係数が低い方がより良いソリューションを生成します(ただし、実行時間/メモリコストが高くなるという犠牲を払うことがよくあります)。
問題がこれらのクラスのどちらにもない場合は、ランダムな問題のセットに対するソリューション、または既知の最適なソリューションを持つ問題のソリューションを比較することが最善の方法だと思います。
一般的な方法はないと思いますが、確かにそうする方法はあります。
たとえば、問題SET-COVERを取り上げます。問題を知らない人のために次のとおりです:
要素のセットB={1,2,...,m}
と、和集合がS_1, S_2, ..., S_n
であるいくつかのサブセットが与えられB
ます。ユニオンがまだ存在するように、これらのサブセットの最小数を見つけようとしていますB
。この問題の実際の典型的な例は、近隣のコレクションが与えられ、各近隣がd
最寄りの学校から少し離れた場所でサービスを受けるように学校を配置するのに最適な場所を見つけようとしている場合です。この場合、B
は近隣のS_x
セットでd
あり、町内のすべてのセットで構成されx
ます。
この問題がNP-COMPLETEであることを証明します。ただしS_i
、カバーされていない要素の数が最も多いセットを繰り返し選択する単純な貪欲なソリューションがあります。そして、このアルゴリズムがうまく機能することを証明できます。
最適なアルゴリズムがk
セットで構成されている場合、貪欲なアルゴリズムはk ln(n)
セットのみで構成され、lnは自然対数です。
「最適性パフォーマンス」のほぼすべての定義について、プログラムに「最適性パフォーマンス」Aまたは「最適性パフォーマンス」Bがあるかどうかを判別する問題は、一般に決定できません(以下の証明)。これは、アルゴリズムの最適性を常に示す単一の方法がないことを意味します。
ただし、近似アルゴリズムを分析するときによく適用される方法があります。多くの場合、近似アルゴリズムは、その解が最適解からどれだけ離れているかという保証によって評価されます。問題と近似の例を示します。これは、比率を証明するために非常に一般的に使用される方法である「下限」法を使用して証明します。
問題の問題は「トラックの積載」問題です。私たちは多くの同一のトラック(好きな数だけ)を持ち、それぞれ最大でTの重量の積載物を運ぶことができます。これらのトラックに積載したいオブジェクトがn輸送。すべてのオブジェクトiには重みw_iがあり、ここでw_i <= Tです(したがって、自分でトラックに収まらないアイテムはありません)。アイテムをパーツに分割することはできません。トラックをいっぱいにして、必要なトラックをできるだけ少なくしたいと考えています。この問題はNP完全です。
この問題には、非常に簡単な近似アルゴリズムがあります。次のアイテムが収まらないほどトラックがいっぱいになるまで、アイテムをトラックに積み始めるだけです。次に、別のトラックを取り、このトラックに前のトラックに収まらなかったこのアイテムを積み込みます。このトラックにはアイテムをこれ以上積みません。代わりに、新しいトラックを取り、収まらなくなるまでたくさんのアイテムで再び満たし、最後のアイテムを自分のトラックに再び置きます。
このアルゴリズムは、問題のいわゆる2近似です。最適なソリューションが必要とする最大2倍の数のトラックを使用します。「せいぜい」が非常に重要です。運が良ければ最適な解決策を見つけることができますが、少なくともそれほど悪くはありません。
これを証明するために、まず必要なトラックの最適数の下限を定義します。このために、アイテムを部品に切断することが許可されていると想像してください。そうすれば、最後のトラックを除いて、すべてのトラックを完全に満たすことができます。これを実行した場合に必要なトラックの数は、元の質問に必要なトラックの数の下限です。「最良の」場合、最適なソリューションは常にすべてのトラックを完全に満たします。この場合、トラックの数は同じですが、最適なソリューションでトラックが空のままである場合、必要なのはより多くのトラックだけです。
次に、近似アルゴリズムを見てみましょう。すべてのステップで、(部分的に)2台のトラックを満杯にしていることに注意してください。また、アルゴリズムがどのように機能するかによって、最初のトラックのアイテムと2番目のトラックのアイテムは一緒に最初のトラックに収まらないため、それらの合計は少なくともTです。これは、すべてのステップで少なくとも2台のトラックのアイテムに相当するトラック。これを下限と比較してください。その場合、1台のトラックに1トラック分の商品を積み込みます。言い換えると、近似アルゴリズムは、下限の「解」に非常によく似た解を(線形時間で)計算しますが、1つではなく2つのトラックを使用します。したがって、最適なアルゴリズムの下限の最大2倍の数のトラックを使用するため、最適なアルゴリズムの最大2倍の数のトラックを使用します。
このアルゴリズムは、定数係数の近似値を提供します。最適解の最大2 倍の悪影響があります。他の測定のいくつかの例:最適解よりも多くてもC(追加エラー、非常に珍しい)、最適解よりもn倍多くても悪いcログ、最大でcn倍でも最適解よりも悪い、多くてもc 2 ^(dn)は、最適なソリューションと同じくらい悪い(非常に悪い。たとえば、一般的なTSPは、この種の保証のあるアルゴリズムしか認めない)。
もちろん、証明する要素が証明できる最良の要素であることを確認したい場合は、アルゴリズムが提供するソリューションが実際に可能な限り悪いインスタンスを見つけてください。
また、NP困難ではない問題に対して近似アルゴリズムを使用する場合があることに注意してください。
私はこれを(もっとたくさんの中で)大学の近似アルゴリズムコースで学びました。
決定不可能性の証明:Pを問題とし、AとBをPの近似アルゴリズムとし、AとBが「最適性」の賢明な定義に対して同じ「最適性」を持たず、AとBの実行時間が両方ともオメガである場合(1)(一定の時間よりも厳密に遅い、つまりインスタンスが大きくなると遅くなる)、AとBの両方が常に停止する場合。
Dを次のように計算できると主張するプログラムとしましょう:Pの近似を計算するプログラムCが与えられたら、十分に大きな入力に対して、それがAと同じかBと同じかを判断します(したがって、これを使用してプログラムを分類できます)それらの最適性に応じて)。
次に、Dを使用して停止問題を解決できます。Eをプログラム、Fをこのプログラムの入力とします。Dを使用して、Eが入力Fで停止するかどうかを決定します。
次のことを行うプログラムGを設計します。問題Pの入力Sが与えられると、FでEを実行し、SでAを並行して実行します。EがFで停止すると、Aの実行を停止し、代わりにSでBを実行して、Bの結果を返します。Eが停止する前にAが停止すると、Aの結果が返されます。
GでDを使用すると、EがFで停止するかどうかが決定されます。EがFで停止する場合、入力Sが十分に大きい場合、AがSで停止する前にEがFで停止します(Eが停止するのにかかる時間は、 Aとは異なり、入力)。したがって、DはGがBの最適性特性を持っていると報告します。EがFで停止しない場合、DはGがAの最適性特性を持っていると報告します。