Exemple #1
0
        public int EvaluatePosition(Position position)
        {
            int score = 0;

            Bitboard notWhite = ~position.GetPieceBitboard(Position.WHITE, Position.ALL_PIECES);
            Bitboard notBlack = ~position.GetPieceBitboard(Position.BLACK, Position.ALL_PIECES);

            // King mobility
            int whiteKingSquare = Bitboards.BitScanForward(position.GetPieceBitboard(Position.WHITE, Position.KING));
            int blackKingSquare = Bitboards.BitScanForward(position.GetPieceBitboard(Position.BLACK, Position.KING));
            int whiteKing       = Bitboards.CountBits(notWhite & Bitboards.KingBitboards[whiteKingSquare]);
            int blackKing       = Bitboards.CountBits(notBlack & Bitboards.KingBitboards[blackKingSquare]);

            // Queen evalution
            int whiteQueen = EvaluateSlidingPiece(position, Position.WHITE, Position.QUEEN, 900, 1, ref notWhite);
            int blackQueen = EvaluateSlidingPiece(position, Position.BLACK, Position.QUEEN, 900, 1, ref notBlack);

            // Rook Evaluation
            int whiteRook = EvaluateSlidingPiece(position, Position.WHITE, Position.ROOK, 500, 3, ref notWhite);
            int blackRook = EvaluateSlidingPiece(position, Position.BLACK, Position.ROOK, 500, 3, ref notBlack);

            // Bishop Evaluation
            int whiteBishop = EvaluateSlidingPiece(position, Position.WHITE, Position.BISHOP, 325, 8, ref notWhite);
            int blackBishop = EvaluateSlidingPiece(position, Position.BLACK, Position.BISHOP, 325, 8, ref notBlack);

            // Knight Evaluation
            int whiteKnight = EvaluateKnights(position, Position.WHITE, 8, ref notWhite);
            int blackKnight = EvaluateKnights(position, Position.BLACK, 8, ref notBlack);

            // For now, do not include pawn mobility
            int whitePawn = 100 * Bitboards.CountBits(position.GetPieceBitboard(Position.WHITE, Position.PAWN));
            int blackPawn = 100 * Bitboards.CountBits(position.GetPieceBitboard(Position.BLACK, Position.PAWN));


            score  = whitePawn + whiteKnight + whiteBishop + whiteRook + whiteQueen + whiteKing;
            score -= (blackPawn + blackKnight + blackBishop + blackRook + blackQueen + blackKing);
            if (position.PlayerToMove == Position.BLACK)
            {
                score *= -1;
            }

            return(score);
        }
Exemple #2
0
        public int EvaluatePosition(Position position)
        {
            int score = 0;

            Bitboard notWhite = ~position.GetPieceBitboard(Position.WHITE, Position.ALL_PIECES);
            Bitboard notBlack = ~position.GetPieceBitboard(Position.BLACK, Position.ALL_PIECES);

            // King mobility
            int whiteKingSquare = Bitboards.BitScanForward(position.GetPieceBitboard(Position.WHITE, Position.KING));
            int blackKingSquare = Bitboards.BitScanForward(position.GetPieceBitboard(Position.BLACK, Position.KING));
            int whiteKing       = Bitboards.CountBits(notWhite & Bitboards.KingBitboards[whiteKingSquare]);
            int blackKing       = Bitboards.CountBits(notBlack & Bitboards.KingBitboards[blackKingSquare]);

            // Queen evalution
            int whiteQueen = EvaluateSliders(ref position, Position.WHITE, Position.QUEEN);
            int blackQueen = EvaluateSliders(ref position, Position.BLACK, Position.QUEEN);

            // Rook Evaluation
            int whiteRook = EvaluateSliders(ref position, Position.WHITE, Position.ROOK);
            int blackRook = EvaluateSliders(ref position, Position.BLACK, Position.ROOK);

            // Bishop Evaluation
            int whiteBishop = EvaluateSliders(ref position, Position.WHITE, Position.BISHOP);
            int blackBishop = EvaluateSliders(ref position, Position.BLACK, Position.BISHOP);

            // Knight Evaluation
            int whiteKnight = EvaluateKnights(ref position, Position.WHITE);
            int blackKnight = EvaluateKnights(ref position, Position.BLACK);

            int whitePawn = EvaluatePawns(ref position, Position.WHITE);
            int blackPawn = EvaluatePawns(ref position, Position.BLACK);

            score  = whitePawn + whiteKnight + whiteBishop + whiteRook + whiteQueen + whiteKing;
            score -= (blackPawn + blackKnight + blackBishop + blackRook + blackQueen + blackKing);
            if (position.PlayerToMove == Position.BLACK)
            {
                score *= -1;
            }

            return(score);
        }
 public void CalculatesCorrectly()
 {
     Assert.AreEqual(Position.C1, Bitboards.BitScanForward(0x3789237839373920UL));
     Assert.AreEqual(Position.H5, Bitboards.BitScanForward(0x3578900000000UL));
 }