質問

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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top