From 1274ca9ba5f62b9e24d0e1ef4a40e7297b975967 Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sat, 25 Feb 2023 11:42:34 +0000 Subject: [PATCH 1/9] initial change to make stuff tunable --- src/evaluate.c | 17 +++++++++++++---- src/see.c | 2 +- src/tuned_values.h | 27 +++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 src/tuned_values.h diff --git a/src/evaluate.c b/src/evaluate.c index babc086..b00fa9f 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1,6 +1,7 @@ #include #include "evaluate.h" +#include "tuned_values.h" #include "pawns.h" #include "board.h" #include "mat_tables.h" @@ -108,6 +109,12 @@ int psqt_value(PIECE piece, COLOUR colour, SQUARE from, SQUARE to) { static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUARE kings[6], const BOARD * board); + +static const int rank_values[] = { + PAWN_RANKS_0, PAWN_RANKS_1, PAWN_RANKS_2, PAWN_RANKS_3, + PAWN_RANKS_4, PAWN_RANKS_5, PAWN_RANKS_6, PAWN_RANKS_7 +}; + int evaluate(const BOARD * board) { int value = 0; int dir[] = {1, -1}; @@ -125,7 +132,6 @@ int evaluate(const BOARD * board) { for (COLOUR colour = WHITE; colour <= BLACK; colour++) { int pawn_value = 0; - static const int rank_values[] = {0, 30, 35, 45, 65, 105, 185, 270}; BITBOARD my_pawns = board->pawns & COLOUR_BB(board, colour); BITBOARD their_pawns = board->pawns & COLOUR_BB(board, 1 - colour); @@ -139,7 +145,7 @@ int evaluate(const BOARD * board) { DEBUG_PRINT("%s weak\t\t%8.8lx\n", colour_names[colour], wk); pawn_value += piece_values[PAWN] * __builtin_popcountll(my_pawns); - pawn_value -= 20 * __builtin_popcountll(iso); + pawn_value += PAWN_ISOLATED * __builtin_popcountll(iso); while (pass) { BITBOARD isolated = pass & -pass; SQUARE sq = __builtin_ctzll(isolated); @@ -150,7 +156,7 @@ int evaluate(const BOARD * board) { pass &= pass - 1; } - pawn_value -= 10 * __builtin_popcountll(wk); + pawn_value = PAWN_WEAK * __builtin_popcountll(wk); DEBUG_PRINT("%s pawn\t\t%d\n", colour_names[colour], pawn_value); @@ -200,6 +206,10 @@ int evaluate(const BOARD * board) { return (board->next == WHITE ? value : -value); } +static const int shield_value[] = { + KING_SHIELD_0, KING_SHIELD_1, KING_SHIELD_2, KING_SHIELD_3 +}; + /* kings: square, file, rank, square, file, rank */ static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUARE kings[6], const BOARD * board) { int score; @@ -238,7 +248,6 @@ static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUAR /* default - piece square interpolate between middle game - endgame */ endgame_factor = mt->flags & ENDGAME_MASK; - static const int shield_value[] = { -40, -20, 0, 0 }; int safety = __builtin_popcountll( shield((board->pawns | board->bishops) & COLOUR_BB(board, colour), /* fianchettoed bishops */ colour, diff --git a/src/see.c b/src/see.c index 714b3a8..1703133 100644 --- a/src/see.c +++ b/src/see.c @@ -8,7 +8,7 @@ * so we have a better chance of getting the order right * thus beta cutting more **/ -static const int piece_values_mod[] = {NO_PIECE_V, PAWN_V, KNIGHT_V, BISHOP_V + 40, ROOK_V, QUEEN_V, KING_V}; +static const int piece_values_mod[] = {0, 100, 300, 340, 500, 900, 10000}; int see(const BOARD * board, const MOVE * move) { BITBOARD from = move->from; diff --git a/src/tuned_values.h b/src/tuned_values.h new file mode 100644 index 0000000..ad596b0 --- /dev/null +++ b/src/tuned_values.h @@ -0,0 +1,27 @@ +#ifndef __TUNED_VALUES_H__ +#define __TUNED_VALUES_H__ + +#define PIECE_V_PAWN_V 100 +#define PIECE_V_KNIGHT_V 300 +#define PIECE_V_BISHOP_V 300 +#define PIECE_V_ROOK_V 500 +#define PIECE_V_QUEEN_V 900 + +#define PAWN_RANKS_0 0 +#define PAWN_RANKS_1 30 +#define PAWN_RANKS_2 35 +#define PAWN_RANKS_3 45 +#define PAWN_RANKS_4 65 +#define PAWN_RANKS_5 105 +#define PAWN_RANKS_6 185 +#define PAWN_RANKS_7 270 + +#define PAWN_ISOLATED (-20) +#define PAWN_WEAK (-10) + +#define KING_SHIELD_0 (-40) +#define KING_SHIELD_1 (-20) +#define KING_SHIELD_2 0 +#define KING_SHIELD_3 0 + +#endif /* ifndef __TUNED_VALUES_H__ */ From 4bb30df2d8404f6cd40c7c17a9e0cfa796835073 Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sat, 25 Feb 2023 13:45:59 +0000 Subject: [PATCH 2/9] base infrastructure for tuning --- src/board.c | 21 +++++++++++++++++- src/board.h | 4 ++++ src/chess.c | 1 - src/chess.h | 10 --------- src/evaluate.c | 28 +++++++++-------------- src/mat_tables.c | 4 ++-- src/movegen.c | 27 +++------------------- src/movegen.h | 4 ---- src/tuned_values.c | 23 +++++++++++++++++++ src/tuned_values.h | 46 ++++++++++++++++++++++---------------- test/mat_tables_tests.c | 2 +- tuning/Makefile | 22 ++++++++++++++++++ tuning/main.c | 48 ++++++++++++++++++++++++++++++++++++++++ tuning/tuning | Bin 0 -> 127456 bytes 14 files changed, 160 insertions(+), 80 deletions(-) create mode 100644 src/tuned_values.c create mode 100644 tuning/Makefile create mode 100644 tuning/main.c create mode 100755 tuning/tuning diff --git a/src/board.c b/src/board.c index d0c2979..a84ea46 100644 --- a/src/board.c +++ b/src/board.c @@ -153,7 +153,7 @@ void play_uci_moves(BOARD * board, const char * moves) { } else if (piece == KING && ((ff - tf) == 2 || (tf - ff) == 2)) { unsigned index = ((fr & BLACK) << 1) | (ff < tf ? 0 : 1); - castle = castling_rook_from_to(index); + castle = castle_rook_from_to[index]; } move.from = from; @@ -285,3 +285,22 @@ HASH calculate_hash(const BOARD * board) { return result; } +CASTLE castle_update(const BOARD * board, PIECE piece, BITBOARD fromto) { + CASTLE castle = + ((fromto & ((BITBOARD)1 << 0)) << 1) | ((fromto & ((BITBOARD)1 << 7)) >> 7) | + ((fromto & ((BITBOARD)1 << 56)) >> 53) | ((fromto & ((BITBOARD)1 << 63)) >> 61); + + if (piece == KING) { + castle |= CASTLES_OF(board->next); + } + + return board->castle ^ (board->castle & ~castle); +} + +const BITBOARD castle_king_from_to[4] = { + 0x0000000000000050, 0x0000000000000014, 0x5000000000000000, 0x1400000000000000 +}; + +const BITBOARD castle_rook_from_to[4] = { + 0x00000000000000a0, 0x0000000000000009, 0xa000000000000000, 0x0900000000000000 +}; diff --git a/src/board.h b/src/board.h index db2e7a3..efcad38 100644 --- a/src/board.h +++ b/src/board.h @@ -44,4 +44,8 @@ void print_board(const BOARD* board); void print_fen(const BOARD* board); HASH calculate_hash(const BOARD* board); +CASTLE castle_update(const BOARD * board, PIECE piece, BITBOARD fromto); +extern const BITBOARD castle_rook_from_to[4]; +extern const BITBOARD castle_king_from_to[4]; + #endif /* ifndef _BOARD_H_ */ diff --git a/src/chess.c b/src/chess.c index 22d9303..30d270c 100644 --- a/src/chess.c +++ b/src/chess.c @@ -1,6 +1,5 @@ #include "chess.h" int debug = 0; -const int piece_values[] = { NO_PIECE_V, PAWN_V, KNIGHT_V, BISHOP_V, ROOK_V, QUEEN_V, KING_V }; const char * piece_names[] = { "no piece", "pawn", "knight", "bishop", "rook", "queen", "king" }; const char * colour_names[] = { "white", "black" }; diff --git a/src/chess.h b/src/chess.h index 264ac2c..bdd057b 100644 --- a/src/chess.h +++ b/src/chess.h @@ -43,16 +43,6 @@ typedef uint8_t COLOUR; #define QUEEN ((PIECE)5) #define KING ((PIECE)6) -typedef enum { - NO_PIECE_V = 0, - PAWN_V = 100, - KNIGHT_V = 300, - BISHOP_V = 300, - ROOK_V = 500, - QUEEN_V = 900, - KING_V = 10000 } PIECE_VALUE; - -extern const int piece_values[]; extern const char * piece_names[]; #define WHITE ((COLOUR)0) diff --git a/src/evaluate.c b/src/evaluate.c index b00fa9f..6766f3e 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -109,12 +109,6 @@ int psqt_value(PIECE piece, COLOUR colour, SQUARE from, SQUARE to) { static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUARE kings[6], const BOARD * board); - -static const int rank_values[] = { - PAWN_RANKS_0, PAWN_RANKS_1, PAWN_RANKS_2, PAWN_RANKS_3, - PAWN_RANKS_4, PAWN_RANKS_5, PAWN_RANKS_6, PAWN_RANKS_7 -}; - int evaluate(const BOARD * board) { int value = 0; int dir[] = {1, -1}; @@ -144,19 +138,19 @@ int evaluate(const BOARD * board) { DEBUG_PRINT("%s passer\t\t%8.8lx\n", colour_names[colour], pass); DEBUG_PRINT("%s weak\t\t%8.8lx\n", colour_names[colour], wk); - pawn_value += piece_values[PAWN] * __builtin_popcountll(my_pawns); - pawn_value += PAWN_ISOLATED * __builtin_popcountll(iso); + pawn_value += tuned_values.piece_v_pawn_v * __builtin_popcountll(my_pawns); + pawn_value += tuned_values.pawn_isolated * __builtin_popcountll(iso); while (pass) { BITBOARD isolated = pass & -pass; SQUARE sq = __builtin_ctzll(isolated); SQUARE rank = sq >> 3; SQUARE erank = colour == WHITE ? rank : 7 - rank; - pawn_value += rank_values[erank]; + pawn_value += *(&tuned_values.pawn_ranks_0 + erank); pass &= pass - 1; } - pawn_value = PAWN_WEAK * __builtin_popcountll(wk); + pawn_value = tuned_values.pawn_weak * __builtin_popcountll(wk); DEBUG_PRINT("%s pawn\t\t%d\n", colour_names[colour], pawn_value); @@ -166,6 +160,7 @@ int evaluate(const BOARD * board) { for (COLOUR colour = WHITE; colour <= BLACK; colour++) { for (PIECE piece = PAWN + 1; piece < KING; ++piece) { BITBOARD pieces = *(&board->pawns + piece - PAWN) & COLOUR_BB(board, colour); + int piece_value = *(&tuned_values.piece_v_pawn_v + piece - PAWN); while (pieces) { BITBOARD single = pieces & -pieces; @@ -175,13 +170,13 @@ int evaluate(const BOARD * board) { if (colour == WHITE) { sq = ((7 - rank) << 3) | file; - value += piece_values[piece] + bonuses[piece][sq]; + value += piece_value + bonuses[piece][sq]; } else { - value -= piece_values[piece] + bonuses[piece][sq]; + value -= piece_value + bonuses[piece][sq]; } DEBUG_PRINT("%s %s\t\t%d\n", - colour_names[colour], piece_names[piece], piece_values[piece] + bonuses[piece][sq]); + colour_names[colour], piece_names[piece], piece_value + bonuses[piece][sq]); pieces &= pieces - 1; } @@ -206,10 +201,6 @@ int evaluate(const BOARD * board) { return (board->next == WHITE ? value : -value); } -static const int shield_value[] = { - KING_SHIELD_0, KING_SHIELD_1, KING_SHIELD_2, KING_SHIELD_3 -}; - /* kings: square, file, rank, square, file, rank */ static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUARE kings[6], const BOARD * board) { int score; @@ -248,11 +239,12 @@ static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUAR /* default - piece square interpolate between middle game - endgame */ endgame_factor = mt->flags & ENDGAME_MASK; + int shield_value = *(&tuned_values.king_shield_0 + endgame_factor); int safety = __builtin_popcountll( shield((board->pawns | board->bishops) & COLOUR_BB(board, colour), /* fianchettoed bishops */ colour, board->kings & COLOUR_BB(board, colour)) - ) * shield_value[endgame_factor]; + ) * shield_value; DEBUG_PRINT("%s king shield\t%d\n", colour_names[colour], safety); static const int mdl_psqt_weight[] = { 2, 2, 1, 0}; diff --git a/src/mat_tables.c b/src/mat_tables.c index 7cb3803..c4bba29 100644 --- a/src/mat_tables.c +++ b/src/mat_tables.c @@ -127,8 +127,8 @@ static const RULE rules[] = { /* WP WN WB_LSQ WB_DSQ WR WQ BP BN BB_LSQ BB_DSQ BR BQ V F */ { "a+1=b ", { 0, CONSTRAINT } }, - { "a 0 1 0 0 0 b 0 0 1 0 0", { PAWN_V, 0} }, /* opposite colour bishop endgames */ - { "b 0 1 0 0 0 a 0 0 1 0 0", { -1*PAWN_V, 0} }, /* 1 pawn diff: take away the pawn */ + { "a 0 1 0 0 0 b 0 0 1 0 0", { 100, 0} }, /* opposite colour bishop endgames */ + { "b 0 1 0 0 0 a 0 0 1 0 0", { -100, 0} }, /* 1 pawn diff: take away the pawn */ { "a+2=b ", { 0, CONSTRAINT } }, { "a 0 1 0 0 0 b 0 0 1 0 0", { 80, 0} }, /* 2 pawn diff: take away less than a pawn */ { "b 0 1 0 0 0 a 0 0 1 0 0", { -80, 0} }, /* 3 pawn diff: should be winning? */ diff --git a/src/movegen.c b/src/movegen.c index a7d9d0d..67b9d60 100644 --- a/src/movegen.c +++ b/src/movegen.c @@ -11,6 +11,7 @@ #include "board.h" #include "movelist.h" #include "attacks.h" +#include "tuned_values.h" typedef enum { MOVEGEN_START = 0, @@ -74,18 +75,6 @@ static BITBOARD normal_attacks(const BOARD * board, PIECE piece, SQUARE sq, BITB } } -CASTLE castle_update(const BOARD * board, PIECE piece, BITBOARD fromto) { - CASTLE castle = - ((fromto & ((BITBOARD)1 << 0)) << 1) | ((fromto & ((BITBOARD)1 << 7)) >> 7) | - ((fromto & ((BITBOARD)1 << 56)) >> 53) | ((fromto & ((BITBOARD)1 << 63)) >> 61); - - if (piece == KING) { - castle |= CASTLES_OF(board->next); - } - - return board->castle ^ (board->castle & ~castle); -} - /* knight, bishop, rook, queen and king moves excluding specials like castling */ static void add_normal_moves(const BOARD * board, PIECE piece, BITBOARD allowed_targets) { BITBOARD colour = NEXT_COLOUR_BB(board); @@ -267,17 +256,6 @@ void add_pawn_pushes(const BOARD * board) { } } -static const BITBOARD castle_king_from_to[4] = { - 0x0000000000000050, 0x0000000000000014, 0x5000000000000000, 0x1400000000000000 -}; - -static const BITBOARD castle_rook_from_to[4] = { - 0x00000000000000a0, 0x0000000000000009, 0xa000000000000000, 0x0900000000000000 -}; - -BITBOARD castling_rook_from_to(CASTLE castle) { - return castle_rook_from_to[castle]; -} /* from 0000...010.....010.... you get * 0000000001111111000000 @@ -582,7 +560,8 @@ MOVE * moves(const BOARD * board, int ply, const PV * pv, const KILLER * killer, move->value = see(board, move) + 10000; } else if (move->special & PROMOTION_MOVE_MASK) { PIECE promo = (move->special & PROMOTION_MOVE_MASK) >> PROMOTION_MOVE_SHIFT; - move->value = piece_values[promo] + 9900; + int piece_value = *(& tuned_values.piece_v_pawn_v + promo - PAWN); + move->value = piece_value + 9900; } else if (move->special & EN_PASSANT_CAPTURE_MOVE_MASK) { move->value = 9900; } else if (move_attacks_sq(board, move, king)) { diff --git a/src/movegen.h b/src/movegen.h index 1a6e481..9c4d6f1 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -38,8 +38,4 @@ MOVE * moves(const BOARD * board, int ply, const PV * pv, const KILLER * killer, /* call if a search returns early - before moves() returning NULL */ void moves_done(int ply); -/* TODO move these */ -CASTLE castle_update(const BOARD * board, PIECE piece, BITBOARD fromto); -BITBOARD castling_rook_from_to(CASTLE castle); - #endif /* ifndef _MOVEGEN_H_ */ diff --git a/src/tuned_values.c b/src/tuned_values.c new file mode 100644 index 0000000..3ea36c5 --- /dev/null +++ b/src/tuned_values.c @@ -0,0 +1,23 @@ +#include "tuned_values.h" + +const TUNED_VALUES tuned_values = { + 100, /* piece_v_pawn_v */ + 300, /* piece_v_knight_v */ + 300, /* piece_v_bishop_v */ + 500, /* piece_v_rook_v */ + 900, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 30, /* pawn_ranks_1 */ + 35, /* pawn_ranks_2 */ + 45, /* pawn_ranks_3 */ + 65, /* pawn_ranks_4 */ + 105, /* pawn_ranks_5 */ + 185, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -20, /* pawn_isolated */ + -10, /* pawn_weak */ + -40, /* king_shield_0 */ + -20, /* king_shield_1 */ + 0, /* king_shield_2 */ + 0, /* king_shield_3 */ +}; diff --git a/src/tuned_values.h b/src/tuned_values.h index ad596b0..c894c29 100644 --- a/src/tuned_values.h +++ b/src/tuned_values.h @@ -1,27 +1,35 @@ #ifndef __TUNED_VALUES_H__ #define __TUNED_VALUES_H__ -#define PIECE_V_PAWN_V 100 -#define PIECE_V_KNIGHT_V 300 -#define PIECE_V_BISHOP_V 300 -#define PIECE_V_ROOK_V 500 -#define PIECE_V_QUEEN_V 900 +typedef struct __TUNED_VALUES__ { + int piece_v_pawn_v; + int piece_v_knight_v; + int piece_v_bishop_v; + int piece_v_rook_v; + int piece_v_queen_v; -#define PAWN_RANKS_0 0 -#define PAWN_RANKS_1 30 -#define PAWN_RANKS_2 35 -#define PAWN_RANKS_3 45 -#define PAWN_RANKS_4 65 -#define PAWN_RANKS_5 105 -#define PAWN_RANKS_6 185 -#define PAWN_RANKS_7 270 + int pawn_ranks_0; + int pawn_ranks_1; + int pawn_ranks_2; + int pawn_ranks_3; + int pawn_ranks_4; + int pawn_ranks_5; + int pawn_ranks_6; + int pawn_ranks_7; -#define PAWN_ISOLATED (-20) -#define PAWN_WEAK (-10) + int pawn_isolated; + int pawn_weak; -#define KING_SHIELD_0 (-40) -#define KING_SHIELD_1 (-20) -#define KING_SHIELD_2 0 -#define KING_SHIELD_3 0 + int king_shield_0; + int king_shield_1; + int king_shield_2; + int king_shield_3; +} TUNED_VALUES; + +#if defined(TUNING) +extern TUNED_VALUES tuned_values; +#else +extern const TUNED_VALUES tuned_values; +#endif #endif /* ifndef __TUNED_VALUES_H__ */ diff --git a/test/mat_tables_tests.c b/test/mat_tables_tests.c index e595245..fffdb94 100644 --- a/test/mat_tables_tests.c +++ b/test/mat_tables_tests.c @@ -200,7 +200,7 @@ void mat_tables_test16(void **state) { board = parse_fen("5bk1/5pp1/8/8/8/8/4KPB1/8 w - - 0 1"); e = get_mat_table_entry(board); - assert_int_equal(e->value, PAWN_V); + assert_int_equal(e->value, 100); free(board); } diff --git a/tuning/Makefile b/tuning/Makefile new file mode 100644 index 0000000..1f34072 --- /dev/null +++ b/tuning/Makefile @@ -0,0 +1,22 @@ +CFLAGS=-DTUNING -I../src -I. + +include ../makefile.mk + +buildpreobj: evaluate.o srcbuild + +.PHONY: +srcbuild: + cd ../src && make && cd .. + +evaluate.o: ../src/evaluate.c + $(CC) -c $(CFLAGS) $^ -o $@ + +buildpostobj: tuning + +srcobjs=../src/board.o ../src/mat_tables.o ../src/pawns.o ../src/moveexec.o ../src/zobrist.o ../src/attacks.o + +tuning: $(obj) + $(CC) $(CFLAGS) -o $@ $^ evaluate.o $(srcobjs) + +cleanextras: + rm -f evaluate.o tuning diff --git a/tuning/main.c b/tuning/main.c new file mode 100644 index 0000000..ecdaea7 --- /dev/null +++ b/tuning/main.c @@ -0,0 +1,48 @@ +#include +#include + +#include "board.h" +#include "evaluate.h" +#include "mat_tables.h" +#include "tuned_values.h" + +TUNED_VALUES tuned_values = { + 100, /* piece_v_pawn_v */ + 300, /* piece_v_knight_v */ + 300, /* piece_v_bishop_v */ + 500, /* piece_v_rook_v */ + 900, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 30, /* pawn_ranks_1 */ + 35, /* pawn_ranks_2 */ + 45, /* pawn_ranks_3 */ + 65, /* pawn_ranks_4 */ + 105, /* pawn_ranks_5 */ + 185, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -20, /* pawn_isolated */ + -10, /* pawn_weak */ + -40, /* king_shield_0 */ + -20, /* king_shield_1 */ + 0, /* king_shield_2 */ + 0, /* king_shield_3 */ +}; + +int main() +{ + BOARD * board; + int score; + + initialize_mat_tables(); + + printf("tuning...\n"); + + board = parse_fen("r6r/ppp1kppp/3p4/Q2Bn1q1/7N/2P4b/P4PPP/RN3RK1 b - - 0 15"); + score = evaluate(board); + + printf("score: %d\n", score); + + free(mat_table); + + return 0; +} diff --git a/tuning/tuning b/tuning/tuning new file mode 100755 index 0000000000000000000000000000000000000000..6528270c7ba6fa411d10d3e4890a355da675d1ce GIT binary patch literal 127456 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�!cw>0qbEe1cnII1rMX=NXD?1l7@n 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 F{{WKc(Juf1 literal 0 HcmV?d00001 From 411ae4354b0e4fa5a7cf9eccac2fedbb47d14e19 Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sat, 25 Feb 2023 13:59:39 +0000 Subject: [PATCH 3/9] iwyu --- Makefile | 1 + src/board.c | 1 - src/movegen.h | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index bb7e619..335d4e7 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ cleanextras: iwyuextras: cd src && make iwyu && cd .. + cd tuning && make iwyu && cd .. chess2: $(obj) $(CC) $(CFLAGS) -o $@ $^ src/*.o diff --git a/src/board.c b/src/board.c index a84ea46..5a95941 100644 --- a/src/board.c +++ b/src/board.c @@ -4,7 +4,6 @@ #include "board.h" #include "move.h" -#include "movegen.h" #include "moveexec.h" #include "zobrist.h" diff --git a/src/movegen.h b/src/movegen.h index 9c4d6f1..4833a5c 100644 --- a/src/movegen.h +++ b/src/movegen.h @@ -2,7 +2,6 @@ #define _MOVEGEN_H_ #include "board.h" -#include "chess.h" #include "move.h" #include "killer.h" #include "pv.h" From 22fae5fa2ae17bd46872eaffae758c2e6fdf55fc Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sat, 25 Feb 2023 17:49:00 +0000 Subject: [PATCH 4/9] WIP --- main.c | 1 + src/board.c | 20 +++++++++++ src/board.h | 1 + src/quiesce.c | 57 ++++++++++++++++++++++++++++++++ src/quiesce.h | 7 ++++ src/search.c | 69 ++------------------------------------ test/main.c | 1 + tuning/Makefile | 3 +- tuning/main.c | 86 ++++++++++++++++++++++++++++++++++++++++++++---- tuning/tuning | Bin 127456 -> 165280 bytes 10 files changed, 170 insertions(+), 75 deletions(-) create mode 100644 src/quiesce.c create mode 100644 src/quiesce.h diff --git a/main.c b/main.c index 678fb9a..fec549b 100644 --- a/main.c +++ b/main.c @@ -46,6 +46,7 @@ void print_bitboard(BITBOARD bb) { } int stopped = 0; +int nodes; int main(int argc, char *argv[]) { diff --git a/src/board.c b/src/board.c index 5a95941..a76880f 100644 --- a/src/board.c +++ b/src/board.c @@ -303,3 +303,23 @@ const BITBOARD castle_king_from_to[4] = { const BITBOARD castle_rook_from_to[4] = { 0x00000000000000a0, 0x0000000000000009, 0xa000000000000000, 0x0900000000000000 }; + +int repetition(const BOARD * board) { + int ply; + int cnt = 0; + + if (board->halfmovecnt > 2) { + for (ply = board->halfmovecnt - 2; ply > 0; ply -= 2) { + if ((board->history[ply].flags | board->history[ply+1].flags) & HIST_CANT_REPEAT) { + return 0; + } + if (board->history[ply].hash == board->history[board->halfmovecnt].hash) { + if (++cnt == 2) { + return 1; + } + } + } + } + + return 0; +} diff --git a/src/board.h b/src/board.h index efcad38..c06457f 100644 --- a/src/board.h +++ b/src/board.h @@ -47,5 +47,6 @@ HASH calculate_hash(const BOARD* board); CASTLE castle_update(const BOARD * board, PIECE piece, BITBOARD fromto); extern const BITBOARD castle_rook_from_to[4]; extern const BITBOARD castle_king_from_to[4]; +int repetition(const BOARD * board); #endif /* ifndef _BOARD_H_ */ diff --git a/src/quiesce.c b/src/quiesce.c new file mode 100644 index 0000000..29976a4 --- /dev/null +++ b/src/quiesce.c @@ -0,0 +1,57 @@ +#include + +#include "quiesce.h" +#include "move.h" +#include "attacks.h" +#include "evaluate.h" +#include "movegen.h" +#include "moveexec.h" + +extern unsigned long long nodes; + +int quiesce(BOARD * board, int ply, int alpha, int beta) { + MOVE * move; + int first = 1; + int stand_pat; + + nodes++; + + if (repetition(board)) return 0; + if (checkmate(board)) return -10000; + if (stalemate(board)) return 0; + + stand_pat = evaluate(board); + + if (stand_pat >= beta) { + return beta; + } + + if (alpha < stand_pat) + alpha = stand_pat; + + while ((move = moves(board, ply, NULL, NULL, MOVEGEN_FORCING_ONLY, first))) { + int score; + first = 0; + + execute_move(board, move); + + if (in_check(board, 1 - board->next)) { + undo_move(board, move); + continue; + } + + score = -quiesce(board, ply + 1, -beta, -alpha); + + undo_move(board, move); + + if (score >= beta) { + moves_done(ply); + return beta; + } + + if (score > alpha) + alpha = score; + } + + return alpha; +} diff --git a/src/quiesce.h b/src/quiesce.h new file mode 100644 index 0000000..7a469d7 --- /dev/null +++ b/src/quiesce.h @@ -0,0 +1,7 @@ +#ifndef __QUIESCE_H__ +#define __QUIESCE_H__ + +#include "board.h" + +int quiesce(BOARD * board, int ply, int alpha, int beta); +#endif /* ifndef __QUIESCE_H__ */ diff --git a/src/search.c b/src/search.c index b3f453c..ff316e5 100644 --- a/src/search.c +++ b/src/search.c @@ -9,15 +9,15 @@ #include #include "attacks.h" -#include "evaluate.h" #include "move.h" #include "movegen.h" #include "moveexec.h" #include "pv.h" #include "chess.h" +#include "quiesce.h" static struct timespec start; -unsigned long long nodes; +extern unsigned long long nodes; #define STDIN 0 int check_for_input(void) { @@ -64,72 +64,7 @@ unsigned long long int time_delta(void) { extern int stopped; unsigned long long movetime; -int repetition(const BOARD * board) { - int ply; - int cnt = 0; - if (board->halfmovecnt > 2) { - for (ply = board->halfmovecnt - 2; ply > 0; ply -= 2) { - if ((board->history[ply].flags | board->history[ply+1].flags) & HIST_CANT_REPEAT) { - return 0; - } - if (board->history[ply].hash == board->history[board->halfmovecnt].hash) { - if (++cnt == 2) { - return 1; - } - } - } - } - - return 0; -} - -int quiesce(BOARD * board, int ply, int alpha, int beta) { - MOVE * move; - int first = 1; - int stand_pat; - - nodes++; - - if (repetition(board)) return 0; - if (checkmate(board)) return -10000; - if (stalemate(board)) return 0; - - stand_pat = evaluate(board); - - if (stand_pat >= beta) { - return beta; - } - - if (alpha < stand_pat) - alpha = stand_pat; - - while ((move = moves(board, ply, NULL, NULL, MOVEGEN_FORCING_ONLY, first))) { - int score; - first = 0; - - execute_move(board, move); - - if (in_check(board, 1 - board->next)) { - undo_move(board, move); - continue; - } - - score = -quiesce(board, ply + 1, -beta, -alpha); - - undo_move(board, move); - - if (score >= beta) { - moves_done(ply); - return beta; - } - - if (score > alpha) - alpha = score; - } - - return alpha; -} /* * 100 */ static const int log[] = { diff --git a/test/main.c b/test/main.c index b1cc5fe..0b43b76 100644 --- a/test/main.c +++ b/test/main.c @@ -20,6 +20,7 @@ #include "evaluate_tests.h" int stopped = 0; +unsigned long long nodes = 0; static void perft_unit_test1(void **state) { BOARD * b = initial_board(); diff --git a/tuning/Makefile b/tuning/Makefile index 1f34072..25ff7eb 100644 --- a/tuning/Makefile +++ b/tuning/Makefile @@ -13,7 +13,8 @@ evaluate.o: ../src/evaluate.c buildpostobj: tuning -srcobjs=../src/board.o ../src/mat_tables.o ../src/pawns.o ../src/moveexec.o ../src/zobrist.o ../src/attacks.o +srcobjs=../src/board.o ../src/mat_tables.o ../src/pawns.o ../src/moveexec.o ../src/zobrist.o \ + ../src/attacks.o ../src/quiesce.o ../src/movegen.o ../src/movelist.o ../src/see.o ../src/killer.o ../src/pv.o tuning: $(obj) $(CC) $(CFLAGS) -o $@ $^ evaluate.o $(srcobjs) diff --git a/tuning/main.c b/tuning/main.c index ecdaea7..11967a8 100644 --- a/tuning/main.c +++ b/tuning/main.c @@ -1,7 +1,9 @@ #include #include +#include #include "board.h" +#include "quiesce.h" #include "evaluate.h" #include "mat_tables.h" #include "tuned_values.h" @@ -28,20 +30,90 @@ TUNED_VALUES tuned_values = { 0, /* king_shield_3 */ }; -int main() +typedef enum { + R_WHITE_WON = 0, + R_DRAWN = 1, + R_BLACK_WON = 2 +} RESULT; + +static RESULT get_result(char * buffer) { + int spaces = 0; + + /* go to 5th column */ + while (* buffer) { + if (spaces == 4) break; + if (*buffer == ' ') spaces++; + buffer++; + } + + if (strncmp(buffer, "1-0", 3) == 0) { + return R_WHITE_WON; + } else if (strncmp(buffer, "0-1", 3) == 0) { + return R_BLACK_WON; + } else if (strncmp(buffer, "1/2-1/2", 7) == 0) { + return R_DRAWN; + } else { + printf("'%s' was invalid, no result string\n", buffer); + abort(); + } + + return 0; +} + +static RESULT get_side_to_move(char * buffer) { + int spaces = 0; + + /* go to 5th column */ + while (* buffer) { + if (spaces == 1) break; + if (*buffer == ' ') spaces++; + buffer++; + } + + if (strncmp(buffer, "w", 1) == 0) { + return WHITE; + } else if (strncmp(buffer, "b", 1) == 0) { + return BLACK; + } else { + printf("'%s' was invalid, no side to move\n", buffer); + abort(); + } + + return 0; +} + +unsigned long long nodes; + +int main(int argc, const char * argv[]) { - BOARD * board; - int score; + FILE * epd; + char buffer[1024]; initialize_mat_tables(); - printf("tuning...\n"); + if (argc != 2 || NULL == (epd = fopen(argv[1], "r"))) { + printf("Usage: %s epd_file\n", argv[0]); + return -1; + } + + while (NULL != fgets(buffer, 1024, epd)) { + BOARD * board; + int score; + RESULT result; + COLOUR stm; - board = parse_fen("r6r/ppp1kppp/3p4/Q2Bn1q1/7N/2P4b/P4PPP/RN3RK1 b - - 0 15"); - score = evaluate(board); + board = parse_fen(buffer); + score = quiesce(board, 0, -10000, 10000); + stm = get_side_to_move(buffer); + if (stm == BLACK) { + score *= -1; + } + result = get_result(buffer); - printf("score: %d\n", score); + printf("score: %d\t\tresult: %d\n", score, result); + } + fclose(epd); free(mat_table); return 0; diff --git a/tuning/tuning b/tuning/tuning index 6528270c7ba6fa411d10d3e4890a355da675d1ce..ebb1fee3ad039b05fe6f9bba33527df9cf47c898 100755 GIT binary patch delta 80618 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%0DwUqUf_$PZ06+g?Sum9Br7u;=VX86H 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 TGR=NcoxQ0=;_aqtOfUK$>&trp delta 38740 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 hj{BlFxesRsz8d?*-fWM%*1TA$kv@F Date: Sat, 25 Feb 2023 18:20:51 +0000 Subject: [PATCH 5/9] changes --- tuning/Makefile | 2 +- tuning/main.c | 70 ++++++++++++++++++++++++++++++------------------ tuning/tuning | Bin 165280 -> 0 bytes 3 files changed, 45 insertions(+), 27 deletions(-) delete mode 100755 tuning/tuning diff --git a/tuning/Makefile b/tuning/Makefile index 25ff7eb..c69541b 100644 --- a/tuning/Makefile +++ b/tuning/Makefile @@ -17,7 +17,7 @@ srcobjs=../src/board.o ../src/mat_tables.o ../src/pawns.o ../src/moveexec.o ../s ../src/attacks.o ../src/quiesce.o ../src/movegen.o ../src/movelist.o ../src/see.o ../src/killer.o ../src/pv.o tuning: $(obj) - $(CC) $(CFLAGS) -o $@ $^ evaluate.o $(srcobjs) + $(CC) $(CFLAGS) -lm -o $@ $^ evaluate.o $(srcobjs) cleanextras: rm -f evaluate.o tuning diff --git a/tuning/main.c b/tuning/main.c index 11967a8..3710f4d 100644 --- a/tuning/main.c +++ b/tuning/main.c @@ -1,6 +1,10 @@ +/* Texel's tuning method */ +/* https://www.chessprogramming.org/Texel%27s_Tuning_Method */ + #include #include #include +#include #include "board.h" #include "quiesce.h" @@ -30,13 +34,7 @@ TUNED_VALUES tuned_values = { 0, /* king_shield_3 */ }; -typedef enum { - R_WHITE_WON = 0, - R_DRAWN = 1, - R_BLACK_WON = 2 -} RESULT; - -static RESULT get_result(char * buffer) { +static float get_result(char * buffer) { int spaces = 0; /* go to 5th column */ @@ -47,11 +45,11 @@ static RESULT get_result(char * buffer) { } if (strncmp(buffer, "1-0", 3) == 0) { - return R_WHITE_WON; + return 1.0; } else if (strncmp(buffer, "0-1", 3) == 0) { - return R_BLACK_WON; + return 0.0; } else if (strncmp(buffer, "1/2-1/2", 7) == 0) { - return R_DRAWN; + return 0.5; } else { printf("'%s' was invalid, no result string\n", buffer); abort(); @@ -60,7 +58,7 @@ static RESULT get_result(char * buffer) { return 0; } -static RESULT get_side_to_move(char * buffer) { +static COLOUR get_side_to_move(char * buffer) { int spaces = 0; /* go to 5th column */ @@ -82,37 +80,57 @@ static RESULT get_side_to_move(char * buffer) { return 0; } -unsigned long long nodes; +static float sigmoid(int score) { + return 1.0 / (1 + powf(10.0, (-1.0 * score) / 400.0)); +} -int main(int argc, const char * argv[]) -{ - FILE * epd; +static float error(FILE * epd) { + rewind(epd); char buffer[1024]; - - initialize_mat_tables(); - - if (argc != 2 || NULL == (epd = fopen(argv[1], "r"))) { - printf("Usage: %s epd_file\n", argv[0]); - return -1; - } + float error_sum = 0; + int count = 0; while (NULL != fgets(buffer, 1024, epd)) { BOARD * board; int score; - RESULT result; + float result; COLOUR stm; + float error; board = parse_fen(buffer); - score = quiesce(board, 0, -10000, 10000); + result = get_result(buffer); stm = get_side_to_move(buffer); + + score = quiesce(board, 0, -10000, 10000); if (stm == BLACK) { score *= -1; } - result = get_result(buffer); - printf("score: %d\t\tresult: %d\n", score, result); + error = powf(result - sigmoid(score), 2); + error_sum += error; + count++; + + printf("score: %d\t\tresult: %f error: %f\n", score, result, error); + } + + return error_sum / count; +} + +unsigned long long nodes; + +int main(int argc, const char * argv[]) +{ + FILE * epd; + + initialize_mat_tables(); + + if (argc != 2 || NULL == (epd = fopen(argv[1], "r"))) { + printf("Usage: %s epd_file\n", argv[0]); + return -1; } + printf("overall average error: %f\n", error(epd)); + fclose(epd); free(mat_table); diff --git a/tuning/tuning b/tuning/tuning deleted file mode 100755 index ebb1fee3ad039b05fe6f9bba33527df9cf47c898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165280 zcmeFae_#|vwm;fEnItn1(gOyK3OXU9CV)D#1`Qh6nJ|GK>_F78uvc7u1Q1qKgc-pf zivu%JdWX??FT3kqcUN59ds)}-)!p^6_zPx|$uCq00U`J^M${Ri5(tt2LchQr^}NSQR%!1J8`q;ZouN;&gYh*QgGf5@Q4kjE8s z!|?Yi?n*8LP$Pa$EjKl6)2ivANh_Czkm}`9WRP%_3g+}sr;tLbcfKb+T+Pu#&Z4HN zUOGjs^aqcX{p|~%ou{VtFu5LU&##qF3169@!u2q@9`UB)A8LL@ zbP~I$Ui+IWxc!}!kUD~=T?=)75{>jL*7%tkI*~_@ll|qm)Ou^Qda0pXE3b#t20gcZ z=3VqZX|F=7SMnb!p44!WCNFxZw|5Kb5nsOVqp_2_Rcr5jgCJs@vXUfP4V?tUte_1s(Y{b5hH=yD9M94h14fTQ zOJ}M{HdZ-^6Wgi&W%JGJ?;ZUo!{>K?n)loFSH1X)nP+}X_^2O*lgiLTF#72a<>@~i z_I<+9C^TY_f@97DFF6nVf%Cv0IS>4AfLrlPeTXlE(X;40@T~K|SDpuc*LmQ?yTRJM z<2>+PfLrlPeMk)qhG*<~;2#2R#V_@l0RW9b>O-s=5YHS1Ud=AP?DtvPa{N-P&@Rw8IaSh&*0=I_L^6e?`IU2kx1zw}UElp}Yy}wNw z+?oRCHmc?9Dez(qUXcRV@yt(wuh7b`NP%zB;58}mb`8Ec1)dw$_>%&!(BP32_y!H$ zk^H@EQ%iIR)ON z!Cy{+bN{B|kEFnhHF!%3e1!&YPl0dI;9V*3b`8$GHIUD_o7A)=1zw@Stts#g8r+!z zk7)3U6nL)&pPvG^|4MClMGAbW2KT4HH*4^k6nL8k-<$%s{948Tatd73;E@!#UxT-# zz_)4e_7r%R2It-$$j^e`X#7lp&)4AA6!=pb+@1p0%R5uxEn4}C6u4e~ehS?5l*Z>2 zxL)3$0(WZVYf|8P`OPWtHCp+XQ{Z~}NDBOAt$a%gTrc0A0@wN3l>(1zc(`{4@?Ynt zB?YdRx2C{#e%e#udU-?-qf$QZrr@(c7zMKNr z%Wr5I$R9l&*{#B1B(c4Un&P;oBsk^iPfHR!TL&U+OM(wig10BZMxB^(C&7m#!JSF)p-FHt z37(Y%uSkLqOM=fyf(uFT`AKj~5`1YA{DLI-578eu@B;^a;J^@59r zO4HUmVP)xsl%_3r!h&@CCj41)jc~bo4pZZr?fQvpmaB5sZSomW?iSa5nG4z%i6P?^ z1*jv+L7NExMS?wKKvQVh*0Mym< zu_$*sBAwa&`N3B2h5l1kVNf`(dvK5 zVE0+w@>xkf0(ML}t0;+Uh?)J!gv+@=uibYkt1=Q59Iug}cz5;}d5uO|lF_w~Cp zQXTQFc@2HyI{(D_BgtRHn*bL>lWzGhFn2lPj))lA#D-y!I4*~ci*K^HE=D7D`yH;i zt~*>mbIq#*Q^fG3n{l!W@}5V%_)LcAIzUg(Wzfd~2sA03FU7r-C4YphQnkV=s&E

