Tic tac toe alpha-beta
Tic tac toe alpha-beta
我正在用javascript编写一个井字游戏。我完成了 GUI 等,但我仍然对 AI 有问题。我使用Alpha-beta-Prune来找到获胜的举动。但是,我的代码从未给出可以赢得比赛的动作。我做了很多研究,但仍然不知道我的代码出了什么问题。你们能不能在这里看看我的主要人工智能部分。我的想法是创建一个存储移动的 2D 数组:1 是人类,-1 是 AI,0 是空的。初始化调用: var test = getBestMove(-1);`
获得最佳移动功能:
function getBestMove(player) {
var alpha = -maxValue;
var beta = maxValue;
var bestScore = -maxValue;
var bestMove = -1;
for (var r = 0; r < boardSize; ++r)
{
for (var c = 0; c < boardSize; ++c)
{
if (gameArray[r][c] === 0)
{
gameArray[r][c] = player;
var score = alphaBeta(gameArray, alpha,beta, r * boardSize + c, player);
gameArray[r][c] = 0;
if (score > bestScore)
{
bestScore = score;
bestMove = r * boardSize + c;
}
}
}
}
console.log(bestScore);
return bestMove;
}
阿尔法测试版搜索:
// 1: human
// -1: AI
// 0: empty
function alphaBeta(board, alpha, beta,lastMove, player) {
var bestValue;
//check if the last move make a win
//checkwin return the winner / 0 if no winner
var win = checkwin(board,
Math.floor(lastMove / boardSize),
lastMove % boardSize);
if (win === - 1){
return 1000;
}
else if (win === 1){
return -1000;
}
else if (checktie(board) === true){
//console.log(win);
return 0;
}
else{
//return evaluation(board);
}
if (player === -1)
{
bestValue = alpha;
// Recurse for all children of node.
for (var r = 0; r < boardSize; r++)
{
for (var c = 0; c < boardSize; c++)
{
if (board[r][c] === 0)
{
board[r][c] = player;
var childValue = alphaBeta(board, bestValue, beta,r*boardSize+c, -player);
board[r][c] = 0;
bestValue = Math.max(bestValue, childValue);
if (beta <= bestValue)
{
return bestValue;
}
}
}
}
}
else {
bestValue = beta;
// Recurse for all children of node.
for (var r = 0; r < boardSize; r++)
{
for (var c = 0; c < boardSize; c++)
{
if (board[r][c] === 0)
{
board[r][c] = player;
var childValue = alphaBeta(board, alpha, bestValue,r*boardSize+c, -player);
board[r][c] = 0;
bestValue = Math.min(bestValue, childValue);
if (bestValue <= alpha)
{
return bestValue;
}
}
}
}
}
return bestValue;
}
我没有使用评估功能,因为我认为 alpha-beta 应该能够在没有它的情况下找到胜利。
我找出了问题所在,这与算法无关,而与我的实现有关:由于人工智能总是追随人类,所以如果(玩家 === -1) 最佳值 = 测试版;和如果(玩家 === 1) 最佳值 = 阿尔法;
第二个错误,子移动是其他玩家的,所以:板[r][c] = -玩家;无处不在
以下是游戏的完整版本: www.neokites.com/gomoku/我希望这可能会对某人有所帮助。
相关文章:
- 如何将不可变的js导入angular 2(alpha)
- 如何(功能)检测浏览器是否支持WebM alpha透明度
- Tic-Tac-Toe using React JS
- html5具有特定alpha的画布填充文本和具有不同alpha的背景
- Tic tac toe alpha-beta
- Tic Tac Toe游戏是't更换球员、更新比分或更换球员
- html5画布支持带alpha的十六进制颜色吗
- 新的gump ruby sass alpha任务失败
- Obtain alpha from Bootstrap Colorpicker
- 如何测试 jQuery 3.0 beta 在浏览器中是否兼容 Promises/A+
- HTML5画布到PNG在alpha透明时将所有通道归零
- Tic-Tac-Toe绘图功能
- EffectComposer和具有三个.js的alpha通道
- 宣布获胜者后,Tic-tac-Toe javascript停止切换回合
- jQuery仅悬停在图像内容上,不悬停在Alpha上
- Javascript Tic Tac Toe游戏获胜't验证对角线赢家
- 自定义图标行为是否在JQueryMobile 1.4(Alpha / Beta / RC-1)中发生了变化
- 设备定向事件's Alpha、Beta、Gamma值..有人能帮忙解释一下如何形象化吗
- 在不使用侦听器的情况下获取设备方向(alpha、beta、gamma)
- JavaScript文件系统API作为象棋Alpha Beta数据存储