public static int Evaluate(BoardState board, EvaluationStatistics statistics, int openingPhase, int endingPhase) { var entry = PawnHashTable.Get(board.PawnHash); if (entry.IsKeyValid(board.PawnHash)) { #if DEBUG statistics.PHTHits++; #endif return(entry.Score); } #if DEBUG else { statistics.PHTNonHits++; if (entry.Key != 0 || entry.Score != 0) { statistics.PHTReplacements++; } } #endif var result = Evaluate(board, Color.White, openingPhase, endingPhase) - Evaluate(board, Color.Black, openingPhase, endingPhase); PawnHashTable.Add(board.PawnHash, (short)result); #if DEBUG statistics.PHTAddedEntries++; #endif return(result); }
private void OnSearchUpdate(object sender, SearchStatistics stats) { var score = FormatScore(stats.Score); var principalVariation = FormatPrincipalVariation(stats.PrincipalVariation, stats.PrincipalVariationMovesCount); Send($"info depth {stats.Depth} seldepth {stats.SelectiveDepth} time {stats.SearchTime} " + $"score {score} nodes {stats.TotalNodes} nps {stats.TotalNodesPerSecond} pv {principalVariation}"); if (_debugMode) { var evaluationStatistics = new EvaluationStatistics(); var openingPhase = stats.Board.GetPhaseRatio(); var endingPhase = BoardConstants.PhaseResolution - openingPhase; var fieldsAttackedByWhite = 0ul; var fieldsAttackedByBlack = 0ul; var materialEvaluation = MaterialEvaluator.Evaluate(stats.Board); var castlingEvaluation = CastlingEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var positionEvaluation = PositionEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var pawnStructureEvaluation = PawnStructureEvaluator.Evaluate(stats.Board, evaluationStatistics, openingPhase, endingPhase); var mobility = MobilityEvaluator.Evaluate(stats.Board, openingPhase, endingPhase, ref fieldsAttackedByWhite, ref fieldsAttackedByBlack); var kingSafety = KingSafetyEvaluator.Evaluate(stats.Board, openingPhase, endingPhase, fieldsAttackedByWhite, fieldsAttackedByBlack); var pieces = PiecesEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var fianchetto = FianchettoEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var total = materialEvaluation + castlingEvaluation + positionEvaluation + pawnStructureEvaluation + mobility + kingSafety + pieces; Send($"info string evaluation {total} phase {openingPhase} material {materialEvaluation} castling {castlingEvaluation} " + $"position {positionEvaluation} pawns {pawnStructureEvaluation} mobility {mobility} ksafety {kingSafety} " + $"pieces {pieces} fianchetto {fianchetto} irrmoves {stats.Board.IrreversibleMovesCount}"); } }
public ActionResult GetStats(DateRange period) { ViewBag.DateFrom = period.dateFrom; ViewBag.DateTo = period.dateTo; FillCharts(period); return(PartialView("Stats/_Fullpage", EvaluationStatistics.GenerateStats(period))); }
/// <nodoc /> protected DScriptInterpreterBase(IFrontEndStatistics statistics, Logger logger) { Contract.Requires(statistics != null); Name = "DScript"; FrontEndStatistics = statistics; Logger = logger ?? Logger.CreateLogger(); Statistics = new EvaluationStatistics(); }
public static int EvaluateWithoutCache(BoardState board, EvaluationStatistics statistics, int openingPhase, int endingPhase) { var(openingWhiteScore, endingWhiteScore) = Evaluate(board, Color.White, openingPhase, endingPhase); var(openingBlackScore, endingBlackScore) = Evaluate(board, Color.Black, openingPhase, endingPhase); var openingScore = openingWhiteScore - openingBlackScore; var endingScore = endingWhiteScore - endingBlackScore; return(TaperedEvaluation.AdjustToPhase(openingScore, endingScore, openingPhase, endingPhase)); }
public ActionResult Stats() { var period = new DateRange() { dateFrom = DateTime.Now.AddDays(-30), dateTo = DateTime.Now }; FillCharts(period); return(View(EvaluationStatistics.GenerateStats(period))); }
private void FillCharts(DateRange period) { ViewBag.MultiLineChart = GetMultiLineChartData(); ViewBag.LineChart1 = EvaluationStatistics.GetInterviewsChartData(period, 1); ViewBag.LineChart2 = EvaluationStatistics.GetInterviewsChartData(period, 2); ViewBag.StatsHeaderBarChartData = EvaluationStatistics.GetStatsHeaderBarChartData(period); ViewBag.OverallSeniority = EvaluationStatistics.GetSeniorityChartData(period); ViewBag.OverallStage = EvaluationStatistics.GetStageChartData(period); ViewBag.OverallLength = EvaluationStatistics.GetLengthChartData(period); ViewBag.OverallRating = EvaluationStatistics.GetRatingChartData(period); }
/// <nodoc /> protected DScriptInterpreterBase(GlobalConstants constants, ModuleRegistry sharedModuleRegistry, IFrontEndStatistics statistics, Logger logger) { Contract.Requires(constants != null); Contract.Requires(sharedModuleRegistry != null); Contract.Requires(statistics != null); Constants = constants; SharedModuleRegistry = sharedModuleRegistry; Name = "DScript"; FrontEndStatistics = statistics; Logger = logger ?? Logger.CreateLogger(); Statistics = new EvaluationStatistics(); }
/// <nodoc/> public DownloadResolver( FrontEndStatistics frontEndStatistics, EvaluationStatistics evaluationStatistics, FrontEndHost frontEndHost, FrontEndContext context, Script.Tracing.Logger logger, string frontEndName) { Contract.Requires(!string.IsNullOrEmpty(frontEndName)); Name = frontEndName; m_frontEndStatistics = frontEndStatistics; m_evaluationStatistics = evaluationStatistics; m_frontEndHost = frontEndHost; m_context = context; m_logger = logger; }
private void Evaluate(double scalingFactor) { var sum = 0.0; var evaluationStatistics = new EvaluationStatistics(); foreach (var position in _positions) { position.BoardState.ColorToMove = Color.White; position.BoardState.RecalculateEvaluationDependentValues(); var evaluation = Evaluation.Evaluate(position.BoardState, false, evaluationStatistics); var sigmoidEvaluation = Sigmoid(evaluation, scalingFactor); var desiredEvaluation = GetDesiredEvaluation(position.Result); sum += Math.Pow(desiredEvaluation - sigmoidEvaluation, 2); } var error = sum / _positions.Count; _interactiveConsole.WriteLine(error.ToString()); }
private void OnSearchUpdate(object sender, SearchStatistics stats) { var score = FormatScore(stats.Score); var principalVariation = FormatPrincipalVariation(stats.PrincipalVariation, stats.PrincipalVariationMovesCount); Send($"info depth {stats.Depth} seldepth {stats.SelectiveDepth} time {stats.SearchTime} " + $"score {score} nodes {stats.TotalNodes} nps {stats.TotalNodesPerSecond} pv {principalVariation}"); if (_debugMode && stats.PrincipalVariationMovesCount > 0 && stats.PrincipalVariation[0] != Move.Empty) { var sign = stats.Board.ColorToMove == Color.White ? 1 : -1; stats.Board.MakeMove(stats.PrincipalVariation[0]); var evaluationStatistics = new EvaluationStatistics(); var openingPhase = stats.Board.GetPhaseRatio(); var endingPhase = BoardConstants.PhaseResolution - openingPhase; var fieldsAttackedByWhite = 0ul; var fieldsAttackedByBlack = 0ul; var materialEvaluation = sign * MaterialEvaluator.Evaluate(stats.Board); var positionEvaluation = sign * PositionEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var pawnStructureEvaluation = sign * PawnStructureEvaluator.Evaluate(stats.Board, evaluationStatistics, openingPhase, endingPhase); var mobility = sign * MobilityEvaluator.Evaluate(stats.Board, openingPhase, endingPhase, ref fieldsAttackedByWhite, ref fieldsAttackedByBlack); var kingSafety = sign * KingSafetyEvaluator.Evaluate(stats.Board, openingPhase, endingPhase, fieldsAttackedByWhite, fieldsAttackedByBlack); var rooks = sign * RookEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var bishops = sign * BishopEvaluator.Evaluate(stats.Board, openingPhase, endingPhase); var total = materialEvaluation + positionEvaluation + pawnStructureEvaluation + mobility + kingSafety; Send($"info string evaluation {total} phase {openingPhase} material {materialEvaluation} " + $"position {positionEvaluation} pawns {pawnStructureEvaluation} mobility {mobility} ksafety {kingSafety} " + $"rooks {rooks} bishops {bishops} irrmoves {stats.Board.IrreversibleMovesCount}"); stats.Board.UndoMove(stats.PrincipalVariation[0]); } }
public void Run(params string[] parameters) { var fen = string.Join(' ', parameters); var boardState = FenToBoard.Parse(fen); var evaluationStatistics = new EvaluationStatistics(); var openingPhase = boardState.GetPhaseRatio(); var endingPhase = BoardConstants.PhaseResolution - openingPhase; var fieldsAttackedByWhite = 0ul; var fieldsAttackedByBlack = 0ul; var materialEvaluation = MaterialEvaluator.Evaluate(boardState); var castlingEvaluation = CastlingEvaluator.Evaluate(boardState, openingPhase, endingPhase); var positionEvaluation = PositionEvaluator.Evaluate(boardState, openingPhase, endingPhase); var pawnStructureEvaluation = PawnStructureEvaluator.Evaluate(boardState, evaluationStatistics, openingPhase, endingPhase); var mobility = MobilityEvaluator.Evaluate(boardState, openingPhase, endingPhase, ref fieldsAttackedByWhite, ref fieldsAttackedByBlack); var kingSafety = KingSafetyEvaluator.Evaluate(boardState, openingPhase, endingPhase, fieldsAttackedByWhite, fieldsAttackedByBlack); var pieces = PiecesEvaluator.Evaluate(boardState, openingPhase, endingPhase); var fianchetto = FianchettoEvaluator.Evaluate(boardState, openingPhase, endingPhase); var total = materialEvaluation + castlingEvaluation + positionEvaluation + pawnStructureEvaluation + mobility + kingSafety + pieces + fianchetto; _interactiveConsole.WriteLine($"Evaluation for board with hash {boardState.Hash} (phase {openingPhase}, " + $"{boardState.IrreversibleMovesCount} irreversible moves)"); _interactiveConsole.WriteLine($" = Material: {materialEvaluation}"); _interactiveConsole.WriteLine($" = Castling: {castlingEvaluation}"); _interactiveConsole.WriteLine($" = Position: {positionEvaluation}"); _interactiveConsole.WriteLine($" = Pawns: {pawnStructureEvaluation}"); _interactiveConsole.WriteLine($" = Mobility: {mobility}"); _interactiveConsole.WriteLine($" = King safety: {kingSafety}"); _interactiveConsole.WriteLine($" = Pieces evaluation: {pieces}"); _interactiveConsole.WriteLine($" = Fianchetto evaluation: {fianchetto}"); _interactiveConsole.WriteLine(); _interactiveConsole.WriteLine($" = Total: {total}"); }
public static int Evaluate(BoardState board, EvaluationStatistics statistics, int openingPhase, int endingPhase) { var entry = PawnHashTable.Get(board.PawnHash); if (entry.IsKeyValid(board.PawnHash)) { #if DEBUG statistics.PHTHits++; #endif return(TaperedEvaluation.AdjustToPhase(entry.OpeningScore, entry.EndingScore, openingPhase, endingPhase)); } #if DEBUG else { statistics.PHTNonHits++; if (entry.Key != 0 || entry.OpeningScore != 0 || entry.EndingScore != 0) { statistics.PHTReplacements++; } } #endif var(openingWhiteScore, endingWhiteScore) = Evaluate(board, Color.White, openingPhase, endingPhase); var(openingBlackScore, endingBlackScore) = Evaluate(board, Color.Black, openingPhase, endingPhase); var openingScore = openingWhiteScore - openingBlackScore; var endingScore = endingWhiteScore - endingBlackScore; var result = TaperedEvaluation.AdjustToPhase(openingScore, endingScore, openingPhase, endingPhase); PawnHashTable.Add(board.PawnHash, (short)openingScore, (short)endingScore); #if DEBUG statistics.PHTAddedEntries++; #endif return(result); }
public void Run(params string[] parameters) { var fen = string.Join(' ', parameters); var boardState = FenToBoard.Parse(fen, false); var evaluationStatistics = new EvaluationStatistics(); var openingPhase = boardState.GetPhaseRatio(); var endingPhase = BoardConstants.PhaseResolution - openingPhase; var fieldsAttackedByWhite = 0ul; var fieldsAttackedByBlack = 0ul; var materialEvaluation = MaterialEvaluator.Evaluate(boardState); var positionEvaluation = PositionEvaluator.Evaluate(boardState, openingPhase, endingPhase); var pawnStructureEvaluation = PawnStructureEvaluator.EvaluateWithoutCache(boardState, evaluationStatistics, openingPhase, endingPhase); var mobility = MobilityEvaluator.Evaluate(boardState, openingPhase, endingPhase, ref fieldsAttackedByWhite, ref fieldsAttackedByBlack); var kingSafety = KingSafetyEvaluator.Evaluate(boardState, openingPhase, endingPhase, fieldsAttackedByWhite, fieldsAttackedByBlack); var rooks = RookEvaluator.Evaluate(boardState, openingPhase, endingPhase); var bishops = BishopEvaluator.Evaluate(boardState, openingPhase, endingPhase); var total = materialEvaluation + positionEvaluation + pawnStructureEvaluation + mobility + kingSafety; _interactiveConsole.WriteLine($"Evaluation for board with hash {boardState.Hash} (phase {openingPhase}, " + $"{boardState.IrreversibleMovesCount} irreversible moves)"); _interactiveConsole.WriteLine($" = Material: {materialEvaluation}"); _interactiveConsole.WriteLine($" = Position: {positionEvaluation}"); _interactiveConsole.WriteLine($" = Pawns: {pawnStructureEvaluation}"); _interactiveConsole.WriteLine($" = Mobility: {mobility}"); _interactiveConsole.WriteLine($" = King safety: {kingSafety}"); _interactiveConsole.WriteLine($" = Rooks: {rooks}"); _interactiveConsole.WriteLine($" = Bishops: {bishops}"); _interactiveConsole.WriteLine(); _interactiveConsole.WriteLine($" = Total: {total}"); }
/// <nodoc/> public DownloadFrontEnd() { m_logger = Script.Tracing.Logger.CreateLogger(preserveLogEvents: true); m_frontEndStatistics = new FrontEndStatistics(); m_evaluationStatistics = new EvaluationStatistics(); }
public Worker(AbstractRobot robot, Moda.Connection connection) { Robot = robot; Connection = connection; Statistics = new EvaluationStatistics(); }
public SearchStatistics() { EvaluationStatistics = new EvaluationStatistics(); PrincipalVariation = new Move[SearchConstants.MaxDepth]; }