sunfish icon indicating copy to clipboard operation
sunfish copied to clipboard

illegal move and a potential solution

Open kerbals-repository opened this issue 2 years ago • 1 comments

Sunfish claims that Qf2 is the best move in this position, although it is illegal.

r3n3/7Q/4pkp1/3p2P1/1p1P4/1P3PK1/r3q3/8 b - - 0 63

I therefore thought about changing the can_kill_king function to

def can_kill_king(pos): # If we just checked for opponent moves capturing the king, we would miss # captures in case of illegal castling. return any(pos.value(m) >= sunfish.MATE_LOWER for m in pos.gen_moves()) or any(pos.board[b]=='k' for a,b in pos.gen_moves())

As far as I can see the function works as intended, but the pv function doesn't return any moves in some cases. So, it might be preferable if we also check the returned pv; if it's empty, we can use the prior pv (assuming it will return a pv at depth 1)

kerbals-repository avatar Jul 19 '22 09:07 kerbals-repository

Let me just add a picture of the situation for those who don't speak fluent FEN ☺️ Uploading Screenshot_20220728-101819.png…

thomasahle avatar Jul 28 '22 17:07 thomasahle

This is fixed in the latest sunfish:

~/repos/sunfish (nnue)$ ./sunfish.py
position fen r3n3/7Q/4pkp1/3p2P1/1p1P4/1P3PK1/r3q3/8 b - - 0 63
go
info depth 1 score cp 51 time 2 nodes 6 nps 2813 pv f6g5
info depth 1 score cp 140 time 3 nodes 8 nps 2557 pv f6g5
info depth 1 score cp 98 time 18 nodes 46 nps 2574 pv f6g5
info depth 1 score cp 115 time 19 nodes 49 nps 2579 pv f6g5
info depth 1 score cp 107 time 28 nodes 71 nps 2524 pv f6g5
info depth 2 score cp 112 time 43 nodes 102 nps 2390 pv f6g5

thomasahle avatar Jan 08 '23 01:01 thomasahle