diff --git a/evaluate.py b/evaluate.py index 0b298c6..65fcc36 100644 --- a/evaluate.py +++ b/evaluate.py @@ -14,14 +14,14 @@ } pawnEvalWhite = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 0, + 5, 10, 10, -20, -20, 10, 10, 5, + 5, -5, -10, 0, 0, -10, -5, 5, + 0, 0, 0, 20, 20, 0, 0, 0, + 5, 5, 10, 25, 25, 10, 5, 5, 10, 10, 20, 30, 30, 20, 10, 10, - 5, 5, 10, 25, 25, 10, 5, 5, - 0, 0, 0, 20, 20, 0, 0, 0, - 5, -5, -10, 0, 0, -10, -5, 5, - 5, 10, 10, -20, -20, 10, 10, 5, - 0, 0, 0, 0, 0, 0, 0, 0, + 50, 50, 50, 50, 50, 50, 50, 50, + 0, 0, 0, 0, 0, 0, 0, 0 ] pawnEvalBlack = list(reversed(pawnEvalWhite)) @@ -33,30 +33,30 @@ -30, 0, 15, 20, 20, 15, 0, -30, -30, 5, 10, 15, 15, 10, 5, -30, -40, -20, 0, 5, 5, 0, -20, -40, - -50, -40, -30, -30, -30, -30, -40, -50, + -50, -40, -30, -30, -30, -30, -40, -50 ] bishopEvalWhite = [ -20, -10, -10, -10, -10, -10, -10, -20, - -10, 0, 0, 0, 0, 0, 0, -10, - -10, 0, 5, 10, 10, 5, 0, -10, - -10, 5, 5, 10, 10, 5, 5, -10, - -10, 0, 10, 10, 10, 10, 0, -10, - -10, 10, 10, 10, 10, 10, 10, -10, -10, 5, 0, 0, 0, 0, 5, -10, - -20, -10, -10, -10, -10, -10, -10, -20, + -10, 10, 10, 10, 10, 10, 10, -10, + -10, 0, 10, 10, 10, 10, 0, -10, + -10, 5, 5, 10, 10, 5, 5, -10, + -10, 0, 5, 10, 10, 5, 0, -10, + -10, 0, 0, 0, 0, 0, 0, -10, + -20, -10, -10, -10, -10, -10, -10, -20 ] bishopEvalBlack = list(reversed(bishopEvalWhite)) rookEvalWhite = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 5, 10, 10, 10, 10, 10, 10, 5, + 0, 0, 0, 5, 5, 0, 0, 0, -5, 0, 0, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, -5, -5, 0, 0, 0, 0, 0, 0, -5, - 0, 0, 0, 5, 5, 0, 0, 0, + 5, 10, 10, 10, 10, 10, 10, 5, + 0, 0, 0, 0, 0, 0, 0, 0 ] rookEvalBlack = list(reversed(rookEvalWhite)) @@ -68,30 +68,30 @@ 0, 0, 5, 5, 5, 5, 0, -5, -10, 5, 5, 5, 5, 5, 0, -10, -10, 0, 5, 0, 0, 0, 0, -10, - -20, -10, -10, -5, -5, -10, -10, -20, + -20, -10, -10, -5, -5, -10, -10, -20 ] kingEvalWhite = [ + 20, 30, 10, 0, 0, 10, 30, 20, + 20, 20, 0, 0, 0, 0, 20, 20, + -10, -20, -20, -20, -20, -20, -20, -10, + 20, -30, -30, -40, -40, -30, -30, -20, -30, -40, -40, -50, -50, -40, -40, -30, -30, -40, -40, -50, -50, -40, -40, -30, -30, -40, -40, -50, -50, -40, -40, -30, - -30, -40, -40, -50, -50, -40, -40, -30, - -20, -30, -30, -40, -40, -30, -30, -20, - -10, -20, -20, -20, -20, -20, -20, -10, - 20, 20, 0, 0, 0, 0, 20, 20, - 20, 30, 10, 0, 0, 10, 30, 20, + -30, -40, -40, -50, -50, -40, -40, -30 ] kingEvalBlack = list(reversed(kingEvalWhite)) kingEvalEndGameWhite = [ - -50, -40, -30, -20, -20, -30, -40, -50, - -30, -20, -10, 0, 0, -10, -20, -30, + 50, -30, -30, -30, -30, -30, -30, -50, + -30, -30, 0, 0, 0, 0, -30, -30, -30, -10, 20, 30, 30, 20, -10, -30, -30, -10, 30, 40, 40, 30, -10, -30, -30, -10, 30, 40, 40, 30, -10, -30, -30, -10, 20, 30, 30, 20, -10, -30, - -30, -30, 0, 0, 0, 0, -30, -30, - -50, -30, -30, -30, -30, -30, -30, -50 + -30, -20, -10, 0, 0, -10, -20, -30, + -50, -40, -30, -20, -20, -30, -40, -50 ] kingEvalEndGameBlack = list(reversed(kingEvalEndGameWhite)) # fmt: on diff --git a/test/test_evaluation.py b/test/test_evaluation.py index afe0bcb..dc6368c 100644 --- a/test/test_evaluation.py +++ b/test/test_evaluation.py @@ -14,6 +14,9 @@ def test_move_value_white(self): move = chess.Move.from_uci("e4d5") # pawn takes pawn pawn_for_pawn = move_value(board, move, check_end_game(board)) + self.assertEqual( + pawn_for_pawn, 5, f"Pawn for pawn {pawn_for_pawn} but it should be 5" + ) board = chess.Board( "rnbqkbnr/ppp1pppp/8/3p4/2Q1P3/3P1P2/PPP1B1PP/RNB1K1NR w KQkq - 0 1" @@ -35,7 +38,7 @@ def test_move_value_white(self): # pawn takes queen pawn_for_queen = move_value(board, move, check_end_game(board)) self.assertEqual( - pawn_for_queen, 775, f"Pawn for Queen {pawn_for_queen} but it should be 775" + pawn_for_queen, 790, f"Pawn for Queen {pawn_for_queen} but it should be 790" ) board = chess.Board("8/4P3/2k5/8/8/3K4/8/8 w - - 0 1") @@ -67,7 +70,7 @@ def test_move_value_black(self): # pawn takes pawn pawn_for_pawn = move_value(board, move, check_end_game(board)) self.assertEqual( - pawn_for_pawn, 5, f"Pawn for pawn {pawn_for_pawn} but it should be 5" + pawn_for_pawn, -5, f"Pawn for pawn {pawn_for_pawn} but it should be -5" ) board = chess.Board( @@ -89,8 +92,8 @@ def test_move_value_black(self): self.assertEqual( pawn_for_queen, - -775, - f"Pawn for queen {pawn_for_queen} but it should be -775", + -790, + f"Pawn for queen {pawn_for_queen} but it should be -790", ) best_to_worst = list(sorted([pawn_for_queen, pawn_for_pawn, queen_for_pawn])) @@ -121,3 +124,19 @@ def test_evaluate_board(self): self.assertTrue( evaluate_board(starting_fen) > evaluate_board(white_down_one_pawn) ) + + white_played_e2e4 = chess.Board( + "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq - 0 1" + ) + + self.assertTrue( + evaluate_board(starting_fen) < evaluate_board(white_played_e2e4) + ) + + black_played_b8c6 = chess.Board( + 'r1bqkbnr/pppppppp/2n5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 1 2' + ) + + self.assertTrue( + evaluate_board(black_played_b8c6) < evaluate_board(white_played_e2e4) + )