private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { var timer = Stopwatch.StartNew(); var mcts = new MonteCarloTreeSearch(true); var best = mcts.GetBestMove(ttt, new SearchCancellationToken(() => timer.ElapsedMilliseconds > 1000)); ttt.MakeMove(best.BestMove); e.Result = best; }
public void Given_MonteCarloTreeSearch_When_OpponentAboutToWinInEarlyGame_Then_BlockOpponent() { var ttt = TicTacToe.FromString(new string[] { " O", " XX", " ", }, Player.Two); var mcts = new MonteCarloTreeSearch(true); var move = mcts.GetBestMove(ttt, new SearchCancellationToken(100)); move.BestMove.X.Should().Be(0); move.BestMove.Y.Should().Be(1); }
public void Given_MonteCarloTreeSearch_When_WinningMoveAvailable_Then_GetBestMove() { var ttt = TicTacToe.FromString(new string[] { "O O", "XX ", " ", }, Player.One); var mcts = new MonteCarloTreeSearch(true); var move = mcts.GetBestMove(ttt, new SearchCancellationToken(100)); move.BestMove.X.Should().Be(2); move.BestMove.Y.Should().Be(1); }