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