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); }
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(); }
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); }
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); } }
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)); }
public PerftSuiteRunner(PerftRunner runner) { _runner = runner; }