Exemplo n.º 1
0
        public static async Task Main()
        {
            // read all fens, including score
            var fens = Tuner.LoadFens("d:\\backup\\chess\\epds\\quiet-labeled.epd", true, false);

            Console.WriteLine("Fens found : " + fens.Count);

            // init workers
            ChessBoardInstances.Init(NumberOfThreads);
            ThreadData.InitInstances(NumberOfThreads);
            for (var i = 0; i < NumberOfThreads; i++)
            {
                Workers[i] = new ErrorCalculator(ChessBoardInstances.Get(i), ThreadData.GetInstance(i));
            }

            // add fens to workers
            var workerIndex = 0;

            foreach (var(key, value) in fens)
            {
                Workers[workerIndex].AddFenWithScore(key, value);
                workerIndex = workerIndex == NumberOfThreads - 1 ? 0 : workerIndex + 1;
            }

            // get tuned values
            var tuningObjects = Tuner.GetTuningObjects();

            // tune
            await Eval(tuningObjects);

            Console.WriteLine("Done");
        }
Exemplo n.º 2
0
        public static void Main()
        {
            var cb = ChessBoardInstances.Get(0);

            ChessBoardUtil.SetFen("1r1q1rk1/2p1npb1/b3p1p1/p5N1/1ppPB2R/P1N1P1P1/1P2QPP1/2K4R w - - 0 20 ", cb);
            EvalUtil.CalculateScore(cb, ThreadData.GetInstance(0));
        }
        public static void Main()
        {
            var fens = Tuner.LoadFens("d:\\backup\\chess\\epds\\quiet-labeled.epd", true, false);

            Console.WriteLine(fens.Count + " fens found");

            var cb         = ChessBoardInstances.Get(0);
            var threadData = ThreadData.GetInstance(0);

            foreach (var(key, value) in fens)
            {
                ChessBoardUtil.SetFen(key, cb);
                var error = Math.Pow(value - ErrorCalculator.CalculateSigmoid(EvalUtil.CalculateScore(cb, threadData)),
                                     2);

                for (var i = 0; i < LargestError.Length; i++)
                {
                    if (!(error > LargestError[i]))
                    {
                        continue;
                    }
                    LargestError[i]    = error;
                    LargestErrorFen[i] = key;
                    break;
                }
            }

            for (var i = 0; i < LargestError.Length; i++)
            {
                Console.WriteLine($"{LargestErrorFen[i],60} -> {LargestError[i]}");
            }
        }
Exemplo n.º 4
0
            public void Run()
            {
                var threadData = ThreadData.GetInstance(_threadNumber);
                var cb         = ChessBoardInstances.Get(_threadNumber);

                ChessBoardUtil.SetFen(ChessConstants.FenStart, cb);
                Perft(cb, threadData, Depth);
            }
Exemplo n.º 5
0
        public static void Main()
        {
            Thread.CurrentThread.Name = "Chess22kDotNet-main";
            _cb         = ChessBoardInstances.Get(0);
            _threadData = ThreadData.GetInstance(0);

            Start();
        }
Exemplo n.º 6
0
            public void Run()
            {
                Console.WriteLine("Start " + _name);

                var cb         = ChessBoardInstances.Get(_threadNumber);
                var threadData = ThreadData.GetInstance(_threadNumber);

                foreach (var position in _positions)
                {
                    ChessBoardUtil.SetFen(position.Fen, cb);
                    Assert.IsTrue(position.MoveCount == perft(cb, threadData, position.Depth));
                }

                Console.WriteLine("Done " + _name);
            }
Exemplo n.º 7
0
        private static async Task Eval(IEnumerable <Tuning> tuningObjects)
        {
            var bestError = await CalculateErrorMultiThreaded();

            Console.WriteLine($"{bestError} - org");
            foreach (var tuningObject in tuningObjects)
            {
                tuningObject.ClearValues();
                EvalConstants.InitMgEg();
                for (var i = 0; i < NumberOfThreads; i++)
                {
                    ThreadData.GetInstance(i).ClearCaches();
                }

                var newError = await CalculateErrorMultiThreaded();

                Console.WriteLine($"{newError} - {tuningObject.Name}");
                tuningObject.RestoreValues();
            }
        }
Exemplo n.º 8
0
 private static void SetOption(string optionName, string optionValue)
 {
     // setoption name Hash value 128
     if (optionName.ToLower().Equals("hash"))
     {
         var value = int.Parse(optionValue);
         TtUtil.SetSizeMb(value);
     }
     else if (optionName.ToLower().Equals("threads"))
     {
         UciOptions.SetThreadCount(int.Parse(optionValue));
         _cb         = ChessBoardInstances.Get(0);
         _threadData = ThreadData.GetInstance(0);
     }
     else if (optionName.ToLower().Equals("ponder"))
     {
         UciOptions.SetPonder(bool.Parse(optionValue));
     }
     else
     {
         Console.WriteLine("Unknown option: " + optionName);
     }
 }
