問題タブ [minmax]
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.
java - 私のMinMax実装を手伝ってください
単純なゲームのためにminMaxアルゴリズム(後でアルファベータ法を試してみます)を実装しようとしています....多くの擬似コードとチュートリアルを見てきましたが、それを機能させることができません...
少し助けていただければ幸いです:)
関連するクラスは次のとおりです...(わかりやすくするために実装を削除しました)
そして、これが私のMin-Max実装です...誰かが私が間違っていることを指摘できますか?ありがとうございました。
編集:ゲームの簡単な説明は次のとおりです、あなたはあなたの前に異なる金種のコインの特定の数を持っています。あなたと他のプレイヤーが交代で、どちらかの側(左または右)から1枚のコインを取り除きます。コインの額面は、その動きで獲得したポイントを示します。特定のコインには特別な意味があります。たとえば、Xを選択すると、1ターンスキップすることを意味し、Yを選択すると、もう1ターン取得することを意味します。あなたの目的は、対戦相手よりも多くのポイントを獲得することです。
java - 最小/最大三目並べ
最小/最大で三目並べを作成しているので、アルファ ベータ プルーニングに拡張できます。したがって、最小/最大の間に、パスが +1 (X 勝利) -1 (O 勝利) または 0 (ドロー) につながるかどうかを見つけますが、次のようなボード構成の場合:
0 ターン中は、その動きが勝利につながるため、左下を選択します。ブロックの各テーブルをチェックする必要がある場合、それはそれほど速く実行されず、最小/最大をどのように実装する必要があるとは思いません。
最小/最大がそれを検出するほど賢くない理由を誰かが説明できますか? 左のノードを見て、+1/-1/0 を返すと思いました。
algorithm - Prolog の Tron ライトサイクル AI
AIをゲームに書き込むのに問題があります(トロンライトサイクルなど)。ncurses を使用して、すべてのグラフィックと動きを C で記述します。次に、プロローグにボットの AI を記述する必要があります。私はswiプロローグを使用しています。
現在のゲーム フィールド (すべてのマトリックス)、現在の人間の位置、および現在のボットの位置 (マトリックス セル i、j など) を保存します。c の .pl ファイルに述語のように保存します。
私のゲーム フィールドは、1 と 0 (1 - 訪問済み、0 - 未訪問) を含むマトリックスです。このような:
次に、このマトリックスを次のように分析する必要があります。
したがって、プロローグの分析機能は、ファイルに保存された方向(左、下、上、または右)を返し、私のCプログラムはこのファイルを読み取り、ボットを移動します。
だから私は質問があります-Prologでこのマトリックスをどのように分析できますか。min-max アルゴリズムについて読んだことがありますが、Prolog ではこれを実現できません。プロローグの行列と現在の位置を使用して、最小最大アルゴリズムを機能させる方法を誰かが助けたり、指示したりできますか?
artificial-intelligence - MinMax ツリー - Min が 2 ステップで勝つことができる場合
そこで、2 人用のボード ゲームで単純なコンピューター プレーヤーを作成するために、最小最大木をいじってみました。アルゴリズムの基本はわかっているのですが、私の七面鳥注入脳をすり抜けてしまうケースが… MINが2段で勝てたらどうなるでしょうか?
例として、2 人のプレーヤーのうちの 1 人だけが正方形を所有できる connect4/tic-tac-toe タイプのゲームを想定します。MIN が正方形を取得できないようにするためだけに、MAX に正方形を占有させるにはどうすればよいですか?
オプションが Left と Right である簡単な例 (気の利いた ASCII アートで示されています) を試してみましょう。ツリーが大きすぎて最終状態まで移動できないと仮定すると、中間値はヒューリスティック関数に基づいて計算されます (下に * でマークされています)。・INFはMINが勝つ終末状態。
MIN は状態 (b) のアクション A を -INF のスコアで
選択しようとしている MIN は状態 (c) のアクション B を選択しようとしている +20 のスコアに対して
MAX は状態 (a) のアクション B を選択しようとしている+20のスコア
もちろん、問題は、MAX が B を選択した場合、MIN がアクション A を実行し (その正方形がまだ使用可能であるため)、MIN が勝つことです。MIN が次の手で -INF を取得するのを防ぐために、状態 (a) でアクション A を選択することの価値を MAX に認識させる必要があります。
MIN が勝つことができるかどうかを確認するためにコードに一連のテストを入れますが、アルゴリズムがこれを処理する必要があるように思えます。これを引き起こしているMAXに関する値の決定に欠けていると思います。
(明確にするために編集)
excel - VB Excel 2003 の MIN/MAX 関数でセルを反復する方法は?
私はこれが初めてで、VB Excel で上記の次のコードを実行しようとしています (問題は太字で示されています):ありがとう
algorithm - Negamax-プレイヤーは2回移動します
条件が満たされた場合に同じプレイヤーが移動するゲームをどのように処理しますか?
私はこのようなことを試みましたが、それは完全に正しいとは思いません:
sql - 最小/最大で自己結合を行う方法
私はSQLクエリが初めてです。テーブルは次のように定義されます
特定の日付範囲の各シンボルと、 および の対応する日付を検索する必要max(high)
がmin(low)
ありmax(high)
ますmin(low)
。
- 指定されたテーブルで最初の最大日付と最小日付を取得できます。
- 特定の日付範囲では、一部の日付が欠落している場合があります。開始日が存在しない場合は次の日付を使用する必要があり、最終日が存在しない場合は以前の利用可能な日付を使用する必要があります
データは 1 年間で、約 5000 シンボルです。
私はこのようなことを試しました
algorithm - Tic Tac Toeでテーブルのスコアを設定するにはどうすればよいですか?
私はテーブルとGenerate_moves()などのいくつかの関数を持っていますが、minmaxアルゴリズムが機能するには、コンピューターに最適なテーブルを選択させるためにテーブルのスコアを設定する必要があります。
直線canWin(string)
または列にXまたはOがいくつあるかを示す数値を返しますが、テーブルのスコアを設定する理由が大きいとは思えません。
私がテーブルを持っている場合:
スコアはと同じである必要があります
とより大きくする必要があります
また、スコア関数にさまざまなスコアを教えてもらう方法がわかりません。これを伝えるためにメソッドScoreを実装するにはどうすればよいですか?
編集:
コンピューターが最初にXで、私がOである場合
次に、次善のオプションをコンピュータに選択させるにはどうすればよいですか。
artificial-intelligence - TicTacToeのMinMaxから自分のベストムーブを抽出するにはどうすればよいですか?
この小さな関数は、ゲームが勝ち、負け、引き分けのいずれであるかを教えてくれますが、どうすれば勝つための動きを得ることができますか?私のPointクラスは、2つの座標X、Yを持つ単純なクラスであり、後で答えをポイントとして取得したいので、後で次のように言うことができgame.Do_Move(myPoint)
ます。
一部の機能が明確でない場合:
game.IsFinished()
-勝つ/負ける/引く場合はtrueを返し、そうでない場合はtrueを返します。
game.Score(turn)
-次の手でプレーヤーが負け/引き分け/勝った場合は-1/0/1を返します
game.Generate_Moves()
-利用可能な動きのリストを返します
game.Do_Move()
-ゲームに移動を適用するvoid
game.Undo_Move()
-自分自身のために話します
c++ - ネガマックスが期待通りに動かない
チェス プログラムに単純な NegaMax を実装する際に問題があります。
いくつかの Web サイトによると、私のコードでは negamax は次のようになります。
しかし、このコードを使用すると、次の出力が得られます。
開始位置から ply3 の max をネガすると、それは正しくありません。
再帰関数呼び出しの前にあるマイナス記号を削除すると、より良い結果が得られます。しかし、私の意見では、上記のコードにマイナス記号がないと、一方のプレーヤーのスコアのみを最大化し、両方のプレーヤーのスコアを最大化しないため、それは正しくありません。
MinMax、NegaMax、および AlphaBeta のさまざまなバージョンを実装しようとしました。しかし、私は常に 0 のスコアを取得します。ヒントがあれば非常にありがたいです。