Page 1 of 2

New Stockfish contempt

Posted: Mon Jan 29, 2018 1:57 pm
by Jouni
It's stunning, that You get +30 ELO with about 10 lines of code! But something must be changed in analysis mode. After 1.e4 SF shows negative evalution e.g. black is better:

Analysis by Stockfish 230118 64 BMI2:

1...e6 2.d4 d5 3.Nd2 c5 4.exd5 exd5 5.Ngf3 Nf6 6.Bb5+ Bd7 7.Bxd7+ Nbxd7 8.0-0 Be7 9.dxc5 Nxc5 10.Nb3 Nce4 11.Nfd4 0-0 12.Nf5 Re8 13.Nxe7+ Rxe7 14.Be3 b6 15.a4 Qc7 16.a5 Rae8 17.axb6 axb6 18.Re1 Nd6 19.Nd4 Nc4
= (-0.11) Depth: 29/43 00:00:44 273mN

This isn't correct behaviour.

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 2:17 pm
by zullil
Jouni wrote:It's stunning, that You get +30 ELO with about 10 lines of code! But something must be changed in analysis mode. After 1.e4 SF shows negative evalution e.g. black is better:

Analysis by Stockfish 230118 64 BMI2:

1...e6 2.d4 d5 3.Nd2 c5 4.exd5 exd5 5.Ngf3 Nf6 6.Bb5+ Bd7 7.Bxd7+ Nbxd7 8.0-0 Be7 9.dxc5 Nxc5 10.Nb3 Nce4 11.Nfd4 0-0 12.Nf5 Re8 13.Nxe7+ Rxe7 14.Be3 b6 15.a4 Qc7 16.a5 Rae8 17.axb6 axb6 18.Re1 Nd6 19.Nd4 Nc4
= (-0.11) Depth: 29/43 00:00:44 273mN

This isn't correct behaviour.
Switch to Cfish: https://github.com/syzygy1/Cfish/commit ... 6f6e0378a9

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 3:52 pm
by Nordlandia
Set contempt=0 for analysis, case solved :wink:

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 5:02 pm
by MikeGL
Jouni wrote:It's stunning, that You get +30 ELO with about 10 lines of code! But something must be changed in analysis mode. After 1.e4 SF shows negative evalution e.g. black is better:

Analysis by Stockfish 230118 64 BMI2:

1...e6 2.d4 d5 3.Nd2 c5 4.exd5 exd5 5.Ngf3 Nf6 6.Bb5+ Bd7 7.Bxd7+ Nbxd7 8.0-0 Be7 9.dxc5 Nxc5 10.Nb3 Nce4 11.Nfd4 0-0 12.Nf5 Re8 13.Nxe7+ Rxe7 14.Be3 b6 15.a4 Qc7 16.a5 Rae8 17.axb6 axb6 18.Re1 Nd6 19.Nd4 Nc4
= (-0.11) Depth: 29/43 00:00:44 273mN

This isn't correct behaviour.
I knew it! French gives black a slight advantage.

But in a serious note. I guess -0.1 still means equal, but assumes black already equalized his 1 move disadvantage.

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 5:17 pm
by jhellis3
This isn't correct behaviour.
Yes, it is. Contempt of 20 is being applied to black meaning that Black will play "inferior" moves up to that point. However, to accomplish this the scores are shifted by that amount. So you have -0.11 + 0.20 = 0.09 as the actual eval. But if SF scored it this way, then Black would be happy with a 3-fold, which the whole idea of contempt is to avoid. *Note if contempt were only applied from White's perspective, the eval would be shifted to 0.29 making a 3-fold even more desirable for Black.

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 7:33 pm
by Eelco de Groot
jhellis3 wrote:
This isn't correct behaviour.
Yes, it is. Contempt of 20 is being applied to black meaning that Black will play "inferior" moves up to that point. However, to accomplish this the scores are shifted by that amount. So you have -0.11 + 0.20 = 0.09 as the actual eval. But if SF scored it this way, then Black would be happy with a 3-fold, which the whole idea of contempt is to avoid. *Note if contempt were only applied from White's perspective, the eval would be shifted to 0.29 making a 3-fold even more desirable for Black.
I think that seems to be accurate but to some this is an offending bug in Stockfish. It may however only need some getting used to :P

