File: README

package info (click to toggle)
phalanx 12-3
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 664 kB
  • ctags: 504
  • sloc: ansic: 6,094; makefile: 76; sh: 50
file content (240 lines) | stat: -rw-r--r-- 14,436 bytes parent folder | download
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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
Phalanx is a chess playing program
Copyright (c) 1997, 1998 Dusan Dobes

LICENSE AND WARRANTY
- Phalanx is free software; you can redistribute it and/or modify it
  under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2, or (at your option)
  any later version.
- Phalanx is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
  along with Phalanx; see the file COPYING.  If not, write to
  the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
  MA  02111-1307, USA.

COMPILING
  is simple, at least under Linux. Just type `make'. If you have problems
  on a platform other than Linux, i will not be able to help you.

INTERFACE, COMMAND LINE OPTIONS
  Phalanx is xboard compatible.  Running with xboard: 'xboard -fcp phalanx'.
  Note that permanent brain (pondering) is off by default.  If you want
  Phalanx to think on opponent's time, type 'phalanx -p+'.  It's better to stop
  permanent brain in both programs, when playing Phalanx against another
  program on a machine with one CPU.
  It's also possible to run phalanx without xboard. Do "phalanx -h" to get
  a list of command line options. One important command of phalanx's ASCII
  interface is "help".

MORE ABOUT INTERFACE
  I'm trying to write an interface that fits following three requirements:
  - xboard compatibility
  - shell-like interface that allows running commands in a batch. It's very
    useful for testing. Example: look into the file test.fin. It's a set
    of chess problems and solutions. You can simply send this file to
    Phalanx's stdin:
    $ phalanx -c+ -o- -b- -f10 < test.fin | tee result
    ( Where: -c+ .... use cpu time
             -o- .... don't use polling input
             -b- .... no opening book
             -f10 ... fixed time 10 seconds per move )
    Watch how it works.
  - Acceptable ASCII interface.

OPENING BOOK
  From version VI, there are two book files - primary (pbook.phalanx), and
  secondary (sbook.phalanx).  You can specify book directories via command line
  (-P, -S) or use environment variables PHALANXPBOOKDIR and PHALANXSBOOKDIR.
  Otherwise Phalanx tries to find its book files in current directory
  (./book.phalanx, ./sbook.phalanx) and finally in compiled-in directory
  (/usr/local/lib/phalanx).  You can change the compiled-in directory in
  makefile.
  - pbook.phalanx is 'hand'-written, text book.  One line per position, sorted.
    This time, it's bigger than really needed, because it was the only book
    file till version V.  The size will be smaller and the line format will
    change to EPD+SAN in future.
  - sbook.phalanx is binary book, generated from large PGN files.  Six bytes
    per move (4 hash key, 2 move).  You can generate your own sbook.phalanx
    with bcreate, like this:
    $ ./bcreate < manyGMgames.pgn
    or:
    $ ./bcreate 1250000 < manyGMgames.pgn
    ( where 1250000 is internal buffer size in cells.  One cell takes 8 bytes.
      Bigger is better, only if it's too big a part of the buffer is unused.
      E.g. 1250000 is enough to parse Crafty's 'medium' book source - 29MB. )
  A position is first searched in pbook.phalanx.  Only if it's not found there,
  sbook.phalanx is searched.

PORTABILITY
  Phalanx is developed under GNU C & GNU Make.  It's probably possible to
  compile it on many different platforms, but today i have no oportunity
  to try it on any other platform than Linux.  If you have ideas how to
  make it's portability better, let me know.

INSIDE THE MACHINE
  Phalanx uses (traditional) 10x12 board implementation.  There are three
  often used board implementations: "8x8" (GNU Chess), "bitboard" (Crafty),
  and "10x12" (Nimzo, Phalanx).  In short, "10x12" is easy to implement and
  the code is small (==fast on PC).  The engine uses many well known
  techniques: PVS (principal variation search), transposition/killer table,
  static-eval cache, history killers, SEE (static exchange evaluator), null
  move pruning, forward pruning, chess-specific extensions.

AUTHOR
  Dusan Dobes, dobes@math.muni.cz


HISTORY
The rest of this file is history of Phalanx.

I         First version to play a legitimate game, it finally knows all rules.
19970304  I spent a lot of time on tuning transposition table code and
          extensions. The program scores 78% at large Reinfeld's test set, 10 s
          per move, on 486+/150.

II        Two killer heuristics added: well known history killers (modified)
199704??  and `reaction' killers (the killer is connected to the previous enemy
          move). The tree search is faster, especially at `quiet' positions.
          Hashtable presearch. Modified hashentry replacement strategy. Better
          evaluation function, it now knows more about passed pawns, the
          endgame play is much stronger. Fixed bug at 7-th row pawn push
          extension routine. Faster output - using sprintf() to prepare the
          output and then only one printf. New command line options: -t, -T to
          set the hashtable size.

III       Permanent brain (pondering).  King safety evaluation.  Hung pieces
19970529  static evaluation.  Null move pruning.  Forward pruning.  Better time
          heuristics - forced moves are played quickly.  New cmd-line options:
          -f, -x, -p, -s.

IV        New option -c to determine whether to use cpu or real time.  The
19970721  internal timing resolution changed to 1/100 of a second.  Xboard
          compatible editing position.  Removed en-passant capture from
          quiescence search.  Changes in static-eval function.  Piece list
          implemented - speedup is between 0 and 20%; more in endgame.  Pinned
          pieces static evaluation.  Better evaluation of weak pawns.  Trapped
          bishop and knight evaluation.  Bugfix at extending check evasions.
          Bugfix: development bonus was computed but not added to total
          evaluation.  Output change: '!' means turn, '!!' means value out of
          window.

V         Mostly interface changes, no big improvement in playing strength.
19970803  Xboard compatibility fixes: 'post' is no more switch, new command
          'remove'.  Fixed command 'level': 'level 0 5 0' (five minutes per
          game) should work, also increment (ICS) levels ('level 0 2 12').
          Increment can be given at command line.  New option -o (polling
          input) - when running tests, phalanx needs -o-.  New feature of
          autotesting: all incorrect results are written into file
          'notfound.fin'.  Small output changes for better compatibility with
          xboard 3.6.2.  Eliminated some bad turns in evaluation.  Better king
          safety evaluation - counting safe checks available.

VI        Fixed small efficiency bug in evaluate.c.  Improved time heuristics
19970915  for increment (ICS) levels.  Optimized hashing - about 5% overall
          speedup.  Fixed bug in ptime().  User is now allowed to continue play
          even if the position is drawn by 3-rep., material, or 50 moves rule.
          Fixed bug - Draw requests are now always ignored, not always accepted
          :-).  Xboard-compatible 'Illegal move' message.  Binary opening book,
          created from PGN by bcreate.  This distribution is bigger than any
          previous because it contains a small example of binary book
          ('sbook.phalanx', 174kB, 29634 moves).  SAN input accepted.  Static
          evaluation now better understands middlegame positions without
          castling.  Added pre-computed tables into static evaluation -> about
          5% speed improvement.  'Show thinking' mode now shows also a list of
          book moves if there's a book entry.  I have played a match with
          previous version (64 games, 2 minutes, increment 12 seconds, on
          a 486+/150, via xboard, no pondering), new version wins 38.5-25.5.

VII       Courtesy of Pavel Janik ml., new command 'fen'.  Bugfix in command
19971022  line parser, 'phalanx 0 2 12' now works.  Better time controls: added
          hard time limit to avoid being flagged.  Pondering bugfix: Phalanx
          was pondering O-O, but opponent played O-O-O; the move check was
          incorrect and Phalanx thought that O-O was played; this resulted in
          'Illegal move' message few moves later.  More pondering safety: the
          move to be pondered is now checked for legality, before this fix it
          was simply taken from PV (if present), but PV is not always 100%
          correct.  More PV safety: search cannot be interrupted during the
          first iteration, the abort is delayed until the first iteration is
          finished.  New options: -r <resign value>, -b <+/-> to set opening
          book on/off.  New commands hard/easy to set pondering on/off.
          Optimized do_move(): 3% speedup in test positions.  Search
          optimization: null move is not played if the value in hash table
          entry is too low.  Output bugfix: output is now readable even at long
          time searches.  SEE (Static Exchange Evaluator) and more pruning in
          quiescence search.  RoboFICS compatible commands 'white' and 'black'.
          Routine for evaluating pawn endgames.  New extension trick that helps
          in some horizon-effect type positions, it's based on measuring
          difference between current score and null move result; if current
          score is much better, the side to move must be under threat and the
          line is extended, similar trick is also in gnuchess.

VIII      Fixed bug in search(): eliminated useless re-searches -> about 3%
19971103  speed improvement.  Noise level is now in centiseconds, not in nodes.
          Improved horizon-effect extensions.  endgame.c: new endgame
          knowledge, mostly for endgames with minor pieces and pawns: knight
          and bishop mating, knight+knight (draw), minor vs. minor (draw),
          minor vs. pawn (draw, but still needs some work, sometimes a pawn
          wins against a knight), onepawn() as a special case of pawns(), bad
          bishop (bishop + rook pawn), basics for R+P vs. R, bishops with
          opposite colors (this is often drawish ending).  New penalty for
          moving castling-side pawns in middlegame.

IX        Function smove() is now used in both binary book and hashing code, it
19971205  is cleaner and easier to read, the binary is smaller with this.
          Bugfix: Phalanx now does not ponder move that leads into a terminal
          position (checkmate, stalemate), this fixes some unexpected quits
          (I hope all of them).  Added more limits to horizon-effect extension
          trigger - there was so many extensions, that version VIII was
          actually weaker than previous versions, because of lower nominal
          search depth; these extensions are now used only for major threats.
          Static eval cache entry is now packed into 4 bytes instead of 8 ->
          the cache eats only 256K (512K before this).

X         Bugfix in static evaluation of trapped knight at [AH]7.  Better
19980108  evaluation of trapped bishop ([AH]7) and knight ([AH][87]), now it's
          using the static exchange evaluator.  Time allocation: alloc more
          time (+1/8) if pondering is on.  Better understanding of 'trade-down'
          bonus - if there are no pawns, you often need a rook more to win the
          game, a minor piece is not enough.  Shallower extensions resulting in
          greater average search depth.  Easy levels: use new command line
          option -e <1...100> to select an easy level; 1 is the strongest and
          100 is the easiest one, Phalanx tries to make human-like blunders.
          Minor changes in resigning.  Clean up in pbook.phalanx, deleted over
          100 positions.  Killer heuristics now uses the SEE.  Bugfix in
          endgame.c: trade bonus did not work for kings and pawns endgames.
          Simple learning, can be activated by -l+ option; it is off by
          default, because it's very experimental version.  New version wins
          engine-engine match with version IX 23:17 (tc 2, inc 8, 486+/150,
          no learning, no pondering).

XI        Courtesy of Milan Zamazal: long options and user-friendly handling of
19980125  book files - you can now use environment variables or command line
          options.  Bugfix in trade bonus: endgame KQ-KBPP was evaluated only
          about +1.10, but the stronger side is winnig here even without pawns,
          now it's >+3.00 and Phalanx can solve this Dufrense&Mieses study:
          8/3Np3/7P/1p3P2/1k6/5K2/1b6/8/w Pf5f6.  Deeper overall extensions,
          +10% of ply.  More check evasion extensions.  Wider window for 'lazy
          evaluation', search is now slower but stable.  Minor fixes in forward
          and null move pruning.  Zero-width search modified for root moves,
          actually it's no more zero-width; this eliminates some 'blind turns'
          (a move is evaluated as >=(Alpha+1), but the engine cannot prove it
          in re-search in full [Alpha,Beta] window).  Minor changes in static
          evaluation.  Bugfix in time allocation of increment levels.  Changed
          time heuristics to use more time.

XII       More pruning in quiescence search: moves that have little chance to
19980301  return the value over alpha are not generated.  Permanent brain is
          now really 'permanent', if there is no move to ponder in the PV,
          Phalanx uses short search to pick a move and ponders it.  Bugfix:
          occasional zero division at very fast time controls, like 10s/game.
          Some puts() replaced with printf(), puts() is buggy in my gcc (2.7.2)
          and causes sigsegv when interrupted and called again during the
          interrupt.  Optimized null move, this speeds up the engine.  Easy
          levels now use nodes instead of centiseconds for measuring time, the
          playing strength of easy levels does not depend on cpu power and
          cpu load.  Resigning now works with RoboFics (via 'tellics resign').
          Updated FSF address in docs.