我已经关注维基百科文章中的pseducode,我想我已经开始工作了。但是,它会返回分数,当我想知道我想要做什么动作时,这并不完全有用。
我尝试了我认为可以获得最佳动作的方法,但我认为它不起作用,因为我实际上尝试对抗它(国际象棋)时,AI会使深度级别的某些延迟动作3.
这是我的功能:
public static function alphaBeta(node, depth, alph, beta, team, tellTheMove:Boolean = false):* {
var pointer:ChessMove;
if (depth == 0) {
return scoreOf(node);
}
var childrenOf:Vector.<ChessMove > = returnPossibleMoves(node,team);
if (childrenOf.length == 0) {
return scoreOf(node);
}
if (team == 0) {
for (var i in childrenOf) {
var that:Number = alphaBeta(childrenOf[i],depth - 1,alph,beta,1);
if(tellTheMove){
}
if (that > alph) {
alph = that;
if(tellTheMove){
pointer = childrenOf[i];
}
}
if (beta <= alph) {
break;
}
}
if(tellTheMove){
return pointer; //Returns the move that's score last exceeded alpha.
}
return alph;
} else {
for (var j in childrenOf) {
var that2:Number = alphaBeta(childrenOf[j],depth - 1,alph,beta,0);
if (that2 < beta) {
beta = that2;
}
if (beta <= alph) {
break;
}
}
return beta;
}
}
答案 0 :(得分:4)
深度3对象国际象棋这样的问题很少。在这个深度,大部分功率取决于您的最终评估功能。这种评估功能非常难以有效地预测电路板的价值。
尝试更简单的东西,可以在更低的深度有效地解决。 Tic-Tac-Toe是Min-Max第一次尝试的非常好的比赛。这是因为最终结果众所周知。如果你正确地得到你的算法,你根本就不应该打败它。如果你做Tic-Tac-Toe并且算法失败了,你知道你有错误。
另外请注意,在某些情况下,Min-Max会发挥最佳效果,但仍会看起来迟钝于人类对手。例如,如果没有获胜的机会,Min-Max将开始随机播放并做非常愚蠢的动作。情况就是这样,因为Min-Max希望对手也能发挥出色,这通常不是人类的情况。可以对算法进行一些简单的更改以更改此行为,并在这种情况下使min-max播放“减少”。