Beispiel #1
0
        static void Main(string[] args)
        {
            int          randomSeed = (int)((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
            QLearningAI  ai1        = new QLearningAI(randomSeed + 0, 0.3f, 0.9f, 0.9f);
            RandomMoveAI ai2        = new RandomMoveAI(randomSeed + 1);

            const int numTrainGames    = 100000;
            const int numEvaluateGames = 10000;

            TrainGames(ai1, ai2, numTrainGames);

            Simulate.WinnerStats winnerStats = Simulate.RunGames(Simulate.CreateNewGameState(), (gameState) => {
                switch (gameState.NextPlayer)
                {
                case BoardState.Player.Player1:
                    return(ai1.GetPlayerInput(gameState, false));

                case BoardState.Player.Player2:
                    return(ai2.GetPlayerInput(gameState));

                default:
                    throw new Exception("Invalid NextPlayer");
                }
            }, numEvaluateGames);

            Display.PrintWinnerStats(winnerStats);
        }
Beispiel #2
0
        public static void PrintWinnerStats(Simulate.WinnerStats winnerStats)
        {
            int total = winnerStats.Player1Wins + winnerStats.Player2Wins + winnerStats.Draws;

            Console.WriteLine("Player 1 wins: " + winnerStats.Player1Wins.ToString() + " (" + (winnerStats.Player1Wins * 100 / total).ToString() + "%)");
            Console.WriteLine("Player 2 wins: " + winnerStats.Player2Wins.ToString() + " (" + (winnerStats.Player2Wins * 100 / total).ToString() + "%)");
            Console.WriteLine("Draws: " + winnerStats.Draws.ToString() + " (" + (winnerStats.Draws * 100 / total).ToString() + "%)");
        }