問題タブ [minimax]
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 - Tictactoe でミニマックスを実装する方法
私はこの回答を読みましたが、混乱しました: TicTacToe AI Making Incorrect Decisions
これを Tictactoe に適用する方法を理解してくれる人はいますか?
- どうすれば「木を通り抜けることができますか?
- ムーブのツリーを作成するにはどうすればよいですか?
注: 私は現在、ゲームに関する状態を格納する Board クラスを持っています (例: ゲームは現在の動きで完了していますか?、勝者はいますか?など)。現在のボードの各動きは 1 - 9 (左上) として格納されます。行の右下に)。現在のボードの状態を簡単にコピーできます。「X」と「O」の現在の動きのリストと、ボードから利用可能な動きのリストを返すことができます。
python - ばかのために説明されたミニマックス
ミニマックス アルゴリズムを使用して無敵の tictactoe AI を作成しようとして 1 日を無駄にしました。途中で何かを逃しました(頭がおかしい)。
ここでコードを探しているわけではありません。どこが間違っていたのかをよりよく説明しているだけです。
これが私の現在のコードです(minimaxメソッドは何らかの理由で常に0を返します):
search - ゲーム検索ツリー、最初にツリーを構築する必要がありますか?
ゲーム探索木には、ミニマックスアルゴリズムのように、最適解を得るアルゴリズムがたくさんあります。この問題をミニマックスアルゴリズムで解決する方法を学び始めました。アルゴリズムは明確です。しかし、私はツリー自体について混乱しています.tic tac toeのようなゲームではノードの数はそれほど大きくありませんが、チェスのような他のゲームでは多くのノードがあります。これにはメモリに大きなスペースが必要だと思います。それで、ツリーを同時に評価して構築するアルゴリズムはありますか?
c - Tic-Tac-Toe: デシジョン ツリーを作成する方法は?
Tic-Tac-Toe プログラムを作成しています。私はそれでミニマックスを使用する予定です。考えられるすべてのゲーム シーケンス用のスペースを備えたツリーを作成しましたが、それを埋める方法を探しています。私は現在このタイプを持っています:
ここに示されているように、グリッドを埋める方法を探しています。すべての可能な組み合わせが存在することを確認するために、グリッドを埋めるにはどうすればよいですか? 私の計画は、プレイヤーが取ることができるすべての動きをゲームに認識させ、勝つためにどの手順を実行するかを決定することです (まだ決定の部分を理解する必要がありますが、ツリーのグリッドを埋めることができるまでそれを保持しています) .
algorithm - アルファベータプルーニングの有無にかかわらずミニマックスアルゴリズム
アルファベータプルーニングを使用したミニマックスアルゴリズムは、プルーニングを使用しないミニマックスとは異なる答えを生成できますか?
artificial-intelligence - 抽象戦略ゲームの評価関数
C# と XNA を使用して抽象的な戦略ゲームをコーディングしています。AI に関しては、現在ネガスカウトと深さ 5 を使用しています。ゲームの説明は次のとおりです。
このゲームは、6x7 の六角形の場所のボード、42 の六角形のタイル、各プレーヤー (最大 2 プレーヤー) の 6 個のピース (キング 1 個とポーン 5 個) で構成されます。
ゲームの最初の段階で、プレイヤーはボードの空いている場所にランダムなタイルを交互に配置します。各タイルには、端を指す最大 6 つの矢印を付けることができます。一部の矢印は、2 方向を指すことができます。矢印は、そのタイルからの移動方向を意味します。二重矢印は、有効な場所がある場合、駒を 2 つの場所に移動/ジャンプさせます。ボード上にまだ空の場所が残っている場合、プレイヤーは対戦相手の列にタイルを配置することはできません。
このフェイズが完了すると、次のプレイヤーが自分のキングを自分に最も近い列の 6 つのタイルのいずれかに置きます。次に、駒の移動が始まります。駒はタイルの矢印に従って移動します。キングを捕まえるかブロックすることでゲームに勝利します。
では、わざ生成関数に移りましょう。
タイル配置段階 a) 最も近い列にタイルを配置します。最適な回転を見つけるために、タイルが回転されます。b) 一番近い列がいっぱいになったら、四方を囲まれた空いている場所にタイルを置きます (つまり、ボードの端はありません)。タイルを回転させて、最適な回転を見つけます。c) 場所が見つからない場合は、残りの空の場所をすべて追加し、最適な回転を見つけようとします。
キング配置段階 a) 最高のタイルがある場所を見つけ、そこにキングを配置します。b) 残りのポーンを列の残りの空いている場所に置きます。
移動ステージ a) キングが攻撃された場合、その駒が防御されていない場合は、攻撃している駒を攻撃しようとします。b) 攻撃されているすべてのプレイヤーの駒に移動を追加します。c) プレイヤーが攻撃できるすべての対戦相手の駒を追加します。d) プレイヤーが移動できるすべての場所を追加します。
次に評価関数です。
タイル配置段階のスコア = 現在のプレーヤーがこれまでに配置したタイルの数 + 現在のプレーヤーの最も近い列のタイル - なし。対戦相手がこれまでに配置したタイルの数 - 最も遠い行 (対戦相手に最も近い) にある対戦相手のタイル。
キングプレイスメントステージスコア=最も近い列にある現在のプレーヤーのタイル-最も遠い列にある対戦相手のタイル(対戦相手に最も近い)。
移動ステージスコア=手番プレイヤーの駒の価値-相手の駒の価値。
タイルの重み付けは、矢印が指している有効な場所ごとに 100 です。パーツの重み付けは次のとおりです。
ピースの値 = ピースの種類 (キング = 10000、ポーン = 1000) + 機動性 + 防御 - 攻撃 - 包囲 - ブロック
ここで、可動性 = いいえ。ノードが移動できる場所の数 (空いているか対戦相手が占有している) * 1000 防御 = いいえ。この場所に実際に移動できる、このピースを囲む現在のプレイヤー ピースの数 * 攻撃された 1000 = いいえ。実際にこの場所に移動できる、このピースを囲む対戦相手のピースの数 * 1000 ブロック = (キング = -10000、ポーン = -1000) ピースは移動できません。すべての矢印が無効な場所を指しており、ピースがこのゲームで再び移動する可能性がないためです.
かなり長いですが、ここに私の問題があります:
タイルを配置するとき、AI は間違った回転を使用してタイルを配置することがあります (つまり、矢印が有効な場所を指していない場所にタイルを配置します)。時々、これは彼の「ホーム」列で発生します。
ピースを動かすとき、AI はキングの安全性を無視しています。主にキングを動かし、4~6手で攻略。
特にチェス AI の経験を持つ人で、AI、特に手の生成と評価機能を改善する方法についてアイデアや提案がありますか?
ありがとうイヴァン
ところで...メールを試すことに興味がある人がいたら、私に知らせてください。私のウェブサイトにセットアップをアップロードします。
c# - PentagoAIアルゴリズムを実装する方法
私はPentago
C#で-gameを開発しようとしています。
現在、2人のプレーヤーモードがあり、問題なく動作しています。
問題は、 (コンピューターに対して) 1人のプレーヤーモードが必要なことですが、残念ながら、ミニマックス/ネガマックスのすべての実装は、「移動」(大理石の配置、ゲームピースの移動)ごとに計算された1つのものに対するものです。
しかしPentago
、すべてのプレーヤーは2つのことを行う必要があります(大理石を配置し、内側のボードの1つを回転させます)
回転部分と大理石の配置の両方を実装する方法がわかりませんでした。誰かにこれを案内してもらいたいです。
ゲームに慣れていない場合は、ここにゲームへのリンクがあります。
誰かが望むなら、それが関係しているなら、私はどこかに私のコードをアップロードすることができます。
事前にどうもありがとうございました
c - NegaMax アルゴリズムと TicTacToe...何が問題なのですか?
私はゲーム ツリー アルゴリズムが初めてで、コンピューター AI プレーヤーのタイル スコアを評価するために NegaMax アルゴリズムを利用する単純な tictactoe ゲームを実装しようとしました。ただし、AI はスマートな方法で動作しません (AI が私の動きをブロックしないため、常に勝つことができます)。また、NegaMax アルゴリズムを間違って実装したと思います。
誰かが次のコードで私を助けることができれば、それは素晴らしいことです. 長い時間をかけてさまざまなことを試しましたが、うまくいきませんでした。
list - Scheme/Racket/Lispのネストされたリストに対するMinimax操作?
ゲームツリーを分析する関数を書こうとしています。ツリーはネストされたリストで表され、各サブリストはブランチを表します。基本的に、私が理解したいことは2つあります。
- ネストされたリストのミニマックス値は?
- その値のインデックスは何ですか?
最初の問題はほぼ解決したと思っていましたが、コードが間違った値を返し続けています。
どんな助けでも大歓迎です、ありがとう!