如何存储由Minimax扩展的节点数

时间:2018-03-29 02:18:10

标签: java memory nodes minimax

我正在使用Minimax和Alpha-Beta修剪算法创建一个Java程序来播放Connect Four游戏。我正在为Minimax algortihm调整以下伪代码:

Minimax pseudocode

事情是,在游戏结束时,我必须打印的值之一是在算法执行期间扩展的节点数,给出并了解内存使用情况并将其与数字进行比较Alpha-Beta Pruning扩展的节点数。但是,我真的不知道追踪这个价值的最佳方法是什么。我的一位同事把它作为代表电网的班级的一个领域。他的解决方案涉及跟踪在Minimax类中声明的某个 maxDepth 变量:

static Values decision(Tabuleiro tab,int depth){
    Instant start = Instant.now();
    int maxDepth = 1,children = 1;
    Values v = new Values(-1*infinity,1);

    for(Tabuleiro a: LibTabuleiro.makeDescendants(tab, 2)){
        Values tmp = min(a,depth-1); maxDepth = Math.max(maxDepth,tmp.getY());
        v = Values.max(v, new Values(tmp.getX(),a.getLast())); children++;
    }

    tab.setSize(maxDepth+children); /*setSize sets the field in the grid class
    which contains the maximum number of nodes stored in memory simultaneously*/
    Instant end = Instant.now();
    return new Values((int)Duration.between(start,end).toMillis(),v.getY());
}

反过来涉及使用这个Values类:

public class Values {
int value;
int depth;

Values(int v,int d){
    value = v;
    depth = d;
}

int getX(){return value;}
int getY(){return depth;}

boolean lowerThan(Values other){return this.value<=other.value;}
boolean greaterThan(Values other){return this.value>=other.value;}

static Values max(Values a,Values b){
    if(a.value >= b.value) return a;
    else return b;
}

static Values min(Values a,Values b){
    if(a.value <= b.value) return a;
    else return b;
}
}

但我想知道是否有一种更直接的方式来做到这一点,说实话,我并不理解他的代码所做的一切,我也不应该复制它。

提前致谢,

0 个答案:

没有答案