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"); }
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]}"); } }
public void Run() { var threadData = ThreadData.GetInstance(_threadNumber); var cb = ChessBoardInstances.Get(_threadNumber); ChessBoardUtil.SetFen(ChessConstants.FenStart, cb); Perft(cb, threadData, Depth); }
public static void Main() { Thread.CurrentThread.Name = "Chess22kDotNet-main"; _cb = ChessBoardInstances.Get(0); _threadData = ThreadData.GetInstance(0); Start(); }
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); }
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(); } }
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); } }
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); }
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(); }