mobility evaluation of stockfish

Discussion of chess software programming and technical issues.

Moderators: hgm, Rebel, chrisw

User avatar
michiguel
Posts: 6401
Joined: Thu Mar 09, 2006 8:30 pm
Location: Chicago, Illinois, USA

Re: mobility evaluation of stockfish

Post by michiguel »

Uri Blass wrote:
michiguel wrote:
Uri Blass wrote:I looked at the code of stockfish1.9 and it seems to me that the mobility evaluation is linear in the number of squares(except big number of squares and the difference in evaluation between controling 0 squares and controling 2 seaures is generally the same as the difference in evaluation between controling 4 squares and controling 2 squares)

I think that it is not logical to do it and it is may be better to reduce the mobility score for controling small number of squares.

stockfish has the following code

Code: Select all

const Score MobilityBonus[][32] = {
     {}, {},
     { S(-38,-33), S(-25,-23), S(-12,-13), S( 0, -3), S(12,  7), S(25, 17), // Knights
       S( 31, 22), S( 38, 27), S( 38, 27) },
     { S(-25,-30), S(-11,-16), S(  3, -2), S(17, 12), S(31, 26), S(45, 40), // Bishops
       S( 57, 52), S( 65, 60), S( 71, 65), S(74, 69), S(76, 71), S(78, 73),
       S( 79, 74), S( 80, 75), S( 81, 76), S(81, 76) },
     { S(-20,-36), S(-14,-19), S( -8, -3), S(-2, 13), S( 4, 29), S(10, 46), // Rooks
       S( 14, 62), S( 19, 79), S( 23, 95), S(26,106), S(27,111), S(28,114),
       S( 29,116), S( 30,117), S( 31,118), S(32,118) },
     { S(-10,-18), S( -8,-13), S( -6, -7), S(-3, -2), S(-1,  3), S( 1,  8), // Queens
       S(  3, 13), S(  5, 19), S(  8, 23), S(10, 27), S(12, 32), S(15, 34),
       S( 16, 35), S( 17, 35), S( 18, 35), S(20, 35), S(20, 35), S(20, 35),
       S( 20, 35), S( 20, 35), S( 20, 35), S(20, 35), S(20, 35), S(20, 35),
       S( 20, 35), S( 20, 35), S( 20, 35), S(20, 35), S(20, 35), S(20, 35),
       S( 20, 35), S( 20, 35) }
  };
I suggest to change it to reduce the numbers of every line by
15(for 0 squares),10 (for 1 squares),6 (for 2 squares) 3 (for 3 squares),
1 (for 4 squares)

I wonder if somebody tested this idea or is interested in testing it.
what is the S ()? What is that macro doing? is that changing the values and composing only one of with both?

I cannot comment without knowing that the above is doing, but I agree that mobility should NOT be linear, but the curvature should be the opposite of what you suggest!

It is more critical to have a piece that goes from 0 to 2 squares, than going from 12 to 14.

Miguel
I think that it is exactly what I suggest and I suggested to increase the difference between 0 squares and 2 squares by 15-6=9 units of evaluation and to increase the difference bewtween 2 squares and 4
squares by 6-1=5 units of evaluation.
Then I guess you meant to say to reduce the "absolute number for the score" rather than reducing the "score"?
Anyway, I hope that Ralph got the message correctly. I still do not understand it very well (I cannot match your numbers with the tables above).

Miguel

Note that for big numbers this is already the case in stockfish and there is
practically no difference between knight that control 7 squares and knight that control 8 squares and very little difference between rook that controls 13 squares and rook that control 14 squares.
User avatar
Don
Posts: 5106
Joined: Tue Apr 29, 2008 4:27 pm

Re: mobility evaluation of stockfish

Post by Don »

mcostalba wrote:
Uri Blass wrote: I wonder if somebody tested this idea or is interested in testing it.
We have made some tests of non-linear mobility (after Don posted his experience on Talkchess), until now we go from "no difference" to "worst"...but perhaps we still have to find correct receipe.
It was a major thing for Komodo, but I think it's the case that when you try new things it can throw other evaluation out of balance. It's been my experience that if you like an idea you sometimes have to bear with it for a while.

If it helps anyone that wants to try it in stockfish, our mobility uses the square root of the actual mobility (and this is multiplied by some weight we tuned.)

Also, everything in Komodo is "centered" so for a bishop we use 7 as our centering value. Basically we calculate the mobility of the given bishop and then subtract from it a hypothetical bishop with 7 squares of mobility.

Other pieces have different centering values.
Uri Blass
Posts: 10348
Joined: Thu Mar 09, 2006 12:37 am
Location: Tel-Aviv Israel

Re: mobility evaluation of stockfish

Post by Uri Blass »

michiguel wrote:
Uri Blass wrote:
michiguel wrote:
Uri Blass wrote:I looked at the code of stockfish1.9 and it seems to me that the mobility evaluation is linear in the number of squares(except big number of squares and the difference in evaluation between controling 0 squares and controling 2 seaures is generally the same as the difference in evaluation between controling 4 squares and controling 2 squares)

I think that it is not logical to do it and it is may be better to reduce the mobility score for controling small number of squares.

stockfish has the following code

Code: Select all

