1This is history of Phalanx. Dates are in the form YYYYMMDD. 2 3I First version to play a legitimate game, it finally knows all rules. 419970304 I spent a lot of time on tuning transposition table code and 5 extensions. The program scores 78% at large Reinfeld's test set, 10 s 6 per move, on 486+/150. 7 8II Two killer heuristics added: well known history killers (modified) 9199704?? and `reaction' killers (the killer is connected to the previous enemy 10 move). The tree search is faster, especially at `quiet' positions. 11 Hashtable presearch. Modified hashentry replacement strategy. Better 12 evaluation function, it now knows more about passed pawns, the 13 endgame play is much stronger. Fixed bug at 7-th row pawn push 14 extension routine. Faster output - using sprintf() to prepare the 15 output and then only one printf. New command line options: -t, -T to 16 set the hashtable size. 17 18III Permanent brain (pondering). King safety evaluation. Hung pieces 1919970529 static evaluation. Null move pruning. Forward pruning. Better time 20 heuristics - forced moves are played quickly. New cmd-line options: 21 -f, -x, -p, -s. 22 23IV New option -c to determine whether to use cpu or real time. The 2419970721 internal timing resolution changed to 1/100 of a second. Xboard 25 compatible editing position. Removed en-passant capture from 26 quiescence search. Changes in static-eval function. Piece list 27 implemented - speedup is between 0 and 20%; more in endgame. Pinned 28 pieces static evaluation. Better evaluation of weak pawns. Trapped 29 bishop and knight evaluation. Bugfix at extending check evasions. 30 Bugfix: development bonus was computed but not added to total 31 evaluation. Output change: '!' means turn, '!!' means value out of 32 window. 33 34V Mostly interface changes, no big improvement in playing strength. 3519970803 Xboard compatibility fixes: 'post' is no more switch, new command 36 'remove'. Fixed command 'level': 'level 0 5 0' (five minutes per 37 game) should work, also increment (ICS) levels ('level 0 2 12'). 38 Increment can be given at command line. New option -o (polling 39 input) - when running tests, phalanx needs -o-. New feature of 40 autotesting: all incorrect results are written into file 41 'notfound.fin'. Small output changes for better compatibility with 42 xboard 3.6.2. Eliminated some bad turns in evaluation. Better king 43 safety evaluation - counting safe checks available. 44 45VI Fixed small efficiency bug in evaluate.c. Improved time heuristics 4619970915 for increment (ICS) levels. Optimized hashing - about 5% overall 47 speedup. Fixed bug in ptime(). User is now allowed to continue play 48 even if the position is drawn by 3-rep., material, or 50 moves rule. 49 Fixed bug - Draw requests are now always ignored, not always accepted 50 :-). Xboard-compatible 'Illegal move' message. Binary opening book, 51 created from PGN by bcreate. This distribution is bigger than any 52 previous because it contains a small example of binary book 53 ('sbook.phalanx', 174kB, 29634 moves). SAN input accepted. Static 54 evaluation now better understands middlegame positions without 55 castling. Added pre-computed tables into static evaluation -> about 56 5% speed improvement. 'Show thinking' mode now shows also a list of 57 book moves if there's a book entry. I have played a match with 58 previous version (64 games, 2 minutes, increment 12 seconds, on 59 a 486+/150, via xboard, no pondering), new version wins 38.5-25.5. 60 61VII Courtesy of Pavel Janik ml., new command 'fen'. Bugfix in command 6219971022 line parser, 'phalanx 0 2 12' now works. Better time controls: added 63 hard time limit to avoid being flagged. Pondering bugfix: Phalanx 64 was pondering O-O, but opponent played O-O-O; the move check was 65 incorrect and Phalanx thought that O-O was played; this resulted in 66 'Illegal move' message few moves later. More pondering safety: the 67 move to be pondered is now checked for legality, before this fix it 68 was simply taken from PV (if present), but PV is not always 100% 69 correct. More PV safety: search cannot be interrupted during the 70 first iteration, the abort is delayed until the first iteration is 71 finished. New options: -r <resign value>, -b <+/-> to set opening 72 book on/off. New commands hard/easy to set pondering on/off. 73 Optimized do_move(): 3% speedup in test positions. Search 74 optimization: null move is not played if the value in hash table 75 entry is too low. Output bugfix: output is now readable even at long 76 time searches. SEE (Static Exchange Evaluator) and more pruning in 77 quiescence search. RoboFICS compatible commands 'white' and 'black'. 78 Routine for evaluating pawn endgames. New extension trick that helps 79 in some horizon-effect type positions, it's based on measuring 80 difference between current score and null move result; if current 81 score is much better, the side to move must be under threat and the 82 line is extended, similar trick is also in gnuchess. 83 84VIII Fixed bug in search(): eliminated useless re-searches -> about 3% 8519971103 speed improvement. Noise level is now in centiseconds, not in nodes. 86 Improved horizon-effect extensions. endgame.c: new endgame 87 knowledge, mostly for endgames with minor pieces and pawns: knight 88 and bishop mating, knight+knight (draw), minor vs. minor (draw), 89 minor vs. pawn (draw, but still needs some work, sometimes a pawn 90 wins against a knight), onepawn() as a special case of pawns(), bad 91 bishop (bishop + rook pawn), basics for R+P vs. R, bishops with 92 opposite colors (this is often drawish ending). New penalty for 93 moving castling-side pawns in middlegame. 94 95IX Function smove() is now used in both binary book and hashing code, it 9619971205 is cleaner and easier to read, the binary is smaller with this. 97 Bugfix: Phalanx now does not ponder move that leads into a terminal 98 position (checkmate, stalemate), this fixes some unexpected quits 99 (I hope all of them). Added more limits to horizon-effect extension 100 trigger - there was so many extensions, that version VIII was 101 actually weaker than previous versions, because of lower nominal 102 search depth; these extensions are now used only for major threats. 103 Static eval cache entry is now packed into 4 bytes instead of 8 -> 104 the cache eats only 256K (512K before this). 105 106X Bugfix in static evaluation of trapped knight at [AH]7. Better 10719980108 evaluation of trapped bishop ([AH]7) and knight ([AH][87]), now it's 108 using the static exchange evaluator. Time allocation: alloc more 109 time (+1/8) if pondering is on. Better understanding of 'trade-down' 110 bonus - if there are no pawns, you often need a rook more to win the 111 game, a minor piece is not enough. Shallower extensions resulting in 112 greater average search depth. Easy levels: use new command line 113 option -e <1...100> to select an easy level; 1 is the strongest and 114 100 is the easiest one, Phalanx tries to make human-like blunders. 115 Minor changes in resigning. Clean up in pbook.phalanx, deleted over 116 100 positions. Killer heuristics now uses the SEE. Bugfix in 117 endgame.c: trade bonus did not work for kings and pawns endgames. 118 Simple learning, can be activated by -l+ option; it is off by 119 default, because it's very experimental version. New version wins 120 engine-engine match with version IX 23:17 (tc 2, inc 8, 486+/150, 121 no learning, no pondering). 122 123XI Courtesy of Milan Zamazal: long options and user-friendly handling of 12419980125 book files - you can now use environment variables or command line 125 options. Bugfix in trade bonus: endgame KQ-KBPP was evaluated only 126 about +1.10, but the stronger side is winnig here even without pawns, 127 now it's >+3.00 and Phalanx can solve this Dufrense&Mieses study: 128 8/3Np3/7P/1p3P2/1k6/5K2/1b6/8/w Pf5f6. Deeper overall extensions, 129 +10% of ply. More check evasion extensions. Wider window for 'lazy 130 evaluation', search is now slower but stable. Minor fixes in forward 131 and null move pruning. Zero-width search modified for root moves, 132 actually it's no more zero-width; this eliminates some 'blind turns' 133 (a move is evaluated as >=(Alpha+1), but the engine cannot prove it 134 in re-search in full [Alpha,Beta] window). Minor changes in static 135 evaluation. Bugfix in time allocation of increment levels. Changed 136 time heuristics to use more time. 137 138XII More pruning in quiescence search: moves that have little chance to 13919980301 return the value over alpha are not generated. Permanent brain is 140 now really 'permanent', if there is no move to ponder in the PV, 141 Phalanx uses short search to pick a move and ponders it. Bugfix: 142 occasional zero division at very fast time controls, like 10s/game. 143 Some puts() replaced with printf(), puts() is buggy in my gcc (2.7.2) 144 and causes sigsegv when interrupted and called again during the 145 interrupt. Optimized null move, this speeds up the engine. Easy 146 levels now use nodes instead of centiseconds for measuring time, the 147 playing strength of easy levels does not depend on cpu power and 148 cpu load. Resigning now works with RoboFics (via 'tellics resign'). 149 Updated FSF address in docs. 150 151XIII Lots of 'char' and 'short' replaced with 'int' -> speedup on iX86 15219980316 chips (about 10% on my 486, probably more on P6). Bugfix at 'edit' 153 command, edit was broken for positions with black to move. New 154 command line option 'bench', 'phalanx bench' runs a 5 cpu-minutes 155 benchmark and reports nodes per second. Added some interesting lines 156 into the opening book. Dynamic draw score, it's set to -20 by 157 default. New command 'rating <phalanx rating> <opponent rating>' to 158 adjust the dynamic draw score, Phalanx tries to avoid draw with 159 weaker opponents, minimal draw score is -20, maximal +20. 160 161XIV Dynamic draw score did not work for stalemate, now fixed. Major bug 16219980416 fixed at resigning: if resigning was on, phalanx resigned almost any 163 game after few moves, this was broken from previous version. 164 Simplified computing bounds for lazy evaluation, this was too 165 complicated and slow. Higher material limit for evaluating position 166 as endgame. Deeper extensions, +0.1 ply. Improved move ordering at 167 root search. Minor optimizations. More variability in opening book. 168 Disabled scout search near leafs. Bugfix: type of Nodes changed to 169 'long long' (64 bits on Intel[3456]86), 32-bit integer was not long 170 enough for >24 hour runs. Bugfix: option -P did not work, now fixed. 171 Added startup messages that show full path of all open files. 172 173XV Internal iterative deepening. Cleaned pbook.phalanx. New "Pc2-c4" 17419980614 code to encourage playing c4 (c5 as black) in closed positions where 175 e4 (e5) is not possible. Bugfix at computing total material on the 176 board, the variable was sometimes overwritten with unexact value. 177 New xboard compatible commands 'bk' and 'analyze'. 'bk' shows all 178 book moves. 'analyze' starts analysis mode. Bugfix in bcreate.c: no 179 games on stdin caused segmentation fault. GNU extensions (long 180 options and snprintf) are now used only if GNUFUN is defined 181 (-DGNUFUN in makefile). New endgame knowledge: KNP vs. K is 182 sometimes draw. Small changes in static evaluation. SIGINT is 183 ignored in polling input mode. Time information in post lines is 184 shown in centiseconds instead of seconds to follow current draft of 185 xboard chess engine communication protocol. 186 187XVI Bugfix in analyze mode: there is no extra character after the search 18819980630 depth number in post lines - xboard understands that time info is in 189 centiseconds, not in seconds. Bugfix in null move pruning: the side 190 that is trying its second move in row must have at least one legal 191 move, this caused segmentation fault if there was none. Command 192 'hard' does not set pondering on in easy levels. Bugfix at parsing 193 SAN moves, nc3 was (possibly) interpreted as Pc2-c3. Command 'level' 194 accepts time in mm:ss form, for example 'level 0 2:30 12'. Bugfix in 195 kings+pawns endgames - penalty for pawns on one file (doubled) worked 196 as penalty for pawns on one row. Improved kings+pawns endgames 197 static evaluation. New command 'xboard' sets xboard compatible mode. 198 199XVII More variability in pbook.phalanx. Better sbook.phalanx, generated 20019980804 from wall.pgn. Changed (and fixed) extensions for check evasions and 201 passed pawn pushes. Changed evaluation of passed pawns. phalanx and 202 bcreate integrated into one binary, most of the code was common 203 anyway; book can be created via 'phalanx bcreate' instead of just 204 'bcreate'. Bigger limit for count of [position,move] in bcreate 205 code, the counter has 32 bits instead of 16. Performance bugfix in 206 null move pruning. 207 208XVIII Bugfix in the static exchange evaluator - it let kings slide 20919980906 horizontally. New styling of board in command "bd"/"d". New command 210 in edit mode: 's' to switch side to move. Modified look of edit 211 mode. Modifications in static evaluation: bishop pair needs 212 mobility; queen has 'king distance' bonus only if it's on a safe 213 square; simpler rook evaluations - smaller bonuses; forpost (outpost) 214 pawn gets more bonus for # of pieces defending it (Aaron Nimzowitsch, 215 "Mein System"); bigger bonus for protected or connected passed pawns. 216 Modified threat extensions - only mate threats are extended. Bugfix 217 in analysis mode: PV is computed (and shown) even if there is only 218 one legal move. New feature of command 'level' - 'level N' sets 219 level to N seconds fixed time per move. Better pbook.phalanx. 220 221XIX Log file to allow easier debugging/tuning, it is activated via 22219981122 '-g <log file name>' command line parameter. Positional learning 223 file is created (in current directory) if it does not exist and it no 224 more has to be distributed as empty. Minor speedups in pawn 225 endgames. Outside passed pawn detection and evaluation in pawn 226 endgames. Raised material value needed for evaluating 227 kingside/queenside storming (attack after different castlings), these 228 are not worth evaluating when close to endgame. Fixed book move 229 selection to make it easier to implement book learning in future (no 230 real change for user). FICS whispering. Better pbook. Bugfix in 231 evaluation of kings+pawns endgames - the evaluation of 'king in the 232 square of pawn' had bad sign (!). New extension trick: we add big 233 extension after two succesive non-pawn captures that result in pawn 234 endgames - the branching factor is much smaller below that node and 235 we can go deeper without affecting search stability and ... we should 236 do so, because 6 plies subtree evaluation in middlegame is much 237 better than 6 plies in king+pawns. Timing change: phalanx uses more 238 time if there were turns in last ply level. Fixed bug in 239 communication with xboard that caused playing too fast in '-mg' mode 240 with 'reuse' on. Alias 'u' for 'undo'. 241 242XX Bugfix in xboard mode, long lines of 'tellics whisper ....' were 24319990104 split into several lines. Better pbook.phalanx. Fixed code that 244 avoids pseudocastling (moving white king e1-f1-g1 and leaving rook h1 245 undeveloped), now it works also in endgame. New code to keep 246 pressure against stonewall d-pawn; if black has stonewall, white 247 should keep the c-pawn on c4; previous versions often played c4-c5?, 248 and that is a bad error against humans. Knights now get penalty in 249 endgames with pawns on both sides of the board (12 to 35 centipawn). 250 Outside passed pawn evaluated in all endgames, not just in 251 kings+pawns. Minor bug fix in analyze mode with xboard (phalanx 252 aborted search due to unimplemented '.' command). New side effect of 253 command 'level' - it also sets remaining time to the same value as 254 level time; this does not break anything but might help in the 255 Fritz 5.32 winboard interface. SAN input now accepts pawn captures 256 in the form 'ef'. ECO database, ECO codes and names are shown with 257 'bk' command; user has to run 'bk' command once in initial position 258 to activate the ECO feature. Removed '-T' command line option from 259 help, it might be used to tablebase directory in future. 260 261XXI Major bug fixed in outside passed pawn evaluation, when one side had 26219990131 no pawns, there was indexing out of range. Minor penalty for rook on 263 a pawn file in middlegame. Fixes in pbook.phalanx, as usual. 264 265XXII Better ICS whispering, it sends only one info per move. Bugfix in 26620000116 disabling castling flag, now also moves _to_ the A1,H1,A8,H8 squares 267 disable corresponding castling. Improved pbook.phalanx. New 268 sbook.phalanx created from "granit" collection. Modified 269 bcreate so that moves are put into the book in the order of their 270 success rate, the most successful move is later shown as the first 271 one in the list of the book moves. Bcreate now uses temporary files 272 instead of memory. Deeper extensions. Modified and fixed rook 273 static evaluation. Learning is now on by default. Phalanx sets 274 the first finger line on ICS, it shows version, size of hashtable, 275 and sizes of the opening books. Bugfix in benchmark, the resulting 276 number was incorrect on machines that can do over 70kNps. 277 278XXIII Xboard protocol version 2 compatibility, including the periodic 27920141020 updates feature. New -n commandline option to limit nodes per 280 second. New -z commandline option to randomize root moves. Easy 281 levels now don't play instantly, but use time. DrawScore (contempt 282 factor) adjusted in endgames towards positive values to avoid playing 283 dead draws like KRKR. Minor engine fixes: Simplified rootsearch, 284 the aspiration window implementation was not good, for now replaced 285 with standard PVS. Temporarily disabled static eval cache as the 286 implementation was not correct. Other minor bugfixes. 287 Known issues: Warnings in io.c. Command 'setboard' moves the Counter 288 variable, which then cripples the 'history' command output. Command 289 'setboard' chokes on unexpected input. These issues are only 290 apparent in commandline and should never occur via a GUI - leaving 291 the fix to a future release. 292 293XXIV Xboard protocol - 'memory' command support. New file phalanx.eng to 29420141224 support the new Xboard automatic engine load. More log messages. 295 Late move reductions with move count based pruning. Small but 296 important changes in the static evaluation that improve endgame play: 297 Passed pawn, rook mobility, knight mobility. Default contempt factor 298 changed from -20 to -10. Fixed tournament timecontrols. Positional 299 learning is now off by default. Tweaked polling input timeslice to 300 better handle rapid changes in analyze mode. Fixed GCC warnings. 301 302XXV Better time management to use more time if the best move changed 30320160501 recently. Search improvements: Added simple ProbCut, tuned null move 304 and LMR, simplified check evasion extension. Static evaluation bug 305 fixes, several of them submitted by Fabrice Lecouvey, thanks. New 306 parameter to root moves randomization, it can now be limited 307 to first N moves of the game. New opening book generated from 308 KingBase Lite 03/2016 (http://www.kingbase-chess.net/). 309 310