Skip to content

Commit

Permalink
- 1手詰めを特殊な条件で見逃すことがあるのを修正。(圧倒的勝勢で次善手を指すので勝敗には影響なさそうなのだが)
Browse files Browse the repository at this point in the history
現象が再現できるUSI入力
```
isready
position startpos moves 7g7f 8b5b 2g2f 5a6b 3i3h 6b7b 5i6h 7b8b 2f2e 3c3d 9g9f 5c5d 6h7h 5d5e 2e2d 2c2d 2h2d 4a3b 2d2h P*2c 9f9e 7a7b 6g6f 5e5f 5g5f 5b5f 7h6g 5f5a 7i6h 6c6d 6g7h 3a4b 4g4f 4b5c 3h4g 2b4d 4i5h 5c5d 5h6g 7c7d 2h5h 7b6c 4f4e 4d3c 8h7g 6a7b 4g4f P*5e 7h8h 8a7c 6i7h 4c4d 4e4d 3c4d P*4e 4d3c 3g3f 6d6e 6f6e 7c8e 7g8f 5d6e P*6f 6e5f P*5b 5a5b 6g5f 5e5f P*5e G*4g 5h5f 4g4f 5f4f 5b5e P*5f 5e5a 4e4d S*6i 7h7i 6i5h+ 4f4e 8c8d 4d4c+ 3c6f S*7g 8e7g+ 6h7g 6f5g+ 4c3b S*6g G*7h P*6f N*6d 5a6a 6d7b+ 6c7b 4e4c+ 6g7h+ 7i7h N*7c 8f5c+ G*6b G*5b 6b5c 5b6a 7b6a 4c5c G*7b G*6c 7b6c 5c6c G*6b R*4b P*5b 4b5b+ B*7a 6c6b 6a6b G*7b 8b8c 5b6b 5g7i 7h7i R*9h
go

position startpos moves 7g7f 8b5b 2g2f 5a6b 3i3h 6b7b 5i6h 7b8b 2f2e 3c3d 9g9f 5c5d 6h7h 5d5e 2e2d 2c2d 2h2d 4a3b 2d2h P*2c 9f9e 7a7b 6g6f 5e5f 5g5f 5b5f 7h6g 5f5a 7i6h 6c6d 6g7h 3a4b 4g4f 4b5c 3h4g 2b4d 4i5h 5c5d 5h6g 7c7d 2h5h 7b6c 4f4e 4d3c 8h7g 6a7b 4g4f P*5e 7h8h 8a7c 6i7h 4c4d 4e4d 3c4d P*4e 4d3c 3g3f 6d6e 6f6e 7c8e 7g8f 5d6e P*6f 6e5f P*5b 5a5b 6g5f 5e5f P*5e G*4g 5h5f 4g4f 5f4f 5b5e P*5f 5e5a 4e4d S*6i 7h7i 6i5h+ 4f4e 8c8d 4d4c+ 3c6f S*7g 8e7g+ 6h7g 6f5g+ 4c3b S*6g G*7h P*6f N*6d 5a6a 6d7b+ 6c7b 4e4c+ 6g7h+ 7i7h N*7c 8f5c+ G*6b G*5b 6b5c 5b6a 7b6a 4c5c G*7b G*6c 7b6c 5c6c G*6b R*4b P*5b 4b5b+ B*7a 6c6b 6a6b G*7b 8b8c 5b6b 5g7i 7h7i R*9h 9i9h
go

position startpos moves 7g7f 8b5b 2g2f 5a6b 3i3h 6b7b 5i6h 7b8b 2f2e 3c3d 9g9f 5c5d 6h7h 5d5e 2e2d 2c2d 2h2d 4a3b 2d2h P*2c 9f9e 7a7b 6g6f 5e5f 5g5f 5b5f 7h6g 5f5a 7i6h 6c6d 6g7h 3a4b 4g4f 4b5c 3h4g 2b4d 4i5h 5c5d 5h6g 7c7d 2h5h 7b6c 4f4e 4d3c 8h7g 6a7b 4g4f P*5e 7h8h 8a7c 6i7h 4c4d 4e4d 3c4d P*4e 4d3c 3g3f 6d6e 6f6e 7c8e 7g8f 5d6e P*6f 6e5f P*5b 5a5b 6g5f 5e5f P*5e G*4g 5h5f 4g4f 5f4f 5b5e P*5f 5e5a 4e4d S*6i 7h7i 6i5h+ 4f4e 8c8d 4d4c+ 3c6f S*7g 8e7g+ 6h7g 6f5g+ 4c3b S*6g G*7h P*6f N*6d 5a6a 6d7b+ 6c7b 4e4c+ 6g7h+ 7i7h N*7c 8f5c+ G*6b G*5b 6b5c 5b6a 7b6a 4c5c G*7b G*6c 7b6c 5c6c G*6b R*4b P*5b 4b5b+ B*7a 6c6b 6a6b G*7b 8b8c 5b6b 5g7i 7h7i R*9h 9i9h 8d8e
go

position startpos moves 7g7f 8b5b 2g2f 5a6b 3i3h 6b7b 5i6h 7b8b 2f2e 3c3d 9g9f 5c5d 6h7h 5d5e 2e2d 2c2d 2h2d 4a3b 2d2h P*2c 9f9e 7a7b 6g6f 5e5f 5g5f 5b5f 7h6g 5f5a 7i6h 6c6d 6g7h 3a4b 4g4f 4b5c 3h4g 2b4d 4i5h 5c5d 5h6g 7c7d 2h5h 7b6c 4f4e 4d3c 8h7g 6a7b 4g4f P*5e 7h8h 8a7c 6i7h 4c4d 4e4d 3c4d P*4e 4d3c 3g3f 6d6e 6f6e 7c8e 7g8f 5d6e P*6f 6e5f P*5b 5a5b 6g5f 5e5f P*5e G*4g 5h5f 4g4f 5f4f 5b5e P*5f 5e5a 4e4d S*6i 7h7i 6i5h+ 4f4e 8c8d 4d4c+ 3c6f S*7g 8e7g+ 6h7g 6f5g+ 4c3b S*6g G*7h P*6f N*6d 5a6a 6d7b+ 6c7b 4e4c+ 6g7h+ 7i7h N*7c 8f5c+ G*6b G*5b 6b5c 5b6a 7b6a 4c5c G*7b G*6c 7b6c 5c6c G*6b R*4b P*5b 4b5b+ B*7a 6c6b 6a6b G*7b 8b8c 5b6b 5g7i 7h7i R*9h 9i9h 8d8e 7b7c
go

position startpos moves 7g7f 8b5b 2g2f 5a6b 3i3h 6b7b 5i6h 7b8b 2f2e 3c3d 9g9f 5c5d 6h7h 5d5e 2e2d 2c2d 2h2d 4a3b 2d2h P*2c 9f9e 7a7b 6g6f 5e5f 5g5f 5b5f 7h6g 5f5a 7i6h 6c6d 6g7h 3a4b 4g4f 4b5c 3h4g 2b4d 4i5h 5c5d 5h6g 7c7d 2h5h 7b6c 4f4e 4d3c 8h7g 6a7b 4g4f P*5e 7h8h 8a7c 6i7h 4c4d 4e4d 3c4d P*4e 4d3c 3g3f 6d6e 6f6e 7c8e 7g8f 5d6e P*6f 6e5f P*5b 5a5b 6g5f 5e5f P*5e G*4g 5h5f 4g4f 5f4f 5b5e P*5f 5e5a 4e4d S*6i 7h7i 6i5h+ 4f4e 8c8d 4d4c+ 3c6f S*7g 8e7g+ 6h7g 6f5g+ 4c3b S*6g G*7h P*6f N*6d 5a6a 6d7b+ 6c7b 4e4c+ 6g7h+ 7i7h N*7c 8f5c+ G*6b G*5b 6b5c 5b6a 7b6a 4c5c G*7b G*6c 7b6c 5c6c G*6b R*4b P*5b 4b5b+ B*7a 6c6b 6a6b G*7b 8b8c 5b6b 5g7i 7h7i R*9h 9i9h 8d8e 7b7c 8c8d
go btime 555000 wtime 30000 binc 10000 winc 10000
```
  • Loading branch information