hRJby|q>9#(!rDFuaRMY&6ie*I%H+M6cw4dR}&-W(tprXesX z?MoP+^!h}ff6_?Q<$Tx85(ASC{{>Nqpm!Kp_$aC=BijIqSAp1u^e+M6@2Kmiw{F1j zsr^mdiLx4f?(pohE_shjZgNCi{!?kIr#XWseEF_zKSncUa@1AW6!;|5Rk+6$XzvYl zWV!;M^t#MVF7qC+;Nw4XoKx7UlnGlS_%(~6oZixqaee7H<1g#fe)P{jQ9k2%AF8T2 zzU@+uJK;1Mh3X9uA2H#_HTzKVs4ckR*Q|pP{1IP68Rf1y~%4 z6dpYnRb8)=;1aTk@KX9(Knm-mP~{oB7#`O9ELh=)NOH^ce0P~?N~kE!H>z{4D$k(> zmaPUVjybr1bQvLM}bACz8ggEAi@)iFnq4LZ6Xh(MbHl?ntP#K9#G${i$ZlJ%m`9Af2mJ6< zop1|Vy~qv^y9d)q3Xh!qFC=1;%_4<|-F`a|3R{8E70US=V-S*PuT*#`=dY-92?~db z{yIf?spzj%$s}wAN&K;p*OrT(yP{uT?&9|gFEzOKoOSUHu27kAi&Lo1!O(B93f1?a zOJbH!-hP%xjGQ9YZUk4GTueW+l3s zJXMWS2vyv|O9>FWo+$heDq{*69|e8JXZc#WB^tk+Z`sr9=Hsry1~=dB|AokT4LuOe zSh3ueq;I6q;sOY#ohXJ{m+}`Ei+RUfa+F5)6efaGKIxK`NFvP@_#(5rTzKP9ncQ9` zf9i_F0s1s^i`6%`th!kU&V(-AViKy)V92&ugy4^n#`NKSN~*sZ5}|~Ow$UVV30wEN z3!`#VPn#fO?j3N;r+VIV3F3i?ErL{gSL8$>Qc>8zcPFNj37E z_H$4r$|W}B{}>Qa29HG<;zN|*s!~1`8B@mF@JS|*z-|tB+#BQP=Rs`^J^%@#X6dMBBC4>^Jm(9nPUF5V&PX1uaxqn z|2(pynjmDT30tRmw(vsrD3G`X*2Xvrp$c!L5HjLHxP#1}*NgE77RK>AD7fM@g7}OR zit;83a8Ry61T=h;UPVqBCi4Ph*2ry4N4U*hv5u2H^`hM1$-lujjfJaCI~XS>swvA3 z#))xiDt8Ct#Ar2T-N85^ctYSrUIUnMu@d+qL(R1NEFRX~2!=gubcRc&iB*j*r2&h( zOW5vBrv*9<)VTa-(W7M$I1(n18R#^{U;9Q;{HJ?`Y8Sy_s3PwK^iKcGOZ)~!cHE5K z#qU520sxj7gy6dv>K(TbcxoTmC4VQ?E{;H;6Dg_AAxfLPHaIE_KP|mXK6gZ z)R)ojtlJo;X>7_IisJ<1Z|80L`YqRb@_&L}+y=IbEMXC<@9#_G3f2GKmw-BZqc2e) zR4Yihlt!h&#o83Bn|(Q+{Hc&5ow1c1FI63` zJ|R@Uf{siPwwH_tzWB7`Fq%#fQr}-Fvk~nC-xsRyrS^oaQ$@_J)6m=C><0*h?L`KR z$bG0qxlH_GC`#hDmqLhN2ZiY7QG`Jly0}8cc|ud2%zk|kKpH7hd=Vhs2&A{mwRZ&C zGs!xO98L?bSU@&fpw&7Td#F!^pBui>sZ<0u&>q7NN zG2PvOU z<(DUw-*GL9lUV=#7`pd5*_Zv=h~(`}+6pmz6Eu8cpqFQAB+#aWbDVrD;ml* zP{-g`Eg`%TU~P_!Vc?`$@+=C}sMF+nMAf0iG`Sje)M;{g9~jf*G6J({V(J59ng|4D z)8yz;4GG4-nj`SlAU*ybz=@;i7_)b1;;7;}>o!q7?f6R7X^)8U+Dm9Pd&q;WQoI3i zY@wVUM=U<%Qb>{`rp>2V?Vg@9uK_P6Q?Hmm#qP@@1COGlKUpk|t@EU`2yEJ}D=kV{ zw(ClZQn}l8r9~<0c2#MKp(#*Wy<$(>#U}!vXT+O8jZzO90%u@&JgBK1Np4q}nXIvE zZrf4eN2jaNX;H2tn|^-%$$Qf${0j(fbUIbSKdwLZ2uI*+07l$tp@c(ASSeAYCG5gK z(u)yqoFY-(CGr$8z74!>oPx!Xm@uV6gw+9aUzP7!x2Z;se3}@m5)njsTp(RE%IaK9NwF&DHzI#Z=}3~$ z8e!`c9y`MltM{9dg+60LnaGRbDZH@tHlDVP)%8Fxw$M?G?x`C(awFe|3loWr6Hm$ zO)$!TMN6Bs^z&M}Kud4Z(iSZpq_j(Eax^FICpE|BOYD=A_cYZXT^_AJ*;!VgL?JC@ z1&N>Z<)bduw=2;Et%o&;6Md9+XlbI4(s^2%=%e&-Elu=Mny0k?)Ga=vzuaT!XS5J} z4E?9U3jPd{N3#5Rm}wq}xEsq8 zvxiP-_7IcuIoMB3PV&gOZ6fVO6|2v(qz0DaTHeD}P^8E)<7jz~y2CSev%wQ(qYYK28d0TrS~%zJ*up>e?1|MK9aGB(;tNYG!edu~7~sQZ z==ZZIX5`Ucju>sv60z69zN^Rvf5?VP+sOD_*dmg=UyjCaMNHTVnExa%1dTx9Kbav^ z-;Rh|KI|^+2%Lg4pNnK!;g^n9SKwPD%aKg#@sb)49;K$uhlQ<2(W2cGZ8xDY$eG(# z;4w!$<`!(rZIZb)ZpXliA+{03-i&HR+lxeVFN#ZM%r&>o8ZW`+9{_F!;7(J$AGvnyH4aZ>NNFFkoKWMNprXN-X6a24}I?cA-=Fw+1In z8S^o4??B>Ls1vt#DoSX!motX(5j)dmiyNpi!U!)&)6{oE)U(CBCuqg8m+gfw)zi*yX(;R8c$>imZe8jTb|+E#kxqyRRc~lJ{OtMO2MGvCG$% z#2u1vN3-0NBNv36KI69#6Y{H; z5imU0HXj=q#|bI?qK!$A+~#O@%iWGvxL?W~&5#`{ka1-MIE0jqQV0tutUr2$N{pwt z6n?{2gU}_zkF?xY;gK75AZaOceC3uG*|OX;spWmxgx`*0sAZ>G2#YABKFf1$Id1&1 zl*@7QYPj*oD4*&asBpMY#V9clv3TIs3)$s8>pnqsiwL7U*a}vl*BfmXH4=nVgh7Hf zyB=}skqSLBACbl&ct><_9JU0%FPFQ^<)fl}v@?B4ji^LLVf#cU)T6iC9lrM&G5k~B z@h$e}mOkE^IfI%XN-shf)@VS7RA0TQ}S_#Wb3tOKz1A zI*Gj{oj2<9t2E@@xX}ZPVjX6X!U>OEiCSXS0U*1XR~kKXo&3rs8f%6!7qaOJyPhez z`2Gf0_&!=%%)(>4!3?Lc{RE-uOt#j@AN|D{^r6Ii1G=0rp^23F5`F+k6!YqMg5SsO$94l;sf^8Q0U5Ny0&_>0C z&>ezkgdlBhc!uO2q;lYTGKF*g)g2=FLc-_{8EsR-MYr<}C|E%A(&*&7;E%F}i|*&U z!bMM`nw9TDnM3Tahd;<4Masz^<#$dAXSMP>`4+LNCE9zrxUBWgB}d_P6-GH1F7@!}`4uD(Igj3y6A(6b8fjP~*nDL9J{3di zR87*@CK{J@F`Ci0>n`^@>KuyymPoUFSCNKNeGx4CW zGyJf?i&acZ%@M<+wmX#0QM&zDwOeVFgBzhWu)sAK#fcwz9|>hlBH_Nj!yTTd1dbRy zRc}dEN8F)}tXOGi$5`NfleFYg8o{;gE0ASf+2H2zl{6g@E7Ug}vck|5y2xe`T z$|^#){4tvMts}O~QFepk(8f2YCF04&V41nnW)H0}@m^a|paYxyX@HUFPlMEyU?BgB zhQMOt^mbIUP(4zUBvIgHqdSZv8V>B-<68F_dU)0y{tp1!UF!}Z^|2e875vExg#Q5O zx9dIy@bmz3oe&N8Z@$G+Nqxm8bPodIiGSd)JG=#d6%DZvtV3$uS^P10M+i@J>M3~2 z{*1UQEb^uDD?#dAVvk0C`atqcG&jkJ#$v(N&(3#}I%h~+hO8ujF)?f)fMwu1EYP8oU)zI(V9YO7m?>QlhM$Vt%Aq}uIX zwc9;HwHdI^?F<9ltKTg|l;aM8!)4W9`L-koP4)Y}XA(yd2}v6_(xk(T ztA6}jMZx@fVlzS-+@GI>O2CXYV2T=)MoiL2TJ#B;CR8s~i-+&iir<9d)EBGwZq_B= zRj!H6!XHTIC7yu1P>N|lZ3G_zEMdSOO2ZY_13XmbcdW)8$N({qU!YRB|$<>U;~M(6HAmK zAtr;Y3^V~Cv8qX_l`A*S#}0lR>|6t^wqEP1`{Bf{j-fL7y1t+g)8Yg|6f?RSGB`}7 z`H=nT#92$m`ng~vTans1pqHcwhiGLgw{l` zM^WTjrAgwCiH)W0C#P$;Y?|3sj@-O(!V57b&ca@O@8S-Rdte_&=v z*XK^GU3n-`iBfXJ(+I7NIovqa#KN#U!vZ%&J0%dZMiPYsi@GydTZs`2>{2nf8r>P+ zQY~gr$FFb4kYJbfC}d3xzru{M#NkueU*7gAwd9d|HK#-1OQ#gN92TtobuP#Jm=Eax}3?m>GSQ3d%-oiCUy&IQE%fm{AN(vxqxhn5F&)7pW-k67$Yd z{S(zET*Azwo>#TZ7o@yq98Z|owtxyWLw;uN@`P68!dk=TYmbku@`iU3+b z&?qa5)cE*l_)x{r$Sa?~c+v`AE7F?Re@vc%O_uZax_I?Rntx7|Pl?+f(H`ta;2byw zMq>uR%>efr#o$m-V{znavA$evPgEG+D(;Dkd0pc6v)Y5xFVWnBGtOg;ef}yOXUqE; z_0EE0-dp^qu;On4?}!exj+4-1yWu^+mXtNrPuh+?tZFOaq7fKn(cGmq5mo&K8Xne* z{bKZU(0NRhDF!-^^)~_Zth4Y|Pz=Si7>ZG!iGT!6tpV!X2|CZ>I39e!!936%?!*7J zivO_I1;TpxJnU*oTtbMMeSI5k8sQj?S7p%=QSY(3+mkKU8r(zqh82N#56+f&35q#` zUkSkgnCA4K;eB_D@_XW|DtExg?ccHou^m5V4`R{70&{`o?S$0}zf3m7Tpx90n>Fxo z0^<%uw9|qVx#st7zk_J2t*aqCjtD$yx_v{9bDSzbBGjzfs0gz_B?QbJ(D)~6 z;~b|_tT+BiU*n&m@z0YR->b5PnskEyz2r#7E_*Uu8FNJObp?#T1F`?PNgVof=)B%? z^b+GFpY%lI>F943x?{(Mgf)Rrgc;#VuGhs}hGm6qJ>vPEgr{p9>-XZqafJq6$n5!zr!v%yiL8L zV@Jr+^;+Lz9S(3TIu?eIp2gD1QSlZmw80O_D;B?hA2T z7~W4f2;|ukIxJoHa4vSHXFT#*kNm9|JyI0-0%x3G!-w;g$rJrDE4~)CGqGN4B>xwj z3*ddhdBsJPh8tHD9nhdnk^^oYxL)F~qd1$dW04iY zIXgJvksINEjc-O4vsA|3EK;i~?+6c5upS3W?TJ5#QiK;3zX6DhPr6xPLcA<^$h$WF z)BXa-sRgy&DS%2?Pf;#b?)ZW(^Wcim8MahUk%%cG-&O{%?XPOFo#iEYO$F=@^G*;Z zSIlAKJ9dh=VTuTe%}sVI_4`(sJmKm<`~Vq-j>gX4E~!x~P7~>{V#72sz7Y*7H%sJj z_Y<$kn}OS0-@vXVpJaLX9*gG<${@LcWMcT@PaTBe7-%rbb@4Ewa((iJ5^bQVAqe`L5U)#L2LRf& zl0QV|xOicIbC;>jUGyEzoyK*tbDKjuWB!!fPI>sh{ODCp{4JE%Iuk(@op}|(`8xCa zL9xSa659Z&gTI83}aq#H-0LTLk5>Fcr@!=;L~7Tav{)eV$S+$^hByc2NiV*PX2jMmUqp^vfXztJkU z;LyCp06Q2rg@7>Ho`#i+&^5$5BHg=v`v@KMrHW!QCI&QS1L!J#48(?u-lai++fl-` zvgqd->UxxP6$$p|by)|Xe7l=`al*y?<&b}{Z*v9g+ZYv8fxAA52 zK}^R?x14YZf518R=}f2ahkBZ)!Oh?zTe^OO2(&>xe%;}s1~%nH;kje%hQ!L^GP%ty zf9+!CQ4Ku#N(645%tx#)e{bd^m!MJ``muj%IA?FH_RqM&Xl|2)=UP|2tL&CfyX4-U zy^+pL?>sc={TGZ*51a&Fq43vCC&fDc+;aj(1Jzi0lYCY^noQ!k5>8@%P6{|J?J9q*h(k=2G4+lRtCIpSXJ7bw$3)6oOm9O?1yY3lttlqwkl6 zbGpxM^m@1axqcmxfEeh;>9+m%zbOD~nV!yI+QIzI3*E&FHdVWKAvz>xI`pT+|b*ZSFZqo_uh9 z)dxx15y$X!?448}>#a*ZC7+>7O7JP(=AwIPVJFT^Rw#kbGD|Xr$L_>BX?I~Gxol|8l!hzc;oSW0@WW@g&dZY9+Y?)u=y^X-Yf}5( zywW)FfG-XaP`nlB`2O(2@2U$Db-b0VHQ~9FD<`;E3!PUajU~w|+S(tke3y%rCVJkI z%uPhwN|UmS@cBB3Bd+jDKKex(E;C{fF~?XH)j;4+QMCvic2KozRpxeHp40~6SBpjU zVkV^l*iF7ezzol4t9P1ONX0n-WTS9y@1r+j419r_HLt2j5XdUM!zt} zI!GQKiM~{M?s;ZcAb}Q~VT!?+0zD>mb6N?RYcXaTnFblpH)~Ff#woKd;rEM-$ zi@60021dCR9W_NefWH%kaYZAqE9pQ=%a`{=KS7D^o<`b1V*5pL_@sv|7g>+7G4E3C z|G<|bkho-=QfA{QNxl9pV%uEoXvG;eGJB+uNo>R_jz8X! zp1eJDUDPCnM3WZB%}~*z#d8tQ)#6sft%!^H6$MnMAbFqAOikOxP=#F_T7i=dkTu)l zG4GWeZLx(fA8W$8N!!^#yC6A6#iZ-7y=PZePt8f14^%^V(o9TR3{kC^ z&v=AuoB3{B4n-AcZF7@kZh`eO&_jWB#Fvg4Cf3D2c?bR@*KG0~;Y#El*DSiKQi<`! zp128yw$l@u+hS*DXLP>~UYr6P^hx1KZO{wQB)3eZ;OgltbwwSUkypO~F1lVP_R#55 z0bNwJV@yj#xyS|#Cc3_ALIk@I++!ur5JhqkfxYd;Rb%;V(ga;nL#7yRLQGmD!T%$_ zM~4mA-55zd?ICXFyWio+y@T7t1UrM#8=E5_w)c`e?Dso+;C6t7v}0UaP~SDSau`@v z(&zyW)PtHb?n)|_g<@dwuP?#;CdP)0Hc!6sZPJn!5t~*sJZLy7_2hxSr-H1qp5qBP+bN+MkNdAeBX{p39~08*=Q?d=h*SRq~IC)TnvX(%!4V3+s+s> z{j`V8M{v9|mc$W{d|KFA>zWNy!SxgQfO>DEJT%3Q!K$;D51mrX25d1Kuql@E&??-b zY{oFr03&=ib}+tv>483*t6 z{Q!*zqc$|o3y zlPEmlVwxXWyFDRT8&X~)#-U_iY~gb-H{}CRXju}EoyzF!i+RXh$!RGx3gZZdKWu9+ z&+8_Yi22Ya<(-nu?}=uZT06zO_dI5pMU4G)pGShnI8FoCg(3KsZL!gpho?Z2^Diwt z#TJrK5e&9gC{K~5xTY98dvKj$+p!1)hfEHpECIv#((p7T4G;JT=5{`pG(NO{6~n9T zG^^O1)=ATId2C$iI*t^YX_to1EC$|C(XK!jkI4urYY_8i7l0@0FhXqSAy(CjRjueV zv9*&1OO09~@UUKUF4{qZCZBN^zKd(((*Z3H*)TCj?kJ_`c#6J)(SVxE86nA^NH_v+ z!MH~*$^);P=>WdXU3dUIe@8xx33^D9F&93@$l-N|x1fi}pVxuq=5tI3%#OWSSHf90 zdO|rpo}o~sdB=p{E1-ZTZF#5y9-(@0Da)aFqMw;bXu4?b_j=6m40>(x^1NgH_9qR{ zd+2`yMYE5iXLJ}a|l-SOHK5~!y#Hi@lp#K5cw#D zanDd^u9Vk>Il9}MCYpO_d$rT|+uN~(^}nc;G(0s9g?vW6eS^sSE95R0ht4i8JW2}! z-cabV)0J~Na`^yG_T>7m*|_NY6Ls^XPCmQ=Lr(8r=LWA0#~h6??PlX6RW5lK^d5?amd3O(v z_uRG?VEKR&f_M_qeVx;ih$DQkhkeCB+M>O)fO{YNgdm-$h>h_0V3BT6kQ=Cnu~_FM zJ6Z^C0N7o8!dF*ToDhPikOC1O!0G*XHti(o3N_^XeH8JIK~9Uh73gWB5?RPZHJ=%| zxcW_)c^Km5_Xfy>*0{TmWg8d3^CLwtbl1av64bZiz zJs^75I#cL>Vg?#@y^cRhVgj{~do08X+;h>%dJ7o)<=6EFm8H&B)4?Cuk~l*Jbp5E| z>H&=TpH+P@%}%mHPDQzq?H0sxS{KTPKCIr>Ag`aBj?#;81EbypB4G)ga?72#!5`@6 zH{e16HoOpY`Je<@DTyR&dKrNjy!G zININo*wjrH+TGTOc1i-hyssJKPF4%Oy?Bbo)G|F}?1Ezz=!tAAI$RH#$JK%O1JoJ@ z)Ct})3YC|M0^A-CONbVc=N|t zgy1Ja^q7n7fr`Z{#^k+)jIU&1z{N|tP1RP6O3>#SN`K^NQtudl;GQ`M4Tf6_v05Co zNO}9oWW!=3yo95dy*;fGf7p{>wAXhF%)aetldY&?zVR&5*GxheU}8{w4D!b2Os4mr za>?R|kd&j@O0bFVLV>&yu>JB{#r&KGA-Em_1Xgt82>k&F9M&>iuRxE>5p$MTzwf;i zN)%@USe-Q6KO#;v+Hi9V6H-DOb}?kMf!o9<3tb>ENw8tz1dVoNkceOlNtVuwPtvhS z`>|2ApvH;QiTH0Z9MlwUO<@U)LLrb(IGo;r#l-`}7RFH3aF`Jq56aW0O-7rz-!eQ8 zvmXOF17i*F3Ma>vVjF5NM>Q}WT>s20nek2_lCDA=Kw(=$cQTE(zWGD$u!A1?C}TEU zPhhr$Z6ss%UtnbOhs*P`7_&#-0`z!4YA1#q?1nu&a>q?7yHBw(aE;BGNck3?8G_(< zjt!mmprg4G)+VyvJo!23A)RhBX8Ziqb5kM{0D8&so&8LAXKuH^3b@RwALXcii zAc?i3lW(DUb;y~Vg+?_2cs&sUD+U{BN?wIB;DZSUehH{S&oMSG`CUc|Nr08Qi;Z1t z=OwA~SG%pd2{)%n9BO;JvFpbr-ri#kaNfWmfo#>sI{po^#P>?*imxT%p_6_PY)$Mz zC)oLi6jt>QG!MpL-Itr8rST4rh-DA<={zib^NMN3wt7NE5tkgpQ2$ zG|I5wVVYq*f+E2Rel{M(3nb+G#M=oLcz1Cg`$i-9ePam|hE+@^CcQ{ORUFveuuA@b zA-g$bOiY1gGHzz5l5VFuL&{Sz#K`g;e8qqa09;d)8Cy~?9+NY6S z195?;v#zHX(g#a*!7#9PXi=kB{k3-k1Y=!nGg=+Ebks=lXJV)v3JLrSm4W}TyMs1A z3aVF~NOe_+@{8=YsD$t-WQp=dcCSOKf*6UogJYqKIChV@L4qm~am6=FUw_%?(_H?j zTs}@~$!U7?M4u)SA1TkbHTot}$D5hVdGbqky2cuZ(hj7VHYj9d!ibynuURB1%*?bx zzw8#O3!sSE2E+I7A}*ki*(8QEN)a+jsbBf8*!;*7f^GQA?!l>qpRZR?&UmF3m%^xP zxgK+~1p61pz;et;usKO1(D?+qhM9DHXdYKCzpeHV9ztCgK-APu*7_#1PD1?@KpVmQ zfA&Vun_tqTPPMVdEU=|yC%VksT8-$dB*)2;7OE$+)dyQC-xKHWDeR5>GLsPOMK8sw zN*b9##txFU1v;Q_2%(zLHLqCXx?yW9vK4_T9}mHhHVM??l_l2eykOQQ{9`3E%A-K^#Lf2~U1ji%?z6mIXSVkS*m`8pKo(c&s$zoE_W*qthOyAjW-;y0VKUN#*{t%1R6J~4}<@d0c1?1QV5JnR$ zgjnfm2pK$0b0jkqX_xAL!8*ibuLbr?)OVf6ZgNM3a%^CE7hwj=PxmyC<$J{| zN&1?;STLTZIeLz(8C}PANoH)5PeQ79#yXzsX_k1rr8)}dkC2w%V0+4FNrVy8&L^<- zr0s@F{sx}Bcj?{(U2aj*m;M|FzHjZqRkDcpB6?FWW}=t2`u4(P@6sgz5eqvFN(&^4 z(%WDWLOS1}_#1D6D-*kf@L!NQF|L~aLV3LNMsxx4Ehn)5bA^383illBc`tq!lqNp) zK*=_ILm+6nP5Rsmdo@d?m-c6x zAAY8`NmJMktytK)T7+To6l^#w0!FxDGqHPPD{lP4I2z5vY>&aA53G1NPhLz21{ur7 z_uI3~?dKZ1T8!1UcYmN0z5feU%B@(ey<(DruZcemVq+Z}F#pH^1?$LXI>%BTTJ6Nv zF#ci$!_3|kvg54O|27}%Xz6~(BbRZ$SgiJ`?zeqm5KJ#ft%e@L+gb6SQ(JlU;x+}e z;h}^O>_UvjyPrO46F27>Q?J+Q6N1bPfx5wl6ib_2pF}LxCw=^(>kSUxU)P)IKuW49 z7yLq5h&uU2p<_((m<9Sv#&>%f)TN&`TcLZ=rTekznre#g+W{&uIq+V`*C+=Ey-RtA zZb3-qPd)3tWOo&~X1(utODc}d0lM#zGd%0QrEK5ROz|;(2-WmW4oYK%0Dtg#3#7}@ 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 P|I_P&ewq(~k5l`9in<8| From f8c0e327c53e2a2431c9af3692529d051149625a Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sat, 25 Feb 2023 18:21:02 +0000 Subject: [PATCH 6/9] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b1af79a..ccaafa9 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ src/version.h .* chess2 test/test +tuning/tuning From ed1e70b2b6647e909d302d14e29ecd1d0a295b87 Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sat, 25 Feb 2023 21:31:29 +0000 Subject: [PATCH 7/9] more tuning --- src/evaluate.c | 2 +- src/tuned_values.c | 38 +++++++-------- tuning/main.c | 117 +++++++++++++++++++++++++++++++++++---------- 3 files changed, 113 insertions(+), 44 deletions(-) diff --git a/src/evaluate.c b/src/evaluate.c index 6766f3e..5fc5c8d 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -150,7 +150,7 @@ int evaluate(const BOARD * board) { pass &= pass - 1; } - pawn_value = tuned_values.pawn_weak * __builtin_popcountll(wk); + pawn_value += tuned_values.pawn_weak * __builtin_popcountll(wk); DEBUG_PRINT("%s pawn\t\t%d\n", colour_names[colour], pawn_value); diff --git a/src/tuned_values.c b/src/tuned_values.c index 3ea36c5..8bd4df3 100644 --- a/src/tuned_values.c +++ b/src/tuned_values.c @@ -1,23 +1,23 @@ #include "tuned_values.h" const TUNED_VALUES tuned_values = { - 100, /* piece_v_pawn_v */ - 300, /* piece_v_knight_v */ - 300, /* piece_v_bishop_v */ - 500, /* piece_v_rook_v */ - 900, /* piece_v_queen_v */ - 0, /* pawn_ranks_0 */ - 30, /* pawn_ranks_1 */ - 35, /* pawn_ranks_2 */ - 45, /* pawn_ranks_3 */ - 65, /* pawn_ranks_4 */ - 105, /* pawn_ranks_5 */ - 185, /* pawn_ranks_6 */ - 270, /* pawn_ranks_7 */ - -20, /* pawn_isolated */ - -10, /* pawn_weak */ - -40, /* king_shield_0 */ - -20, /* king_shield_1 */ - 0, /* king_shield_2 */ - 0, /* king_shield_3 */ + 100, /* piece_v_pawn_v */ + 159, /* piece_v_knight_v */ + 169, /* piece_v_bishop_v */ + 367, /* piece_v_rook_v */ + 728, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 49, /* pawn_ranks_1 */ + 25, /* pawn_ranks_2 */ + 1, /* pawn_ranks_3 */ + 11, /* pawn_ranks_4 */ + 83, /* pawn_ranks_5 */ + 186, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -8, /* pawn_isolated */ + -9, /* pawn_weak */ + -2, /* king_shield_0 */ + -25, /* king_shield_1 */ + 5, /* king_shield_2 */ + -9, /* king_shield_3 */ }; diff --git a/tuning/main.c b/tuning/main.c index 3710f4d..e745a6a 100644 --- a/tuning/main.c +++ b/tuning/main.c @@ -13,33 +13,33 @@ #include "tuned_values.h" TUNED_VALUES tuned_values = { - 100, /* piece_v_pawn_v */ - 300, /* piece_v_knight_v */ - 300, /* piece_v_bishop_v */ - 500, /* piece_v_rook_v */ - 900, /* piece_v_queen_v */ - 0, /* pawn_ranks_0 */ - 30, /* pawn_ranks_1 */ - 35, /* pawn_ranks_2 */ - 45, /* pawn_ranks_3 */ - 65, /* pawn_ranks_4 */ - 105, /* pawn_ranks_5 */ - 185, /* pawn_ranks_6 */ - 270, /* pawn_ranks_7 */ - -20, /* pawn_isolated */ - -10, /* pawn_weak */ - -40, /* king_shield_0 */ - -20, /* king_shield_1 */ - 0, /* king_shield_2 */ - 0, /* king_shield_3 */ + 100, /* piece_v_pawn_v */ + 159, /* piece_v_knight_v */ + 169, /* piece_v_bishop_v */ + 367, /* piece_v_rook_v */ + 728, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 49, /* pawn_ranks_1 */ + 25, /* pawn_ranks_2 */ + 1, /* pawn_ranks_3 */ + 11, /* pawn_ranks_4 */ + 83, /* pawn_ranks_5 */ + 186, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -8, /* pawn_isolated */ + -9, /* pawn_weak */ + -2, /* king_shield_0 */ + -25, /* king_shield_1 */ + 5, /* king_shield_2 */ + -9, /* king_shield_3 */ }; static float get_result(char * buffer) { int spaces = 0; - /* go to 5th column */ + /* go to 6th column */ while (* buffer) { - if (spaces == 4) break; + if (spaces == 5) break; if (*buffer == ' ') spaces++; buffer++; } @@ -61,7 +61,7 @@ static float get_result(char * buffer) { static COLOUR get_side_to_move(char * buffer) { int spaces = 0; - /* go to 5th column */ + /* go to 2nd column */ while (* buffer) { if (spaces == 1) break; if (*buffer == ' ') spaces++; @@ -110,12 +110,78 @@ static float error(FILE * epd) { error_sum += error; count++; - printf("score: %d\t\tresult: %f error: %f\n", score, result, error); + free(board); + + /* printf("score: %d\t\tresult: %f error: %f\n", score, result, error); */ } return error_sum / count; } +static void print_values(void) { + printf("TUNED_VALUES tuned_values = {\n"); + printf(" %d, /* piece_v_pawn_v */\n", tuned_values.piece_v_pawn_v); + printf(" %d, /* piece_v_knight_v */\n", tuned_values.piece_v_knight_v); + printf(" %d, /* piece_v_bishop_v */\n", tuned_values.piece_v_bishop_v); + printf(" %d, /* piece_v_rook_v */\n", tuned_values.piece_v_rook_v); + printf(" %d, /* piece_v_queen_v */\n", tuned_values.piece_v_queen_v); + printf(" %d, /* pawn_ranks_0 */\n", tuned_values.pawn_ranks_0); + printf(" %d, /* pawn_ranks_1 */\n", tuned_values.pawn_ranks_1); + printf(" %d, /* pawn_ranks_2 */\n", tuned_values.pawn_ranks_2); + printf(" %d, /* pawn_ranks_3 */\n", tuned_values.pawn_ranks_3); + printf(" %d, /* pawn_ranks_4 */\n", tuned_values.pawn_ranks_4); + printf(" %d, /* pawn_ranks_5 */\n", tuned_values.pawn_ranks_5); + printf(" %d, /* pawn_ranks_6 */\n", tuned_values.pawn_ranks_6); + printf(" %d, /* pawn_ranks_7 */\n", tuned_values.pawn_ranks_7); + printf(" %d, /* pawn_isolated */\n", tuned_values.pawn_isolated); + printf(" %d, /* pawn_weak */\n", tuned_values.pawn_weak); + printf(" %d, /* king_shield_0 */\n", tuned_values.king_shield_0); + printf(" %d, /* king_shield_1 */\n", tuned_values.king_shield_1); + printf(" %d, /* king_shield_2 */\n", tuned_values.king_shield_2); + printf(" %d, /* king_shield_3 */\n", tuned_values.king_shield_3); + printf("};\n"); +} + +/* based on pseudo code from wiki */ +void local_optimize(FILE * epd) { + const int nParams = sizeof(tuned_values) / sizeof(int); + float bestE = error(epd); + + int improved = 1; + int count = 0; + + while (improved) { + improved = 0; + + /* keep the pawn value at 100, to define the scale in cps */ + for (int pi = 1; pi < nParams; pi++) { + + ((int*) &tuned_values)[pi] += 1; + + double newE = error(epd); + + if (newE < bestE) { + printf("error %f -> %f\n", bestE, newE); + bestE = newE; + improved = 1; + } else { + ((int*) &tuned_values)[pi] -= 2; + newE = error(epd); + if (newE < bestE) { + printf("error %f -> %f\n", bestE, newE); + bestE = newE; + improved = 1; + } else { + ((int*) &tuned_values)[pi] += 1; /* reset to old value */ + } + } + } + if (count++ % 1000) { + print_values(); + } + } +} + unsigned long long nodes; int main(int argc, const char * argv[]) @@ -129,7 +195,10 @@ int main(int argc, const char * argv[]) return -1; } - printf("overall average error: %f\n", error(epd)); + local_optimize(epd); + + printf("new values:\n\n"); + print_values(); fclose(epd); free(mat_table); From ed5ec167eb126b77fb1e749a2a8cf3d7ee42a63a Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sun, 26 Feb 2023 12:58:21 +0000 Subject: [PATCH 8/9] more WIP --- src/board.c | 19 ------- src/board.h | 1 - src/chess.c | 1 + src/chess.h | 10 ++++ src/evaluate.c | 18 ++++--- src/mat_tables.c | 3 ++ src/movegen.c | 3 +- src/quiesce.c | 57 -------------------- src/quiesce.h | 7 --- src/search.c | 67 +++++++++++++++++++++++- src/search.h | 2 + src/see.c | 8 +-- src/tuned_values.c | 93 ++++++++++++++++++++++++++------- src/tuned_values.h | 9 ++-- tuning/Makefile | 3 +- tuning/main.c | 127 +++++++++++++++++++++++---------------------- 16 files changed, 238 insertions(+), 190 deletions(-) delete mode 100644 src/quiesce.c delete mode 100644 src/quiesce.h diff --git a/src/board.c b/src/board.c index a76880f..ec8cdd3 100644 --- a/src/board.c +++ b/src/board.c @@ -304,22 +304,3 @@ const BITBOARD castle_rook_from_to[4] = { 0x00000000000000a0, 0x0000000000000009, 0xa000000000000000, 0x0900000000000000 }; -int repetition(const BOARD * board) { - int ply; - int cnt = 0; - - if (board->halfmovecnt > 2) { - for (ply = board->halfmovecnt - 2; ply > 0; ply -= 2) { - if ((board->history[ply].flags | board->history[ply+1].flags) & HIST_CANT_REPEAT) { - return 0; - } - if (board->history[ply].hash == board->history[board->halfmovecnt].hash) { - if (++cnt == 2) { - return 1; - } - } - } - } - - return 0; -} diff --git a/src/board.h b/src/board.h index c06457f..efcad38 100644 --- a/src/board.h +++ b/src/board.h @@ -47,6 +47,5 @@ HASH calculate_hash(const BOARD* board); CASTLE castle_update(const BOARD * board, PIECE piece, BITBOARD fromto); extern const BITBOARD castle_rook_from_to[4]; extern const BITBOARD castle_king_from_to[4]; -int repetition(const BOARD * board); #endif /* ifndef _BOARD_H_ */ diff --git a/src/chess.c b/src/chess.c index 30d270c..22d9303 100644 --- a/src/chess.c +++ b/src/chess.c @@ -1,5 +1,6 @@ #include "chess.h" int debug = 0; +const int piece_values[] = { NO_PIECE_V, PAWN_V, KNIGHT_V, BISHOP_V, ROOK_V, QUEEN_V, KING_V }; const char * piece_names[] = { "no piece", "pawn", "knight", "bishop", "rook", "queen", "king" }; const char * colour_names[] = { "white", "black" }; diff --git a/src/chess.h b/src/chess.h index bdd057b..42730b2 100644 --- a/src/chess.h +++ b/src/chess.h @@ -43,6 +43,16 @@ typedef uint8_t COLOUR; #define QUEEN ((PIECE)5) #define KING ((PIECE)6) +typedef enum { + NO_PIECE_V = 0, + PAWN_V = 100, + KNIGHT_V = 300, + BISHOP_V = 340, + ROOK_V = 500, + QUEEN_V = 900, + KING_V = 10000 } PIECE_VALUE; + +extern const int piece_values[]; extern const char * piece_names[]; #define WHITE ((COLOUR)0) diff --git a/src/evaluate.c b/src/evaluate.c index 5fc5c8d..bee5a1a 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -1,4 +1,5 @@ #include +#include #include "evaluate.h" #include "tuned_values.h" @@ -114,6 +115,9 @@ int evaluate(const BOARD * board) { int dir[] = {1, -1}; const MAT_TABLE_ENTRY * mt = get_mat_table_entry(board); SQUARE kings[6]; + int gp = mt->flags & ENDGAME_MASK; + + assert(0 <= gp && gp <= 3); if (mt->flags & DRAWN) { return 0; @@ -138,19 +142,19 @@ int evaluate(const BOARD * board) { DEBUG_PRINT("%s passer\t\t%8.8lx\n", colour_names[colour], pass); DEBUG_PRINT("%s weak\t\t%8.8lx\n", colour_names[colour], wk); - pawn_value += tuned_values.piece_v_pawn_v * __builtin_popcountll(my_pawns); - pawn_value += tuned_values.pawn_isolated * __builtin_popcountll(iso); + pawn_value += tuned_values[gp].piece_v_pawn_v * __builtin_popcountll(my_pawns); + pawn_value += tuned_values[gp].pawn_isolated * __builtin_popcountll(iso); while (pass) { BITBOARD isolated = pass & -pass; SQUARE sq = __builtin_ctzll(isolated); SQUARE rank = sq >> 3; SQUARE erank = colour == WHITE ? rank : 7 - rank; - pawn_value += *(&tuned_values.pawn_ranks_0 + erank); + pawn_value += *(&tuned_values[gp].pawn_ranks_0 + erank); pass &= pass - 1; } - pawn_value += tuned_values.pawn_weak * __builtin_popcountll(wk); + pawn_value += tuned_values[gp].pawn_weak * __builtin_popcountll(wk); DEBUG_PRINT("%s pawn\t\t%d\n", colour_names[colour], pawn_value); @@ -160,7 +164,7 @@ int evaluate(const BOARD * board) { for (COLOUR colour = WHITE; colour <= BLACK; colour++) { for (PIECE piece = PAWN + 1; piece < KING; ++piece) { BITBOARD pieces = *(&board->pawns + piece - PAWN) & COLOUR_BB(board, colour); - int piece_value = *(&tuned_values.piece_v_pawn_v + piece - PAWN); + int piece_value = *(&tuned_values[gp].piece_v_pawn_v + piece - PAWN); while (pieces) { BITBOARD single = pieces & -pieces; @@ -238,8 +242,8 @@ static inline int king_evaluate(const MAT_TABLE_ENTRY * mt, COLOUR colour, SQUAR SQUARE sq = sqs[colour]; /* default - piece square interpolate between middle game - endgame */ - endgame_factor = mt->flags & ENDGAME_MASK; - int shield_value = *(&tuned_values.king_shield_0 + endgame_factor); + int gp = mt->flags & ENDGAME_MASK; + int shield_value = tuned_values[gp].king_shield; int safety = __builtin_popcountll( shield((board->pawns | board->bishops) & COLOUR_BB(board, colour), /* fianchettoed bishops */ colour, diff --git a/src/mat_tables.c b/src/mat_tables.c index c4bba29..6751e64 100644 --- a/src/mat_tables.c +++ b/src/mat_tables.c @@ -125,6 +125,8 @@ static const RULE rules[] = { { "0 0 0 0 0 0 0 0 0 0 a b", { 0, B_CHECKMATING} }, { NULL, { 0, CONSTRAINT } }, +#if 0 + /* WP WN WB_LSQ WB_DSQ WR WQ BP BN BB_LSQ BB_DSQ BR BQ V F */ { "a+1=b ", { 0, CONSTRAINT } }, { "a 0 1 0 0 0 b 0 0 1 0 0", { 100, 0} }, /* opposite colour bishop endgames */ @@ -201,6 +203,7 @@ static const RULE rules[] = { { "b+c+d+e+f=6 ", { 0, CONSTRAINT } }, { ">a b c d e f a b c d e f", { 5, 0} }, { NULL, { 0, CONSTRAINT } }, +#endif { NULL, { 0, 0} } }; diff --git a/src/movegen.c b/src/movegen.c index 67b9d60..982bbe6 100644 --- a/src/movegen.c +++ b/src/movegen.c @@ -560,8 +560,7 @@ MOVE * moves(const BOARD * board, int ply, const PV * pv, const KILLER * killer, move->value = see(board, move) + 10000; } else if (move->special & PROMOTION_MOVE_MASK) { PIECE promo = (move->special & PROMOTION_MOVE_MASK) >> PROMOTION_MOVE_SHIFT; - int piece_value = *(& tuned_values.piece_v_pawn_v + promo - PAWN); - move->value = piece_value + 9900; + move->value = piece_values[promo] + 9900; } else if (move->special & EN_PASSANT_CAPTURE_MOVE_MASK) { move->value = 9900; } else if (move_attacks_sq(board, move, king)) { diff --git a/src/quiesce.c b/src/quiesce.c deleted file mode 100644 index 29976a4..0000000 --- a/src/quiesce.c +++ /dev/null @@ -1,57 +0,0 @@ -#include - -#include "quiesce.h" -#include "move.h" -#include "attacks.h" -#include "evaluate.h" -#include "movegen.h" -#include "moveexec.h" - -extern unsigned long long nodes; - -int quiesce(BOARD * board, int ply, int alpha, int beta) { - MOVE * move; - int first = 1; - int stand_pat; - - nodes++; - - if (repetition(board)) return 0; - if (checkmate(board)) return -10000; - if (stalemate(board)) return 0; - - stand_pat = evaluate(board); - - if (stand_pat >= beta) { - return beta; - } - - if (alpha < stand_pat) - alpha = stand_pat; - - while ((move = moves(board, ply, NULL, NULL, MOVEGEN_FORCING_ONLY, first))) { - int score; - first = 0; - - execute_move(board, move); - - if (in_check(board, 1 - board->next)) { - undo_move(board, move); - continue; - } - - score = -quiesce(board, ply + 1, -beta, -alpha); - - undo_move(board, move); - - if (score >= beta) { - moves_done(ply); - return beta; - } - - if (score > alpha) - alpha = score; - } - - return alpha; -} diff --git a/src/quiesce.h b/src/quiesce.h deleted file mode 100644 index 7a469d7..0000000 --- a/src/quiesce.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __QUIESCE_H__ -#define __QUIESCE_H__ - -#include "board.h" - -int quiesce(BOARD * board, int ply, int alpha, int beta); -#endif /* ifndef __QUIESCE_H__ */ diff --git a/src/search.c b/src/search.c index ff316e5..e2d85ef 100644 --- a/src/search.c +++ b/src/search.c @@ -9,12 +9,12 @@ #include #include "attacks.h" +#include "evaluate.h" #include "move.h" #include "movegen.h" #include "moveexec.h" #include "pv.h" #include "chess.h" -#include "quiesce.h" static struct timespec start; extern unsigned long long nodes; @@ -64,7 +64,72 @@ unsigned long long int time_delta(void) { extern int stopped; unsigned long long movetime; +int repetition(const BOARD * board) { + int ply; + int cnt = 0; + if (board->halfmovecnt > 2) { + for (ply = board->halfmovecnt - 2; ply > 0; ply -= 2) { + if ((board->history[ply].flags | board->history[ply+1].flags) & HIST_CANT_REPEAT) { + return 0; + } + if (board->history[ply].hash == board->history[board->halfmovecnt].hash) { + if (++cnt == 2) { + return 1; + } + } + } + } + + return 0; +} + +int quiesce(BOARD * board, int ply, int alpha, int beta) { + MOVE * move; + int first = 1; + int stand_pat; + + nodes++; + + if (repetition(board)) return 0; + if (checkmate(board)) return -10000; + if (stalemate(board)) return 0; + + stand_pat = evaluate(board); + + if (stand_pat >= beta) { + return beta; + } + + if (alpha < stand_pat) + alpha = stand_pat; + + while ((move = moves(board, ply, NULL, NULL, MOVEGEN_FORCING_ONLY, first))) { + int score; + first = 0; + + execute_move(board, move); + + if (in_check(board, 1 - board->next)) { + undo_move(board, move); + continue; + } + + score = -quiesce(board, ply + 1, -beta, -alpha); + + undo_move(board, move); + + if (score >= beta) { + moves_done(ply); + return beta; + } + + if (score > alpha) + alpha = score; + } + + return alpha; +} /* * 100 */ static const int log[] = { diff --git a/src/search.h b/src/search.h index 991950e..0f45cf2 100644 --- a/src/search.h +++ b/src/search.h @@ -7,6 +7,8 @@ extern unsigned long long nodes; +int quiesce(BOARD * board, int ply, int alpha, int beta); + int negascout(BOARD* board, int ply, int depth, diff --git a/src/see.c b/src/see.c index 1703133..f34cfc2 100644 --- a/src/see.c +++ b/src/see.c @@ -4,12 +4,6 @@ #include "see.h" #include "attacks.h" -/* make bishops worth more because the evaluation gives bonuses to bishop pairs, - * so we have a better chance of getting the order right - * thus beta cutting more - **/ -static const int piece_values_mod[] = {0, 100, 300, 340, 500, 900, 10000}; - int see(const BOARD * board, const MOVE * move) { BITBOARD from = move->from; BITBOARD to = move->to; @@ -119,7 +113,7 @@ int see(const BOARD * board, const MOVE * move) { ply--; for (ply--; ply >= 0; ply--) { value = MAX(value, 0); - value = piece_values_mod[captures[ply]] - value; + value = piece_values[captures[ply]] - value; } /* THE END */ diff --git a/src/tuned_values.c b/src/tuned_values.c index 8bd4df3..ba3d396 100644 --- a/src/tuned_values.c +++ b/src/tuned_values.c @@ -1,23 +1,76 @@ #include "tuned_values.h" -const TUNED_VALUES tuned_values = { - 100, /* piece_v_pawn_v */ - 159, /* piece_v_knight_v */ - 169, /* piece_v_bishop_v */ - 367, /* piece_v_rook_v */ - 728, /* piece_v_queen_v */ - 0, /* pawn_ranks_0 */ - 49, /* pawn_ranks_1 */ - 25, /* pawn_ranks_2 */ - 1, /* pawn_ranks_3 */ - 11, /* pawn_ranks_4 */ - 83, /* pawn_ranks_5 */ - 186, /* pawn_ranks_6 */ - 270, /* pawn_ranks_7 */ - -8, /* pawn_isolated */ - -9, /* pawn_weak */ - -2, /* king_shield_0 */ - -25, /* king_shield_1 */ - 5, /* king_shield_2 */ - -9, /* king_shield_3 */ +const TUNED_VALUES tuned_values[4] = { + { + 100, /* piece_v_pawn_v */ + 159, /* piece_v_knight_v */ + 169, /* piece_v_bishop_v */ + 367, /* piece_v_rook_v */ + 728, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 49, /* pawn_ranks_1 */ + 25, /* pawn_ranks_2 */ + 1, /* pawn_ranks_3 */ + 11, /* pawn_ranks_4 */ + 83, /* pawn_ranks_5 */ + 186, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -8, /* pawn_isolated */ + -9, /* pawn_weak */ + -2, /* king_shield_0 */ + }, + { + 100, /* piece_v_pawn_v */ + 159, /* piece_v_knight_v */ + 169, /* piece_v_bishop_v */ + 367, /* piece_v_rook_v */ + 728, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 49, /* pawn_ranks_1 */ + 25, /* pawn_ranks_2 */ + 1, /* pawn_ranks_3 */ + 11, /* pawn_ranks_4 */ + 83, /* pawn_ranks_5 */ + 186, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -8, /* pawn_isolated */ + -9, /* pawn_weak */ + -25, /* king_shield_1 */ + }, + { + 100, /* piece_v_pawn_v */ + 159, /* piece_v_knight_v */ + 169, /* piece_v_bishop_v */ + 367, /* piece_v_rook_v */ + 728, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 49, /* pawn_ranks_1 */ + 25, /* pawn_ranks_2 */ + 1, /* pawn_ranks_3 */ + 11, /* pawn_ranks_4 */ + 83, /* pawn_ranks_5 */ + 186, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -8, /* pawn_isolated */ + -9, /* pawn_weak */ + 5, /* king_shield_2 */ + }, + { + 100, /* piece_v_pawn_v */ + 159, /* piece_v_knight_v */ + 169, /* piece_v_bishop_v */ + 367, /* piece_v_rook_v */ + 728, /* piece_v_queen_v */ + 0, /* pawn_ranks_0 */ + 49, /* pawn_ranks_1 */ + 25, /* pawn_ranks_2 */ + 1, /* pawn_ranks_3 */ + 11, /* pawn_ranks_4 */ + 83, /* pawn_ranks_5 */ + 186, /* pawn_ranks_6 */ + 270, /* pawn_ranks_7 */ + -8, /* pawn_isolated */ + -9, /* pawn_weak */ + -9, /* king_shield_3 */ + }, }; diff --git a/src/tuned_values.h b/src/tuned_values.h index c894c29..a8935a5 100644 --- a/src/tuned_values.h +++ b/src/tuned_values.h @@ -20,16 +20,13 @@ typedef struct __TUNED_VALUES__ { int pawn_isolated; int pawn_weak; - int king_shield_0; - int king_shield_1; - int king_shield_2; - int king_shield_3; + int king_shield; } TUNED_VALUES; #if defined(TUNING) -extern TUNED_VALUES tuned_values; +extern TUNED_VALUES tuned_values[4]; #else -extern const TUNED_VALUES tuned_values; +extern const TUNED_VALUES tuned_values[4]; #endif #endif /* ifndef __TUNED_VALUES_H__ */ diff --git a/tuning/Makefile b/tuning/Makefile index c69541b..e97349f 100644 --- a/tuning/Makefile +++ b/tuning/Makefile @@ -13,8 +13,7 @@ evaluate.o: ../src/evaluate.c buildpostobj: tuning -srcobjs=../src/board.o ../src/mat_tables.o ../src/pawns.o ../src/moveexec.o ../src/zobrist.o \ - ../src/attacks.o ../src/quiesce.o ../src/movegen.o ../src/movelist.o ../src/see.o ../src/killer.o ../src/pv.o +srcobjs=$(filter-out ../src/evaluate.o ../src/tuned_values.o, $(wildcard ../src/*.o)) tuning: $(obj) $(CC) $(CFLAGS) -lm -o $@ $^ evaluate.o $(srcobjs) diff --git a/tuning/main.c b/tuning/main.c index e745a6a..25822b4 100644 --- a/tuning/main.c +++ b/tuning/main.c @@ -7,48 +7,47 @@ #include #include "board.h" -#include "quiesce.h" +#include "search.h" #include "evaluate.h" #include "mat_tables.h" #include "tuned_values.h" -TUNED_VALUES tuned_values = { - 100, /* piece_v_pawn_v */ - 159, /* piece_v_knight_v */ - 169, /* piece_v_bishop_v */ - 367, /* piece_v_rook_v */ - 728, /* piece_v_queen_v */ - 0, /* pawn_ranks_0 */ - 49, /* pawn_ranks_1 */ - 25, /* pawn_ranks_2 */ - 1, /* pawn_ranks_3 */ - 11, /* pawn_ranks_4 */ - 83, /* pawn_ranks_5 */ - 186, /* pawn_ranks_6 */ - 270, /* pawn_ranks_7 */ - -8, /* pawn_isolated */ - -9, /* pawn_weak */ - -2, /* king_shield_0 */ - -25, /* king_shield_1 */ - 5, /* king_shield_2 */ - -9, /* king_shield_3 */ +TUNED_VALUES tuned_values[4] = { + /* (a) : passer rank 0 + * (b) : passer rank 1 + * (c) : passer rank 2 + * (d) : passer rank 3 + * (e) : passer rank 4 + * (f) : passer rank 5 + * (g) : passer rank 6 + * (h) : passer rank 7 + * (i) : isolated pawn + * (j) : weak pawn + * (k) : king shield + */ + /* P K B R Q (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) */ + { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -2 }, /* game phase (0) */ + { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -25 }, /* game phase (1) */ + { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -25 }, /* game phase (2) */ + { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -9 }, /* game phase (3) */ }; static float get_result(char * buffer) { int spaces = 0; + char * ptr = buffer; /* go to 6th column */ - while (* buffer) { + while (* ptr) { if (spaces == 5) break; - if (*buffer == ' ') spaces++; - buffer++; + if (*ptr == ' ') spaces++; + ptr++; } - if (strncmp(buffer, "1-0", 3) == 0) { + if (strncmp(ptr, "1-0", 3) == 0) { return 1.0; - } else if (strncmp(buffer, "0-1", 3) == 0) { + } else if (strncmp(ptr, "0-1", 3) == 0) { return 0.0; - } else if (strncmp(buffer, "1/2-1/2", 7) == 0) { + } else if (strncmp(ptr, "1/2-1/2", 7) == 0) { return 0.5; } else { printf("'%s' was invalid, no result string\n", buffer); @@ -119,32 +118,35 @@ static float error(FILE * epd) { } static void print_values(void) { - printf("TUNED_VALUES tuned_values = {\n"); - printf(" %d, /* piece_v_pawn_v */\n", tuned_values.piece_v_pawn_v); - printf(" %d, /* piece_v_knight_v */\n", tuned_values.piece_v_knight_v); - printf(" %d, /* piece_v_bishop_v */\n", tuned_values.piece_v_bishop_v); - printf(" %d, /* piece_v_rook_v */\n", tuned_values.piece_v_rook_v); - printf(" %d, /* piece_v_queen_v */\n", tuned_values.piece_v_queen_v); - printf(" %d, /* pawn_ranks_0 */\n", tuned_values.pawn_ranks_0); - printf(" %d, /* pawn_ranks_1 */\n", tuned_values.pawn_ranks_1); - printf(" %d, /* pawn_ranks_2 */\n", tuned_values.pawn_ranks_2); - printf(" %d, /* pawn_ranks_3 */\n", tuned_values.pawn_ranks_3); - printf(" %d, /* pawn_ranks_4 */\n", tuned_values.pawn_ranks_4); - printf(" %d, /* pawn_ranks_5 */\n", tuned_values.pawn_ranks_5); - printf(" %d, /* pawn_ranks_6 */\n", tuned_values.pawn_ranks_6); - printf(" %d, /* pawn_ranks_7 */\n", tuned_values.pawn_ranks_7); - printf(" %d, /* pawn_isolated */\n", tuned_values.pawn_isolated); - printf(" %d, /* pawn_weak */\n", tuned_values.pawn_weak); - printf(" %d, /* king_shield_0 */\n", tuned_values.king_shield_0); - printf(" %d, /* king_shield_1 */\n", tuned_values.king_shield_1); - printf(" %d, /* king_shield_2 */\n", tuned_values.king_shield_2); - printf(" %d, /* king_shield_3 */\n", tuned_values.king_shield_3); - printf("};\n"); + printf( + "TUNED_VALUES tuned_values[4] = { {\n" + " /* (a) : passer rank 0\n" + " * (b) : passer rank 1\n" + " * (c) : passer rank 2\n" + " * (d) : passer rank 3\n" + " * (e) : passer rank 4\n" + " * (f) : passer rank 5\n" + " * (g) : passer rank 6\n" + " * (h) : passer rank 7\n" + " * (i) : isolated pawn\n" + " * (j) : weak pawn\n" + " * (k) : king shield\n" + " */\n" + " /* P K B R Q (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) */\n"); + for (int i = 0; i < 4; ++i) { + printf(" {"); + for (int j = 0; j < sizeof(tuned_values[0]) / sizeof(int); ++j) { + char buf[4]; + snprintf(buf, 4, "%d", *(&tuned_values[i].piece_v_pawn_v + j)); + printf("%4s,", buf); + } + printf(" }, /* game phase (%i) */\n", i); + } } /* based on pseudo code from wiki */ void local_optimize(FILE * epd) { - const int nParams = sizeof(tuned_values) / sizeof(int); + const int nParams = sizeof(tuned_values[0]) / sizeof(int); float bestE = error(epd); int improved = 1; @@ -153,26 +155,28 @@ void local_optimize(FILE * epd) { while (improved) { improved = 0; - /* keep the pawn value at 100, to define the scale in cps */ - for (int pi = 1; pi < nParams; pi++) { + for (int i = 0; i < 4; ++i) { + /* keep the pawn value at 100, to define the scale in cps */ + for (int pi = 1; pi < nParams; pi++) { - ((int*) &tuned_values)[pi] += 1; + ((int*) &tuned_values[i])[pi] += 1; - double newE = error(epd); + double newE = error(epd); - if (newE < bestE) { - printf("error %f -> %f\n", bestE, newE); - bestE = newE; - improved = 1; - } else { - ((int*) &tuned_values)[pi] -= 2; - newE = error(epd); if (newE < bestE) { printf("error %f -> %f\n", bestE, newE); bestE = newE; improved = 1; } else { - ((int*) &tuned_values)[pi] += 1; /* reset to old value */ + ((int*) &tuned_values[i])[pi] -= 2; + newE = error(epd); + if (newE < bestE) { + printf("error %f -> %f\n", bestE, newE); + bestE = newE; + improved = 1; + } else { + ((int*) &tuned_values[i])[pi] += 1; /* reset to old value */ + } } } } @@ -182,6 +186,7 @@ void local_optimize(FILE * epd) { } } +int stopped = 0; unsigned long long nodes; int main(int argc, const char * argv[]) From 8eca1619c4d0b5bc79c6e61773001c76bb4a3495 Mon Sep 17 00:00:00 2001 From: Paul Sonkoly Date: Sun, 26 Feb 2023 14:08:37 +0000 Subject: [PATCH 9/9] WIP --- scripts/tune_db_extract.py | 23 +++++++++++++++++++++++ tuning/main.c | 17 +++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 scripts/tune_db_extract.py diff --git a/scripts/tune_db_extract.py b/scripts/tune_db_extract.py new file mode 100644 index 0000000..5a998a8 --- /dev/null +++ b/scripts/tune_db_extract.py @@ -0,0 +1,23 @@ +# extract epd database from pgn generated by cutechess for tuning +# cutechess/cutechess-cli -each tc=1/1+0.08 proto=uci -engine cmd=chess-2/chess2_latest book=openings.bin -engine cmd=chess-2/chess2_other book=openings.bin -rounds 60000 -concurrency 4 -pgnout games_fast.pgn -recover & +import chess.pgn + +fn = 'games_fast.pgn' + +with open(fn, encoding='utf-8') as h: + while True: + game = chess.pgn.read_game(h) + if game is None: + break + + for node in game.mainline(): + comment = node.comment + if comment=='book': + pass + elif comment.startswith('+100.00') or comment.startswith('-100.00'): + pass + else: + fen = node.board().fen() + result = game.headers[ 'Result' ] + if result == '1-0' or result == '0-1' or result == '1/2-1/2': + print(f'{fen} {result}') diff --git a/tuning/main.c b/tuning/main.c index 25822b4..10846c9 100644 --- a/tuning/main.c +++ b/tuning/main.c @@ -25,20 +25,20 @@ TUNED_VALUES tuned_values[4] = { * (j) : weak pawn * (k) : king shield */ - /* P K B R Q (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) */ - { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -2 }, /* game phase (0) */ - { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -25 }, /* game phase (1) */ - { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -25 }, /* game phase (2) */ - { 100, 159, 169, 367, 728, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -9 }, /* game phase (3) */ + /* P N B R Q (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) */ + { 100, 300, 340, 500, 900, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -2 }, /* game phase (0) */ + { 100, 300, 340, 500, 900, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -25 }, /* game phase (1) */ + { 100, 300, 340, 500, 900, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -25 }, /* game phase (2) */ + { 100, 300, 340, 500, 900, 0, 49, 25, 1, 11, 83, 186, 270, -8, -9, -9 }, /* game phase (3) */ }; static float get_result(char * buffer) { int spaces = 0; char * ptr = buffer; - /* go to 6th column */ + /* go to 7th column */ while (* ptr) { - if (spaces == 5) break; + if (spaces == 6) break; if (*ptr == ' ') spaces++; ptr++; } @@ -132,7 +132,7 @@ static void print_values(void) { " * (j) : weak pawn\n" " * (k) : king shield\n" " */\n" - " /* P K B R Q (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) */\n"); + " /* P N B R Q (a) (b) (c) (d) (e) (f) (g) (h) (i) (j) (k) */\n"); for (int i = 0; i < 4; ++i) { printf(" {"); for (int j = 0; j < sizeof(tuned_values[0]) / sizeof(int); ++j) { @@ -142,6 +142,7 @@ static void print_values(void) { } printf(" }, /* game phase (%i) */\n", i); } + printf("};\n"); } /* based on pseudo code from wiki */