Я следовал псевдокоду в статье в Википедии, и я думаю, что он заработал. Тем не менее, он возвращает счет, и это не совсем помогает, когда я хочу знать, какой шаг я хочу сделать.
Я попробовал то, что, по моему мнению, было бы способом получить лучший ход, но я не думаю, что это работает, поскольку, когда я на самом деле пытаюсь играть против него (шахматы), ИИ делает несколько замедленных ходов с уровнем глубины. 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;
}
}