Exemplo n.º 1
0
 public AlphaBeta(GameState state, Action interrupt)
 {
     PrincipalVariation = new Move[MAX_DEPTH, MAX_DEPTH];
     PvLength[0]        = 0;
     Ply         = 0;
     MyGameState = state;
     MyBoard     = state.GameBoard;
     TimeLimit   = TimeSpan.FromSeconds(5);
     Metrics     = new AlphaBetaMetrics();
     Interrupt   = interrupt;
 }
Exemplo n.º 2
0
        static void PrintMetrics(AlphaBetaMetrics metrics, TimeSpan searchTime)
        {
            //prevent index out of bounds.
            //note, this will not effect the calculation
            if (metrics.Depth == 0)
            {
                metrics.Depth = 1;
            }
            float ebf = 0;

            for (int d = 1; d < metrics.Depth; d++)
            {
                var bf = (float)metrics.DepthNodes[d] / (float)(metrics.DepthNodes[d - 1] + 1);
                if (ebf > 0)
                {
                    ebf = (ebf + bf) / 2;
                }
                else
                {
                    ebf = bf;
                }
            }
            Console.WriteLine("Nodes={0}, QNodes={1}, Qsearch%={2:0.0}, Knps={3:0}, EBF({4})={5:0.00}",
                              metrics.Nodes,
                              metrics.QNodes,
                              100 * (double)metrics.QNodes / ((double)metrics.Nodes + 1),
                              (metrics.Nodes / 1000 / searchTime.TotalSeconds),
                              metrics.Depth,
                              ebf);
            Console.WriteLine("FirstMoveFH%={0:0.0}, Killers%={1:0.0} FutilePrune={2}, EFutilePrune={3}",
                              100 * (double)metrics.FirstMoveFailHigh / ((double)metrics.FailHigh + 1),
                              100 * (double)metrics.KillerFailHigh / ((double)metrics.FailHigh + 1),
                              metrics.FPrune,
                              metrics.EFPrune);
            Console.WriteLine("NullMoveTries={0} NullMove%={1:0.0}, NMResearch={2}, MateThreats={3}, LMRResearch={4}",
                              metrics.NullMoveTries,
                              100 * (double)metrics.NullMoveFailHigh / ((double)metrics.NullMoveTries + 1),
                              metrics.NullMoveResearch,
                              metrics.MateThreats,
                              metrics.LMRResearch);
            Console.WriteLine("HashTable: FH%={0:0.0} Hit%={1:0.0}",
                              100 * (double)metrics.TTFailHigh / (double)metrics.FirstMoveFailHigh + 1,
                              100 * (double)TranspositionTable.Instance.Hits / (double)TranspositionTable.Instance.Probes);
        }
Exemplo n.º 3
0
 public AlphaBeta()
 {
     Metrics = new AlphaBetaMetrics();
 }