Frank-Walter

"Frank-Walter" is a winboard chess engine by Laurens Winkelhagen. The current (development) version is 1.0.9-dev, the latest stable release is 1.0.8. This is a rather big release: New features include an Openingbook, revamped legal move generation, optional bigger transposition table sizes and killer moves! The first 'publication quality' build was done on monday 16-02-2009, which places it safely five years after the first release of a previous effort by the same author - the chess engine "Jan Willem".

Frank-Walter is named after a press release about the german Kanzlerkandidat, Frank (or officially Frank-Walter) Steinmeier, who in february of 2009 decided that his full name was not down to earth enough for a Kanzlerkandidat that wants to be elected. I disagree, I think Frank-Walter is an excellent name.

Download and use

The current public version (1.0.8) can be downloaded here. You need java 1.6 or higher to run the program and it can be started from the commandline with "java -jar fw.jar". More downloads can be found on the downloadpage.

A java parameter controlling heap size is (currently) optional and allows for bigger transposition tables. The memory footprint of the program appears to be about 36MB (no heap size parameter). By supplying heapsize parameters one can control the transposition table size somewhat, but currently the used algorithm is quite dumb.

Features

+ bitboards:
  * magic bitboard move generation for diagonals
  * kindergarten bitboard move generation for verticals
    (idea's and example code obviously coming from the chess programming wiki)
+ castling, ep, minor promotions.
+ winboard protocol version 2 support (only) (needs the 'time' command though)
+ setboard capabilities
+ some primitive time management
+ iterative deepening
+ alpha beta search with quiescence.
+ nullmove (R=2)
+ pcsq board evaluation. with some extra rook and pawn knowledge
+ TranspositionTable based 'hash move first' moveordering with killer moves
+ mate, stalemate, 50moves detection and 3fold repetition detection
+ SEE
+ Legal Move Only generation
+ some extentions, some mobility evaluation, primitive lazy evaluation.
+ A small opening book, curtesy of Colin Frayn!
- no pondering

History

1.0.8

+ Added SEE. the program plays very different now, but unfortunately not necessarily a lot better...
  The question is now if there are bugs in SEE^^
  Intuitively it should search deeper but maybe miss tactics in QSearch...
+ Tried introducing asperiation search; unclear results.
+ Added support for more memory! try running the program with "java -Xmx256M -jar fw.jar" and make the most out of a bigger hash table.
+ Also -Xmx384M is supported.

1.0.7

+ Switched to a legal move generator based on attack tables and pins
  (got the idea from Steven Edwards, keeping it because it's more fun - even though presently I hardly reap the presupposed benefits)+ Fixed some move bugs that were already in the old version
+ Added Perft functionality (also to the EPDReader)
+ Added a tad of lazy evaluation
+ Added single moves extensions
- Discovered it still plays somewhat worse than the previos version due to slowness of thinking
+ Added check extensions
+ Implemented killer moves, removed some eval code: it preforms (slightly?) better!

1.0.6

+ Added opening book (format is the format from beowulf / Colin Frayn). Currently only accepts "book.dat".
+ Currently bookt.dat is included, with the kind permission of Colin Frayn. Other books are available at his beowulf site (just remember to rename them book.dat).
+ Added epd functionality (use "java -jar fw.jar -epd={filename}[,{seconds}]")
+ Removed a stupid bug from the TT
+ now showing the Principle Variation in output.
* tinkering with rootnode behaviour (what happens when the candidate move suddenly drops?)

1.0.5

+fixed several deep bugs (tt based moveordering, rootnode scorekeeping) .. as a result suboptimal play lessened, and (infrequent) illegal moves too.
+ found some odd behavior when detecting 2fold rep though, so not using that now.
+ started testing again with TT induced cut-offs, previous attempts caused inexplicable behaviour

1.0.4

+ fixed a bug that allowed computer vs. computer winboard play but frustrated human vs. computer play.
+ introduced hashkeys, 3fold rep detection and move ordering by TranspositionTable.

1.0.3

+ fixed an en passant + null move bug.
+ fixed a setboard bug
+ fixed first node of search to apply Alpha Beta tactics, major improvement
+ javadocced half my code, finally^^

1.0.2

+ added nullmove (R=2) but it might be buggy, as it doesn't seem to improve playing strength
+ added checks to the QSearch - slows the search down quite a bit:-(
+ added some eval stuff which is quite good
+ pvs search means some speed-up!
+ (won my first game against Jan Willem, target accomplished already.)
- (the match was lost badly though :P)

1.0.1

+ implemented some primitive moveordering, major improvement

version 1.0

+ bitboards:
  * magic bitboard move generation for diagonals
  * kindergarten bitboard move generation for verticals
    (idea's and example code obviously coming from the chess programming wiki)
+ castling, ep, minor promotions.
+ winboard protocol version 2 support (only) (needs the 'time' command though)
+ some primitive time management
+ iterative deepening
+ alpha beta search with (admittedly sparse) quiescence.
+ pcsq board evaluation.
- almost no move ordering (except for the first ply)!!
+ mate, stalemate and 50moves detection
- no 3fold repetition detection
- no transposition tables, no pondering, no PVS, no nullmove, no killer moves

About the author

Laurens Winkelhagen (1978) is a Dutch IT-developer, and author of several winboard chess engines. The Java engine "Frank-Walter" and a C++ engine "Jan Willem" have been released. Frank-Walter is currently untested and probably very weak but under development, Jan Willem has been tested in several amateur computer chess tourneys as well as on www.freechess.org as an engine and has a rating of approximately 2000 elo.