Esempio n. 1
0
        public Game()
        {
            var slidingMoveGenerator = new MagicBitboardsService();
            var evaluationService    = new EvaluationService2(new EvaluationData());
            //var evaluationService = new NnueEvaluationService(new NnueExternalClient());
            var attacksService = new AttacksService(slidingMoveGenerator);
            var pinDetector    = new PinDetector(slidingMoveGenerator);
            var validator      = new MoveValidator(attacksService, slidingMoveGenerator, pinDetector);
            var movesService   = new MoveGenerator(attacksService, slidingMoveGenerator, pinDetector, validator);
            var searchService  = new SearchService2(movesService, evaluationService);

            BoardFact  = new BoardFactory();
            Hyperbola  = slidingMoveGenerator;
            Evaluation = evaluationService;
            Attacks    = attacksService;
            Moves      = movesService;
            Search     = searchService;
        }
Esempio n. 2
0
        private static void DoSearch2Async()
        {
            //Console.WriteLine(Marshal.SizeOf<Move>());
            //Console.WriteLine(Marshal.SizeOf<TranspositionTableEntry>());
            var fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; // Starting pos
            //var fen = "8/6pp/3kp3/3P1p2/2P2P2/2R4P/7K/q7 w - -";
            //var fen = "8/6pp/3k4/3P1p2/5P2/4R2P/7K/q7 b - - 0 1";
            //var fen = "rnbqkbnr/pppppppp/8/8/8/N7/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; // Starting pos
            //var fen = "rnbqkbnr/pppppppp/7n/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; // Starting pos

            //var fen = "r4rk1/p2n1ppp/3qp3/6B1/N5P1/3P1b2/PPP1BbP1/R2Q1R1K b - - 0 14"; // Mate in 3
            //var fen = "r1b1kb1r/2pp1ppp/1np1q3/p3P3/2P5/1P6/PB1NQPPP/R3KB1R b KQkq - 0 1"; // Midgame
            //var fen = "r3r1kb/p2bp2p/1q1p1npB/5NQ1/2p1P1P1/2N2P2/PPP5/2KR3R w - - 0 1"; // Midgame 2
            var fact  = new BoardFactory();
            var board = fact.ParseFEN(fen);
            //board = fact.ParseMoves("g1f3 g8f6 d2d4 d7d5 e2e3 e7e6 c2c3 c7c5 f1d3 f8d6 d4c5 d6c5 d1a4 b8c6 e1g1 e8g8 b1d2 e6e5 d3b5 d8d6 b5c6 d6c6 a4c6 b7c6 f3e5 c8a6 f1d1 a8c8 d2f3 f8e8 e5d3 c5d6 f3d4 c6c5 d4f5 d6f8 b2b3 c8b8 c1b2 a6b5 d3f4 b8d8 c3c4 d5c4 b2f6 d8d1 a1d1 c4b3 f4h5 b5e2 h5g7 f8g7 f5g7 e8b8 d1e1 b3a2 f2f4 b8b1 g1f2 e2d1 g7f5");
            //board.DoMove2(Move.FromPositionString(board, "a2a1b"));
            //board.DoMove2(Move.FromPositionString(board, "e6d5"));
            //board.DoMove2(Move.FromPositionString(board, "c4d5"));
            //board.DoMove2(Move.FromPositionString(board, "a1a2"));

            var fenSerializer = new FenSerializerService();
            //var slideMoveGenerator = new HyperbolaQuintessence();
            var client = new NnueManagedClient(new NnueLoader().Load("C:/Temp/nn-62ef826d1a6d.nnue"));
            //var client = new NnueImplFallback(new NnueLoader().Load("C:/Temp/nn-62ef826d1a6d.nnue", NnueArchitecture.Fallback));
            //var client = new NnueExternalClient();
            //var client = new NnueNnueCpuClient();

            //var evaluationService = new NnueEvaluationService(client);
            var evaluationService = new EvaluationService2(new EvaluationData());
            //var evaluationService = new EvaluationService();

            var searchService = new SearchService2(MoveGenerator, evaluationService);

            //var state = State.LoadState("state-2021-03-31-10-05-17-407.json");
            //board = state.Board;
            //Console.WriteLine(board.Print(null, new FenSerializerService()));
            //searchService.SetState(state.State);
            Console.WriteLine(board.Print(evaluationService, fenSerializer));
            searchService.SearchInfo += info => Console.WriteLine(info.ToString());
            var searchParameters = new SearchParameters();

            //searchParameters.WhiteTime = 1000;
            searchParameters.Infinite = true;
            //searchParameters.MaxDepth = 5;
            EngineOptions.Debug = true;
            var stopwatch = new Stopwatch();
            var cancellationTokenSource = new CancellationTokenSource();

            //var searchTask = Task.Run(() =>
            //{
            for (int i = 0; i < 1; i++)
            {
                stopwatch.Restart();
                var moves = searchService.Run(board, searchParameters, cancellationTokenSource.Token);
                stopwatch.Stop();
                searchService.NewGame();
                Console.WriteLine($"Total time: {stopwatch.Elapsed.TotalMilliseconds} ms");
            }
            //});
            HandleInterrupt(cancellationTokenSource);
            //await searchTask;
            var foo = 123;
        }