質問
Javaのツリーを作成して設定し、Minimaxアルゴリズムを使用してAIに最適なコースを見つけることを試みてきました。
ツリーを生成するための再帰関数:
public void gen(Node n, int depth){
if(depth == 6){
n = new Node();
n.depth = height;
}
else{
n = new Node();
n.depth = depth;
gen(n.e1, depth+1);
gen(n.e2, depth+1);
gen(n.e3, depth+1);
gen(n.p1, depth+1);
gen(n.p2, depth+1);
gen(n.p3, depth+1);
}
}
ツリーに値を入力する機能:
public void score(Node node, char a){
//Assigning scores to states to find utility value
//Changing state strings to reflect current state of nodes and phase
if(node!=null && node.depth!=6){
if(node.depth%2==1){
//Player's turn
node.state = node.state.substring(0, node.depth))+a+node.state.substring((node.depth+2));
score(node.e1, 'a');
score(node.e2, 'b');
score(node.e3, 'a');
score(node.p1, 'b');
score(node.p2, 'a');
score(node.p3, 'b');
}
else if(node.depth%2==0){
//AI's turn
node.state = node.state.substring(0,(node.depth+4))+a+node.state.substring((node.depth+6));
score(node.e1, 'a');
score(node.e2, 'b');
score(node.e3, 'a');
score(node.p1, 'b');
score(node.p2, 'a');
score(node.p3, 'b');
}
}
}
コンテンツを印刷することにより、すべてが機能するかどうかを確認するためのテスト関数:
public void printTree(Node node){
if(node!=null){
System.out.println(node.depth + " " + node.state);
printTree(node.e1);
printTree(node.e2);
printTree(node.e3);
printTree(node.p1);
printTree(node.p2);
printTree(node.p3);
}
}
そして、ノードクラス自体:最終クラスノード{
public string state = "bcxxxcxxx";
//utility value
public int score;
public int oscore;
public int utility;
public int min;
public int max;
public int depth;
Node p1;
Node p2;
Node p3;
Node e1;
Node e2;
Node e3;
public Node()
{
}
}
印刷機能を実行すると、最初のノードに期待していた1つのBXXXCXXXを印刷します。空のノードと1の深さでそれを呼びました。なぜそれが深さ6まで、ツリーの残りの部分を生成(または印刷)しないのですか?
これはおそらく無関係だと思いますが、このコードは最終的にAndroidゲームで使用されます。
解決
Javaが通り過ぎます Node
価値によって、あなたの割り当て n = new Node();
効果はありません。君の gen
関数は、パラメーターとして使用する代わりに、作成するノードを返す必要があります。
public Node gen(int depth){
Node n = new Node();
if (depth == 6){
n.depth = height;
} else {
n.depth = depth;
n.e1 = gen(depth+1);
n.e2 = gen(depth+1);
n.e3 = gen(depth+1);
n.p1 = gen(depth+1);
n.p2 = gen(depth+1);
n.p3 = gen(depth+1);
}
return n;
}
所属していません StackOverflow