Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: 50 moves rule

Author: Robert Hyatt

Date: 07:21:07 12/18/00

Go up one level in this thread


On December 18, 2000 at 02:30:26, Jason Williamson wrote:

>On December 17, 2000 at 21:53:00, Robert Hyatt wrote:
>
>>On December 17, 2000 at 11:14:13, Dieter Buerssner wrote:
>>
>>>I think, the following game is interesting for interpreting the 50 moves
>>>rule. If I am interpreting correctly, Yace could have won, by mating Crafty
>>>in the last possible move, before Crafty could claim a draw. I think there
>>>is a subtle bug in my engine, and it seems in other engines as well.
>>>In search, after I made a move, I check if the move is legal. Then, when
>>>a 3-fold repetition is found, or a draw due to 50 moves rule, I give the
>>>move draw score. This seems to work well for for the repetition case,
>>>but I forgot about a very important case concerning the 50 moves rule.
>>>When the last possible move is a mating move, it should obviously be
>>>a win. I hope this interpretation of the rules is correct. Perhaps
>>>somebody can confirm this?
>>>
>>>How does your engine handle this situation?
>>>
>>
>>
>>First, and most important, the 50 move rule is _optional_.  IE I can play
>>50 moves after the last capture or pawn push, you can play 50 moves, and
>>the game can continue if we want.  One side _can_ claim the draw, but it
>>has to be on his move.  So If you make 50 moves, and when I make the 50th
>>move and mate you, the game is over, because you are mated, and you can't
>>claim the draw at that point...   If you make 51 moves (and forget to claim
>>the draw), I can still mate you and you are mated, because you didn't claim
>>it when you had the chance.  Once you are mated, it is too late...
>>
>>
>>
>>
>>
>>>If I have tested correcly, Little Goliath and Crafty both don't see the win.
>>>Fritz 6a sees the win.
>>>
>>>I guess, after I fix this problem, it will never ever happen again in a game ...
>>>
>>>[Event "Computer chess game 0 240 +2 0 0"]
>>>[Site "?"]
>>>[Date "2000.12.17"]
>>>[Round "6"]
>>>[White "Crafty 17.13"]
>>>[Black "Yace 0.23.33"]
>>>[Result "1/2-1/2"]
>>>[WhiteElo "0"]
>>>[BlackElo "0"]
>>>[Timecontrol "0 240 +2 0 0"]
>>>[Time "Sun Dec 17 05:43:08 2000"]
>>>[last_book_pos "r3kb1r/p2qnppp/1pn1p3/1bppP3/3P4/PBP2N2/1P2NPPP/R1BQR1K1 b kq -
>>>2 13"]
>>>[last_book_move "13...Bxe2"]
>>>[LogFile "logs\yace0006.log"]
>>>
>>>1. e4 e6 2. d4 d5 3. Nc3 Bb4
>>>4. e5 b6 5. a3 Bf8 6. Bb5+ c6
>>>7. Ba4 Ba6 8. Nce2 Bb5 9. Bb3 c5
>>>10. c3 Nc6 11. Nf3 Qd7 {-0.26} 12. O-O Nge7
>>>13. Re1 Bxe2 14. Qxe2 c4 {-0.50} 15. Ba4 h5 {-0.50}
>>>16. b3 cxb3 {-0.65} 17. Bxb3 O-O-O {-0.47} 18. Ng5 Qe8 {-0.54}
>>>19. Rb1 Kb8 {-0.51} 20. Qa6 Rc8 {-0.50} 21. Ba4 Nf5 {-0.45}
>>>22. Bb5 Be7 {-0.41} 23. Qa4 Rf8 {-0.43} 24. Bf4 Ka8 {-0.45}
>>>25. Rb2 Rc7 {-0.45} 26. Reb1 Qc8 {-0.51} 27. Ba6 Qd8 {-0.33}
>>>28. Nf3 g5 {-0.39} 29. Bc1 g4 {-0.20} 30. Ne1 Na5 {-0.20}
>>>31. Rc2 Qe8 {-0.09} 32. Bb5 Qc8 {0.12} 33. Bb2 f6 {0.17}
>>>34. exf6 Bxf6 {0.12} 35. Re2 Nd6 {0.13} 36. Bd3 Nac4 {0.12}
>>>37. Bc1 e5 {0.10} 38. dxe5 Bxe5 {0.15} 39. Qd1 Rc5 {0.22}
>>>40. Bxc4 dxc4 {0.27} 41. a4 Qc6 {0.34} 42. Qc2 Rd5 {0.41}
>>>43. Ba3 Rd8 {0.40} 44. Rd2 Rxd2 {1.00} 45. Qxd2 Qc7 {0.82}
>>>46. Qe3 Qh7 {0.38} 47. Bxd6 Bxd6 {0.51} 48. Qg5 Be7 {0.63}
>>>49. Qc1 Bc5 {0.69} 50. Rb2 Rf8 {0.67} 51. Re2 Qd7 {0.69}
>>>52. Qg5 Qf7 {0.63} 53. Qd2 Qf5 {0.56} 54. Nc2 Qd3 {0.57}
>>>55. Qe1 Qd7 {0.97} 56. Rd2 Qe8 {0.53} 57. Qxe8+ Rxe8 {0.44}
>>>58. Kf1 a6 {0.41} 59. Rd7 Kb8 {0.37} 60. f4 gxf3 {0.41}
>>>61. gxf3 Rf8 {0.44} 62. Ne1 Kc8 {0.48} 63. Rd5 h4 {0.45}
>>>64. Rh5 Be7 {0.51} 65. Ke2 Bf6 {0.59} 66. Nc2 Re8+ {0.49}
>>>67. Ne3 Bxc3 {0.58} 68. Rxh4 b5 {0.59} 69. Re4 Rxe4 {0.50}
>>>70. fxe4 Bb2 {0.48} 71. axb5 axb5 {0.33} 72. h4 Kd7 {0.39}
>>>73. h5 Ke6 {0.48} 74. h6 Kf6 {0.77} 75. Nf5 Kg6 {0.24}
>>>76. Nd6 c3 {0.15} 77. Kd3 b4 {0.04} 78. e5 Kxh6 {0.04}
>>>79. e6 b3 {0.04} 80. e7 c2 {0.03} 81. e8=Q c1=Q {0.03}
>>>82. Qf8+ Kh5 {0.00} 83. Qf7+ Kh4 {0.00} 84. Qxb3 Qf1+ {0.00}
>>>85. Ke4 Qe1+ {0.00} 86. Kd5 Qe5+ {0.00} 87. Kc6 Bc3 {0.00}
>>>88. Nc4 Qe6+ {0.06} 89. Kc7 Be5+ {0.06} 90. Kd8 Qd5+ {0.06}
>>>91. Ke8 Qc6+ {0.06} 92. Ke7 Bf6+ {0.06} 93. Kf7 Bd4 {0.07}
>>>94. Qb4 Kh5 {0.08} 95. Nd6 Qd7+ {0.08} 96. Kf8 Bg7+ {0.91}
>>>97. Kg8 Be5 {0.91} 98. Nf7 Qc8+ {0.91} 99. Kh7 Qf5+ {0.90}
>>>100. Kg8 Qc8+ {0.90} 101. Kh7 Qc2+ {0.90} 102. Kg8 Qg6+ {0.90}
>>>103. Kf8 Bg7+ {0.90} 104. Ke7 Qf6+ {0.91} 105. Kd7 Qxf7+ {0.91}
>>>106. Kc6 Qe8+ {0.92} 107. Kb6 Qb8+ {0.92} 108. Ka5 Qa8+ {0.92}
>>>109. Kb6 Qd5 {0.93} 110. Qb5 Bd4+ {0.92} 111. Ka5 Bc5 {0.92}
>>>112. Qc4 Qd8+ {0.92} 113. Kb5 Qb6+ {0.92} 114. Ka4 Qd6 {0.91}
>>>115. Kb5 Qb6+ {0.91} 116. Ka4 Qc6+ {0.91} 117. Ka5 Bb6+ {0.91}
>>>118. Kb4 Qd6+ {0.91} 119. Kb5 Bd4 {0.91} 120. Qc6 Qe5+ {0.91}
>>>121. Kc4 Qf4 {0.91} 122. Qd5+ Be5+ {0.91} 123. Kb5 Qf5 {0.91}
>>>124. Kc4 Kg5 {0.91} 125. Qd8+ Kh6 {0.91} 126. Qd3 Qc8+ {0.93}
>>>127. Kb5 Qb7+ {0.91} 128. Kc5 Qb8 {0.91} 129. Kc4 Qb6 {0.91}
>>>130. Qd5 Qa6+ {0.91} 131. Kc5 Qa5+ {0.91} 132. Kc4 Qc3+ {0.91}
>>>133. Kb5 Qe3 {0.91} 134. Qg8 Qe4 {0.91} 135. Qg1 Qd3+ {0.92}
>>>136. Kb4 Bd6+ {0.92} 137. Ka5 Qc4 {0.92} 138. Kb6 Bc7+ {0.92}
>>>139. Kb7 Bf4 {0.92} 140. Kb6 Qb4+ {0.93} 141. Kc6 Qe4+ {0.93}
>>>142. Kb5 Qd3+ {0.93} 143. Kc6 Qf3+ {0.93} 144. Kb5 Qe2+ {0.93}
>>>145. Kc6 Qf3+ {0.92} 146. Kb5 Qd3+ {0.92} 147. Kc6 Qe4+ {0.92}
>>>148. Kb5 Qe2+ {0.92} 149. Kb4 Bd2+ {0.93} 150. Kb3 Qd3+ {17.87}
>>>151. Ka2 Qc4+ {Mat11} 152. Ka1 Qc3+ {0.00} 153. Ka2 Kh5 {0.00}
>>>154. Qh2+ Kg6 {0.00} 155. Qg1+ Bg5 {0.00} 1/2-1/2 {Draw}
>>>
>>>I think, the forced win is
>>>
>>>152...Bc3+ 153. Kb1 Qb3+ 154. Kc1 Qb2+ 155. Kd1 Qd2#
>>>
>>>Regards,
>>>Dieter
>
>So what do you do there, do you test to see if its mate first or immeditately
>test to see if its a draw?

I don't think I do this correctly here, but the right idea is to do
something like this:

search the ply where 50 moves have been made by both sides.  If the score is
good, return the good score.  If the score is bad, return 0.0 as you can also
claim the draw if you want.  Obviously if the score is good for you, then the
opponent will take the draw when it is his move unless you make a pawn push or
capture so he can't...

Mate should be caught because you have to be able to make a move and not be
mated in order to claim the draw.  This adds one more test to the end of
Search().



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.