New uci engine: Rofchade

Discussion of anything and everything relating to chess playing software and machines.

Moderators: Harvey Williamson, bob, hgm

Forum rules
This textbox is used to restore diagrams posted with the [d] tag before the upgrade.
User avatar
xr_a_y
Posts: 1319
Joined: Sat Nov 25, 2017 1:28 pm
Location: France

Re: New uci engine: Rofchade

Post by xr_a_y » Tue Aug 28, 2018 10:04 am

Great work ! congrats.

You say you have tuned your little eval with texel method, how did you tuned the search ?

User avatar
WinPooh
Posts: 245
Joined: Fri Mar 17, 2006 7:01 am
Location: Russia
Full name: Vladimir Medvedev
Contact:

Re: New uci engine: Rofchade

Post by WinPooh » Tue Aug 28, 2018 10:31 am

Do you have different tables for different stages of game, or just 6x64 universal values?

sandermvdb
Posts: 160
Joined: Sat Jan 28, 2017 12:29 pm
Location: The Netherlands

Re: New uci engine: Rofchade

Post by sandermvdb » Tue Aug 28, 2018 10:42 am

There it is! :D
Cool that the Texel's tuning method also worked for your engine.
This evening I'll have a look at your website and download the binary to see how it does against my engine. :)

Btw, do you know how good your SMP scaling is when using a lot of threads?

User avatar
Ronald
Posts: 112
Joined: Tue Jan 23, 2018 9:18 am
Location: Rotterdam
Full name: Ronald Friederich
Contact:

Re: New uci engine: Rofchade

Post by Ronald » Tue Aug 28, 2018 11:30 am

Thanks for all the positive reactions!

To answer some questions. I started experimenting with Texel tuning after a talk with chess22K's author Sander at the CSVN programmer tournament. He told Texel tuning was a good and fast method to improve chess22K (I believe over 100 Elo). Before that I had been experimenting with PST a little bit and used a set from some a PST contest done at talkchess some time agoviewtopic.php?f=7&t=50840#p551966(btw interesting topic). I noticed that different PST's could already make a big difference in strength.

Before using Texel's method I had mostly been busy with hand tuning the different search parameters in the engine. Only after not getting any gain in search anymore I started to play with Texel's tuning. First with the material values and taper parameters only, which already gave some results. When I started tuning the PST tables also I got some little bit strange, asymmetrical tables but one of those tables performed significantly better then tho others. Later I tried to get symmetrical tables but they all performed worse then my current favourite.

After that I tried to play with the search parameters again but I couldn't get better results at all. What I do with Texel tuning is evaluate the quiet-labeled.epd positions with a call to the eval function only, so it has nothing to do with search. So it seems that the search parameters are not influenced by the evaluation values and is pretty much independent of it for now (except if I would multiply each element by a constant thus changing the base value of a pawn). Hopefully it will stay that way after adding different evaluation elements.

One of the reasons why asymmetrical tables seem to work best (for now?) probably is more short castling, but I think chess is not symmetric at all, due to the fact that we have 1 queen and king, and we have alternating colors for the squares (so bishop 1 can not reach square C1 for instance and bishop 2 van not reach C8). Also the testset used for tuning will have influence on how asymmetrical the tables will be, because that will also be asymmetric.

If someone is interested in the PST tables I use now, let me know, I can post them here on talkchess.

So I have asymmetrical PST's for each piece for MG and EG. I use tapering based on total MG material value that's still on the board.

User avatar
xr_a_y
Posts: 1319
Joined: Sat Nov 25, 2017 1:28 pm
Location: France

Re: New uci engine: Rofchade

Post by xr_a_y » Tue Aug 28, 2018 12:10 pm

Yes i'd love to make a quick test with your pst values. They are MG/EG style ?
Can you also give your formula for game_phase and the relation to the coef for MG/EG scaling please ?

User avatar
Ronald
Posts: 112
Joined: Tue Jan 23, 2018 9:18 am
Location: Rotterdam
Full name: Ronald Friederich
Contact:

Re: New uci engine: Rofchade

Post by Ronald » Tue Aug 28, 2018 1:16 pm

@Sander: I did some serious testing for 4 threads, with 4 threads I got a gain of around 115 Elo, for more threads I haven't done serious testing. The difference between 16 and 30 threads seemed low, but that was on te 16 core threadripper. I did some testing with 30 threads, based on that with 16 threads I think the gain maybe double, say around 230.

@xr_a_y Nice.. Currently I'm not able to post the PST tables, so I will do that late in the evening, or tomorrow morning.

User avatar
Steve Maughan
Posts: 1075
Joined: Wed Mar 08, 2006 7:28 pm
Location: Florida, USA
Contact:

Re: New uci engine: Rofchade

Post by Steve Maughan » Tue Aug 28, 2018 1:49 pm

Nice - big congrats!

It's impressive that you've got so far with only PSTs.

One super-small point: I notice that Rofchad will return a best move if it finds a mate in analysis mode. Strictly speaking this shouldn't be the case for a UCI compliant engine, although it is really a few flaws of the UCI protocol.

