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); } } }
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; }
public IMove GetMove(IState state) { return(_mcts.GetBestMove(state, ResponseTimeInMilliseconds)); }