Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }