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);
        }
Пример #2
0
        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)));
        }
Пример #4
0
        /// <nodoc />
        protected DScriptInterpreterBase(IFrontEndStatistics statistics, Logger logger)
        {
            Contract.Requires(statistics != null);

            Name = "DScript";
            FrontEndStatistics = statistics;
            Logger             = logger ?? Logger.CreateLogger();
            Statistics         = new EvaluationStatistics();
        }
Пример #5
0
        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);
        }
Пример #8
0
        /// <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();
        }
Пример #9
0
        /// <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;
        }
Пример #10
0
        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());
        }
Пример #11
0
        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]);
            }
        }
Пример #12
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}");
        }
Пример #13
0
        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);
        }
Пример #14
0
        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}");
        }
Пример #15
0
 /// <nodoc/>
 public DownloadFrontEnd()
 {
     m_logger               = Script.Tracing.Logger.CreateLogger(preserveLogEvents: true);
     m_frontEndStatistics   = new FrontEndStatistics();
     m_evaluationStatistics = new EvaluationStatistics();
 }
Пример #16
0
 public Worker(AbstractRobot robot, Moda.Connection connection)
 {
     Robot      = robot;
     Connection = connection;
     Statistics = new EvaluationStatistics();
 }
Пример #17
0
 public SearchStatistics()
 {
     EvaluationStatistics = new EvaluationStatistics();
     PrincipalVariation   = new Move[SearchConstants.MaxDepth];
 }