ブルートフォース検索の戦略はありますか?


7

エレガントな表現方法はわかりませんが、基本的にはブルートフォース検索アルゴリズムを実装したいのですが、検索スペースを列挙する方法はたくさんあります。これは私には世間知らずかもしれませんが、検索スペースを列挙する方法を選択すると、アルゴリズムが実際にうまく機能するかどうかに大きく影響すると思います。

簡略化した例として、次の決定問題を考えます。

入力:多項式p(x)整数係数と自然数ます。k

質問:ようなは存在しますか?i[k]p(i)=0

現在、この問題を解決するためのさまざまなアルゴリズムが存在する可能性がありますが、私はブルートフォースアプローチを選択することにしました。サーチスペースを列挙するには、次の方法を検討してください。

昇順戦略:私はかどうかを確認でき、その後、0であるその後、私が見つけるまで、...、ようにまたは私はすべて試す。p(1)p(2)p(3)ip(i)=0i[k]

降順戦略:場合、私がチェックすることができ、その後、0である、その後、、···、私が見つけるまで、このようなことまたは私がしてみてくださいすべての。p(k)p(k1p(k2)ip(i)=0i[k]

人気戦略:最も人気のあるソリューションの小さなリストを保存し、数値を試す前にそれらを最初に試すことができます。L[k]L

ふるい戦略:私は一種のふるい列挙を行うことができました。私はすべて2で割り切れる番号試みる、その後数が3で割り切れる次いで次いで、5、7、11、13、などを。(事前計算されたいくつかの素数のリストにアクセスできると仮定します。)[k][k]

ランダム性戦略:ランダムなビットの大きな文字列を利用する興味深い列挙戦略があるかもしれません。

基本的に、私はブルートフォース検索アルゴリズムに関する次の質問に答えたいと思っています。

質問A:特定の列挙戦略を選択するメリットはありますか?

質問B:実際に興味深い列挙戦略を選択する検索問題の例はありますか?人気戦略のバリエーションが実際に効果的に機能する検索問題があるかもしれません。


3
将来の入力を選択するために1つの入力から得られた情報を使用せず、可能なすべての入力試行するという厳密な意味での「総当たり」を意味しますか?このブルートフォースの特定の定義は、単純に並列化されているため、適切ですが、提案されているすべての戦略と互換性があります。大豊、Juhoの答えは、1つの入力から得られた情報に基づいて複数の入力を除外する「検索スペースの整理」について話します。
MSalters 2015年

1
ちらほら-アルファ/ベータ/ヒューリスティック検索(基本的にはブルートフォースで、最良の答えにはならない検索ツリーを剪定する)を使用して、Kerbal Space Programの最適なロケットステージングを数回計算しました。優先順位を手動で調整すると、桁違いに速い。特に、最高のアルファではなく、優れたヒューリスティックでノードを展開することは、私が見つけた安価なしかし良いアルファ計算方法がないので、かなり役立つようです。したがって、質問Aに対する答えは「はい」です
。– TLW

1
@MSaltersあなたのコメントで良い点を作りました。解決策がない場合でも、検索スペースの各要素を試行するため、私はそれをブルートフォース検索と呼んでいます(剪定はほとんどない)。ただし、取得した以前の知識を使用して、検索スペースで列挙する順序をインテリジェントに決定できます。また、前述のように、列挙の順序を変更すると、並列化がさらに困難になる可能性があります。
Michael Wehar

1
特定の例として、検索を簡略化できる根の和と積があります。
Mark Hurd

この投稿は、ブルートフォース検索の複雑さを説明します。cstheory.stackexchange.com/questions/14404/...
マイケルWehar

回答:


5

両方の質問に対する答えは「はい」です。間違いなく、最悪の場合、ブルートフォースで検索スペース全体を列挙する必要がありますが(解決策がないことを証明するため)、検索スペースをどのようにトラバースするを検討することは絶対に理にかなっています。一般に、AIの分野、特にSAT / CSP解法などのトピックに関する多くの文献や議論が見つかるでしょう。Russell and Norvingの本には、すばやく穏やかな紹介が記載されています。

私は数独パズルを例として使うのが好きです。部分的に埋められたパズルに解決策があるかどうかを判断するには、パズルを完了するためのあらゆる可能な方法を徹底的にチェックできます。素朴なアプローチは、ブラインドバックトラック検索です。これは非常に無駄です。より良いアイデアはこれです:次のセルに割り当てるには、常に最小の正当な値を持つセルを選択してください。一般に、これは「フェイルファーストヒューリスティック」であり、直感は、この選択はすぐに失敗する可能性が最も高いため、検索ツリーを積極的に枝刈りすることです。実際には、フィールドには既知の「知恵」があります。「成功するには、すぐに失敗する必要があります」。大まかに言えば、失敗が早いほど、問題の難しい部分により早く集中できます。

上記は非常に特定の問題であり、数独パズルにのみ当てはまるようです。幸い、そうではありません。問題をモデル化するか、SAT / CSPインスタンスなどの問題を確認することは非常に役立ちます。次に、既知のトリックをすぐに適用して、ブルートフォースを高速化したり、より優れたヒューリスティックを考案したりできます。もちろん、ブルートフォースの代わりに優れたCSP / SATソルバーを使用することで、数倍の効果が得られる場合があります。これは、ブルートフォースよりもはるかに優れたものが問題で知られている場合でも有益です。これは、インスタンスがスマートソルバーで悪用可能な構造を持っている傾向があり、同じ構造をブルートフォースなどで自分で検出することが難しいためです。

古い答えはもう少し具体性を与えます。あなたが言及するすべての戦略は、特にランダム性で実験されたと思います。たとえば、ランダムリスタート戦略は非常に強力であり、最新のソルバーで使用されています。


3

総当たり攻撃は、実際の問題の知識に基づいて、ヒューリスティックによって多少改善することができます。

特にそれがブラインドなものである場合(さまざまな試験の結果の履歴とは無関係)、どこでも機能する普遍的な戦略はありません。さらに、おそらく戦略とらえどころのない問題があります。

ヒューリスティック戦略の例は、シミュレーテッドアニーリングです。この場合、より良い解が見つかれば、それだけ最適に近づくと想定します。そのような特性は、他の質問にはまったく当てはまらない場合があります。

質問A:いいえ、盲目的に適用する一般的な戦略はありません。


@Juho:OK、OPがルールの例外を要求しているので、Bを破棄します。
Yves Daoust、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.