Steve
http://www.chessprogramming.net - Maverick Chess Engine

JohnW
Posts: 202
Joined: Wed Nov 21, 2012 11:20 pm
Location: New Hampshire

Re: New uci engine: Rofchade

Post by JohnW » Tue Aug 28, 2018 1:58 pm

Just curious, what does the name mean?

User avatar
Ronald
Posts: 112
Joined: Tue Jan 23, 2018 9:18 am
Location: Rotterdam
Full name: Ronald Friederich
Contact:

Re: New uci engine: Rofchade

Post by Ronald » Tue Aug 28, 2018 9:38 pm

JohnW wrote:
Tue Aug 28, 2018 1:58 pm
Just curious, what does the name mean?
Rofchade is the concatenation of the abbreviation of my name "Rof", which is my email/userid for as long as I can remember and the dutch word for castling "rochade". I came up with that name 25 years ago (or more) when I made my first attempt at developping a chess engine, so I thought it would by nice to use the same name for my second attempt.
Steve Maughan wrote:
Tue Aug 28, 2018 1:49 pm
One super-small point: I notice that Rofchad will return a best move if it finds a mate in analysis mode. Strictly speaking this shouldn't be the case for a UCI compliant engine, although it is really a few flaws of the UCI protocol.

Steve
Good suggestion. Now the search is stopped as soon as the searchdepth is GE the "matedepth". I will disable this when in infinite mode so the engine can continue to search for a shorter mate.

User avatar
Ronald
Posts: 112
Joined: Tue Jan 23, 2018 9:18 am
Location: Rotterdam
Full name: Ronald Friederich
Contact:

Re: New uci engine: Rofchade

Post by Ronald » Tue Aug 28, 2018 10:10 pm

Below are the PST values which work best for rofchade. As you can see very asymmetric. They are defined as if looking to the board from white (so I can understand them better..). The first square in the table [0] is square A8 and the last square [63] is H1. This means that it can be used directly for black, for white you have flip it vertically so you cant take the square XOR 56 for white.
So if you want to calculate the MG PST value of a rook on square 'sq', if the rook is WHITE you take value pieceSquareScore[MG][ROOK][sq ^ 56], if the rook is BLACK you take pieceSquareScore[MG][ROOK][sq].

I'm interested in how well they perform in other engines with full evaluation compared to your own PST and if possible stand alone without further eval elements compared to the regular version. Because all rofchade's evaluation elements are inside the PST maybe some evaluation parts are more emphasized when used together (like rook on 7th rank bonus which also shows a little bit in the PST).

Here they are:

Code: Select all

const eval pieceValue[2][6] =
{ 82, 337, 365, 477, 1025, 12000,
  94, 281, 297, 512,  936, 12000 };

const eval GAMEPHASEMINEG = 518;
const eval GAMEPHASEMAXMG = 6192;
const eval GAMEPHASERANGE = GAMEPHASEMAXMG - GAMEPHASEMINEG;

// factorMG and factorEG are calculated based on the sum of the MG values of all the pieces except pawns (pos->gamePhase)
// a sum above GAMEPHASEMAXMG is fully MG, a sum below GAMEPHASEMINEG is fully EG, the rest is interpolated:

	//const eval gamePhase = std::max(GAMEPHASEMINEG, std::min(GAMEPHASEMAXMG, pos->gamePhase));			
	//const double factorMG = (gamePhase - GAMEPHASEMINEG) / GAMEPHASERANGE;	
	//const double factorEG = 1 - factorMG;

