Page 14 of 14

Re: Position causes StockFish and Komodo to crash.

Posted: Tue Dec 22, 2020 8:57 pm
by Michel
Ajedrecista wrote: Tue Dec 22, 2020 8:07 pm Hello again:
Michel wrote: Tue Dec 22, 2020 7:37 pm Thanks. It seems I was wrong. In your position SF does find the ep move. Then I wonder why it does not consider the ep move in the parentless position...
The key could be in movegen.cpp. There is a three-line comment at current lines 159-161:

Code: Select all

// An en passant capture can be an evasion only if the checking piece
// is the double pushed pawn and so is in the target. Otherwise this
// is a discovery check and we are forced to do otherwise.
Which might explain the feature. A programmer opinion is valuable since I am not a programmer.

Regards from Spain.

Ajedrecista.
Thanks. That explains it, it seems. In order to find the ep move in the parentless positions (which some people will regard as illegal) SF would have to do a little bit more work in every position in check with an ep square.

I strongly doubt that this micro optimization brings any Elo.

Re: Position causes StockFish and Komodo to crash.

Posted: Tue Dec 22, 2020 9:04 pm
by Michel
Joerg Oster wrote: Tue Dec 22, 2020 8:55 pm
Michel wrote: Tue Dec 22, 2020 8:48 pm
Joerg Oster wrote: Tue Dec 22, 2020 7:55 pm
Michel wrote: Tue Dec 22, 2020 7:37 pm Thanks. It seems I was wrong. In your position SF does find the ep move. Then I wonder why it does not consider the ep move in the parentless position...
Why generating an illegal move?
Why do you consider the ep move illegal?
Because this kind of move can NEVER occur in a legal game of chess.
So I can only conclude it must be an illegal move.

The illegal position makes it look like a valid move, doesn't it? :D
Whether you consider such a position as legal or not is a matter of definition. I would regard it as legal.

Do you think engines (or GUIs) should refuse on principle to play the wild/5 starting position on FICS, simply because it cannot be reached from the official starting position?

Re: Position causes StockFish and Komodo to crash.

Posted: Tue Dec 22, 2020 11:23 pm
by MikeB
Michel wrote: Tue Dec 22, 2020 9:04 pm
Joerg Oster wrote: Tue Dec 22, 2020 8:55 pm
Michel wrote: Tue Dec 22, 2020 8:48 pm
Joerg Oster wrote: Tue Dec 22, 2020 7:55 pm
Michel wrote: Tue Dec 22, 2020 7:37 pm Thanks. It seems I was wrong. In your position SF does find the ep move. Then I wonder why it does not consider the ep move in the parentless position...
Why generating an illegal move?
Why do you consider the ep move illegal?
Because this kind of move can NEVER occur in a legal game of chess.
So I can only conclude it must be an illegal move.

The illegal position makes it look like a valid move, doesn't it? :D
Whether you consider such a position as legal or not is a matter of definition. I would regard it as legal.

Do you think engines (or GUIs) should refuse on principle to play the wild/5 starting position on FICS, simply because it cannot be reached from the official starting position?
That is the programmer's choice (GUI and Engine) , not the user's choice. Regardless of principle, it is up to the user to find an engine that plays wild/5 if that is his desire.

Re: Position Causes Stockfish and Komodo To Crash

Posted: Tue Dec 22, 2020 11:44 pm
by syzygy
Michel wrote: Tue Dec 22, 2020 10:36 am An interesting issue here https://github.com/official-stockfish/S ... ssues/3270

SF move generation assumes (correctly it seems) that in a game an escape move can never be an ep move. But of course one can create positions (without parent) in which there is an escape move which is indeed an ep move.

[d]8/8/8/1k6/3Pp3/8/8/4KQ2 b - d3 0 1
Since the position is illegal, who is to say that the generated set of moves is incomplete? We can simply define that the ep move is illegal for this illegal position.

More "serious" are illegal positions which trigger undefined behaviour.

Btw, ep moves in legal positions can be escape moves, and SF generates those.

Re: Position causes StockFish and Komodo to crash.

Posted: Wed Dec 23, 2020 12:27 am
by syzygy
Ajedrecista wrote: Tue Dec 22, 2020 8:07 pm The key could be in movegen.cpp. There is a three-line comment at current lines 159-161:

Code: Select all

// An en passant capture can be an evasion only if the checking piece
// is the double pushed pawn and so is in the target. Otherwise this
// is a discovery check and we are forced to do otherwise.
Which might explain the feature. A programmer opinion is valuable since I am not a programmer.
The "and we are forced to do otherwise" part seems a bit puzzling.

Let's see. If the position has ep rights, the checking move must be the double pawn push (e.g. d2d4). Like any other regular move, a double pawn push gives check either by attacking the enemy king with the piece that is moved or by unblocking a sliding attack at the enemy king (discovered check).

If the pawn attacks the enemy king, an en passant capture is a potentially legal evasion move and should therefore be generated.

If the double pawn unblocked a sliding attack, an en passant capture can be an evasion move only if it blocks the sliding attack. This can only be the case if the en passant square (e.g. d3) blocks the same sliding attack that was blocked by the original square of the doubly-pawn-pushed pawn (d2). But if these squares (d2 and d3) blocked the same sliding attack, it was also still blocked by the doubly-pawn-pushed pawn at its destination square (d4). In other words, an en passant capture can never evade a discovered check.

Re: Position causes StockFish and Komodo to crash.

Posted: Wed Dec 23, 2020 12:43 am
by Sesse
Michel wrote: Tue Dec 22, 2020 8:57 pm I strongly doubt that this micro optimization brings any Elo.
It's been there since the very first Stockfish commit (import of Glaurung 2.1). Perhaps this is a good chance to get a commit in as a simplification? =)