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); }
private void TicTacToeMonteCarloDemoForm_Load(object sender, EventArgs e) { gameState = new GameState(); var random = new Random(0); var expander = new MCTreeSearchExpander <TicTacToeGame, GameState, GameAction, Player>(TicTacToeGame.Instance, random); var playoutGenerator = new GamePlayoutRandomGenerator <GameState, Player, GameAction>(TicTacToeGame.Instance, random); var mcts = new TicTacToeMcts(expander, playoutGenerator); var rootNode = new TicTacToeMctsNode(null, gameState, null); mctsNavigator = new MCTreeSearchNavigator <TicTacToeMcts, TicTacToeGame, TicTacToeMctsNode, GameState, GameAction, Player>(mcts, TicTacToeGame.Instance, rootNode); //mcts = new PVNetworkBasedMCTreeSearch<TicTacToeGame, GameState, GameAction, Player>(TicTacToeGame.Instance, new GameState(), new PVNetworkMock<GameState, GameAction>(10), new Random()); }
public GoGameForm() { InitializeComponent(); var random = new Random(0); FieldCoordinates optimizedPlayoutGenerator(GameState gameState) { var allowedActions = gameState.GetAllowedActionsForRandomPlayout(); return(allowedActions.Any() ? random.Next(allowedActions) : FieldCoordinates.Pass); } var game = new GoGame(); var gameRootState = new GameState(9); var playoutRootNode = new GamePlayoutNode <GameState, FieldCoordinates>(gameRootState); var playoutTree = new GamePlayoutTree <GameState, FieldCoordinates, Stone>(playoutRootNode); var playoutGenerator = new GamePlayoutRandomGenerator <GameState, Stone, FieldCoordinates>(game, optimizedPlayoutGenerator); //var mctsSettings = new GoMctsSettings(random) { PlayoutGenerator = playoutGenerator }; var mctsExpander = new MCTreeSearchExpander <GoGame, GameState, FieldCoordinates, Stone>(game, random); var mcts = new GoMcts(mctsExpander, playoutGenerator); var mctsRootNode = new GoMctsNode(null, gameRootState, null); var mctsNavigator = new GoMctsNavigator(mcts, game, mctsRootNode); MainNavigator1 = new ObservableGameTreeNavigator <GoMctsNavigator, GameState, FieldCoordinates, Stone, MCTreeSearchNode <GameState, FieldCoordinates> >(mctsNavigator); //new MCTreeSearchNavigator<GoMcts, GoGame, GoMctsNode, GameState, FieldCoordinates, Stone>(mcts, game, mctsRootNode); //MainNavigator1 = new MCTreeNavigator<GoGame, GameState, FieldCoordinates, Stone>(mcts); var playoutNavigator = new GamePlayoutNavigator <GameState, FieldCoordinates, Stone>(playoutTree); PlayoutNavigator = new ObservableGameTreeNavigator <GamePlayoutNavigator <GameState, FieldCoordinates, Stone>, GameState, FieldCoordinates, Stone, GamePlayoutNode <GameState, FieldCoordinates> >(playoutNavigator); new GameTreeNavigationController <GoGame, GameState, FieldCoordinates, Stone, MCTreeSearchNode <GameState, FieldCoordinates> >(MainNavigator1, mainBoardNavigationScroll); new GameTreeNavigationController <GoGame, GameState, FieldCoordinates, Stone, GamePlayoutNode <GameState, FieldCoordinates> >(PlayoutNavigator, playoutScrollBar); goBoardControl1.OnAction += MainBoardControl_OnAction; InitializePreparedPositionControl(); MainNavigator1.Forwarded += MainNavigator_Forwarded; MainNavigator1.Navigated += MainNavigator_Navigated; PlayoutNavigator.Forwarded += PlayoutNavigator_Forwarded; PlayoutNavigator.Navigated += PlayoutNavigator_Navigated; }