Ejemplo n.º 1
0
        private static void DoPerft()
        {
            var fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
            //var fen = "8/8/3k4/8/3K4/8/8/8 w - - 0 1";
            //var fen = "rnbqkbnr/2pppppp/p7/Pp6/8/8/1PPPPPPP/RNBQKBNR w KQkq b6 0 3 ";
            //var fen = "8/3R1k2/8/4B3/1K6/p6B/5p1P/8 b - - 1 67 ";

            //var fen = "8/1k6/8/2Pp3r/2K5/8/8/8 w - d6";
            //var fen = "8/8/4k3/8/2p5/8/B2P2K1/8 w - - 0 1";

            //var fen = "8/8/1k6/2b5/2pP4/8/5K2/8 b - d3 0 1";
            //fen = "8/1kP5/8/K2p3r/8/8/8/8 w - - 1 53 ";
            //fen = "r1b1k2r/ppppnppp/2n2q2/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R w KQkq - 0 1";
            //fen = "2k5/8/8/8/8/8/6p1/2K5 w - - 1 1 ";
            //fen = "rnbqkbnr/1ppppppp/8/p7/1P6/P7/2PPPPPP/RNBQKBNR b KQkq b3 0 2 ";
            var boardFactory = new BoardFactory();

            using var testClient = new InternalPerftClient(MoveGenerator, boardFactory);
            //using var verificationClient = new SharperPerftClient(@"C:\Chess\Engines\Sharper\Sharper.exe");
            using var verificationClient = new StockfishPerftClient(@"C:\Chess\Engines\stockfish_13_win_x64_avx2\stockfish_13_win_x64_avx2.exe");

            var fenSerializer = new FenSerializerService();
            var perftRunner   = new PerftRunner(testClient, verificationClient, boardFactory, fenSerializer);

            perftRunner.OnOut += Console.Write;
            perftRunner.Test(fen, 6);
        }
Ejemplo n.º 2
0
        internal static void Main(string[] args)
        {
            Console.WriteLine("ChessSharp Perft");

            Console.WriteLine("Initialising data");

            var moveGenerator = new MoveGenerator(16);

            var fenString = FenHelpers.Default;

            var perftRunner = new PerftRunner(moveGenerator);

            var gameState = FenHelpers.Parse(fenString);

            var board          = Board.FromGameState(gameState);
            var boardReference = Board.FromGameState(gameState);

            Console.WriteLine("Press any key to begin");

            Console.ReadKey();

            Console.WriteLine($"Starting perft for {fenString} depth 2");

            PerftDepth(perftRunner, board, gameState, 2);

            Console.WriteLine($"Starting perft for {fenString} depth 3");

            PerftDepth(perftRunner, board, gameState, 3);

            Console.WriteLine($"Starting perft for {fenString} depth 4");

            PerftDepth(perftRunner, board, gameState, 4);

            var results = new List <double>();

            var iterations = 3;

#if DEBUG
            iterations = 1;
#endif

            for (var i = 0; i < iterations; i++)
            {
                Console.WriteLine($"Starting perft for {fenString} depth 5 - iteration {i + 1}");

                var result = PerftDepth(perftRunner, board, gameState, 5);

                results.Add(result);
            }

            var averageNps = results.Average();

            Console.WriteLine($"Average nps: {Math.Floor(averageNps)}");

            Console.WriteLine("Press any key to quit");

            Console.ReadKey();
        }
Ejemplo n.º 3
0
        private static void DoPerftSuite()
        {
            var boardFactory = new BoardFactory();

            using var testClient = new InternalPerftClient(MoveGenerator, boardFactory);
            //using var verificationClient = new SharperPerftClient(@"C:\Chess\Engines\Sharper\Sharper.exe");
            using var verificationClient = new StockfishPerftClient(@"C:\Chess\Engines\stockfish_13_win_x64_avx2\stockfish_13_win_x64_avx2.exe");

            var fenSerializer = new FenSerializerService();
            var perftRunner   = new PerftRunner(testClient, verificationClient, boardFactory, fenSerializer);

            perftRunner.OnOut += Console.Write;
            //var suite = new PerftSuite(perftRunner);
            //suite.Run();
            var suite = new PerftSuiteRunner(perftRunner);
            var path  = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "hartmann.epd");

            suite.RunSuite(path);
        }
Ejemplo n.º 4
0
        private static void DoPerft()
        {
            var fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
            //fen = "3k4/3p4/8/K1P4r/8/8/8/8 b - - 0 50";
            //fen = "8/1kP5/8/K2p3r/8/8/8/8 w - - 1 53 ";
            //fen = "r1b1k2r/ppppnppp/2n2q2/2b5/3NP3/2P1B3/PP3PPP/RN1QKB1R w KQkq - 0 1";
            //fen = "2k5/8/8/8/8/8/6p1/2K5 w - - 1 1 ";
            //fen = "rnbqkbnr/1ppppppp/8/p7/1P6/P7/2PPPPPP/RNBQKBNR b KQkq b3 0 2 ";
            var fact           = new BoardFactory();
            var hyperbola      = new HyperbolaQuintessence();
            var attacksService = new AttacksService(hyperbola);
            var movesService   = new PossibleMovesService(attacksService, hyperbola);
            var perft          = new PerftService(movesService);
            var results        = perft.GetPossibleMoves(fact.ParseFEN(fen), 1);

            using (var sharperClient = new SharperPerftClient(@"C:\sharper\Sharper.exe", fen))
            {
                var perftRunner = new PerftRunner(perft, sharperClient, fact);
                perftRunner.OnOut += Console.Write;
                perftRunner.Test(fen, 6);
            }
        }
Ejemplo n.º 5
0
        private static double PerftDepth(PerftRunner perftRunner, Board board, GameState gameState, ushort depth)
        {
            var moves = new List <uint>(20);

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            var movePerfts = perftRunner.Go(board, gameState.ToPlay, depth);

            stopWatch.Stop();

            var totalNodes = movePerfts.Sum(x => x.Nodes);

            Console.WriteLine($"Perft:");

            foreach (var movePerft in movePerfts)
            {
                var notation = $"{movePerft.Move.From}-{movePerft.Move.To}";
                Console.WriteLine($"{notation} {movePerft.Nodes}");
            }

            Console.WriteLine($"Total: {totalNodes}");

            var elapsedMilliseconds = stopWatch.ElapsedMilliseconds;

            if (elapsedMilliseconds == 0)
            {
                elapsedMilliseconds = 1;
            }

            var nps = ((double)totalNodes / elapsedMilliseconds) * 1000;

            Console.WriteLine($"Time: {stopWatch.ElapsedMilliseconds}ms");

            Console.WriteLine($"Nodes per second: {Math.Floor(nps)}");

            return(Math.Floor(nps));
        }
Ejemplo n.º 6
0
 public PerftSuiteRunner(PerftRunner runner)
 {
     _runner = runner;
 }