stockfish
9 months agoTurn on MADV_RANDOM for Syzygy mmaps, so that the kernel may know it can reduce the... master
Steinar H. Gunderson [Sat, 24 Nov 2018 10:17:12 +0000 (11:17 +0100)]
Turn on MADV_RANDOM for Syzygy mmaps, so that the kernel may know it can reduce the readahead.

9 months agoMark that we are using a patched version.
Steinar H. Gunderson [Sun, 6 May 2018 10:39:04 +0000 (12:39 +0200)]
Mark that we are using a patched version.

9 months agoAdd support for 7-man Syzygy tablebases.
Steinar H. Gunderson [Tue, 1 May 2018 11:44:33 +0000 (13:44 +0200)]
Add support for 7-man Syzygy tablebases.

9 months agoUpdates for newer protobuf and Stockfish.
Steinar H. Gunderson [Tue, 27 Jun 2017 21:26:08 +0000 (23:26 +0200)]
Updates for newer protobuf and Stockfish.

9 months agoRemove the non-pretty moves from the protobuf, as it takes up a little CPU time for...
Steinar H. Gunderson [Sun, 20 Nov 2016 22:07:51 +0000 (23:07 +0100)]
Remove the non-pretty moves from the protobuf, as it takes up a little CPU time for the JavaScript to decode.

9 months agoSimplify a bit.
Steinar H. Gunderson [Sat, 19 Nov 2016 13:44:50 +0000 (14:44 +0100)]
Simplify a bit.

9 months agoMore build tweaks.
Steinar H. Gunderson [Sat, 19 Nov 2016 13:42:02 +0000 (14:42 +0100)]
More build tweaks.

9 months agoSend back a prettyprinted version of the move on hash probe.
Steinar H. Gunderson [Sat, 19 Nov 2016 11:04:21 +0000 (12:04 +0100)]
Send back a prettyprinted version of the move on hash probe.

9 months agoFix a crash issue when traversing PVs.
Steinar H. Gunderson [Tue, 15 Nov 2016 21:03:15 +0000 (22:03 +0100)]
Fix a crash issue when traversing PVs.

9 months agoLink the protobuf stuff statically.
Steinar H. Gunderson [Mon, 29 Aug 2016 22:08:50 +0000 (00:08 +0200)]
Link the protobuf stuff statically.

9 months agoDeal with Stockfish internal API changes.
Steinar H. Gunderson [Mon, 29 Aug 2016 21:57:02 +0000 (23:57 +0200)]
Deal with Stockfish internal API changes.

9 months agoMake server address into an UCI option.
Steinar H. Gunderson [Mon, 21 Mar 2016 23:48:48 +0000 (00:48 +0100)]
Make server address into an UCI option.

9 months agoMove the hash probe class definition into a header file.
Steinar H. Gunderson [Mon, 21 Mar 2016 23:41:52 +0000 (00:41 +0100)]
Move the hash probe class definition into a header file.

9 months agoDo not fill value if we have no search info.
Steinar H. Gunderson [Mon, 21 Mar 2016 23:23:44 +0000 (00:23 +0100)]
Do not fill value if we have no search info.

9 months agoRefactor the RPC thread into a shutdown-able class.
Steinar H. Gunderson [Mon, 21 Mar 2016 23:21:45 +0000 (00:21 +0100)]
Refactor the RPC thread into a shutdown-able class.

9 months agoAdd a SCORE_NONE.
Steinar H. Gunderson [Mon, 21 Mar 2016 23:13:09 +0000 (00:13 +0100)]
Add a SCORE_NONE.

9 months agoDecode the score into the protobuf.
Steinar H. Gunderson [Sat, 19 Mar 2016 21:36:16 +0000 (22:36 +0100)]
Decode the score into the protobuf.

9 months agoPut the root into a separate place.
Steinar H. Gunderson [Sat, 19 Mar 2016 21:22:57 +0000 (22:22 +0100)]
Put the root into a separate place.

9 months agoPrevent infinite loops on repetitions.
Steinar H. Gunderson [Sat, 19 Mar 2016 21:22:40 +0000 (22:22 +0100)]
Prevent infinite loops on repetitions.

9 months agoReturn the entire PV, and in slightly more parseable form.
Steinar H. Gunderson [Sat, 19 Mar 2016 19:08:53 +0000 (20:08 +0100)]
Return the entire PV, and in slightly more parseable form.

9 months agoGive the proto a package name.
Steinar H. Gunderson [Sat, 19 Mar 2016 15:50:10 +0000 (16:50 +0100)]
Give the proto a package name.

9 months agoReturn all candidate moves from the probe.
Steinar H. Gunderson [Fri, 18 Mar 2016 00:51:35 +0000 (01:51 +0100)]
Return all candidate moves from the probe.

9 months agoDo not use -Wshadow; it is incredibly noisy for protobuf code.
Steinar H. Gunderson [Fri, 18 Mar 2016 00:51:19 +0000 (01:51 +0100)]
Do not use -Wshadow; it is incredibly noisy for protobuf code.

9 months agoWhen returning gRPC probes, report scores from white's perspective.
Steinar H. Gunderson [Thu, 17 Mar 2016 09:45:38 +0000 (10:45 +0100)]
When returning gRPC probes, report scores from white's perspective.

9 months agoWrite out null-move and no move.
Steinar H. Gunderson [Thu, 17 Mar 2016 09:39:14 +0000 (10:39 +0100)]
Write out null-move and no move.

9 months agoMake the bound slightly easier to parse again.
Steinar H. Gunderson [Thu, 17 Mar 2016 01:25:35 +0000 (02:25 +0100)]
Make the bound slightly easier to parse again.

9 months agoMake the client prober output something a bit more easily parseable, and run in a...
Steinar H. Gunderson [Thu, 17 Mar 2016 01:12:13 +0000 (02:12 +0100)]
Make the client prober output something a bit more easily parseable, and run in a loop.

9 months agoRename client.cc to the right extension.
Steinar H. Gunderson [Thu, 17 Mar 2016 01:07:14 +0000 (02:07 +0100)]
Rename client.cc to the right extension.

9 months agoBetter comments and enums in the proto file.
Steinar H. Gunderson [Thu, 17 Mar 2016 01:05:59 +0000 (02:05 +0100)]
Better comments and enums in the proto file.

9 months agoFix a .depend dependency error.
Steinar H. Gunderson [Thu, 17 Mar 2016 00:56:41 +0000 (01:56 +0100)]
Fix a .depend dependency error.

9 months agoRemove some debugging.
Steinar H. Gunderson [Thu, 17 Mar 2016 00:56:14 +0000 (01:56 +0100)]
Remove some debugging.

9 months agoInitial commit for gRPC code.
Steinar H. Gunderson [Wed, 16 Mar 2016 23:18:37 +0000 (00:18 +0100)]
Initial commit for gRPC code.

9 months agoReintroduce tropism to kingdanger
Vizvezdenec [Sat, 24 Nov 2018 01:13:36 +0000 (02:13 +0100)]
Reintroduce tropism to kingdanger

Tropism in kingdanger was simplified away in this pull request #1821.
This patch reintroduces tropism in kingdanger with using quadratic scaling.

Passed STC http://tests.stockfishchess.org/tests/view/5bf7c1b10ebc5902bced1f8f
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 52803 W: 11835 L: 11442 D: 29526

Passed LTC http://tests.stockfishchess.org/tests/view/5bf816e90ebc5902bced24f1
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 17204 W: 2988 L: 2795 D: 11421

How do we continue from there?

I've recently tried to introduce tropism difference term in kingdanger which
passed STC 6 times but failed LTC all the time. Maybe using quadratic scaling
for it will also be helpful.

Bench 4041387

9 months agoRemove the tropism term from kingDanger
31m059 [Sat, 24 Nov 2018 01:09:03 +0000 (02:09 +0100)]
Remove the tropism term from kingDanger

A recent LTC tuning session by @candirufish showed this term decreasing significantly. It appears that it can be removed altogether without significant Elo loss.

I also thank @GuardianRM, whose attempt to remove tropism from king danger inspired this one.

After this PR is merged, my next step will be to attempt to tune the coefficients of this new, simplified kingDanger calculation.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 12518 W: 2795 L: 2656 D: 7067
http://tests.stockfishchess.org/tests/view/5befadda0ebc595e0ae3a289

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 164771 W: 26463 L: 26566 D: 111742
http://tests.stockfishchess.org/tests/view/5befcca70ebc595e0ae3a343

LTC 2, rebased on Stockfish 10 beta:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 75226 W: 12563 L: 12529 D: 50134
http://tests.stockfishchess.org/tests/view/5bf2e8910ebc5902bcecb919

Bench: 3412071

