問題タブ [alpha-beta-pruning]
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.
artificial-intelligence - 「モンテカルロ ツリー サーチ」は、Stratego のような「情報が不完全な 2 人用ゲーム」に適用できますか?
情報が不完全な 2 人用ゲーム「Stratego」を開発したいと考えています。
ゲームはチェスに「いくらか」似ていますが、最初は相手の駒のランクについて何も知りません。駒が敵の駒を攻撃したり攻撃されたりすると、ランクが明らかになり、ランクの高い駒がランクの低い駒を殺したり捕獲したりします。ゲームの詳細については、こちらをご覧ください。
少し調べてみました。JA Stankiewicz 著の「Opponent Modeling in Stratego」を読みました。しかし、ゲームの開発方法に関する完全なチュートリアルは見つかりませんでした。私は 2 人用ゲーム (「オセロ」、別名リバーシ) の開発に成功し、MINIMAX アルゴリズムとアルファ ベータ プルーニングに精通しています。
ゼロサム 2 プレーヤー ゲームの開発にもモンテカルロ木探索が使用されていることをどこかで見つけました。ストラテゴなどのゲームに使用できますか? 同じことの完全なチュートリアルを入手できますか?
モンテカルロ木探索を含まない他のチュートリアルも役に立ちます:)
algorithm - alpha-beta pruning アルゴリズムのカットオフ条件を理解する
ウィキペディアでアルファ ベータ プルーニング用に見つけたこの疑似コードを理解するのに苦労しています。
私を混乱させているのはifPlayer = MaxPlayer
条件です。not(Player)
で関数を再帰的に呼び出して最小値を取得する全体を理解しています。次に、で関数を再帰的に呼び出しPlayer
、深さの制限に達するか、目標の状態が見つかるまで繰り返します。しかし、私は理解していません
声明。それについての私の理解は、前の呼び出しで見つかった最小値 ( β
) よりも高い 2 番目の値が見つかったということです。これが使用される値です。しかし、これは関数の MAX 部分なので、ベータよりも大きい任意の値ではなく、HIGHEST 値が必要ではないでしょうか?
c++ - シンボル参照エラー
私はアルファベータ剪定に関するプロジェクトを書いています。xcode で実行すると、シンボル参照エラーが発生します。
私のコードの一部:
algorithm - 同じプレイヤーの連続移動を削除するアルファベータ
私は Checkers に alpha-beta pruning を実装し、動作していると思っていましたが、コンピューターが複数のジャンプを連続して実行しないことがわかりました (必要な場合)。例えば:
AI は次のことを行います。
AIは次のことを行う必要があります。
MovePiece の戻り値をチェックすることで、この問題を修正しようとしました。これは、プレイヤーがターンを完了したかどうかを返します。これは、移動がジャンプであるかどうか、およびさらにジャンプする必要があるかどうかによって判断されます。戻り値に基づいて、MaxValue/MinValue を再度実行するか (追加の移動があることを最初に確認したときの値に応じて異なります)、ツリーを続行してプレーヤーを切り替えます。
関連するコード (C#) は次のとおりです (retVal は、Value、Depth、Move to do を含む型です)。
...
ただし、これにより、いくつかの...興味深い結果が得られます (最初の移動は最小限のプルーンしか実行しません)。
新しい動きで MaxValue/MinValue を再度呼び出すのは正しいことですか?
artificial-intelligence - アルファベータ枝刈りのための評価関数の設計
私はチェスのゲームを設計しており、その背後にある AI は、アルファ ベータ プルーニングを使用した検索ツリーを実装しています。ゲームの評価関数の設計に苦労しています。
あらゆる種類のゲームの評価関数を設計するにはどうすればよいでしょうか?
c++ - MinMax TicTacToe の簡単なデモ
私は、MinMax アルゴリズムがどのように機能するかを理解しようとして、髪の毛を引っ張ってきました。うまくいけば、アルファ ベータ プルーニング アルゴリズムが機能することを願っています。発生する再帰について混乱しています。
- まず、各中間ボードは採点されますか? または端末ゲームボードのみ。
- 第二に、正確には何が返されますか? プログラムは次の手をどこに置くべきかをどのように知るのでしょうか? ボード スコア (tictactoe では -1,0,1) を返すことになっているようですが、プログラムはどの手が次にプレイされるべきかをどのように認識しますか。
これを実証する単純な C または C++ プログラムを見つけようとしましたが、うまくいきませんでした。私はこのアルゴリズムを学ぼうとしています。コンピューター プログラミング クラスの残りの部分でプレゼンテーションを作成できます。
どうもありがとう!Ⅴ
algorithm - Othello/Reversi ゲームの Alpha-Beta Pruning アルゴリズムのヒューリスティック関数
私は、オセロ ゲームで最良の動きを得るために使用されるアルファ ベータ プルーニング アルゴリズムを実装しています。アルゴリズムがリーフ ノードに到達すると (つまり、有効な動きがないか、最大深度に達した場合)、これに基づいてそのノードのヒューリスティック値を計算します。
最大化プレイヤー (アルゴリズムを実行していて、アルゴリズムが返す動きを使用するプレイヤー) は、このノードでボード上にいくつのレンガを持っていますか? (レンガごとに+1)
最大化プレイヤーがこのノードで持っている有効な手数は? (移動ごとに+10)
最大化したプレイヤーは角のブロックをいくつ持っていますか? (角のレンガごとに+100)
問題は次のとおりです: プレイヤーが葉ノードで最大化を回していない場合、どうすればよいですか? その場合、彼の番ではないため、彼の有効な動きを計算することは不可能です。私は、アルファ ベータ プルーニング アルゴリズム全体、または少なくともヒューリスティック関数がどのように機能するかを誤解している可能性があります。誰かが私にヒントを教えてもらえますか?
ありがとう
java - ミニマックス コードは常に 0 を返します
ウィキペディアからアルファベータ剪定を書きました。コネクト フォー AI を作成しようとしています。関数は列番号を返す必要があり、メイン関数が動きます。
c# - リファレンスを使用した C# アルファ ベータ プルーニング
ここに問題があります。AI ベースのゲームの戦闘シミュレーターに取り組んでいます。AI は、敵がすべての動きに対して最善の動きをしたときに、彼にとって最善の動きを計算する必要があります。
私のチームには 5 つの移動可能な X ユニットがあり、対戦相手には 5 つの移動可能な Y ユニットがあります。X と Y > 0 の場合、アルファ ベータ プルーニングを使用して、考えられる結果をそれぞれ生成し、最終的に最良のものを取り出します。問題は、各結果をシチュエーションに保存するという事実です。このシチュエーションにはリストが保存されますが、リストには保存されたオブジェクトへの参照が含まれているため、移動が同じシチュエーションに保存されます (1 ユニットの 5 つの移動すべて)。
私たちの 2 つのユニットと彼らのユニットの 1 つを想像してみてください。状況を作成し、それに 5 つの方向のいずれかを持つ 1 つのユニットを追加します。次に、2 番目のユニットに 1 つの方向を追加し、次に敵ユニットに追加します。これで、これを保存したい最終状況が得られました。次に、2 番目のユニット (つまり、敵ユニットなし) での状況から、敵の別の動きを状況に追加し、その新しい状況がより良い場合は保存します。しかし、C# はリストの参照を使用するため、この状況は他の敵の動きも含まれている状況です。
コードは少し大きいですが、私は本当にここで立ち往生しているので、これを修正するためのアイデアを手伝ってくれる時間があれば幸いです.
よろしく、私