const Score MobilityBonus[][32] = {
     {}, {},
     { S(-38,-33), S(-25,-23), S(-12,-13), S( 0, -3), S(12,  7), S(25, 17), // Knights
       S( 31, 22), S( 38, 27), S( 38, 27) },
     { S(-25,-30), S(-11,-16), S(  3, -2), S(17, 12), S(31, 26), S(45, 40), // Bishops
       S( 57, 52), S( 65, 60), S( 71, 65), S(74, 69), S(76, 71), S(78, 73),
       S( 79, 74), S( 80, 75), S( 81, 76), S(81, 76) },
     { S(-20,-36), S(-14,-19), S( -8, -3), S(-2, 13), S( 4, 29), S(10, 46), // Rooks
       S( 14, 62), S( 19, 79), S( 23, 95), S(26,106), S(27,111), S(28,114),
       S( 29,116), S( 30,117), S( 31,118), S(32,118) },
     { S(-10,-18), S( -8,-13), S( -6, -7), S(-3, -2), S(-1,  3), S( 1,  8), // Queens
       S(  3, 13), S(  5, 19), S(  8, 23), S(10, 27), S(12, 32), S(15, 34),
       S( 16, 35), S( 17, 35), S( 18, 35), S(20, 35), S(20, 35), S(20, 35),
       S( 20, 35), S( 20, 35), S( 20, 35), S(20, 35), S(20, 35), S(20, 35),
       S( 20, 35), S( 20, 35), S( 20, 35), S(20, 35), S(20, 35), S(20, 35),
       S( 20, 35), S( 20, 35) }
  };
I suggest to change it to reduce the numbers of every line by
15(for 0 squares),10 (for 1 squares),6 (for 2 squares) 3 (for 3 squares),
1 (for 4 squares)

I wonder if somebody tested this idea or is interested in testing it.
what is the S ()? What is that macro doing? is that changing the values and composing only one of with both?

I cannot comment without knowing that the above is doing, but I agree that mobility should NOT be linear, but the curvature should be the opposite of what you suggest!

It is more critical to have a piece that goes from 0 to 2 squares, than going from 12 to 14.

Miguel
I think that it is exactly what I suggest and I suggested to increase the difference between 0 squares and 2 squares by 15-6=9 units of evaluation and to increase the difference bewtween 2 squares and 4
squares by 6-1=5 units of evaluation.
Then I guess you meant to say to reduce the "absolute number for the score" rather than reducing the "score"?
Anyway, I hope that Ralph got the message correctly. I still do not understand it very well (I cannot match your numbers with the tables above).

Miguel

Note that for big numbers this is already the case in stockfish and there is
practically no difference between knight that control 7 squares and knight that control 8 squares and very little difference between rook that controls 13 squares and rook that control 14 squares.
Yes
There was a misunderstanding.
When I wrote "reduce" I meant lower negative numbers and not lower change in evaluation.

I did not give the exact numbers in my post and only explained the changes that I suggest together with the original numbers in stockfish.
I will give one example and I hope that Ralph understood what I meant correctly

S(-38,-33), S(-25,-23), S(-12,-13), S( 0, -3), S(12, 7), S(25, 17)
that is almost linear in original stockfish for mobility of the knight with 0-4 squares

is going to be changed by my suggestion to

S(-53,-48), S(-35,-33), S(-18,-19), S( -3, -6), S(11, 6),S(25, 17)


I reduce 0 squares by 15 evaluation units,
1 squares by 10 evaluation units,
2 squares by 6 evaluation units
3 squares by 3 evaluation units and
4 squares by 1 evaluation unit when
I do not change the evaluation for 5 squares or more than it.
Ralph Stoesser
Posts: 408
Joined: Sat Mar 06, 2010 9:28 am

Re: mobility evaluation of stockfish

Post by Ralph Stoesser »

Yes, I got it right. No problem for me to understand what you meant.
Michiel Koorn

Re: mobility evaluation of stockfish

Post by Michiel Koorn »

Ralph Stoesser wrote:Experiment finished. After 2000 5 sec self play games there is barely a difference. +516, -507, =976 (+2 Elo) in favor for Uri's values.
Side question: I am using arena and cannot play at shorter time control than 30 sec. At shorter Stockfish performance collapes on time control. What am I doing wrong?
mcostalba
Posts: 2684
Joined: Sat Jun 14, 2008 9:17 pm

Re: mobility evaluation of stockfish

Post by mcostalba »

Michiel Koorn wrote:What am I doing wrong?
You are using the wrong GUI :wink:

It is a known fact that Arena steals time to engines and this causes troubles at fast TC.

It is also a known fact that we are _not_ going to hack SF to workaround this :D
Michiel Koorn

Re: mobility evaluation of stockfish

Post by Michiel Koorn »

mcostalba wrote:
Michiel Koorn wrote:What am I doing wrong?
You are using the wrong GUI :wink:

It is a known fact that Arena steals time to engines and this causes troubles at fast TC.

It is also a known fact that we are _not_ going to hack SF to workaround this :D
What do you suggest?
Ralph Stoesser
Posts: 408
Joined: Sat Mar 06, 2010 9:28 am

Re: mobility evaluation of stockfish

Post by Ralph Stoesser »

Michiel Koorn wrote:
Ralph Stoesser wrote:Experiment finished. After 2000 5 sec self play games there is barely a difference. +516, -507, =976 (+2 Elo) in favor for Uri's values.
Side question: I am using arena and cannot play at shorter time control than 30 sec. At shorter Stockfish performance collapes on time control. What am I doing wrong?
Use the command line tool cutechess-cli for short time control matches.