yaneurao committed Jan 6, 2024
1 parent 9d53c9a commit fda2cf4
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions source/engine/yaneuraou-engine/yaneuraou-search.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1213,16 +1213,18 @@ void Thread::search()
{
// 勝ちを読みきっているのに将棋所の表示が追いつかずに、将棋所がフリーズしていて、その間の時間ロスで
// 時間切れで負けることがある。
// mateを読みきったとき、そのmateの倍以上、iterationを回しても仕方ない気がするので探索を打ち切るようにする。
// mateを読みきったとき、そのmateの2.5倍以上、iterationを回しても仕方ない気がするので探索を打ち切るようにする。
// ⇨ あと、rootで1手詰め呼び出さなくしたので、その影響もあって、VALUE_MATE == bestValueになることはあるから、この時、
// rootDepth == 1で探索を終了されては困る。もう少し先まで調べて欲しいので、+2しておく。
if (!Limits.mate
&& bestValue >= VALUE_MATE_IN_MAX_PLY
&& (VALUE_MATE - bestValue) * 5/2 < (Value)(rootDepth))
&& (VALUE_MATE - bestValue + 2) * 5/2 < (Value)(rootDepth))
break;

// 詰まされる形についても同様。こちらはmateの2.5倍以上、iterationを回したなら探索を打ち切る。
if (!Limits.mate
&& bestValue <= VALUE_MATED_IN_MAX_PLY
&& (bestValue - (-VALUE_MATE)) * 5/2 < (Value)(rootDepth))
&& (bestValue - (-VALUE_MATE) + 2) * 5/2 < (Value)(rootDepth))
break;
}

Expand Down

0 comments on commit fda2cf4

Please sign in to comment.