web-dev-qa-db-ja.com

最適化アルゴリズムの最適性を評価する一般的な方法はありますか?

最適化アルゴリズムの最適性を評価する一般的な方法はありますか。たとえば、そうでなければNP困難な問題またはNP完全な問題を解決するアルゴリズムなどです。

これまでに思いついた唯一の方法は、アルゴリズムの結果を既知の最適解と比較することです。

そうでない場合、いくつかの特別な問題のための特定の方法はありますか?

[〜#〜] edit [〜#〜]明確にするために:最適性とは、結果が最適解の結果にどれだけ近いかを意味します。

9
scravy

問題の種類によって異なります。

問題に対して 多項式時間近似スキーム(PTAS) がある場合(たとえば、ユークリッドTSP)、多項式時間の最適解に任意に近い解を得ることができます。つまり、e> 0ごとに、問題の近似解を見つける多項式時間アルゴリズムがあり、(最適解の1 +e)。その場合、eの同じ値に対して2つのアルゴリズムのランタイム/メモリの複雑さを比較するだけです。 1つのアルゴリズムが他のアルゴリズムと同じ「最適性保証」を行うことができるが、実行時間/メモリコストが低い場合、それはおそらくより良いアルゴリズムです。

問題が APXであるがPTASではない の場合、つまり、最適解の定数係数内の解を生成することが保証されている多項式時間近似アルゴリズムがある場合は、その定数係数を比較できます。係数が小さい方がより良いソリューションを生成します(ただし、実行時間/メモリコストが高くなるという犠牲を払うことがよくあります)。

問題がこれらのクラスのどちらにもない場合は、ランダムな問題のセットに対するソリューション、または既知の最適なソリューションを持つ問題のソリューションを比較することが最善の方法だと思います。

3
nikie

プログラムが「最適性パフォーマンス」Aと「最適性パフォーマンス」Bのどちらを持つかを、「最適性パフォーマンス」のほぼすべての定義に対して決定する問題は、一般に決定不可能です(以下の証明)。これは、アルゴリズムの最適性を常に示すことができる単一の方法がないことを意味します。

ただし、近似アルゴリズムを分析するときによく適用される方法があります。多くの場合、近似アルゴリズムは、その解が最適解からどれだけ離れているかという保証によって評価されます。問題と近似の例を示します。これは、比率を証明するために非常に一般的に使用される方法である「下限」法を使用して証明します。

問題の問題は「トラックの積載」問題です。同一のトラックが多数あり(それぞれ好きなだけ)、重量が最大でTの積載物を運ぶことができます。これらのトラックに積載したいオブジェクトがn個あります輸送。すべてのオブジェクトiには重みw_iがあり、ここでw_i <= Tです(したがって、自分でトラックに収まらないアイテムはありません)。アイテムをパーツに分割することはできません。トラックをいっぱいにして、できるだけ少ないトラックが必要になるようにします。この問題はNP完全です。

この問題には、非常に簡単な近似アルゴリズムがあります。次のアイテムが収まらないほどトラックがいっぱいになるまで、アイテムをトラックに積み始めるだけです。次に、別のトラックを取り、このトラックに前のトラックに適合しなかったこのアイテムを積み込みます。このトラックにはこれ以上アイテムをロードしません。代わりに、新しいトラックを取り、収まらなくなるまでたくさんのアイテムで再び満たし、最後のアイテムを自分のトラックに再び置きます。

このアルゴリズムは、問題のいわゆる2近似です。最適なソリューションが必要とする最大2倍の数のトラックを使用します。 「せいぜい」が非常に重要です。運が良ければ、最適な解決策を見つけることができますが、少なくともそれほど悪くはありません。

これを証明するために、まず必要なトラックの最適数の下限を定義します。このために、アイテムをパーツにカットすることが許可されていると想像してください。そうすれば、最後のトラックを除いてすべてのトラックを完全に満たすことができます。これを実行した場合に必要なトラックの数は、元の質問に必要なトラックの数の下限です。「最良の」場合、最適なソリューションは常にすべてのトラックを完全に満たします。この場合、トラックの数は同じですが、最適なソリューションでトラックが空のままである場合、必要なのはより多くのトラックだけです。

次に、近似アルゴリズムを見てみましょう。すべてのステップで、(部分的に)2台のトラックを満杯にすることに注意してください。また、アルゴリズムがどのように機能するかによって、最初のトラックのアイテムと2番目のトラックのアイテムは一緒に最初のトラックに収まらないため、それらの合計は少なくともTです。これは、すべてのステップで少なくともtwoトラック上のアイテムのトラック価値。次に、これを下限と比較します。その場合、トラックの価値のあるトラック全体をoneトラックにロードします。言い換えると、私たちの近似アルゴリズムは、(線形時間で)下限の「解」に非常によく似ている解を計算しますが、1つではなく2つのトラックを使用します。したがって、最適なアルゴリズムの下限の最大2倍の数のトラックを使用するため、最適なアルゴリズムの最大2倍の数のトラックを使用します。


このアルゴリズムは、定数係数の近似値を提供します。最適な解と同じように、最大​​で2timesほど悪いです。他の測定のいくつかの例:最適解より多くてもC(追加エラー、非常に珍しい)、最高でc log最適解のn倍、最大で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の最適性特性を持っていると報告します。

1
Alex ten Brink

一般的な方法はないと思いますが、確かにそうする方法はあります。

たとえば、問題SET-COVERを取り上げます。問題を知らない人のために次のとおりです:

要素のセット_B={1,2,...,m}_と、その和集合がBであるいくつかのサブセット_S_1, S_2, ..., S_n_が与えられます。ユニオンがBであるように、これらのサブセットの最小数を見つけようとしています。この問題の実際の典型的な例は、近隣のコレクションが与えられ、各近隣がdから一定の距離以内に整備されるように学校を配置するのに最適な場所を見つけようとしている場合です。最寄りの学校。この場合、Bは近隣のセットであり、_S_x_は町dx内のすべてのセットで構成されます。

この問題がNP-COMPLETEであることを証明します。ただし、カバーされていない要素が最も多いセット_S_i_を繰り返し選択する単純な貪欲なソリューションがあります。そして、このアルゴリズム うまくいく であることを証明できます。

最適なアルゴリズムがkセットで構成される場合、貪欲なアルゴリズムはk ln(n)セット以下で構成されます。ここで、lnは自然対数です。

1
tskuzzy