コード例 #1
0
 public static bool TryMove(this MCTS <GameNode> root, int iterations, out MCTS <GameNode> newRoot, bool preferAutoMove = true)
 {
     if (preferAutoMove && root.TryAutoMove(out newRoot))
     {
         return(true);
     }
     else
     {
         root.Execute(iterations);
         if (root.GetBestMove() < 0)
         {
             newRoot = root;
             return(false);
         }
         else
         {
             newRoot = root.GetChildByMove(root.GetBestMove());
             return(true);
         }
     }
 }
コード例 #2
0
    IEnumerator MCTSAIInput()
    {
        thinking = true;

        MCTS search = new MCTS(board.boardState, targetTurnState);

        for (int i = 0; i < budget; i++)
        {
            for (int q = 0; q < 10; q++)
            {
                for (int j = 0; j < 10; j++)
                {
                    search.Iterate();
                }
                yield return(null);
            }
        }
        MCTS.Move bestMove = search.GetBestMove();
        while (board.selectedTurn != bestMove.MoveIndex)
        {
            if (team == Team.Blue)
            {
                board.MoveLeft();
            }
            else
            {
                board.MoveRight();
            }
            yield return(new WaitForSeconds(0.1f));
        }

        if (bestMove.Up)
        {
            board.MoveUp();
        }
        else
        {
            board.MoveDown();
        }
        thinking = false;
    }
コード例 #3
0
 public IMove GetMove(IState state)
 {
     return(_mcts.GetBestMove(state, ResponseTimeInMilliseconds));
 }