10 months agoForce time check on TB probe in search.
Joost VandeVondele [Mon, 4 Jun 2018 08:31:25 +0000 (10:31 +0200)]
Force time check on TB probe in search.

Because of aggressive time management and optimistic assumptions
about move overhead, it's still very easy to get Stockfish to forfeit
on time when we hit an endgame and have Syzygy EGTB on a spinning
drive. The latency from serving a few thousand EGTB probes (~10ms each),
of which there can currently be up to 4000 outstanding before a time
check, will easily overwhelm the default Move Overhead of 30ms.

This problem was first raised by Gian-Carlo Pascutto and some solutions
and improvements were discussed in the following pull requests:
https://github.com/official-stockfish/Stockfish/pull/1471
https://github.com/official-stockfish/Stockfish/pull/1623
https://github.com/official-stockfish/Stockfish/pull/1783

This patch is a minimal change proposed by Marco Costalba to lower
the impact of the bug. We now force a check of the clock right after
each tablebase read.

No functional change.

10 months agoBonus for restricting opponent's piece moves
xoto10 [Tue, 20 Nov 2018 06:45:00 +0000 (07:45 +0100)]
Bonus for restricting opponent's piece moves

STC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 51883 W: 11297 L: 10915 D: 29671
http://tests.stockfishchess.org/tests/view/5bf1e2ee0ebc595e0ae3cacd

LTC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 15859 W: 2752 L: 2565 D: 10542
http://tests.stockfishchess.org/tests/view/5bf337980ebc5902bcecbf62

Notes:

(1) The bonus value has not been carefully tested, so it may be possible
to find slightly better values.

(2) Plan is to now try adding similar restriction for pawns. I wanted to
include that as part of this pull request, but I was advised to do it as
two separate pull requests. STC is currently running here, but may not add
enough value to pass green.

Bench: 3679086

10 months agoStockfish 10-beta
Stéphane Nicolet [Mon, 19 Nov 2018 10:18:21 +0000 (11:18 +0100)]
Stockfish 10-beta

Preparation commit for the upcoming Stockfish 10 version, giving a chance to catch last minute feature bugs and evaluation regression during the one-week code freeze period. Also changing the copyright dates to include 2019.

No functional change

10 months agoTweak Queen PSQT based on tuned values
SFisGOD [Sat, 10 Nov 2018 12:06:05 +0000 (20:06 +0800)]
Tweak Queen PSQT based on tuned values

STC: (Yellow)
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 63140 W: 13433 L: 13353 D: 36354
http://tests.stockfishchess.org/tests/view/5bed42c90ebc595e0ae37cf5

LTC: (Green)
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 47714 W: 7785 L: 7485 D: 32444
http://tests.stockfishchess.org/tests/view/5bec3b8c0ebc595e0ae36dec

Closes https://github.com/official-stockfish/Stockfish/pull/1816

Bench: 3717396

10 months agoTune evaluation scores
Kurt [Thu, 15 Nov 2018 14:16:18 +0000 (09:16 -0500)]
Tune evaluation scores

STC:
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 84697 W: 18173 L: 18009 D: 48515
http://tests.stockfishchess.org/tests/view/5bea366f0ebc595e0ae34793

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 157625 W: 25533 L: 24893 D: 107199
http://tests.stockfishchess.org/tests/view/5be8b69e0ebc595e0ae33024

Personally, I feel like SF has been tuned to death recently and that we
need to step away from existing-parameter tunes for a bit and focus more
on new ideas. I don't really think there's much more ELO in these tunes
(for now). For me at least, this was the last existing-parameter tune I'll
be running for quite a while. Cheers!

Bench: 3572567

10 months agoRemove BlockedStorm array
protonspring [Mon, 19 Nov 2018 09:37:07 +0000 (10:37 +0100)]
Remove BlockedStorm array

Apparently, only RANK_3 is relevant. This removes a look-up and the
BlockedStorm array, but adds another conditional.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 84340 W: 18054 L: 18054 D: 48232
http://tests.stockfishchess.org/tests/view/5bea10f40ebc595e0ae3457b

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 31874 W: 5135 L: 5032 D: 21707
http://tests.stockfishchess.org/tests/view/5beadb6a0ebc595e0ae35542

Closes https://github.com/official-stockfish/Stockfish/pull/1814

Bench: 3799443

10 months agoSimplify Castle Extension
VoyagerOne [Mon, 19 Nov 2018 09:27:52 +0000 (10:27 +0100)]
Simplify Castle Extension

Remove depth condition in castle extension, also don't extend if
Singular Extension and Check Extansion fail to extend.

STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 42070 W: 9118 L: 9036 D: 23916
http://tests.stockfishchess.org/tests/view/5be899cc0ebc595e0ae32f07

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 78278 W: 12490 L: 12458 D: 53330
http://tests.stockfishchess.org/tests/view/5be8ac420ebc595e0ae33010

Bench: 3611041

10 months agoCode style in search.cpp
protonspring [Fri, 2 Nov 2018 16:49:51 +0000 (10:49 -0600)]
Code style in search.cpp

It does not appear to be not necessary or advantageous to
conditionally initialize kingRing[Us] or kingAttackersCount[Them],
so the 'else' can be removed.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 22873 W: 4923 L: 4804 D: 13146
http://tests.stockfishchess.org/tests/view/5be9a8270ebc595e0ae33c7e

No functional change

10 months agoUpdate a comment in the evaluate.cpp file to reflect recent change
Nikolay Kostov [Mon, 12 Nov 2018 20:15:17 +0000 (22:15 +0200)]
Update a comment in the evaluate.cpp file to reflect recent change

No functional change

10 months agoRook PSQT Tuned
SFisGOD [Sat, 10 Nov 2018 07:03:15 +0000 (15:03 +0800)]
Rook PSQT Tuned

Failed STC (Yellow )
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 56302 W: 12007 L: 11953 D: 32342
http://tests.stockfishchess.org/tests/view/5be69d210ebc595e0ae3185b

Passed 1st LTC (Green)
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 8745 W: 1480 L: 1301 D: 5964
http://tests.stockfishchess.org/tests/view/5be682960ebc595e0ae31818

Failed 2nd LTC (Red)
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 19398 W: 3040 L: 3133 D: 13225
http://tests.stockfishchess.org/tests/view/5be69b840ebc595e0ae31856

Passed 3rd LTC (Green)
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 107516 W: 17342 L: 16858 D: 73316
http://tests.stockfishchess.org/tests/view/5bea879a0ebc595e0ae34d80

Closes https://github.com/official-stockfish/Stockfish/pull/1809

How to continue from there?

The values in the rook table now look a bit strange for a human eye
and are hard to explain, maybe it would be nice to simplify them
by hand and see if we can pass another (clean) double green with a
more regular array.

Bench: 3188070

10 months agoChange default contempt from 21 to 24 centipawns
Vizvezdenec [Fri, 9 Nov 2018 01:02:24 +0000 (04:02 +0300)]
Change default contempt from 21 to 24 centipawns

To top the rating lists and get more interesting middle play, it
is a good habit to set the default contempt to the highest value
that does not regress against contempt=0. We recently decreased
PawnValueEg it is logical that to raise a little bit the default
higher contempt because of the following internal dependency in
line 334 of search.cpp :

````
int ct = int(Options["Contempt"]) * PawnValueEg / 100; // From centipawns
````

STC: contempt=24 passed non-regression vs contempt=0
http://tests.stockfishchess.org/tests/view/5bd6d7f80ebc595e0ae21e14

LTC: contempt=24 passed non-regression LTC vs contempt=0
http://tests.stockfishchess.org/tests/view/5bd6e0980ebc595e0ae21f07

On 2018-11-01, we also tested the effects of contempt=21 and contempt=24
against Stockfish 9, and the net result was neutral:

Contempt 21
ELO: 51.68 +-1.9 (95%) LOS: 100.0%
Total: 40000 W: 9487 L: 3581 D: 26932
http://tests.stockfishchess.org/tests/view/5bdb1a140ebc595e0ae2620a

Contempt 24
ELO: 52.21 +-2.0 (95%) LOS: 100.0%
Total: 40000 W: 9759 L: 3793 D: 26448
http://tests.stockfishchess.org/tests/view/5bdb1b680ebc595e0ae2620d

Bench: 3459874

10 months agoClear TableBase mappings in Search::clear()
Nooby [Sat, 27 Oct 2018 20:12:34 +0000 (04:12 +0800)]
Clear TableBase mappings in Search::clear()

This patch will make possible to free mapped TB files with "ucinewgame" command.

