Skip to content

v3.0.0

Compare
Choose a tag to compare
@jtheardw jtheardw released this 10 Dec 22:04
· 88 commits to master since this release

A new version of Mantissa is officially released after a few months since 2.5.0, and it comes with a lot of very exciting updates. In this release, I simplified some areas of Mantissa while adding to others. I tried to reign back in some things I had implemented mostly out of excitement but which I weren't properly integrated. For example, Mantissa 2.5.0 had follow-up history tables, but they were not well-implemented and were not benefiting playing strength much for the cost of complexity. So for now I've trimmed the fat on Mantissa's search and have actually removed some things.

Here's an excerpt of some of the improvements.

Improvements:

  • Move size reduced to 4-bytes.
  • TT entry size halved
  • Fixed bugs involving multi-cut potentially triggering improperly for losing side in positions with only one legal move
  • Fixed incorrect margin sizes on delta pruning
  • Follow-up history table removed
  • History-based futility pruning removed
  • History scores now taper
  • Now checks system time only every 1024 nodes to avoid jumping in-and-out of the kernel too often (seemed to become an issue after a Linux kernel upgrade on some systems)
  • Various performance improvements
  • Improved tuning to the search parameters
  • NNUE Evaluation

NNUE
For the first time, Mantissa has its own NNUE net for evaluating positions. Huge thanks to Amanjpro (author of Zahak) for helpful guidance on getting started on this. Like he did, I wrote my own code for making use of the net and made a training program based on zahak-trainer (though gaining some deviations). All the training data for the net was generated using Mantissa 2.6.2 self-play and were scored by Mantissa in every circumstance.

Right now the net's topology is a simple 769 -> 128 -> 1, but it's surprisingly powerful for how simple it is. This version of Mantissa does not support loading nets on the fly through the UCI interface, but it is compatible with any zahak or bitgenie net with the same topology in theory (vice versa it's net would work in them).

However, as a consequence, this current release of Mantissa is a bit more restrictive in the architectures it can support at full strength. I'll be doing more research to try to improve this, but for the moment, Mantissa 3.0.0 is only recommended for use on x86_64 machines, due to reliance on AVX instructions. If you are interested in playing around with Mantissa on very old hardware or ARM, consider the 2.5.0 release for now. I apologize for any inconvenience. Luckily pretty much every modern x86_64 processor made in the last decade should have the appropriate support.

Which Binary to Use

Included in this release are 2 binaries for playing Mantissa at full strength, one for Windows and one for Linux.

  • Linux: mantissa-3.0.0-avx-linux
  • Windows: mantissa-3.0.0-avx.exe

For those on slightly older hardware that still want to play around with Mantissa, I've also compiled versions which only require sse3 support, rather than AVX. These come with the caveat that they don't play at Mantissa's full strength, because the nps is cut roughly in half. These are:

  • Linux: mantissa-3.0.0-sse3-linux
  • Windows: mantissa-3.0.0-sse3.exe

Building

If you're tech-savvy and want to try building for yourself (and have rust set up), there are a few build scripts:

  • build will try to optimize the build for the machine it's run on, and is usable in unix-like shells (e.g. sh, bash, zsh)
  • build_windows will try to make a build targeting an x86_64 windows machine with support for AVX instructions. It's also a shell script, which I use for cross-compiling
  • build_linux will target an x86_64 linux machine with AVX support.

For windows users, I now provide build_windows.bat which should function in cmd.exe. I've run it a couple of times myself on my windows machine but I'm not greatly knowledgeable about the windows command line so I apologize in advance if it breaks.

Strength
As of this writing, Mantissa-2.1.1 has a rating of 2686 on the CCRL Blitz list. v2.5.0 doesn't appear on the lists, but seemed to perform in the low-to-mid 2700s, both in blitz and in the Amateur Division Series run by Graham. v2.6.2, which never received an official release, tested on my systems as playing at around the low 2800s.

My estimate for the general neighborhood of strength for 3.0.0 is the mid-2950s. This is just an estimate, based on self-play against previous versions of mantissa, as well as matches I've run locally against other CCRL rated engines in that realm of strength in 2+1.

Thanks everyone who joins me on this journey. Now that I have some experience with the basics, I think there's so much more work to be done for improvements, both to playing strength and user-experience, and I'm very excited for future releases.