アップデート
更新1
これを試しました(2行目):alphabeta関数の最初の命令としてノードの色の変更を追加しました。私はこの結果を得ています:
緑色のノードは訪問済みノードです。アルゴリズムがノードを正しくスローするように見えますよね?しかし、ノードで正しい値を出力する方法 — 私もこれを行う必要がありますか? 子の値の最小値、子の値の最大値 (剪定された枝を除く)。
Update 2
アルファとベータをツリー ノードに出力しようとしましたが、正しい結果が得られませんでした。これがコードです (18 行目と 31 行目が追加されました)。これはコードの結果です:
この画像では、奇妙な場所を示しています。
最初の矢印: なぜ 7 と 6 の最小値が 5 なのか? 2 番目の矢印: 4、3、2 の最大数が 5 になるのはなぜですか? 変。そのため、現在は正しく機能していると思います。
古い質問
むかしむかし、ここで同様の質問を作成しました。「なぜこのエラーが発生するのですか?」のようなものでした。ロールバックして新しいものを作成しましょう。この質問は次のとおりです。「Alpha Beta Pruning アルゴリズムの結果を表示するにはどうすればよいですか?」
ウィキでこのアルゴリズムの疑似コードを見つけました。ここで見つけることができます。
私の認識は以下のとおりです (JavaScript に関するものですが、この質問に答えるために JS、Java、C++ などの知識が必要だとは思いません)。問題は、このアルゴリズムの結果をグラフ (ツリー構造) に出力する方法です。開始時には、次のツリー構造があります。
注:アルファ ベータ プルーニング アルゴリズムを使用するツリー構造 (いくつかのリンクされnode
た s) があり、別のツリー構造 (結果を表示するため、「グラフ」と呼びましょう) があります。グラフを表示するために使用するツリーのノードは、アルゴリズムの結果を見つけるために使用するノードに接続されています。
そのため、アルファ ベータ プルーニング アルゴリズムのコードは以下のとおりです。アルゴリズムのプロセス/結果を正しく表示するには、何をどこに出力する必要があるかを明確にしていただけますか?
アルファとベータを出力すると仮定していますが、それは間違っていると思います。試してみましたが、うまくいきません。
剪定を表示し、ツリー内のすべてのノードに正しい値を入力したいと考えています。
これは、アルファ ベータ プルーニングを使用したミニマックスの私の実現です。
function alphabeta(node, depth, alpha, beta, isMax, g) {
if((depth == 0) || (node.isTerminal == true)) {
return node.value;
}
if(isMax) {
console.log('maximizing');
for (var i in node.children) {
var child = node.children[i];
console.log(child);
alpha = Math.max(alpha, alphabeta(child, depth-1, alpha, beta, false, g));
if(beta <= alpha) {
console.log('beta '+beta+' alpha '+alpha);
break;
}
}
return alpha;
} else {
console.log('minimizing');
for (var i in node.children) {
console.log('1 child');
var child = node.children[i];
console.log(child);
beta = Math.min(beta, alphabeta(child, depth-1, alpha, beta, true, g));
if (beta <= alpha) {
console.log('beta '+beta+' alpha '+alpha);
break;
}
}
return beta;
}
}