const sptScore pieceSquareScore[2][6][64] =
// MG values
{
//pawn
      0,   0,   0,   0,   0,   0,  0,   0,
     98, 134,  61,  95,  68, 126, 34, -11,
     -6,   7,  26,  31,  65,  56, 25, -20,
    -14,  13,   6,  21,  23,  12, 17, -23,
    -27,  -2,  -5,  12,  17,   6, 10, -25,
    -26,  -4,  -4, -10,   3,   3, 33, -12,
    -35,  -1, -20, -23, -15,  24, 38, -22,
      0,   0,   0,   0,   0,   0,  0,   0,
 //knight
    -167, -89, -34, -49,  61, -97, -15, -107,
     -73, -41,  72,  36,  23,  62,   7,  -17,
     -47,  60,  37,  65,  84, 129,  73,   44,
      -9,  17,  19,  53,  37,  69,  18,   22,
     -13,   4,  16,  13,  28,  19,  21,   -8,
     -23,  -9,  12,  10,  19,  17,  25,  -16,
     -29, -53, -12,  -3,  -1,  18, -14,  -19,
    -105, -21, -58, -33, -17, -28, -19,  -23,
 //bishop
    -29,   4, -82, -37, -25, -42,   7,  -8,
    -26,  16, -18, -13,  30,  59,  18, -47,
    -16,  37,  43,  40,  35,  50,  37,  -2,
     -4,   5,  19,  50,  37,  37,   7,  -2,
     -6,  13,  13,  26,  34,  12,  10,   4,
      0,  15,  15,  15,  14,  27,  18,  10,
      4,  15,  16,   0,   7,  21,  33,   1,
    -33,  -3, -14, -21, -13, -12, -39, -21,
 //rook
     32,  42,  32,  51, 63,  9,  31,  43,
     27,  32,  58,  62, 80, 67,  26,  44,
     -5,  19,  26,  36, 17, 45,  61,  16,
    -24, -11,   7,  26, 24, 35,  -8, -20,
    -36, -26, -12,  -1,  9, -7,   6, -23,
    -45, -25, -16, -17,  3,  0,  -5, -33,
    -44, -16, -20,  -9, -1, 11,  -6, -71,
    -19, -13,   1,  17, 16,  7, -37, -26,
 //queen
    -28,   0,  29,  12,  59,  44,  43,  45,
    -24, -39,  -5,   1, -16,  57,  28,  54,
    -13, -17,   7,   8,  29,  56,  47,  57,
    -27, -27, -16, -16,  -1,  17,  -2,   1,
     -9, -26,  -9, -10,  -2,  -4,   3,  -3,
    -14,   2, -11,  -2,  -5,   2,  14,   5,
    -35,  -8,  11,   2,   8,  15,  -3,   1,
     -1, -18,  -9,  10, -15, -25, -31, -50,
 //king
    -65,  23,  16, -15, -56, -34,   2,  13,
     29,  -1, -20,  -7,  -8,  -4, -38, -29,
     -9,  24,   2, -16, -20,   6,  22, -22,
    -17, -20, -12, -27, -30, -25, -14, -36,
    -49,  -1, -27, -39, -46, -44, -33, -51,
    -14, -14, -22, -46, -44, -30, -15, -27,
      1,   7,  -8, -64, -43, -16,   9,   8,
    -15,  36,  12, -54,   8, -28,  24,  14,
    
    // EG values
 
 //pawn
      0,   0,   0,   0,   0,   0,   0,   0,
    178, 173, 158, 134, 147, 132, 165, 187,
     94, 100,  85,  67,  56,  53,  82,  84,
     32,  24,  13,   5,  -2,   4,  17,  17,
     13,   9,  -3,  -7,  -7,  -8,   3,  -1,
      4,   7,  -6,   1,   0,  -5,  -1,  -8,
     13,   8,   8,  10,  13,   0,   2,  -7,
      0,   0,   0,   0,   0,   0,   0,   0,
//knight
    -58, -38, -13, -28, -31, -27, -63, -99,
    -25,  -8, -25,  -2,  -9, -25, -24, -52,
    -24, -20,  10,   9,  -1,  -9, -19, -41,
    -17,   3,  22,  22,  22,  11,   8, -18,
    -18,  -6,  16,  25,  16,  17,   4, -18,
    -23,  -3,  -1,  15,  10,  -3, -20, -22,
    -42, -20, -10,  -5,  -2, -20, -23, -44,
    -29, -51, -23, -15, -22, -18, -50, -64,
//bishop
    -14, -21, -11,  -8, -7,  -9, -17, -24,
     -8,  -4,   7, -12, -3, -13,  -4, -14,
      2,  -8,   0,  -1, -2,   6,   0,   4,
     -3,   9,  12,   9, 14,  10,   3,   2,
     -6,   3,  13,  19,  7,  10,  -3,  -9,
    -12,  -3,   8,  10, 13,   3,  -7, -15,
    -14, -18,  -7,  -1,  4,  -9, -15, -27,
    -23,  -9, -23,  -5, -9, -16,  -5, -17,
//rook
    13, 10, 18, 15, 12,  12,   8,   5,
    11, 13, 13, 11, -3,   3,   8,   3,
     7,  7,  7,  5,  4,  -3,  -5,  -3,
     4,  3, 13,  1,  2,   1,  -1,   2,
     3,  5,  8,  4, -5,  -6,  -8, -11,
    -4,  0, -5, -1, -7, -12,  -8, -16,
    -6, -6,  0,  2, -9,  -9, -11,  -3,
    -9,  2,  3, -1, -5, -13,   4, -20,
//queen
     -9,  22,  22,  27,  27,  19,  10,  20,
    -17,  20,  32,  41,  58,  25,  30,   0,
    -20,   6,   9,  49,  47,  35,  19,   9,
      3,  22,  24,  45,  57,  40,  57,  36,
    -18,  28,  19,  47,  31,  34,  39,  23,
    -16, -27,  15,   6,   9,  17,  10,   5,
    -22, -23, -30, -16, -16, -23, -36, -32,
    -33, -28, -22, -43,  -5, -32, -20, -41,
//king
    -74, -35, -18, -18, -11,  15,   4, -17,
    -12,  17,  14,  17,  17,  38,  23,  11,
     10,  17,  23,  15,  20,  45,  44,  13,
     -8,  22,  24,  27,  26,  33,  26,   3,
    -18,  -4,  21,  24,  27,  23,   9, -11,
    -19,  -3,  11,  21,  23,  16,   7,  -9,
    -27, -11,   4,  13,  14,   4,  -5, -17,
    -53, -34, -21, -11, -28, -14, -24, -43
};

Post Reply