Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Pondering ("think on opponent's time")

Author: Robert Hyatt

Date: 07:55:58 11/12/02

Go up one level in this thread


On November 12, 2002 at 01:14:36, Uri Blass wrote:

>On November 11, 2002 at 21:31:09, Robert Hyatt wrote:
>
>>On November 11, 2002 at 12:04:03, Uri Blass wrote:
>>
>>>On November 11, 2002 at 10:28:33, Robert Hyatt wrote:
>>>
>>>>On November 11, 2002 at 01:10:23, Uri Blass wrote:
>>>>
>>>>>On November 10, 2002 at 23:53:19, Robert Hyatt wrote:
>>>>>
>>>>>>On November 10, 2002 at 22:38:03, Jeremiah Penery wrote:
>>>>>>
>>>>>>>On November 10, 2002 at 21:29:43, Robert Hyatt wrote:
>>>>>>>
>>>>>>>>On November 10, 2002 at 21:15:07, Jim Bumgardner wrote:
>>>>>>>>
>>>>>>>>>Which of these strategies for "think on opponent's time" makes more sense?
>>>>>>>>>
>>>>>>>>>A) To only search the top-move from the principle variation.  If
>>>>>>>>>the opponent makes that move, continue searching, otherwise reset and
>>>>>>>>>search again.
>>>>>>>>
>>>>>>>>This is the _only_ way to do it.  I've explained this many times, but it
>>>>>>>>is probably time to go it again...
>>>>>>>
>>>>>>>For the general case.  But it shouldn't be hard to find situations where it's
>>>>>>>very easy to tell the ponder move is probably wrong.  In those cases, it's
>>>>>>>obvious, IMO, that switching to a different ponder move would help.
>>>>>>>
>>>>>>>One possible scenario is when the ponder move keeps failing high - either the
>>>>>>>ponder move is wrong, or you ponder some other move and you'll find the
>>>>>>>fail-highs again anyway if they play the original ponder move.  Otherwise,
>>>>>>>you'll have a better chance of pondering on a better move.  You could always
>>>>>>>save the result of the first ponder search just in case.
>>>>>>
>>>>>>
>>>>>>That is a good point of course.  If you get the fail high _before_ using the
>>>>>>"target time" then you can safely switch to pondering something else, knowing
>>>>>>you will have time to find the "fail high" again, if the opponent makes the
>>>>>>expected move.
>>>>>>
>>>>>>The bad side might be that you don't fail high until you are beyond your target
>>>>>>time, so that if you start pondering something else, you might not be able to
>>>>>>find the fail high for real if the opponent actually makes that move...
>>>>>
>>>>>You assume here that you are going to forget the fail high.
>>>>>
>>>>>You can rememeber the move that you want to play against the expected move in
>>>>>case of fail high and continue to search other moves and when the opponent plays
>>>>>the expected move you can play the move that you remember in 0 seconds.
>>>>
>>>>Yes, although I am trying to adhere to the KISS principle here.  The above
>>>>would work well, but it would introduce additional complexity and the
>>>>opportunity for bugs.  But it might be worth it too...
>>>>
>>>>>
>>>>>I also believe that the best strategy is not to ponder only on one move but to
>>>>>have a lot of threads(for every legal move of the opponent a different thread)
>>>>>and to give different priority for different moves.
>>>>
>>>>How about some math to show how the above is going to be better than pondering
>>>>one move that is correct over 50% of the time.  I don't see any way to improve
>>>>except in special cases such as a terrible fail-high that lets you know your
>>>>opponent probably won't play that move...
>>>
>>>I admit that there is not a big improvement but if you want some math then here
>>>is is:
>>>
>>>What is better?
>>>
>>>Case A:You ponder the expected move 60% of the cases and ponder another move in
>>>40% of the cases
>>>
>>>case B:In the same 60% of the cases you use 90% of the time for the expected
>>>move.
>>>In the rest of the 40% of the cases you use 30% of the time for the move that is
>>>going to be played.
>>>
>>>0.6*0.9+0.4*0.3=0.66>0.6
>>>
>>
>>You are making assumptions that are unsound.
>>
>>I am _certain_ that I ponder the correct move 50% of the time (actually
>>significantly better than that, but 50% will do for now).
>>
>>I am _also_ certain that I can't be sure that in your case B that I can use
>>30% of the time for the move that is going to be played.  How can I know that
>>until it is played?  I can't.  And if the probability that the best move from
>>the search is right 50% of the time, it is wrong 50% of the time.  How are
>>you going to be so accurate that you can get _the_ move that will be played
>>to ponder in your above approach?
>>
>>I don't see how it is possible.  If the "best move" is wrong 50% of the time,
>>then _clearly_ the second_best move will be wrong _more_ than 50% of the time.
>>If we had a way to get the second-best move anyway...
>
>
>If we evaluate every possible move by having a thread for every legal move
>then we have an idea about the second best move.

How?  You will spend so little time on each move the score will be meaningless.
Because to search every move independently means no alpha/beta efficiency
between
the moves.  Normally the first move takes 90% of the time and the remaining
moves
take maybe 10%.  With this approach _every_ move will take that 90%.

>
>If we see in the search fail high after the
>best move then it means that the best move
>is no good and it may be better to use more time
>for the second best move based on our evaluation.
>
>I do not plan to try to do something like that in
>the near future and today there are even cases when
>Movei waits and do nothing during pondering
>and I do not plan to fix it in the near future.

That is trivial to fix.

(1) probe the hash table for a move to search;

(2) do a short search for the opponent to find his "best move" and then ponder
using that move.

That way you will _never_ sit and wait.




>
>Uri



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.