-
Notifications
You must be signed in to change notification settings - Fork 1
/
CHANGES
203 lines (196 loc) · 10.2 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
Version 0.2.3 (??/??/????):
- Rewrite the manual pages using mdoc documentation language. The manual
pages can be now viewed with the standard `man' utility without
pre-processing.
- Fixed a bug where EOF at the game prompt would cause infinite loop
on certain operating systems
- Fixed a build error on operating systems that have fully
deprecated the use of certain legacy time functions
- Minor fixes to increase portability to different operating systems
Version 0.2.2 (07/09/2009):
- Use the XDG Base Directory Specification for configuration and
data file locations
- Configuration strings can have whitespace if they're wrapped in quotes
- Parallel perft works reliably on all platforms
- Send "done=1" as the last feature string, as required by the Xboard
protocol specification
- Support the "egtpath" command for setting the path to Scorpio bitbases
- Support the "memory" command for setting the hash size. The bitbases'
memory usage can't be controlled accurately enough, which is why "memory"
only affects the hash table.
- Better error checking for invalid Xboard commands
- Minor bugfixes
Version 0.2.0 (02/05/2008):
- Pawn hash table
- Support for Scorpio's endgame bitbases
- Slightly improved time allocation
- Improved search
- Minor bugfixes
- Minor code cleanup
Version 0.1.1 (10/21/2007):
- Improved search
- Replaced command line arguments with a config file
- The source now compiles with the MSVC++ compiler
- Cleaned up some of the code
- Complete rewrite of king-attack evaluation
- Minor bugfixes
- Quiescense nodes are also counted in print_pv()
Completed tasks:
- Passed pawn pushes mustn't be reduced
- Don't update history tables (not even on fail low) with captures
- Implement recapture extensions
- Ditch longjmp() for stopping the search
- search_book() shouldn't open and close the book file. Instead it
should have a FILE pointer and the position count passed to it.
- Drop null move if all the officers have fallen
- Don't use a custom struct to read/write book positions
- Add king square to Board structure
- Encode enpassant square in Move
- Write an undo_move() function
- Use SEE for move ordering
- No null move pruning at PV nodes or when beta is a mate score
- Replace all occurences of strtok() with strtok_r()
- Create another version of gen_moves() with <pc> and <to> arguments
so that we can read a SAN string and create only the moves that we need.
- Replace age_hash() with a more robust solution. Even with a 35MB hash
table it takes 5% of the CPU cycles.
- Improvements to fen_to_board():
- Does not crash on invalid input
- Recognizes invalid FEN strings fairly accurately
- Use a square table for passed pawns instead of a rank table
- Replace rotated bitboards with antirotated magic bitboards
- Don't accept repetitions from the opening book
- Add the ability to convert a board position to FEN
- When reading PGN files, store book positions in an AVL tree before
writing to book.
- Make sure illegal castling is detected correctly
- Make sure mate scores are accurate
- Generate only legal moves. This will solve a lot of problems and won't
hopefully slow the program down too much.
- Add passed pawn moves to quiescence search
- Add <U64 check_mask> and <bool double_check> to Board struct.
The values are updated in make_move().
- Smooth transition from middlegame to endgame evaluation.
- Implement futility pruning:
http://members.home.nl/matador/chess840.htm#FUTILITY
- Store all necessary information in hash keys, including castling and
en-passant data.
- Implement a help command which displays all the available commands
- Change opening book data structure to:
- U64 key
- U16 games
- U16 wins
- No promotion argument in get_move(...). The promotion should be included
in the <U32 move> argument.
- Use the same hash keys in the Linux and Windows version to make sure that
the same opening book can be used.
- pcsq should be defined as pcsq[color][pc][sq], not pcsq[pc][color][sq]
- Use a function called progressbar() to display the progress while
running benchmark or reading PGN files.
- Use the bool type in <stdbool.h> instead of a typedef
- Moves should be of type U32, not int
- Eval should never favor a player who has insufficient mating material.
- Add 50 move rule
- Get totally rid of path dependent castling evaluation and replace it with
a better king safety eval.
- Implement quiescence search
- Make sure that the "U64 target" argument is taken into consideration
in each of the gen_x_moves() (i.e. pawn moves) functions.
- Implement book learning
- Encode check (one bit) in <U32 move>
- Order moves with high scores first and not the other way around
- Replace the global <nnodes> mess with a cleaner solution so that <nnodes>
won't have to be manually cleared all the time.
- Penalize backward pawns in eval()
- Do Internal Iterative Deepening in PV nodes with no hash hit
- In main(), group the variables of a game in one struct (Chess)
- Tactical moves shouldn't get a score from the history table
- Drop null move in extended positions
- Accept Xboard commands even in the PROTO_NONE mode
- Sloppy shouldn't go crazy in analyze mode when it reaches the maximum
search depth (eg. after finding a forced mate).
- Calculate branching factor somewhat correctly
- Try checks after captures on the first ply of QS
- input_available() should call a get_cmd_type() function which
has the following return values:
CMDT_EXEC_AND_CONTINUE
CMDT_FINISH
CMDT_CANCEL
CMDT_CONTINUE
- Separate Xboard commands from Sloppy's own commands.
- Use the types in <inttypes.h> (C99) for fixed-size integers.
- The age of a hashnode should be replaced with a birthdate (i.e. move #2).
The birthdate is the number of moves played in the game, not the move
number of the move in the search tree.
- Replace file_mask[square] etc. with file_mask[file] to save memory. It
won't really be slower because we get the file with just "sq & 7".
- Use an endianess-independent opening book format. The book is now
always in little-endian format.
- Board.nmove should be the number of moves made, and also an index
for the last move.
- Replace strcpy() and strncpy() with the safer strlcpy()
- Replace strcat() and strncat() with the safer strlcat()
- Improvements to book management:
- Add a command line parameter to use or not use the book.
- Add a command line parameter to load or not load it in RAM.
- Add a command line parameter to enable or disable learning.
- If not using the "book in memory" mode, disable learning.
- Rename pop_count() to popcount() so that "pop" wouldn't be confused with
popping a stack.
- Rename first_one() to lsb()
- Add a pop_lsb() function for getting the lsb AND clearing that bit.
It will make code shorter, not faster.
- Commands like "hint" and "bk" should use the CMDT_EXEC_AND_CONTINUE mode.
To do that we need separate boards for the game and the search.
- Analyze mode should have its own get_input_type() function so that
normal xboard commands wouldn't get accepted.
- Switch from mixed case to lower case
- Quiescence search should have its own simple score_moves() function
- Make san_to_move() more flexible but still intolerant of illegal moves
- Get rid of "ULL" in long long literals, we'll have to use C99 anyway
- Use some getopt() clone + a switch statement to parse input.
The Xboard and UCI protocols could actually have their own modules.
- Get rid of verified null move pruning. Just use NULL_R=3.
- Cancelling the search while running a benchmark or test should also
cancel the whole benchmark/test.
- Merge print_debug_info() and print_search_info()
- Get rid of circular includes when possible. Can't be done for headers
like chess.h or util.h.
- Chess.cmd[] and Chess.ncmd should be global variables in util.c.
The "quit" command must work in the middle of running a testsuite.
- These things need a better name:
- int cancel (in struct _SearchData) - DONE (now "CmdType")
- GameData (struct) and game_data (the variables) - DONE (now "PosInfo")
- PreMoves (struct) - DONE (now "MoveMasks")
- pc_type[64] (in struct _Board) - DONE (now "mailbox")
- Compile with the pedantic flag
- Fix CastleMask (in util.h). Only half of its contents are masks.
- Use a sign (int) variable instead of SELF(color)
- Cleanup or rename some of the ridiculous stuff in sloppy.h
- Combine define.h, chess.h and chess.c into sloppy.h and sloppy.c, OR
rename define.h to sloppy.h
- Use PeekNamedPipe() (in winbase.h) or GetNumberOfConsoleInputEvents()
(in wincon.h) to poll stdin in Windows.
- Totally get rid of global.c
- Implement version 2 of the Xboard protocol, and don't use any
protover 1 commands (like "white" and "black")
- Make sure that hash keys in the pv line aren't easily overwritten
- Rename CAPTURE() to GET_CAPT(), SQ_FROM() to GET_FROM(), etc.
- Cleanup eval.c and search.c
- Rewrite the position parser in test_pos()
- Do something to push_history() and push_killers(). Pushing them takes
take and doesn't guarantee that the tables are in sync with the game.
- print_moves() shouldn't be a debug mode function/command
- The config file is enough for setting options. Get rid of cmdline args.
- Don't use _WIN32 to mean WINDOWS
- Test input_available() in Windows pipe mode
- Fix MSVC++ threading issues in perft
- Get rid of struct _Masks (in movegen.c)
- Count also QS nodes in print_pv()
- Don't overwrite the book file if the book wasn't modified
- Don't reduce killer moves
- Add a "logfile on/off" setting
- Change NO_MOVE to NULLMOVE
- Always deallocate the book when exiting
- Add a pawn structure hash table
- Add support for Scorpio's endgame bitbases