Prophet 5.1 and chess4j 6.2 released

I am very pleased to announce the latest releases of both of my chess programs. This is another big improvement for Prophet, around 96 elo! I had the nice “problem” of having to find an entire new set of sparring partners!

Rank Name               Elo    +    - games score oppo. draws 
   1 Lux-4.2            142    4    4 18600   60%    70   30% 
   2 zevra-2.6          137    5    5 18600   59%    71   19% 
   3 Tcheran-5.1        136    4    4 18600   59%    71   28% 
   4 casacnchess-0.9    133    4    4 18600   59%    71   39% 
   5 aramis-1.4.0       124    4    4 18600   57%    71   30% 
   6 prophet-5.1         96    2    2 57361   52%    83   30% 
   7 lishex-1.1.1        87    4    4 18600   52%    73   28% 
   8 drosophila-1.6      83    4    4 18600   51%    73   28% 
   9 Supernova-2.4       72    4    4 18600   50%    74   26% 
  10 blunder-8.5.5       49    4    4 18600   46%    75   31% 
  11 mess-0.3.0          27    4    4 18600   43%    76   27% 
  12 toad-3.0            15    5    5 13000   59%   -51   27% 
  13 luna-2.0.0           2    5    5 13000   58%   -50   28% 
  14 fatalii-0.9.0        1    5    5 13000   57%   -50   28% 
  15 prophet-5.0          0    2    2 81361   42%    53   27% 
  16 jikchess-0.02      -13    5    5 13000   55%   -49   21% 
  17 admete-1.5.0       -42    5    5 13000   51%   -47   26% 
  18 maverick-1.5       -52    5    5 13000   49%   -46   24% 
  19 smol-1.61          -65    5    5 13000   47%   -45   27% 
  20 tantabus-2.0.0     -75    5    5 13000   46%   -44   26% 
  21 sofcheck-0.9.1     -94    5    5 13000   43%   -43   26% 
  22 loki-3.5.0        -106    5    5 13000   41%   -42   25% 
  23 barbarossa-0.6.0  -107    5    5 13000   41%   -42   22% 
  24 fornax-4.0        -118    5    5 13000   39%   -41   25% 

The gains in Prophet can be attributed 100% to the changes in the neural network architecture described in Sometimes, Less is More, and in improvements to the training process itself by incorporating quantization error. There were also some non-functional changes: a massive cleanup of the public headers of the core library. A lot of data structures and methods were pulled into internal headers. I also cleaned up the Doxygen documentation, did some reformatting to make the codebase more consistent, and cleaned up / added some options to the CMake file. So all in all, this is a nice update for Prophet!

chess4j uses the same neural network, so it also benefits. In fact, for chess4j, this is the first version where NNUE seems to actually be an improvement over the handcrafted evaluation! I haven’t extensively tested it, but it appears to be a 10-20 elo improvement over HCE. Previously, with the larger network, the overhead was just too high.

As I wrote in Goodbye JNI, Hello FFM, chess4j no longer uses the Java Native Interface stuff. It’s all been replaced with Java’s new Foreign Function and Memory API. FFM is so much simpler and safer. It’s easier to write, easier to test, easier to maintain. With FFM the integration code itself is all Java, where it’s native code in JNI. This eliminates the need for an entire submodule of the project! The project structure and build process are just – simpler.

All that said, I’ve decided to no longer publicly support the chess4j + Prophet integration. I started this integration about six years ago, and wrote about it in chess4j + Prophet4 POC . It was a challenging project, and I learned a lot doing it, but my goals have changed. I was focused on chess4j, and making a Java program faster by dropping down into native code. Now, I’d like to try to make Prophet more competitive as a standalone engine, and that means adding some features that are only available in chess4j directly into Prophet. But, the more of those features are added, the less that integration makes sense. So, that integration will live on, but for private use as a debugging tool.

The short term roadmap:

  • Better training data. My current dataset of ~500 million positions is labeled by using a depth 5 (+ quiescence search). I think there is a lot of room for improvement here.
  • Windows builds for Prophet. My development environment is on Linux, but I’d like to get a native Windows compile using MSVC, rather than relying on Cygwin. I’m guessing it would be faster.
  • On the Java side, investigate the Vector API to determine if there is any application in chess4j’s NNUE or eval tuning code.
  • Improve root move ordering

As always, lots to do!