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!