私は現在、(少しの調査の後)ヒルクライミングの使用、より具体的にはショットガン(またはランダムリスタート)ヒルクライミングアルゴリズムのアイデアが最適であるように見える問題の解決策に取り組んでいます。最適な開始値を見つける方法を知る手がかりはありません。
しかし、このタイプのアルゴリズムについては、その背後にある基本的な考え方を除いて、多くの情報はありません。
[Shotgun]ヒルクライミングは、ヒルクライミングアルゴリズムの上に構築されたメタアルゴリズムです。ランダムな初期条件で、毎回山登りを繰り返します。最高のが維持されます。山登りの新しいランが保存された状態よりも優れた生成する場合、保存された状態を置き換えます。
私がこれを正しく理解している場合、これは次のようなものを意味します(最大化を想定):
x = -infinity;
for ( i = 1 .. N ) {
x = max(x, hill_climbing(random_solution()));
}
return x;
しかし、これを本当に効果的にするにはどうすればよいですか?これは通常の山登りよりも優れていますか?ランダムな開始値を使用すると、特に巨大な検索スペースで多くの効果があるとは信じがたいです。より正確には、私は疑問に思います:
- (つまりを実装)を選択するための、特に以前の反復の(中間)結果を知るための優れた戦略はありますか?
random_solution
- どのようにを選択するか、それは、完全な解が(かなり)見逃されないことを非常に確実にするために必要な反復回数です。