public GameAction GenerateAction(GameState gameState) { var expander = new MCTreeSearchExpander <TicTacToeGame, GameState, GameAction, Player>(TicTacToeGame.Instance, new Random(0)); var playoutGenerator = new GamePlayoutRandomGenerator <GameState, Player, GameAction>(TicTacToeGame.Instance, new Random(0)); var mcts = new MCTreeSearch <TicTacToeGame, GameState, GameAction, Player>(expander, playoutGenerator); TicTacToeMctsNavigator mctsNavigator = new TicTacToeMctsNavigator(mcts, TicTacToeGame.Instance, new MCTreeSearchNode <GameState, GameAction>(null, gameState, null)); mctsNavigator.Round(1000); return(mctsNavigator.CurrentNode.Children.MaxItem(e => e.Value.Visits).Key); }
/// <summary> /// Creates the tree /// </summary> /// <param name="initialPieces"></param> /// <param name="budget"></param> protected void CreateTree(PieceModel[] initialPieces, float budget) { treeSearch = new MCTreeSearch(this, currentTetrisState, budget, initialPieces); currentNode = treeSearch.rootNode; }