Exemplo n.º 9
0
        public static void Print()
        {
            if (!Enabled)
            {
                return;
            }

            var totalMoveCount = ChessBoardUtil.CalculateTotalMoveCount();

            Console.WriteLine("AB-nodes      " + AbNodes);
            Console.WriteLine("PV-nodes      " + _pvNodes + " = 1/" + (_pvNodes + _cutNodes + _allNodes) / _pvNodes);
            Console.WriteLine("Cut-nodes     " + _cutNodes);
            PrintPercentage("Cut 1         ", FailHigh[0], _cutNodes - FailHigh[0]);
            PrintPercentage("Cut 2         ", FailHigh[1], _cutNodes - FailHigh[1]);
            PrintPercentage("Cut 3         ", FailHigh[2], _cutNodes - FailHigh[2]);
            Console.WriteLine("All-nodes     " + _allNodes);
            Console.WriteLine("Q-nodes       " + QNodes);
            Console.WriteLine("See-nodes     " + SeeNodes);
            Console.WriteLine("Evaluated     " + EvalNodes);
            Console.WriteLine("Moves         " + totalMoveCount);

            var threadData = ThreadData.GetInstance(0);

            Console.WriteLine("### Caches #######");
            PrintPercentage("TT            ", TtHits, TtMisses);
            Console.WriteLine("usage         " + TtUtil.GetUsagePercentage() / 10 + "%");
            PrintPercentage("Eval          ", EvalCacheHits, EvalCacheMisses);
            Console.WriteLine("usage         " + Util.GetUsagePercentage(threadData.EvalCache) + "%");
            PrintPercentage("Pawn eval     ", PawnEvalCacheHits, PawnEvalCacheMisses);
            Console.WriteLine("usage         " + Util.GetUsagePercentage(threadData.PawnCache) + "%");
            PrintPercentage("Material      ", MaterialCacheHits, MaterialCacheMisses);
            Console.WriteLine("usage         " + Util.GetUsagePercentage(threadData.MaterialCache) + "%");

            Console.WriteLine("## Best moves #####");
            Console.WriteLine("TT            " + _bestMoveTt);
            Console.WriteLine("TT-upper      " + _bestMoveTtUpper);
            Console.WriteLine("TT-lower      " + _bestMoveTtLower);
            Console.WriteLine("Win-cap       " + _bestMoveWinningCapture);
            Console.WriteLine("Los-cap       " + _bestMoveLosingCapture);
            Console.WriteLine("Promo         " + _bestMovePromotion);
            Console.WriteLine("Killer1       " + _bestMoveKiller1);
            Console.WriteLine("Killer2       " + _bestMoveKiller2);
            Console.WriteLine("Killer1 evasi " + _bestMoveKillerEvasive1);
            Console.WriteLine("Killer2 evasi " + _bestMoveKillerEvasive2);
            Console.WriteLine("Counter       " + _bestMoveCounter);
            Console.WriteLine("Other         " + _bestMoveOther);

            Console.WriteLine("### Outcome #####");
            Console.WriteLine("Checkmate     " + MateCount);
            Console.WriteLine("Stalemate     " + StaleMateCount);
            Console.WriteLine("Repetitions   " + Repetitions + "(" + _repetitionTests + ")");

            Console.WriteLine("### Extensions #####");
            Console.WriteLine("Check         " + CheckExtensions);

            Console.WriteLine("### Pruning #####");
            PrintPercentage("Null-move     ", NullMoveHit, NullMoveMiss);
            PrintDepthTotals("Static nmp    ", StaticNullMoved, false);
            PrintDepthTotals("Razored       ", Razored, false);
            PrintDepthTotals("Futile        ", Futile, false);
            PrintDepthTotals("LMP           ", Lmped, false);
        }
Exemplo n.º 10
0
        public static void Main()
        {
            var fens = Tuner.LoadFens("d:\\backup\\chess\\epds\\quiet-labeled.epd", true, false);

            Console.WriteLine(fens.Count + " fens found");

            var kpk   = new ErrorCount("KPK ");
            var kbnk  = new ErrorCount("KBNK");
            var kbpk  = new ErrorCount("KBPK");
            var krkp  = new ErrorCount("KRKP");
            var kqkp  = new ErrorCount("KQKP");
            var krkb  = new ErrorCount("KRKB");
            var krkn  = new ErrorCount("KRKN");
            var kbpkp = new ErrorCount("KBPKP");
            var krbkb = new ErrorCount("KRBKB");
            var krbkr = new ErrorCount("KRBKR");

            var cb         = ChessBoardInstances.Get(0);
            var threadData = ThreadData.GetInstance(0);

            foreach (var(key, value) in fens)
            {
                ChessBoardUtil.SetFen(key, cb);

                var error = Math.Pow(
                    value - ErrorCalculator.CalculateSigmoid(ChessConstants.ColorFactor[cb.ColorToMove] *
                                                             EvalUtil.CalculateScore(cb, threadData)),
                    2);
                if (MaterialUtil.IsKbnk(cb.MaterialKey))
                {
                    kbnk.AddError(error);
                }
                else if (MaterialUtil.IsKqkp(cb.MaterialKey))
                {
                    kqkp.AddError(error);
                }
                else if (MaterialUtil.IsKrkp(cb.MaterialKey))
                {
                    krkp.AddError(error);
                }
                else if (MaterialUtil.IsKrkb(cb.MaterialKey))
                {
                    krkb.AddError(error);
                }
                else if (MaterialUtil.IsKrkn(cb.MaterialKey))
                {
                    krkn.AddError(error);
                }
                else if (MaterialUtil.IsKpk(cb.MaterialKey))
                {
                    krkn.AddError(error);
                }
                else if (MaterialUtil.IsKbpk(cb.MaterialKey))
                {
                    kbpk.AddError(error);
                }
                else if (MaterialUtil.IsKbpkp(cb.MaterialKey))
                {
                    kbpkp.AddError(error);
                }
                else if (MaterialUtil.IsKrbkb(cb.MaterialKey))
                {
                    krbkb.AddError(error);
                }
                else if (MaterialUtil.IsKrbkr(cb.MaterialKey))
                {
                    krbkr.AddError(error);
                }
            }

            kpk.Print();
            kbnk.Print();
            krkp.Print();
            kqkp.Print();
            krkb.Print();
            krkn.Print();
            krbkb.Print();
            krbkr.Print();
            kbpk.Print();
            kbpkp.Print();
        }