我正在使用Minimax和Alpha-Beta修剪算法创建一个Java程序来播放Connect Four游戏。我正在为Minimax algortihm调整以下伪代码:
事情是,在游戏结束时,我必须打印的值之一是在算法执行期间扩展的节点数,给出并了解内存使用情况并将其与数字进行比较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;
}
}
但我想知道是否有一种更直接的方式来做到这一点,说实话,我并不理解他的代码所做的一切,我也不应该复制它。
提前致谢,