We wrote this patch specifically to address a problem that arose while
running Stockfish with 7-piece tablebases as a kibitzer at TCEC for
extended periods of time across multiple games. It was noted that after
some time, the NPS of the kibitzing Stockfish (which is usually 3x faster
than the Stockfish actually competing) would drop precipitously, eventually
falling to preposterously low numbers until restarted.

Their eval bot basically inputs FEN, go infinite, stop and loop, it probably
didn't do ucinewgame either. As time goes it gradually slowed down and OS
starts to use swap, this is not reasonable since the engine only uses 16GB
hash and the machine has 1TB physical RAM and does nothing else.

Author : noobpwnftw

Closes https://github.com/official-stockfish/Stockfish/pull/1790

No functional change.

10 months agoReplace the PassedDanger array by an equation
protonspring [Wed, 31 Oct 2018 15:05:44 +0000 (09:05 -0600)]
Replace the PassedDanger array by an equation

This equation seems to do as well as the current PassedDanger array.

Master values were: 3, 7, 11, 20
The new values given by the equation are: 3, 6, 11, 18

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 84301 W: 18155 L: 18156 D: 47990
http://tests.stockfishchess.org/tests/view/5bda03180ebc595e0ae2518e

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 7940 W: 1358 L: 1217 D: 5365
http://tests.stockfishchess.org/tests/view/5bdc69880ebc595e0ae27d28

We stopped a LTC run after 70000 games:
LLR: 0.74 (-2.94,2.94) [0.00,4.00]
Total: 70257 W: 11319 L: 11064 D: 47874
http://tests.stockfishchess.org/tests/view/5bdca8420ebc595e0ae281a9

Bench: 3913185

10 months agoRemove redundant king square parameter
mstembera [Sun, 11 Nov 2018 03:49:13 +0000 (19:49 -0800)]
Remove redundant king square parameter

We don't need to pass the king square as an explicit parameter to the functions
king_safety() and do_king_safety() since we already pass in the position.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 69686 W: 14894 L: 14866 D: 39926
http://tests.stockfishchess.org/tests/view/5be84ac20ebc595e0ae3283c

No functional change.

10 months agoSimplify tropism. (#1807)
31m059 [Sun, 11 Nov 2018 21:14:28 +0000 (16:14 -0500)]
Simplify tropism. (#1807)

We calculate tropism as a sum of two factors. The first is the number of squares in our kingFlank and Camp that are attacked by the enemy; the second is number of these squares that are attacked twice. Prior to this commit, we excluded squares we defended with pawns from this second value, but this appears unnecessary. (Doubly-attacked squares near our king are still dangerous.) The removal of this exclusion is a possible small Elo gain at STC (estimated +1.59) and almost exactly neutral at LTC (estimated +0.04).

STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 20942 W: 4550 L: 4427 D: 11965
http://tests.stockfishchess.org/tests/view/5be4e0ae0ebc595e0ae308a0

LTC:
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 56941 W: 9172 L: 9108 D: 38661
http://tests.stockfishchess.org/tests/view/5be4ec340ebc595e0ae30938

Bench: 3813986

10 months agoUpdate list of top CPU contributors
Stephane Nicolet [Thu, 8 Nov 2018 16:09:44 +0000 (17:09 +0100)]
Update list of top CPU contributors

Contributors with >10,000 CPU hours as of November 4, 2018. Thank you!

No functional change

10 months agoPawn and Piece Values Tuned at LTC
SFisGOD [Tue, 6 Nov 2018 17:45:13 +0000 (01:45 +0800)]
Pawn and Piece Values Tuned at LTC

Failed STC
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 27487 W: 5846 L: 5903 D: 15738
http://tests.stockfishchess.org/tests/view/5be1d3190ebc595e0ae2e5b8

Passed 1st LTC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 38503 W: 6270 L: 5999 D: 26234
http://tests.stockfishchess.org/tests/view/5be1f5ef0ebc595e0ae2e750

Passed 2nd LTC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 34016 W: 5584 L: 5326 D: 23106
http://tests.stockfishchess.org/tests/view/5be2a1970ebc595e0ae2f1b4

This pull request lead to an interesting discussion about testing
methodology for Stockfish:
https://github.com/official-stockfish/Stockfish/pull/1804

Bench: 3647775

10 months agofixup
Joost VandeVondele [Wed, 7 Nov 2018 15:55:25 +0000 (16:55 +0100)]
fixup

10 months agoExtension for king moves changing castling rights
Joost VandeVondele [Sat, 3 Nov 2018 14:03:39 +0000 (15:03 +0100)]
Extension for king moves changing castling rights

passed STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 8463 W: 1919 L: 1747 D: 4797
http://tests.stockfishchess.org/tests/view/5be15d510ebc595e0ae2dec6

passed LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 142590 W: 23263 L: 22587 D: 96740
http://tests.stockfishchess.org/tests/view/5be1667b0ebc595e0ae2df2d

Bench: 3607243

10 months agoSimplify mobility danger
Fabian Fichter [Fri, 2 Nov 2018 14:24:14 +0000 (15:24 +0100)]
Simplify mobility danger

Check sign only after adding mobility danger term.

STC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 9090 W: 2001 L: 1856 D: 5233
http://tests.stockfishchess.org/tests/view/5bdc5ee10ebc595e0ae27bc2

LTC
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 123466 W: 19766 L: 19805 D: 83895
http://tests.stockfishchess.org/tests/view/5bdc678e0ebc595e0ae27cf3

bench: 3630207

10 months agoRook tweaks in evaluation
Stéphane Nicolet [Fri, 2 Nov 2018 21:04:43 +0000 (22:04 +0100)]
Rook tweaks in evaluation

Some small changes in evaluation to try to convince Stockfish to centralize
her rooks more in middle game and avoid trapping them in the corners. Joint
work by SFisGOD and snicolet.

STC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 99826 W: 21895 L: 21341 D: 56590
http://tests.stockfishchess.org/tests/view/5bdc3e280ebc595e0ae277df

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 21467 W: 3541 L: 3322 D: 14604
http://tests.stockfishchess.org/tests/view/5bdc9ff30ebc595e0ae28119

Bench: 3631608

10 months agoFix issues from using adjustedDepth too broadly
Joost VandeVondele [Sun, 28 Oct 2018 14:25:15 +0000 (15:25 +0100)]
Fix issues from using adjustedDepth too broadly

The recently committed Fail-High patch (081af9080542a0d076a5482da37103a96ee15f64)
had a number of changes beyond adjusting the depth of search on fail high, with
some undesirable side effects.

1) Decreasing depth on PV output, confusing GUIs and players alike as described in
   issue #1787. The depth printed is anyway a convention, let's consider adjustedDepth
   an implementation detail, and continue to print rootDepth. Depth, nodes, time and
   move quality all increase as we compute more. (fixing this output has no effect on
   play).

2) Fixes go depth output (now based on rootDepth again, no effect on play), also
   reported in issue #1787

3) The depth lastBestDepth is used to compute how long a move is stable, a new move
   found during fail-high is incorrectly considered stable if based on adjustedDepth
   instead of rootDepth (this changes time management). Reverting this passed STC
   and LTC:

   STC
   LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
   Total: 82982 W: 17810 L: 17808 D: 47364
   http://tests.stockfishchess.org/tests/view/5bd391a80ebc595e0ae1e993

   LTC
   LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
   Total: 109083 W: 17602 L: 17619 D: 73862
   http://tests.stockfishchess.org/tests/view/5bd40c820ebc595e0ae1f1fb

4) In the thread voting scheme, the rank of the fail-high thread is now artificially
   low, incorrectly since the quality of the move is much better than what adjustedDepth
   suggests (e.g. if it takes 10 iterations to find VALUE_KNOWN_WIN, it has very low
   depth). Further evidence comes from a test that showed that the move of highest
   depth is not better than that of the last PV (which is potentially of much lower
   adjustedDepth).

   I.e. this test http://tests.stockfishchess.org/tests/view/5bd37a120ebc595e0ae1e7c3
   failed SPRT[0, 5]:

   LLR: -2.95 (-2.94,2.94) [0.00,5.00]
   Total: 10609 W: 2266 L: 2345 D: 5998

   In a running 5+0.05 th 8 test (more than 10000 games) a positive Elo estimate is
   shown (strong enough for a [-3,1], possibly not [0,4]):

   http://tests.stockfishchess.org/tests/view/5bd421be0ebc595e0ae1f315
   LLR: -0.13 (-2.94,2.94) [0.00,4.00]
   Total: 13644 W: 2573 L: 2532 D: 8539
   Elo 1.04 [-2.52,4.61] / LOS 71%

Thus, restore old behavior as a bugfix, keeping the core of the fail-high patch
idea as resolving scheme. This is non-functional for bench, but changes searches
via time management and in the threaded case.

Bench: 3556672

