首页 > 解决方案 > 我的 alpha-beta 修剪算法有问题吗?

问题描述

我不确定在实施 alpha-beta 修剪时出了什么问题。我已经为此进行了 12 个小时的调整,重做它,但我找不到问题(或者我尝试修复它并最终遇到更多问题)。基本上,连续 4 个或一列获胜,这是一个 8 x 8 的棋盘。

我的评价功能差不多
sum of (3 X's in a row - 3 O's in a row) * 3 + (2 X's in a row - 2 O's in a row) * 2

编辑:我不只是有堆空间的问题,虽然它是一个每次移动应该最多需要 5 秒,地雷运行 15 秒而不是JAVA HEAP SPACE ERROR之后崩溃。

// Editing right now
}

// Iterative deepening and time-limited is ran
    }
// Generates X successors sorted by utility
// Similar to the O one except just change the character

ArrayList<Node> generateXSuccessors() {
    char[][] copy = new char[8][8];
    char[][] temp = new char[8][8];
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            temp[i][j] = board[i][j];
        }
    }

    // Go through all possible moves and add them to list
    // Must add arraylist and return from here, solve heap space error
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            if (temp[i][j] == '-') {
                temp[i][j] = 'X';
                for (int k = 0; k < 8; k++) {
                    for (int l = 0; l < 8; l++) {
                        copy[k][l] = temp[k][l];
                    }
                }
                successors.add(new Node(copy));
                temp[i][j] = '-'; // Reset
            }
        }
    }

    //Sort list
    Collections.sort(successors);
    return successors;
}

通过上面显示的当前尝试,我得到了Java Heap Space error. 在此之前,算法只是不停地运行。

我不确定我是否执行错误,或者我的评估功能是否真的很糟糕,它会导致此类错误。

编辑:

// Error
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at FourInALine$Node.<init>(FourInALine.java:204)
    at FourInALine$Node.generateXSuccessors(FourInALine.java:238)
    at FourInALine.alphaBeta(FourInALine.java:134)
    at FourInALine.alphaBeta(FourInALine.java:157)
    at FourInALine.alphaBeta(FourInALine.java:137)
    at FourInALine.alphaBeta(FourInALine.java:157)
    at FourInALine.alphaBeta(FourInALine.java:137)
    at FourInALine.main(FourInALine.java:72)

标签: javaminimax

解决方案


推荐阅读