web-dev-qa-db-ja.com

登山アルゴリズムの簡単な例

私は、ヒルクライミングアルゴリズムと少し混同しています。そのツリーで最初の解が見つかるまでアルゴリズムを「実行」し(「a」は初期状態、hとkは最終状態)、状態に近い数はヒューリスティック値であると言います。これがツリーです:

enter image description here

私の質問:ヒルクライミングをツリーで実行しようとしているので、a-> f-> gを開始し、次に何を(結果なしで)終了しますが、ヒルクライミングは戻れず、 new choice(example j or e)?これは正しいですか ?戻ることができたらどうやって?最初の選択例を変更する場合、fの代わりにgまたはjの代わりにeを選択します

私の質問が単純すぎる場合は申し訳ありません。

16
Iakob Fokas

ヒルクライミングで局所的最大値にとどまるのを避ける一般的な方法は、ランダムな再起動を使用することです。あなたの例では、Gが局所的最大値である場合、アルゴリズムはそこで停止し、再起動する別のランダムノードを選択します。したがって、JまたはC(またはA、B、またはD)が選択された場合、HまたはKでグローバルな最大値を見つけることができます。時間/リソースの制限と問題のスペースに依存します。

ヒルクライミングのようなローカル検索は完全ではなく、グローバルな最大値を見つけることを保証できないことに注意してください。もちろん、利点はリソースの一部を必要とすることです。実際には、適切な問題に適用され、非常に効果的なソリューションです。

13
Tyson

シミュレーテッドアニーリング という手法を使用して、検索がローカルミニマムにとどまるのを防ぐことができます。基本的に、シミュレーテッドアニーリングには、準最適な近隣状態に移行する可能性を制御するパラメーターTがあります。 Tが高い場合は、準最適な移動を隣接状態に行う可能性が高く、そこでスタックするとローカルミニマムから逃れる可能性がありますが、通常の山登りを使用した場合はそうなりません。

2
adijo

ヒルクライミングは、ローカルの最小値/最大値にとどまることを保証するものではありません。ただし、最も純粋な形式のヒルクライミングのみがバックトラックを許可しません。

(時間とメモリを犠牲にして)ローカルミニマムの問題を回避するヒルクライミングの単純なリフは、以前の悪い結果を覚えて意図的に回避するタブー検索です。

1
Novak

実際、ヒルクライミングでは、状態を追跡していません(ローカル検索)ため、最大値から離れることになるため、通常はバックトラックしません。バックトラッキングもタブーサーチもどちらも質問に答える助けにはなりません。前者はあなたを局所的最大値から遠ざけ、後者は同じ局所的最大値を再訪することを防ぎます。どちらも、グローバルな最大値に到達するのに役立ちません。 –タイソン12年10月16日22:59

「以前の悪い結果を覚えていて、意図的にそれらを避けている」私は同意できません、あなたはタブーとして良い解決策もマークしますが、あなたは再び同じ道をたどりたくありません。 –

0
vikas sharma

ヒルクライミングの問題の1つはローカルミニマムで立ち往生しています。これはFに達したときに発生します。ツリーを検索し、再び最適なソリューションを見つけます。再びローカルミニマムで動けなくなる場合は、他のランダムノードで再起動する必要があります。通常、Noには制限があります。最適なソリューションを見つけるこのプロセスをやり直すことができます。この制限に達した後、プロセス中に到達したすべてのローカルミニマムの中で最小のものを選択します。まだ完全ではありませんが、これはグローバルな最適なソリューションを見つける可能性が高くなります。

0
kriti gupta

解決策は次のとおりです。

A-> F、可能な限りコストF-> G、コスト3で、パスはありません。

Gはキュー/スタック/優先度キューまたは使用するデータ構造に既に挿入されているため、G以外の最小コストから再起動します。

したがって、E-> Iですが、Eよりもコストが高いため、スタックしています:S

F E&G以外の最小コストから再起動します。したがって、Jを選択します。これは、JがBよりもコストが低く、差が2であるためです。つまり、J = 8 B = 10

コスト0のJ-> K、したがってKが目標

注:ポイントをランダムに選択するために提案されている山登りのバリエーションは、既にアクセスしたノード以外の最小コストを選択する方が、ランダムに選択するよりも優れています。

別の注意:Eよりも高い値を持っているためにノードEがIにアクセスしなかった場合、アルゴリズムは既にデータ構造に挿入しているため、既にアクセスした以外の最小コストを選択すると、Iから新しいパスが作成されます一度もアクセスされたことがないため、Jよりも低い値になります。これは、スキップした唯一のパスです。

0
Mohamed Horani