10 months agoCombo
SFisGOD [Wed, 31 Oct 2018 16:48:16 +0000 (00:48 +0800)]
Combo

Combo of two parameter tweaks and tuned values for Queen and ThreatByKing.

STC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 20180 W: 4439 L: 4198 D: 11543
http://tests.stockfishchess.org/tests/view/5bd7b8250ebc595e0ae22e97

LTC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 86312 W: 14106 L: 13685 D: 58521
http://tests.stockfishchess.org/tests/view/5bd803560ebc595e0ae23213

This combo consists of the following:

Queen Value (tuned values)
Iter: 72056, A: 5000, alpha 0.602000, gamma 0.101000, clipping old, rounding deterministic
param: QueenValueMg, best: 2528.91, start: 2528.00
param: QueenValueEg, best: 2687.12, start: 2698.00

ThreatByKing (tuned values)
Green STC (50.8k games)
http://tests.stockfishchess.org/tests/view/5bd1d5a00ebc595e0ae1cbec
LTC (I stopped this test at 71.2k games. It's likely yellow.)
http://tests.stockfishchess.org/tests/view/5bd263e70ebc595e0ae1d77e

WeakUnopposedPawn (tweak) by xoto (https://github.com/xoto10)
Green STC (102.8k games)
http://tests.stockfishchess.org/tests/view/5bd306bb0ebc595e0ae1e146
Yellow LTC (90.8k games)
http://tests.stockfishchess.org/tests/view/5bd3ea660ebc595e0ae1f16b

aspiTune1 (tweak) by vondele (https://github.com/vondele)
Green STC (125.9k games)
http://tests.stockfishchess.org/tests/view/5bd2ae100ebc595e0ae1dab0
Yellow LTC (107.9k games)
http://tests.stockfishchess.org/tests/view/5bd3eb700ebc595e0ae1f16f

Thank you @31m059 (Mark Tenzer) for helping me! Also, thank you very much
for recognizing my efforts. I genuinely appreciate it.

Bench: 3556672

10 months agoTweak of knight PSQT and mobility bonuses
Vizvezdenec [Fri, 26 Oct 2018 12:17:42 +0000 (15:17 +0300)]
Tweak of knight PSQT and mobility bonuses

STC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 16906 W: 3745 L: 3516 D: 9645
http://tests.stockfishchess.org/tests/view/5bd306a40ebc595e0ae1e144

LTC
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 62779 W: 10249 L: 9901 D: 42629
http://tests.stockfishchess.org/tests/view/5bd3188f0ebc595e0ae1e296

Bench 3166402

10 months agoOn main thread: reduce depth after fail high
Guenther Demetz [Fri, 19 Oct 2018 08:33:01 +0000 (10:33 +0200)]
On main thread: reduce depth after fail high

This helps resolving consecutive FH's during aspiration more efficiently

STC:
http://tests.stockfishchess.org/tests/view/5bc857920ebc592439f85765
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 4992 W: 1134 L: 980 D: 2878 Elo +10.72

LTC:
http://tests.stockfishchess.org/tests/view/5bc868050ebc592439f857ef
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 8123 W: 1363 L: 1210 D: 5550 Elo +6.54

No-Regression test with 8 threads, tc=15+0.15:
http://tests.stockfishchess.org/tests/view/5bc874ca0ebc592439f85938
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 24740 W: 3977 L: 3863 D: 16900 Elo +1.60

This was a cooperation between me and Michael Stembera:
-me recognizing SF having problems with resolving FH's efficiently at
high depths, thus starting some tests based on consecutive FH's.
-mstembera picking up the idea with first success at STC & LTC (so full
credits to him!)
-me suggesting how to resolve the issues pinpointed by S.G on PR #1768
and finally restricting the logic to the main thread so that it don't
regresses at multi-thread.

bench: 3314347

10 months agoNUMA for 9 threads or more
Peter Zsifkovits [Tue, 4 Sep 2018 11:36:42 +0000 (13:36 +0200)]
NUMA for 9 threads or more

Enable numa machinery only for STRICTLY MORE than 8 threads. Reason for this
change is that nowadays SMP tests are always done with 8 threads. That is a
problem for multi-socket Windows machines running on fishtest.

No functional change

10 months agoRevert Pull Request #1771, see issue #1785 (#1786)
Günther Demetz [Tue, 23 Oct 2018 16:04:30 +0000 (18:04 +0200)]
Revert Pull Request #1771, see issue #1785 (#1786)

no functional change

bench: 4274207

11 months agoSmall simplification in castling rights
mstembera [Sun, 14 Oct 2018 19:50:31 +0000 (12:50 -0700)]
Small simplification in castling rights

There is no need for a special struct with a static member
to generate castling rights.

No functional change.

11 months agoSimplify check extensions
ElbertoOne [Tue, 2 Oct 2018 07:07:29 +0000 (09:07 +0200)]
Simplify check extensions

Remove the !moveCountPruning condition for check extensions, which seems not necessary.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 22238 W: 4835 L: 4715 D: 12688
http://tests.stockfishchess.org/tests/view/5bb3241a0ebc592439f6d2ac

LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 36593 W: 5898 L: 5802 D: 24893
http://tests.stockfishchess.org/tests/view/5bb34c220ebc592439f6d5dc

Bench: 4274207

11 months agoRandomize draw eval
Joost VandeVondele [Sun, 14 Oct 2018 18:33:24 +0000 (20:33 +0200)]
Randomize draw eval

The patch adds a small random component (+-1) to VALUE_DRAW for the evaluation
of draw positions (mostly 3folds). This random component is not static, but
potentially different for each visit of the node (hence derived from the node
counter). The effect is that in positions with many 3fold draw lines, different
lines are followed at each iteration. This keeps the search much more dynamic,
as opposed to being locked to one particular 3fold.

An example of a position where master suffers from 3fold-blindness and this patch
solves quickly is the famous TCEC game 53:

FEN: 3r2k1/pr6/1p3q1p/5R2/3P3p/8/5RP1/3Q2K1 b - - 0 51

master doesn't see that this is a lost position (draw eval up to depth 50) as
Qf6-e6 d4-d5 (found by patch at depth 23) leads to a loss.

The 3fold-blindness is more important at longer TC, the patch was yellow STC and
LTC, but passed VLTC:

STC
LLR: -2.95 (-2.94,2.94) [0.00,5.00]
Total: 46328 W: 10048 L: 9953 D: 26327
http://tests.stockfishchess.org/tests/view/5b9c0ca20ebc592cf275f7c7

LTC
LLR: -2.95 (-2.94,2.94) [0.00,5.00]
Total: 54663 W: 8938 L: 8846 D: 36879
http://tests.stockfishchess.org/tests/view/5b9ca1610ebc592cf27601d3

VLTC
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 31789 W: 4512 L: 4284 D: 22993
http://tests.stockfishchess.org/tests/view/5b9d1a670ebc592cf276076d

Credit to @crossbr for pointing to this problem repeatedly, and giving the hint
that many draw lines are typical in those situations.

Bench: 4756639

11 months agoCorrectly track down pv even in fail-high case
Guenther Demetz [Mon, 17 Sep 2018 06:42:58 +0000 (08:42 +0200)]
Correctly track down pv even in fail-high case

Currently we update (track up) the pv even in the fail high case.
However most times in such cases the pv in the ply below remains unset
because there we have value == alpha and so finally we see truncated
pv's (=just one move) in fail high cases.
Of course tracking down these pv's (+sending them to the gui) comes at a
certian cost, but no-regression tests passed:

STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 16300 W: 3556 L: 3424 D: 9320
http://tests.stockfishchess.org/tests/view/5b9b73500ebc592cf275ea92

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 202411 W: 32734 L: 32897 D: 136780
http://tests.stockfishchess.org/tests/view/5b9baed10ebc592cf275ef6d

N.B.: Digging also into qsearch was tried in another version but seemed
not to pass the tests. This means that we don't always will get a pv
until the very tips.

No functional change

11 months agoSimplify evaluation of blockers_for_king
Miguel Lahoz [Thu, 20 Sep 2018 07:12:12 +0000 (15:12 +0800)]
Simplify evaluation of blockers_for_king

Currently, we have two evaluation terms which account for pinned pieces.
One is for all pinned pieces in kingDanger computation and another for
just pinned pawns in ThreatByRank. We can increase the relevant bonus
for kingDanger calculation and do away with the ThreatByRank, which
seems to just add more complexity.

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 113353 W: 24299 L: 24356 D: 64698
http://tests.stockfishchess.org/tests/view/5ba348c20ebc592cf2766e61

LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 96458 W: 15514 L: 15511 D: 65433
http://tests.stockfishchess.org/tests/view/5ba398830ebc592cf2767563

At 100k games, I thought it struggles a bit, but some related [0,4]
tests attempting individual tweaks seem to fail:

I tried directly tweaking ThreatByRank:
http://tests.stockfishchess.org/tests/view/5ba3c6300ebc592cf276791c
http://tests.stockfishchess.org/tests/view/5ba3c6190ebc592cf2767917

@Vizveznedec was also recently trying to tweak the same coeffecients
for kingDanger calculation:
http://tests.stockfishchess.org/tests/view/5ba2c7320ebc592cf27664b2
http://tests.stockfishchess.org/tests/view/5ba2c8220ebc592cf27664b8
http://tests.stockfishchess.org/tests/view/5ba2c7880ebc592cf27664b4
http://tests.stockfishchess.org/tests/view/5ba2c7ce0ebc592cf27664b6

Bench: 4648095

11 months agosmall ttCapture simplification.
Joost VandeVondele [Tue, 2 Oct 2018 14:34:40 +0000 (16:34 +0200)]
small ttCapture simplification.

ttCapture can be assigned to only once outside of the main loop. The patch seems
functional at higher depths (seems possible in the case of non-legal TTmoves that
are captures).

passed STC
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 23189 W: 5098 L: 4980 D: 13111
http://tests.stockfishchess.org/tests/view/5bb3822c0ebc592439f6d966

passed LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 10336 W: 1665 L: 1529 D: 7142
http://tests.stockfishchess.org/tests/view/5bb39a190ebc592439f6db8a

unchanged bench: 4312846

11 months agoCombo
31m059 [Mon, 8 Oct 2018 18:43:45 +0000 (14:43 -0400)]
Combo

This PR is a combination of two unrelated [0, 4] patches that appeared promising
but not quite strong enough to pass on their own. The combination initially failed
STC with a positive score after a long run, and the subsequent speculative LTC test
passed.

* tweak_threatOnQueen4 :

Increase the middlegame components of ThreatByMinor[QUEEN]
and ThreatByRook[QUEEN] by 15 each. Bryan's (@crossbr) analysis of CCC Bonus Game 10
inspired several tests on penalizing a queen with limited safe mobility. While
attempting to implement this idea, I noticed that when I did not include the queen's
current square in the calculations, the Elo gains seemed to vanish--and only then did
I have the idea to revisit ThreatByMinor[QUEEN] and ThreatByRook[QUEEN], adding a
corresponding value to each. Without Bryan's work, this test would never have been
submitted. I would also like to recognize the efforts and contributions of @SFisGOD,
who also vigorously worked on this idea.

* Use pure static eval for null move pruning :

This idea was directly re-purposed from a promising test by Jerry Donald Watson
(@jerrydonaldwatson) in August. It was also independently developed and tested by
Stefan Geschwentner (@locutus2) previously.
Thank you all!

STC (failed yellow):
LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 83913 W: 17986 L: 17825 D: 48102
http://tests.stockfishchess.org/tests/view/5bbc59300ebc592439f76aa5

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 137198 W: 22351 L: 21772 D: 93075
http://tests.stockfishchess.org/tests/view/5bbce35f0ebc592439f77639

Bench: 4312846

11 months agoFix two typos in comments
Eduardo Caceres [Fri, 21 Sep 2018 21:18:46 +0000 (23:18 +0200)]
Fix two typos in comments

Note by snicolet: I use this non-functional change patch
as a pretext to correct the wrong bench number I introduced
in the message of the previous commit.

Bench: 4059356

11 months agoRemove essentially unused code
Joost VandeVondele [Thu, 20 Sep 2018 12:50:39 +0000 (14:50 +0200)]
Remove essentially unused code

this was added recently as part of a larger commit, but only changes eval of positions at MAX_PLY depth a little. Can be safely removed:

passed STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 7424 W: 1640 L: 1492 D: 4292
http://tests.stockfishchess.org/html/live_elo.html?5ba3bcbe0ebc592cf27677ff

passed LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 73554 W: 12028 L: 11990 D: 49536
http://tests.stockfishchess.org/html/live_elo.html?5ba397ee0ebc592cf2767556

unchanged Bench: 4248710

11 months agoTwo simplifications in passed pawns evaluation
protonspring [Fri, 14 Sep 2018 15:04:11 +0000 (09:04 -0600)]
Two simplifications in passed pawns evaluation

These two simplifications appear to be affecting and/or offsetting each other.
Neither can be removed independently, but in combination they pass -3,1.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 36391 W: 7888 L: 7795 D: 20708
http://tests.stockfishchess.org/tests/view/5b9bce410ebc592cf275f1b2

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 19513 W: 3237 L: 3114 D: 13162
http://tests.stockfishchess.org/tests/view/5b9c0edf0ebc592cf275f80e

Closes https://github.com/official-stockfish/Stockfish/pull/1769

bench 4059356

11 months agoPawn PSQT Tuned
Rocky640 [Sun, 23 Sep 2018 20:57:57 +0000 (16:57 -0400)]
Pawn PSQT Tuned

Tested against master "Tweak opposite color bishops endgame scaling"
using values from a 100K SPSA with ck=10

Passed STC
http://tests.stockfishchess.org/tests/view/5ba7fe7a0ebc592cf276b971
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 27717 W: 6052 L: 5782 D: 15883

Passed LTC
http://tests.stockfishchess.org/tests/view/5ba815790ebc592cf276bb6b
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 17486 W: 2919 L: 2712 D: 11855

bench: 4441247

11 months agoRemove unneeded branch
Joost VandeVondele [Sun, 24 Jun 2018 16:14:48 +0000 (18:14 +0200)]
Remove unneeded branch

Storing unconditionally the current generation and bound is equivalent to master.
Part of the condition was added as a speed optimization in #429.
Here the branch is fully eliminated.

passed STC single-threaded:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 73515 W: 16378 L: 16359 D: 40778
http://tests.stockfishchess.org/tests/view/5b2fc38c0ebc5902b2e57fd5

passed STC multi-threaded:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 63725 W: 12916 L: 12874 D: 37935
http://tests.stockfishchess.org/tests/view/5b307b8f0ebc5902b2e5895f

The multithreaded test was run after a plausible suggestion by @mstembera that the effect of this could be larger with many cores. The result seems to indicate this doesn't really matter on the 8core architecture abundantly available on fishtest.

No functional change

12 months agoTweak opposite colord bishops endgame scaling.
Vizvezdenec [Mon, 10 Sep 2018 10:02:43 +0000 (12:02 +0200)]
Tweak opposite colord bishops endgame scaling.

Make scale factor dependant on asymmetry of pawn structure.

STC http://tests.stockfishchess.org/tests/view/5b92a2a80ebc592cf2753dd4
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 31490 W: 6870 L: 6587 D: 18033

LTC http://tests.stockfishchess.org/tests/view/5b92f8170ebc592cf2754438
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 54928 W: 8988 L: 8653 D: 37287

This patch shows that SF can use some more complicated endgame heuristics to evaluate endgames better from the distance.

Closes https://github.com/official-stockfish/Stockfish/pull/1767

Bench: 4248710

12 months agoParameter tweaks in PSQT and NMP
ElbertoOne [Mon, 3 Sep 2018 10:15:31 +0000 (12:15 +0200)]
Parameter tweaks in PSQT and NMP

This patch is a combinaison of two parameters tweaks patches which
have failed as strong yellows at LTC recently, by Alain Savard (Rocky640)
and Fabian Fichter (ianfab):
  http://tests.stockfishchess.org/tests/view/5b8a71e60ebc592cf2749b1d
  http://tests.stockfishchess.org/tests/view/5b81ce3b0ebc5902bdbb6585

Passed STC:
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 57200 W: 12392 L: 12008 D: 32800
http://tests.stockfishchess.org/tests/view/5b8d0a5a0ebc592cf274c48f

And LTC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 37215 W: 6233 L: 5962 D: 25020
http://tests.stockfishchess.org/tests/view/5b8d56090ebc592cf274cb53

Closes https://github.com/official-stockfish/Stockfish/pull/1764

Bench: 4136116

---------------

How to continue from there?

The null move reduction formula in line 769 of search.cpp is quite convoluted
and full of mysterious magic constants at the moment, it would certainly be
nice to simplify it and/or gain more Elo from it:

```
Depth R = (  (823 + 67 * depth / ONE_PLY) / 256
           + std::min(int(eval - beta) / 200, 3)) * ONE_PLY;
```

12 months agoUpdate list of authors
Stéphane Nicolet [Mon, 3 Sep 2018 10:46:05 +0000 (12:46 +0200)]
Update list of authors

And also fix some spaces and formatting oddities in the code.

No functional change

12 months agoRe-introduce "keep pawns on both flanks"
Stéphane Nicolet [Sat, 1 Sep 2018 08:39:29 +0000 (10:39 +0200)]
Re-introduce "keep pawns on both flanks"

Re-introduce the "keep pawns on both flanks" idea.

STC yellow:
LLR: -2.95 (-2.94,2.94) [0.00,5.00]
Total: 93279 W: 20175 L: 19853 D: 53251
http://tests.stockfishchess.org/tests/view/5b8a00370ebc592cf274916a

LTC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 11440 W: 1960 L: 1792 D: 7688
http://tests.stockfishchess.org/tests/view/5b8a329f0ebc592cf2749615

Closes https://github.com/official-stockfish/Stockfish/pull/1761

Bench: 4609645

12 months agoLong Diagonal Tweaks
Rocky640 [Fri, 31 Aug 2018 13:30:16 +0000 (09:30 -0400)]
Long Diagonal Tweaks

a) Reduce PSQT values along the long diagonals on non-central squares
and increase the LongDiagonal bonus accordingly. The effect is to penalise
bishops on the long diagonal which can not "see" the 2 central squares.
The "good" bishops still have more or less the same bonus as current master.

b) For a bishop on a central square, because of the "| s" term in the code,
the LongDiagonalBonus was always given. So while being there, remove the "| s"
and compensate the central Bishop PSQT accordingly.

Passed STC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 44498 W: 9658 L: 9323 D: 25517
http://tests.stockfishchess.org/tests/view/5b8992770ebc592cf2748942

Passed LTC
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 63092 W: 10324 L: 9975 D: 42793
http://tests.stockfishchess.org/tests/view/5b89a17a0ebc592cf2748b59

Closes https://github.com/official-stockfish/Stockfish/pull/1760

bench: 4693901

12 months agoRemove PawnsOnBothFlanks
protonspring [Wed, 29 Aug 2018 00:48:45 +0000 (02:48 +0200)]
Remove PawnsOnBothFlanks

It looks like PawnsOnBothFlanks can be removed from initiative().
A barrage of tests seem to confirm that the adjustment to -110
does not gain elo to offset any potential loss by removing
PawnsOnBothFlanks.

STC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 22014 W: 4760 L: 4639 D: 12615
http://tests.stockfishchess.org/tests/view/5b7f50cc0ebc5902bdbb3a3e

LTC
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 40561 W: 6667 L: 6577 D: 27317
http://tests.stockfishchess.org/tests/view/5b801f9f0ebc5902bdbb4467

The barrage of 0,4 tests on the -136 value are in my ps_tunetests branch.
http://tests.stockfishchess.org/tests/user/protonspring

Closes https://github.com/official-stockfish/Stockfish/pull/1751

Bench: 4413173

-------------

How to continue from there?

The fact that endgames with all the pawns on only one flank are
drawish is a well-known chess idea, so it seems quite strange that
this can be removed so easily without losing Elo.

In the past there had been attempts to improve on PawnsOnBothFlanks
with similar concepts (for instance using the pawn span value), but
the tests were at best neutral. Maybe Stockfish is now mature enough
that these refined ideas would work to replace PawnsOnBothFlanks?

12 months agoFix bug with "excludedMove" for probcut
MJZ1977 [Wed, 29 Aug 2018 00:27:47 +0000 (02:27 +0200)]
Fix bug with "excludedMove" for probcut

Bugfix: "excludedMove" has to be skipped in the probcut loop too.
If it is not skipped, the probcut can exit quickly with a wrong return
value corresponding to the excluded move. See the following forum
thread for a discussion:
https://groups.google.com/forum/?fromgroups=#!topic/fishcooking/GGithf_VwSU

STC :
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 17130 W: 3747 L: 3617 D: 9766
http://tests.stockfishchess.org/tests/view/5b8460c40ebc5902bdbb999a

LTC :
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 12387 W: 2064 L: 1930 D: 8393
http://tests.stockfishchess.org/tests/view/5b8466f90ebc5902bdbb9a21

To go further : it can be perhaps useful to tune the singular extension
search parameters.

Closes https://github.com/official-stockfish/Stockfish/pull/1754

Bench: 4308541

12 months agoShrink the hash table of tablebases back to 4096 entries
Steinar H. Gunderson [Wed, 29 Aug 2018 00:00:14 +0000 (02:00 +0200)]
Shrink the hash table of tablebases back to 4096 entries

There is no need to make this as large as 65536 just for the sake of the
single 7-man tablebase that happens to have the key 0xf9247fff. Idea for the
fix by Ronald de Man, who suggested simply to allow more buckets past the end.

We also implement Robin Hood hashing for the hash table, which takes the worst
-case search for full 7-man tablebases down from 68 to 11 probes (Also takes
the average probe length from 2.06 to 2.05). For a table with 8K entries, the
corresponding numbers would be worst-case from 9 to 4, with average from 1.30
to 1.29.

https://github.com/official-stockfish/Stockfish/pull/1747

No functional change

12 months agoRefactor pure static eval code
Ondrej Mosnacek [Tue, 28 Aug 2018 23:22:22 +0000 (01:22 +0200)]
Refactor pure static eval code

This commit tries to make the new pure static eval code more readable by
splitting up the nested assignments into separate lines and making a few
more cosmetic tweaks.

No functional change.

12 months agomake DistanceRing more consistent
protonspring [Mon, 20 Aug 2018 16:29:46 +0000 (10:29 -0600)]
make DistanceRing more consistent

This is a non-functional change. By pre-incrementing minKingPawnDistance
instead of post-incrementing, we can remove this -1.

This also makes DistanceRing more consistent with the rest of stockfish
since it now holds an actual "distance" instead of a less natural distance-1.

In current master, PseudoAttacks[KING][ksq] == DistanceRingBB[ksq][0]
With this patch, it will be PseudoAttacks[KING][ksq] == DistanceRingBB[ksq][1]
ie squares at distance 1 from the king. This is more natural use of distance.

The current array size DistanceRingBB[SQUARE_NB][8] is still OK with the new
definition, because maximum distance between two squares on a chess board is
seven (for example Kh1 and a8).

No functional change.

12 months agoTweak stat bonus formula
Vizvezdenec [Tue, 28 Aug 2018 22:50:55 +0000 (00:50 +0200)]
Tweak stat bonus formula

Tweak stat bonus formula on top of latest elo gain by @snicolet

STC
http://tests.stockfishchess.org/tests/view/5b830a810ebc5902bdbb7e9c
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 27797 W: 6113 L: 5842 D: 15842

LTC
http://tests.stockfishchess.org/tests/view/5b831f2c0ebc5902bdbb8038
LLR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 13655 W: 2294 L: 2099 D: 9262

I think that more elo can be found in tweaks of this parameters so I plan
to further try some "hand-tuning", including increasing/decreasing ratio of
two constants and making bonus assimetric to 0. Thx to @AndyGrant for helping
with github and @jerrydonaldwatson for original idea.

Closes https://github.com/official-stockfish/Stockfish/pull/1748

Bench: 4172767

12 months agoDon't modify Eval with search stats at ttHits
VoyagerOne [Wed, 22 Aug 2018 19:51:20 +0000 (15:51 -0400)]
Don't modify Eval with search stats at ttHits

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 28344 W: 6148 L: 6040 D: 16156
http://tests.stockfishchess.org/tests/view/5b7d6b4e0ebc5902bdbb1914

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 41084 W: 6769 L: 6680 D: 27635
http://tests.stockfishchess.org/tests/view/5b7d7f5b0ebc5902bdbb1b85

Bench: 4457440

13 months agoStore only unchanged static evaluations in TT
Stefan Geschwentner [Mon, 20 Aug 2018 10:06:52 +0000 (12:06 +0200)]
Store only unchanged static evaluations in TT

A recent commit introduced a decrease of the static evaluation of
an inner node dependent on the previous stat score, which finally
was also stored in the transposition table. Now only the unchanged
static evaluation are stored there.

Remark:
For the case that a static evaluation can be retrieved from the
transposition table the value is now used unchanged. Another test
which also applies the modification in this case failed:
http://tests.stockfishchess.org/tests/view/5b7af6df0ebc5902bdbae2f6

STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 6707 W: 1547 L: 1383 D: 3777
http://tests.stockfishchess.org/tests/view/5b7a92df0ebc5902bdbadcf3

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 36203 W: 6046 L: 5781 D: 24376
http://tests.stockfishchess.org/tests/view/5b7abaa10ebc5902bdbadfa9

Closes https://github.com/official-stockfish/Stockfish/pull/1742

Bench: 4457440

13 months agoUse an affine formula to mix stats and eval
Stéphane Nicolet [Fri, 17 Aug 2018 23:23:36 +0000 (01:23 +0200)]
Use an affine formula to mix stats and eval

Follow-up for the previous patch: we use an affine formula to mix stats
and evaluation in search. The idea is to give a bonus if the previous
move of the opponent was historically bad, and a malus if the previous
move of the opponent was historically good.

More precisely, if x is the stat score of the previous move by the opponent,
we implement the following formulas to tweak the evaluation at an internal
node of the tree for our pruning decisions at this node:

if x = 0, use v' = eval(P)
if x > 0, use v' = eval(P) - 5 - x/1024
if x < 0, use v' = eval(P) + 5 - x/1024

For reference, the previous master had this simpler rule:

if x > 0, use v' = eval(P) - 10
if x <= 0, use v' = eval(P)

STC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 29322 W: 6359 L: 6088 D: 16875
http://tests.stockfishchess.org/tests/view/5b76a5980ebc5902bdba957f

LTC:
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 30893 W: 5154 L: 4910 D: 20829
http://tests.stockfishchess.org/tests/view/5b76ca6d0ebc5902bdba9914

Closes https://github.com/official-stockfish/Stockfish/pull/1740

Bench: 4592766

13 months agoMix search stats with evaluation
VoyagerOne [Thu, 16 Aug 2018 21:58:48 +0000 (23:58 +0200)]
Mix search stats with evaluation

Mix search stats with evaluation: if the opponent's move has a good historyStat,
then decrease the evaluation of the internal node a bit for the pruning decisions
during search.

STC;
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 72083 W: 15683 L: 15203 D: 41197
http://tests.stockfishchess.org/tests/view/5b74c3ea0ebc5902bdba7d41

LTC:
LLR: 2.95 (-2.94,2.94) [0.00,5.00]
Total: 29104 W: 4867 L: 4630 D: 19607
http://tests.stockfishchess.org/tests/view/5b7565000ebc5902bdba851b

Closes https://github.com/official-stockfish/Stockfish/pull/1738

Bench: 4514101

-----------

How to continue from there?

• the use of the previous stat score can probably be simplified in lines 587 and 716
• we could try to use a continuous bonus based on the previous stat score, instead
  of just a fixed offset of -10 when the opponent previous move was good.

----------

Comments by Stefan Geschwentner:

Interesting idea. Because only the eval in search is tweak this should only
influence the eval and static eval used at inner nodes, and not on the return
search value (which comes in the end from quiescence search), except through
saving in TT followed by a TT cutoff.

So essentialy this effects diverse pruning/reduction parts -- eval and static
eval  are lowered for good opponent moves:

• tt cutoff (ttValue)
• improving (static eval)
• more razoring (eval)
• less futility pruning (eval)
• less null move pruning (eval + static eval) (but with little more depth)
• more probcut (static eval)
• more move futility pruning (static eval)

13 months agoSimplify king file dependancy in evaluate_shelter()
protonspring [Fri, 17 Aug 2018 08:19:32 +0000 (10:19 +0200)]
Simplify king file dependancy in evaluate_shelter()

Remove the special value we used for the file of the king in the
evaluate_shelter() function, and compensate by tweaking some of
the ShelterStrength[] array values.

STC
LLR: 2.94 (-2.94,2.94) [-3.00,1.00]
Total: 17069 W: 3782 L: 3652 D: 9635
http://tests.stockfishchess.org/tests/view/5b75eb0d0ebc5902bdba8f3d

LTC
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 42639 W: 6973 L: 6887 D: 28779
http://tests.stockfishchess.org/tests/view/5b75fd7f0ebc5902bdba906b

Closes https://github.com/official-stockfish/Stockfish/pull/1739

Bench: 4639508

13 months agoDouble weight of capture history
Stéphane Nicolet [Tue, 14 Aug 2018 07:24:26 +0000 (09:24 +0200)]
Double weight of capture history

We double in this patch the weight of the capture history table in the
local scoring of captures for move ordering.

The capture history table is indexed by the triplet (capturing piece,
capture square, captured piece) and gets information like "it seems to
have been historically good in that part of the search tree to capture
a pawn with a rook on g3, even if it seems to lose material", and affect
the normaly pure « Most Valuable Victim » ordering of captures.

Finished yellow at STC after 228842 games (posting a +1.36 Elo gain):
LLR: -2.95 (-2.94,2.94) [0.00,4.00]
Total: 228842 W: 50894 L: 50152 D: 127796
http://tests.stockfishchess.org/tests/view/5b714bb00ebc5902bdba332d

Passed LTC:
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 43251 W: 7425 L: 7131 D: 28695
http://tests.stockfishchess.org/tests/view/5b71c7d40ebc5902bdba3e51

Thanks to user Vizvezdenec for running the LTC test.

Closes https://github.com/official-stockfish/Stockfish/pull/1736

Bench: 4272361

13 months agoRemove pawncount array in imbalance
Alain SAVARD [Tue, 14 Aug 2018 06:31:56 +0000 (08:31 +0200)]
Remove pawncount array in imbalance

This is a natural follow up to last commit where values on the
QuadraticOurs diagonal and some piece value deltas were changed.
@Stefano80 tried to simplify the newly introduced pawncount array
using QuadraticOurs[1][1] =52 and a -30 adjustment on pawn values

His STC [-3,1] was green
http://tests.stockfishchess.org/tests/view/5b707f5b0ebc5902bdba2745
but not his LTC[-3,1]
http://tests.stockfishchess.org/tests/view/5b7095700ebc5902bdba2a49

So I started a 80000 30+0.3 SPSA on the QuadraticOurs diagonal and
on the piece values using @Stefano80 start values.

SPSA gave the new values QuadraticOurs[1][1] =38 and a -33 on pawn
values (the other changes on QuadraticOurs were kept, but were not
ignificant according to this test
http://tests.stockfishchess.org/tests/view/5b710ccb0ebc5902bdba2f27)

STC
http://tests.stockfishchess.org/tests/view/5b710b220ebc5902bdba2f19
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 50902 W: 11214 L: 11150 D: 28538

LTC
http://tests.stockfishchess.org/tests/view/5b7124ef0ebc5902bdba3106
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 34271 W: 5852 L: 5753 D: 22666

Closes https://github.com/official-stockfish/Stockfish/pull/1735

bench: 4738555

13 months agoNon-linear bonus for pawn count
GuardianRM [Sun, 12 Aug 2018 16:40:03 +0000 (18:40 +0200)]
Non-linear bonus for pawn count

This patch introduces a non-linear bonus for pawns, along with some
(linear) corrections for the other pieces types.

The original values were obtained by a massive non-linear tuning of both
pawns and other pieces by GuardianRM, while Alain Savard and Chris Cain
later simplified the patch by observing that, apart from the pawn case, the
tuned corrections were in fact almost affine and could be incorporated in
our current code base via the piece values in types.h (offset) and the diagonal
of the quadratic matrix (slope). See discussion in PR#1725 :
https://github.com/official-stockfish/Stockfish/pull/1725

STC:
LLR: 2.97 (-2.94,2.94) [0.00,5.00]
Total: 42948 W: 9662 L: 9317 D: 23969
http://tests.stockfishchess.org/tests/view/5b6ff6e60ebc5902bdba1d87

LTC:
LLR: 2.97 (-2.94,2.94) [0.00,5.00]
Total: 19683 W: 3409 L: 3206 D: 13068
http://tests.stockfishchess.org/tests/view/5b702dbd0ebc5902bdba216b

How to continue from there?
- Maybe the non-linearity for the pawn value could be somewhat tempered
  again and a simpler linear correction for pawns would work?

Closes https://github.com/official-stockfish/Stockfish/pull/1734

Bench: 4681496

13 months agoCombo of several promising parameter tweaks
Stefano Cardanobile [Sun, 12 Aug 2018 08:02:51 +0000 (10:02 +0200)]
Combo of several promising parameter tweaks

Combo of several tuning patches which finished yellow at LTC.

[STC](http://tests.stockfishchess.org/tests/view/5b6ead340ebc5902bdba14ce)
LR: 2.95 (-2.94,2.94) [0.00,4.00]
Total: 10668 W: 2445 L: 2239 D: 5984
Elo: 6.25 [1.76,10.69] (95%)

[LTC](http://tests.stockfishchess.org/tests/view/5b6eb50e0ebc5902bdba151f)
LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 23761 W: 4155 L: 3923 D: 15683
Elo: 3.02 [0.29,5.67] (95%)

Original patches:
- [Piece values](http://tests.stockfishchess.org/tests/view/5b6d2cc00ebc5902bdba02d5) by Stefano Cardanobile
- [Stat bonus](http://tests.stockfishchess.org/tests/view/5b6adbc90ebc5902bdb9da73) by Stefan Geschwentner
- [Rook on pawn](http://tests.stockfishchess.org/tests/view/5b62a95b0ebc5902bdb961c0) by Mark Tenzer
- [Hanging bonus](http://tests.stockfishchess.org/tests/view/5b5d2fa00ebc5902bdb90855) by Ivan Ilvec
- [ss tweak](http://tests.stockfishchess.org/tests/view/5b58b7240ebc5902bdb89025) by miguel-l

Bench: 4694813

13 months agoSimple razoring: depth 1 only, no distinction between PV / NonPV
Jerry Donald Watson [Sun, 12 Aug 2018 07:47:30 +0000 (09:47 +0200)]
Simple razoring: depth 1 only, no distinction between PV / NonPV

We simplify the razoring logic by applying it to all nodes at depth 1 only.
An added advantage is that only one razor margin is needed now, and we treat
PV and Non-PV nodes in the same manner.

How to continue?
- There may be some conditions in which depth 2 razoring is beneficial.
- We can see whether the razor margin can be tuned, perhaps even with a
  different value for PV nodes.
- Perhaps we can unify the treatment of PV and Non-PV nodes in other parts
  of the search as well.

STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 5474 W: 1281 L: 1127 D: 3066
http://tests.stockfishchess.org/tests/view/5b6de3b20ebc5902bdba0d1e

LTC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 62670 W: 10749 L: 10697 D: 41224
http://tests.stockfishchess.org/tests/view/5b6dee340ebc5902bdba0eb0

In addition, we ran a fixed LTC test against a similar patch which also
passed SPRT [-3, 1]:

ELO: 0.23 +-2.1 (95%) LOS: 58.6%
Total: 36412 W: 6168 L: 6144 D: 24100
http://tests.stockfishchess.org/tests/view/5b6e83940ebc5902bdba1485

We are opting for this patch as the more logical and simple of the two,
and it appears to be no less strong. Thanks in particular to @DU-jdto
for input into this patch.

Bench: 4476945

13 months agoRemove Condition For Passed Pawns
Miguel Lahoz [Thu, 9 Aug 2018 14:04:36 +0000 (22:04 +0800)]
Remove Condition For Passed Pawns

Currently, we do not consider pawns passed if there is another pawn of
the same color in front of them. It appears that this condition is not
necessary. The idea is that the doubled pawns are likely to be weak and
one of them will be likely captured anyway. On the other hand, if we do
somehow manage to promote a pawn, then the pawn behind it becomes passed
as well. In any case, the end result is we end up with an extra
potentially passed pawn. The current evaluation for passed pawns already
handles this case by also scaling down this effect.

STC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 28291 W: 6287 L: 6178 D: 15826
http://tests.stockfishchess.org/tests/view/5b6c4b960ebc5902bdb9f256

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 30717 W: 5256 L: 5151 D: 20310
http://tests.stockfishchess.org/tests/view/5b6c82980ebc5902bdb9f863

Bench: 4938285

13 months agoLMR simplification
Stefan Geschwentner [Wed, 8 Aug 2018 07:45:58 +0000 (09:45 +0200)]
LMR simplification

Unify the "quiet" and "non-quiet" reduction rules for use at any kind of moves.
The idea behind it was that both rules reduce at similiar cases in master:
one directly for late previous moves and the other indirectly by using a
bad stat score which is used for most move sorting and so approximates the
late move condition.

For captures/promotions the old rule was triggered in 25% but the new
rule only for 3% of all cases (so now more reductions are done, whereas
for quiet moves reductions keep the same level).

STC:
LLR: 2.95 (-2.94,2.94) [-3.00,1.00]
Total: 162327 W: 35976 L: 36134 D: 90217
http://tests.stockfishchess.org/tests/view/5b6a9a430ebc5902bdb9d5c1

LTC:
LLR: 2.96 (-2.94,2.94) [-3.00,1.00]
Total: 29570 W: 5083 L: 4976 D: 19511
http://tests.stockfishchess.org/tests/view/5b6bc5d00ebc5902bdb9e9d6

Bench: 4526980

13 months agoFirst check threshold in space evaluation
Stefano Cardanobile [Wed, 8 Aug 2018 12:27:28 +0000 (14:27 +0200)]
First check threshold in space evaluation

Currently, we first calculate some bitboards at the top of Evaluation::space()
and then check whether we actually need them. Invert the ordering. Of course this
does not make a difference in current master because the constexpr bitboard
calculations are in fact done at compile time by any decent compiler, but I find
my version a bit healthier since it will always meet or exceed current implementation
even if we eventually change the spaceMask to something not contsexpr.

No functional change.

13 months agoKing Psqt Tuning
FauziAkram [Wed, 8 Aug 2018 15:48:06 +0000 (17:48 +0200)]
King Psqt Tuning

After a session of tuning for King Psqt I got some new values, which was later
tweaked manually by me Fauzi, to result in an Elo-gain patch which seems to scale
pretty well:

STC: LLR: -2.96 (-2.94,2.94) [0.00,4.00]
Total: 100653 W: 22550 L: 22314 D: 55789 [Yellow patch]

LTC: LLR: 2.96 (-2.94,2.94) [0.00,4.00]
Total: 147079 W: 25584 L: 24947 D: 96548 [Green Patch]

Bench: 4669050

13 months agoIntroduce voting system for best move selection
Stefano Cardanobile [Wed, 4 Jul 2018 19:54:38 +0000 (21:54 +0200)]
Introduce voting system for best move selection

Introduce voting system for best move selction in multi-threads mode.
Joint work with Stefan Geschwentner, based on ideas introduced by
Michael Stembera.

Moves are upvoted by every thread using the margin to the minimum score
across threads and the completed depth.

First thread voting for the winner move is selected as best thread.

Passed STC, LTC. A further LTC test with only 4 threads failed with positive
score. A LTC with 31 threads was stopped with LLR 0.77 after 25k games to
avoid use of excessive resources (equivalent to 1.5M STC games).

Similar ideas were proposed by Michael Stembera 2 years ago #507, #508.
This implementation seems simpler and more understandable, the results
slightly more promising.

Further possible work:

1) Tweak of the formula using for assigning votes.
2) Use a different baseline for the score dependent part: maximum score
or winning probability could make more sense.
3) Assign votes in `Thread::Search` as iterations are completed and use
voting results to stop search.
4) Select best thread as the threads voting for best move with the highest
completed depth or, alternatively, vote on PV moves.

Link to SPRT tests

[stopped LTC, 31 threads 20+0.02](http://tests.stockfishchess.org/tests/view/5b61dc090ebc5902bdb95192)
LLR: 0.77 (-2.94,2.94) [0.00,5.00]
Total: 25602 W: 3977 L: 3850 D: 17775
Elo: 1.70 [-0.68,4.07] (95%)

[passed LTC, 8 threads 20+0.02](http://tests.stockfishchess.org/tests/view/5b5df5180ebc5902bdb9162d)
LLR: 2.96 (-2.94,2.94) [0.00,5.00]
Total: 44478 W: 7602 L: 7300 D: 29576
Elo: 1.92 [-0.29,3.94] (95%)

[failed LTC, 4 threads 20+0.02](http://tests.stockfishchess.org/tests/view/5b5f39ef0ebc5902bdb92792)
LLR: -2.94 (-2.94,2.94) [0.00,5.00]
Total: 29922 W: 5286 L: 5285 D: 19351
Elo: 0.48 [-1.98,3.10] (95%)

[passed STC, 4 threads 5+0.05](http://tests.stockfishchess.org/tests/view/5b5dbf0f0ebc5902bdb9131c)
LLR: 2.97 (-2.94,2.94) [0.00,5.00]
Total: 9108 W: 2033 L: 1858 D: 5217
Elo: 6.11 [1.26,10.89] (95%)

No functional change (in simple threat mode)

13 months agoImprove Stats definition
Marco Costalba [Sat, 28 Jul 2018 13:33:39 +0000 (15:33 +0200)]
Improve Stats definition

Use operator const T&() instead of operator T() to avoid possible
costly hidden copies of non-scalar nested types.

Currently StatsEntry has a single member T, so assuming
sizeof(StatsEntry) == sizeof(T) it happens to work, but it's
better to use the size of the proper entry type in std::fill.
Note that current code works because std::array items are ensured
to be allocated in contiguous memory and there is no padding among
nested arrays. The latter condition does not seem to be strictly
enforced by the standard, so be careful here.

Finally use address-of operator instead of get() to fully hide the
wrapper class StatsEntry at calling sites. For completness add
the arrow operator too and simplify the C++ code a bit more.

Same binary code as previous master under the Clang compiler.

No functional change.