問題タブ [othello]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - オセロ評価関数
私は現在、ミニマックス法とアルファベータ法を使用してオセロ用のシンプルなAIを開発しています。
私の質問は、ボードの状態の評価関数に関連しています。
私は現在、以下を見て評価しようとしています。
ディスク数(パリティ)
法的な動きの数
特定のポジションの重要性
つまり、ルートノードがゲームの初期状態であるとしましょう。最初のアクションはAIのアクションであり、2番目のアクションは対戦相手のアクションです。
ノードレベル1で、AIのチップのディスク数と、アクションが完了した後の時点でAIが実行できる合法的な移動の数を評価しますか?
ノードレベル2で、対戦相手のチップのディスク数と、対戦相手がアクションを完了した後の時点で実行できる合法的な移動の数を評価しますか?
意味AI移動->対戦相手の移動==>この時点で、対戦相手のディスク数と対戦相手が作成できる合法的な数を評価します。
java - Minimax は左端の葉にのみ下がります
それで、オセロ ゲーム用の小さなボード ゲームを手に入れました。このゲームでは、AI は Alpha Beta Prune 検索アルゴリズムを使用して何を移動するかを決定する必要があります。私は次の疑似コードフォームgeeksforgeeksを使用しました:
これが私がそれを実装した方法です:
私のボードはかなり小さい (4x4) ので、ゲームが始まる前に約 20 秒で完全な検索ツリーを計算することができました。プレイ中に何も構築していないため、これにより検索が改善されるはずです。私のツリーの各ノードには、セルの 2D 配列を持つボードが含まれています。ルート ノード/ボードは次のようになります。
ゲームを開始すると、これがスターティング ボードであり、AI を呼び出して動きを出します。ミニマックス呼び出しが実行されると、深さ 12 で値 2 が返されます。深さ 12 は、ツリー内のリーフ ノード/ボードです。デバッガーで実行した後、私の実装はツリーをたどらないようです。一番左のツリーに降りて、その評価を返すだけです。
reinforcement-learning - 強化学習における損失関数 (MSVE) の実装
オセロの時間差分学習エージェントを構築しようとしています。私の実装の残りの部分は意図したとおりに動作しているように見えますが、ネットワークのトレーニングに使用される損失関数について疑問に思っています。サットンの著書「強化学習: 入門」では、平均二乗値誤差 (MSVE は標準損失関数として示されています。これは基本的に、平均二乗誤差にポリシー分布を掛けたものです。(すべての状態の合計 s ( onPolicyDistribution(s ) * [V(s) - V'(s,w)]² ) )
私の質問は次のとおりです。ポリシーが学習値関数の e-greedy 関数である場合、ポリシーの配布でこれを取得するにはどうすればよいですか? 代わりに MSELoss を使用する場合、それは必要ですか?
私はこれらすべてをpytorchで実装しているので、簡単に実装できるボーナスポイントです:)
java - 2D 配列の隣接するインデックスをチェックする方法 - オセロ
明確にするために、私は助けを求める前に、Stack Overflow や他の Web サイトでこれに似た問題を調べました。誰でも問題を理解するのに役立つ場合に備えて、以下のすべてのコードも含めました。
リバーシとしても知られるゲーム オセロでは、反対の色のタイルを使用する 2 人のプレーヤーがいます。プレイヤーは反対の色のタイルに隣接するようにタイルを配置する必要があり、反対の色は同じ方向の両側のタイルで囲まれている必要があります。たとえば、黒いタイルの左側に白いタイルがある場合、別の黒いタイルを白いタイルの左側に配置して、それを囲む必要があります。タイルが囲まれている場合は反転します。
(黒 - 白 - 黒) --> (黒 - 黒 - 黒)
周囲は、水平方向、斜め方向、または垂直方向のいずれかで発生する可能性があります。
私が抱えている問題は、すべてのインデックスをチェックして、一度に機能するかどうかを確認する方法がわからないことです。反対の色のタイルに隣接するすべての値をチェックすることで、隣接する値をチェックしようとしました。これは、タイルが両側で囲まれていることや、複数のタイルが並んでいる行に適用されていることを確認できないため、適切に機能しません。
上記は、私が問題を抱えている2つの方法です。