Monthly Archives: June 2014

chess4j 2.0 is released

I’m happy to announce the release of version 2.0 of my chess program, chess4j. This version is a good bit stronger than the previous release, though there is still much to do. The focus of this release has been to improve the efficiency of the search. These improvements include:

  • Improved Move Ordering
    • Previous PV move (this was already in place)
    • Hash move (this was already in place)
    • Winning and even captures, as sorted using a Static Exchange Evaluator
    • Killer move heuristic – 2 moves that must be noncaptures
    • Remaining non-capturing moves in any order
    • Remaining captures, sorted using the Static Exchange Evaluator
  • Addition of a quiescence (capture only) search after the full width search. Captures are sorted using the MVV/LVA algorithm
  • Extensions
    • Check Extensions
    • Pawn to 7th or 8th (promotion) extension
  • Null Move Pruning, using R=2
  • Principal Variation Search
  • Aspiration Windows of +/- 1/3 pawn
  • Late Move Reductions
  • Improved Node Rate by 10x (!!)
  • Very, very simple opening book. It’s only two moves deep, only added to add some variety to online play

So, how good is it? As I write this the program has an ICC Blitz rating (playing exclusively 5 3) of around 2050, and a Bullet rating (playing exclusively 2 1) of around 2100. So, not very strong as far as chess programs go, but good enough to beat most club players at rapid speeds. As far as test suites go, I’ve only really used the Win At Chess Suite at 10 seconds per problem and it’s scored 264/300.

What’s next? There is a lot to choose from, but I’ve decided to make the opening book the focus of the 3.x branch. I think I’ll start by creating a database of high caliber games, and some tooling to add or remove lines. I’d also like to have some sort of learning mechanism so the program learns moves over time, as well as learns to prevent disastrous moves.

Further down the road, the evaluator is certainly the weak point now. It really just measures material and some static piece placement for knights and pawns.

You can download chess4j from the project website: As always, the source code is also available.