New STK version for Stockfish 10. If you are new to STK carefully read the below Stockfish 9 documentation. Installation and operation is the same as with Stockfish 9, just go to C:\MinGW\sf10\src folder and double cliick c.bat to compile.
What's worth mentioning?
More 100/100 defines are added present in the following files:
. search.cpp
. evaluate.cpp
. pawns.cpp
. types.h (the piece values)
. psqt.cpp (the piece square tables)
If you already have installed STK for Stockfish 9 you can manually download and install the new files.
. Copy the sf10 folder in C:\MinGW
. Copy bullet.bat | blitz.bat | long.bat | sf10.exe and sf10x.exe in C:\MinGW\cc
Happy ELO hunting.
______________________________________________________________________________________
Stockfish 9 documentation
STK is a simple all-in platform for tuning Stockfish evaluation paramters (tables) without changing any code. Current version is 9.
Example: in evaluate.cpp the original evaluation table for ThreatByMinor/ByRook (line 184) shows:
// ThreatByMinor/ByRook[attacked PieceType] contains bonuses according to
// which piece type attacks which one. Attacks on lesser pieces which are
// pawn-defended are not considered.
const Score ThreatByMinor[PIECE_TYPE_NB] = {
S(0, 0), S(0, 33), S(45, 43), S(46, 47), S(72, 107), S(48, 118) };
In STK the following change is made:
#define TBM 100/100
const Score ThreatByMinor[PIECE_TYPE_NB] = {
S(0*TBM, 0*TBM), S(0*TBM, 33*TBM), S(45*TBM, 43*TBM), S(46*TBM, 47*TBM), S(72*TBM, 107*TBM), S(48*TBM, 118*TBM) };
Which will produce the exact same output. However it's now a lot easier to tune this table, just change the TBM define.
#define TBM 90/100 - to decrease the table values with 10%
#define TBM 120/100 - to increase the table values with 20%
Playing 10,000 bullet (15+0.1) games with TBM=90 gave 50.8% with a LOS=99.2%
Various of such 100/100 defines are present in the following files:
. evaluate.cpp
. pawns.cpp
. types.h (the piece values)
A second example, in types.h we tried to tune the piece values with the same percentage, after some tries we got:
#define PVM 96/100 // [95/100] - 10,000 | 50.7% | LOS=97.5%
#define PVE 96/100 // [96/100] - 10,000 | 50.9% | LOS=99.3%
#define NVM 96/100
#define NVE 96/100
#define BVM 96/100
#define BVE 96/100
#define RVM 96/100
#define RVE 96/100
#define QVM 96/100
#define QVE 96/100
Which basically means Stockfish 9 becomes less materialistic.
________________________________________________________________________________________________
Installation and operation
In a nutshell
. Install the download in the root of the C-drive (mandatory), it will create the folder MinGW which is the compiler.
. Go to the folder C:\MinGW\sf9\src it's where the source files are.
. Make changes.
. Double click c.bat, the changes are compiled and the produced SF9x executable is moved to C:\MinGW\cc folder.
. Go to C:\MinGW\cc folder.
. Double click either bullet.bat | blitz.bat or long.bat, the testing with cutechess starts.
. That's all.
The details
. From the C:\MinGW\cc folder double click SF9.EXE and type bench, the number of nodes must be 5.023.629.
. bullet.bat will play 10,000 games between (the original) SF9 and (the complied) SF9x at 15+0.1
. blitz.bat will play 10,000 games between (the original) SF9 and (the complied) SF9x at 40/15 (0,3.75 sec average)
. long.bat will play 10,000 games between (the original) SF9 and (the complied) SF9x at 40/40 (1 second average)
. The openings file 25000.pgn contains 25,000 unique openings.
Modifying cutechess batch files, blitz.bat as an example.
cutechess-cli -concurrency 4 -engine name=sf9x cmd=sf9x.exe proto=uci -engine name=sf9 cmd=sf9.exe proto=uci -each restart=on tc=40/15 timemargin=90000 -draw movenumber=160 movecount=3 score=100 -resign movecount=5 score=900 -rounds 10000 -repeat -pgnout all.pgn -openings file=25000.pgn plies=20
-concurrency 4 - cutechess will use 4 threads.
-rounds 10000 - cutechess will play 10,000 games.
timemargin=90000 - set to 90 seconds to avoid any time forfeit either due bugs or a busy PC.
For more info (options) double click the cutechess-cli.6.html documentation if you are not familiar with cutechess.
________________________________________________________________________________________________
Recommendation
In pawns.cpp isolated and backward pawns are penalized with a fixed value, indepedent where the pawns are on the board.
// Isolated pawn penalty
#define IP 100/100
const Score Isolated = S(13*IP, 18*IP);
// Backward pawn penalty
#define BP 100/100
const Score Backward = S(24*BP, 12*BP);
For the middlegame it's much better (5-10 elo) to use a piece_square_table, as center pawns are much more vulnerable than flank pawns. And secondly if such weak pawns are on an open file they are even more vulnerable, for this purpose use a second piece_square_table, or doubling the penalty is another option.
_______________________________________________________________________________________________
Final remark
The purpose of this software is not to create another Stockfish clone but:
1. to create interest in chess programming making things more easy;
2. to contribute found improvements to the Stockfish team;
3. add more #define 100/100 options yourself.
________________________________________________________________________________________________
Credits
Tord Romstad, Marco Costalba and Joona Kiisk for Stockfish.
Ilari Pihlajisto, Arto Jonsson for cutechess-clil
MinGW, the compiler