【发布时间】:2014-05-20 13:13:49
【问题描述】:
更新
更新 1
我试过this(第二行):我添加了更改节点颜色作为alphabet函数中的第一条指令。我收到this result:
绿色节点是访问节点。看起来,算法会正确抛出节点,对吧?但是如何在节点中输出正确的值——我也需要这样做?子值的最小值,子值的最大值(不包括修剪的分支)。
更新 2
我试图将 alpha 和 beta 输出到树节点,但没有得到正确的结果。 This 是代码(添加了第 18 行和第 31 行)。 This 是代码的结果:
在this 图像上显示奇怪的地方:
第一个箭头:为什么 7 和 6 的最小值是 5?第二个箭头:为什么 4、3 和 2 的最大值是 5?奇怪的。这就是为什么我认为它现在工作正常。
老问题
曾几何时,我在这里提出了类似的问题。就像:“为什么我会收到这个错误?”。让我们回滚并创建一个新的。这个问题将是:“如何显示 Alpha Beta Pruning 算法结果?”
我在 wiki 上找到了这个算法的伪代码。可以找到here。
我的实现如下(它是在 JavaScript 上,但我认为要回答这个问题,你必须了解 JS 或 Java 或 C++ 等)。问题是如何在图(树结构)上输出该算法的结果?开始时我有这个树结构:
注意:我有树结构(一些链接的nodes),我将在其上使用 alpha beta 修剪算法,我还有另一个树结构(用于显示结果,让我们调用它“图表”)。我用来显示图形的树的节点与我用来查找算法结果的节点相连。
所以,alpha beta 剪枝算法的代码如下。你能澄清一下我必须输出什么以及在哪里正确显示算法的过程/结果吗?
我的假设是输出 alpha 和 beta,但我认为,这是错误的。我试过了,但它不起作用。
我想显示修剪并用正确的值填充树中的所有节点。
这是我通过 alpha beta 剪枝实现的 minimax:
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;
}
}
【问题讨论】:
-
您到底想显示什么?您想要图片中的树,还是只记录允许您跟随树的信息?您是否需要在节点上添加标签,以便验证您的代码是否正确运行?
-
@NathanS 是的,我想要树上的节点,这些节点在要填充的任务中是空白的。另外,我想显示修剪,例如按颜色
-
这个问题的问题在于,它看起来不像是要解决的技术问题,而是像一些你想为你完成的工作。如果有确切的技术障碍点,请准确说明它是什么。
标签: algorithm search artificial-intelligence minimax alpha-beta-pruning