さらに読む前に、数独ゲームとその解決方法を知っていると仮定してください。
だから私はブルートフォースで数独ソルバーを作成しました:アルゴリズムは次のようになります
ブルートフォースアルゴリズム
1。 (ネストされた)各セルに最初の可能性を適用します
2。 trueの場合、isSolvedを確認しますか?休憩:それ以外の場合は、2番目の可能性を適用して繰り返します。
上記のB.F.アルゴリズムは、簡単な問題と中程度の問題には機能しますが、各セルに多くの可能性がある難しい問題ですが、ネストされたforループのためにプログラムがクラッシュします
私のバックトラッキングアルゴリズムは、同じ最初のアルゴリズムを使用して検索を絞り込み、次に
6x6グリッドにBackTrackingアルゴリズムを適用しましたが、動作しますが、9x9グリッドにはまだ適用していません。
シミュレーテッドアニーリングアルゴリズム:
今私の質問のために:
- シミュレーテッドアニーリングアルゴリズムは正しいですか?
これは シミュレーテッドアニーリング ではありません。あなたが説明するものは 確率的山登り法 と呼ばれます。 SAは、古い構成よりも悪い場合(および時間の経過とともにその確率が低くなる場合)、特定の確率で新しい構成も受け入れます。「エラー数」を正確に計算する方法を指定しなかったため、 、すでに述べたように、「隣接する解」を生成する方法。非決定論的アルゴリズムが極小値でスタックする場合(つまり、エラーカウント0の解を生成しない場合)は、それらの詳細によって異なります。正しいSAアルゴリズムを実装した場合でも、グローバル最適が見つかる保証はありません。おそらくここで探しているものです。
- 明らかに、BackTrackingはBruteForceよりもはるかに速く問題を解決します。SimulatedAnnealingはどれだけ速く問題を解決しますか?
これは、両方の実際の実装と、各実装にどれだけの最適化作業を投資するかによって異なります。ただし、実際のSAアルゴリズムでは、「初期温度」と「冷却」率を指定する必要があります。これらのパラメーターを誤って指定すると、非常に遅いアルゴリズムになるか、または、解決策がまったく見つからないアルゴリズム。単純な「山登り法」を使用すると、おそらく後者が得られます。
- 手順3でランダムな近傍解を生成する方法
さまざまなことを試すことができますが、1つの単純なアプローチは、おそらく1つのセルを変更し、1つの番号を別のセルと交換することです。もう1つの簡単なアプローチは、グリッド全体で1から9までの各桁を正確に9回分散してから、セルの内容をランダムに交換することです。
この古いSO質問 )に関する私の回答も確認してください。