In your line of reasoning, the contempt now (here, after 1. e4) helps Black find better moves ('push a little harder' you could say) The scores are not really relevant, only the moves matter. If you now go back to the start position, (having analyzed position after 1. e4), contempt is now for White and White will be pushing a little harder. The score may go up but important is only that Black's moves do not get lost. The back and forth process should smooth things out. Only the moves matter. This is why you do the back and forth in the first place: to find better moves. Now it might be that you can speed this up a little bit, by both sides having contempt on (this would need a code change), but if this were so, then a Stockfish with both sides contempt would also play better against a Stockfish with no contempt.

Although I have not seen anyone actually try this, to me it is a bit implausible. So, in my opinion, it may well be that this (present situation) is actually better than analyzing without contempt even positions scoring around zero. For winning positions I think there is little doubt you don't need to switch contempt off or have double contempt. But this is just a preliminary standpoint. The case becomes stronger because of the really unexpected increase in Elo

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 8:36 pm
by jhellis3
Ideally, we would de-contempt the score before outputting to UCI. This would allow SF to use contempt but still display the objective score of the position.

That would solve any scoring inconsistency issues with automated analysis (though it seems rather a mountain out of molehill to me).

Separately, we should probably do something like this to resolve any internal TT value issues:

https://github.com/snicolet/Stockfish/c ... ea838b7e95

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 8:45 pm
by Ovyron
Nordlandia wrote:Set contempt=0 for analysis, case solved :wink:
No! Don't turn it off!

What Eelco de Groot says is true: what matters is what moves are chosen by the engine, not their scores, and Stockfish outputs better moves with higher Contempt, I have used this since the new Contempt was implemented (note, this Contempt isn't new, it has been out for a while, what is new is that it's the default), and the higher Contempt stands in correspondence time controls.

Is 20 too high? No, actually, you can actually go higher as long as you interact and compare the analysis with other engines. Actually.

This is also true for Komodo and Houdini.

Houdini has a very interesting implementation of Contempt, it seems to detect what side is winning and try to apply Contempt to this side, so you can see really huge swings of evaluations as Houdini goes from liking one side, to liking the other in the next ply.

With Contempt you don't want to analyze both sides of the board, though. If you have analyzed from the white side, what you need to do to have a consistent analysis from the black side is to reverse contempt (say, switch to -20 when you switch sides.) But then you might miss comebacks from this side.

So what you really want to do is have two different Stockfishes loaded in different GUIs, one only analyzes the white side and provides optimistic scores for this, the other only analyzes the black side and does as such for black.

This has been like this for Komodo for a while, and you actually have to create different personalities for Komodo's white side and for Komodo's black side in your GUI.

I'm not sure a checkbox that would apply the 0.20 Centipawns as score shifts so the engine would show consistent scores for white and black would work. First, because, really, white and black should be using differen trees:

White assumes black will play defensively and try to draw, black assumes white will play defensively and try to draw, this produces better moves for both sides. Second, even with a Contempt of 40, Stockfish is showing scores of 0.00 for drawn positions, if all the ideas are refuted by the opponent, this would translate to a score of -0.40 for those equal positions, or a change to a worse move if there's some really -0.39 move that the engine would prefer, wrongly.

Users just need to learn about this concept of using different instances of Stockfish depending on the side of the board they analyze, and to propagate different scores for white and black's viewpoints.

Re: New Stockfish contempt

Posted: Mon Jan 29, 2018 11:52 pm
by mjlef
It is great that Stockfish has a better form of Contempt now. But switching sides without reversing the Contempt sign is going to fill the hash with contradictory information if it applies contempt to the side to move. Komodo turns off Contempt in analysis mode, unless the "White Contempt" is on. Then it uses Contempt in regular play and analysis, but applies the Contempt number .com white's point of view, switching it as needed for black. This lets you use it in analysis mode without switching analysis side messing up the hash.

Re: New Stockfish contempt

Posted: Tue Jan 30, 2018 1:24 am
by syzygy
mjlef wrote:It is great that Stockfish has a better form of Contempt now. But switching sides without reversing the Contempt sign is going to fill the hash with contradictory information if it applies contempt to the side to move. Komodo turns off Contempt in analysis mode, unless the "White Contempt" is on. Then it uses Contempt in regular play and analysis, but applies the Contempt number .com white's point of view, switching it as needed for black. This lets you use it in analysis mode without switching analysis side messing up the hash.
And the hash getting messed up is not the only problem. Contempt switching sign during analysis whenever a move is made on the board doesn't seem very useful to me, either.

Unfortunately many are convinced that this is the best way "to explore active possibilities for both sides" (even though current contempt basically just tries to keep pieces on the board, if need be by closing the position), so it's probably not going to change.