Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Alpha-Beta Conspiracy Search

Author: Omid David Tabibi

Date: 20:31:01 10/04/03

Go up one level in this thread


On October 04, 2003 at 22:22:33, Omid David Tabibi wrote:

>On October 04, 2003 at 18:57:18, Vincent Diepeveen wrote:
>
>>On October 04, 2003 at 18:40:08, Russell Reagan wrote:
>>
>>Just put next in your engine:
>>  - checks in qsearch at the first ply (or when you already did them
>>    just stick to what you did now; in diep i do them at any ply in qsearch
>>    btw, but most have problems controlling that so i do not mind it if you
>>    just try 1 ply)
>>  - nullmove search with window alfa,beta = -mate+1000,
>>    so you'll find 100% sure a mate threat
>>
>>  - if you see a mate threat you extend that position by 1 ply and store
>>    in hashtable this position got a mate extension.
>>
>>  - now you extend moves double sometimes. So recapture that gives extension,
>>    you extend. If the same move also gives opponent a check, another extension.
>>    So you can extend 2 plies then.
>
>2 plies extension at once? What if you detected a mate threat and played a move
>which is a recapture and also checks the opponent? Extend by 3 plies?!
>
>Seems a little frightening! But will try it tonight...

Interesting... very interesting...

[D]1r4k1/1q2bp2/3p2p1/2pP4/p1N4R/2P2QP1/1P3PK1/8 w - - 0 1

Doing all what you said, i.e. calling null-move search with (-beta, 9000),
extending for mate, check, recapture, (which can result in up to 3 ply
extensions at one time) and not limiting any extensions, the following is
Falcon's analysis of the above position on a slow 733 MHz system:

depth     time    nodes   nps  score  variation
 1/ 3->   0.00       0k    0k   1.26  1.h4h1
 2/ 6->   0.00       0k    0k   0.55  1.h4h6 g8f8
 3/11->   0.01       2k  202k   1.10  1.h4h6 b8e8 2.h6h1
 4/10->   0.04       7k  187k   0.49  1.h4h6 b8e8 2.g2g1 g8f8
 5/13->   0.07      15k  219k   0.76  1.h4h6 b7b3 2.f3e4 e7g5 3.h6h1
 6/13     0.09      20k  228k   0.50  1.h4h6 b7b3 2.f3e4 e7g5 3.h6h1 f7f5
 6/18->   0.16      38k  241k   0.50  1.h4h6 b7b3 2.f3e4 e7g5 3.h6h1 f7f5
 7/15     0.29      73k  254k   0.33  1.h4h6 e7f8 2.h6h1 f7f5 3.f3d3 b8e8
                                      4.d3d2
 7/17     0.41     104k  255k   0.62  1.h4h1 f7f5 2.g3g4 b7b5 3.f3e2 b5d7
                                      4.g4f5 g6f5
 7/17->   0.47     120k  256k   0.62  1.h4h1 f7f5 2.g3g4 b7b5 3.f3e2 b5d7
                                      4.g4f5 g6f5
 8/18     0.79     198k  251k   0.50  1.h4h1 f7f5 2.g3g4 f5g4 3.f3e4 g8g7
                                      4.f2f3 g4f3 5.e4f3 b8f8
 8/33     4.71    1192k  253k   0.92  1.c4d6
 8/64    11.47    2915k  254k   5.97  1.c4d6 e7d6 2.f3f6 b7d5 3.g2h2 d5h5
                                      4.h4h5 g6h5 5.f6d6 b8b2 6.d6c5
 8/64->  11.48    2915k  254k   5.97  1.c4d6 e7d6 2.f3f6 b7d5 3.g2h2 d5h5
                                      4.h4h5 g6h5 5.f6d6 b8b2 6.d6c5

In 4 seconds it reached a depth of 33 and failed high on the correct move, then
re-searched it to the max-depth of 64 plies and finished the iteration in 11
seconds.

Now I removed the 64 ply depth limit:

depth     time    nodes   nps  score  variation
 1/ 3->   0.01       0k    6k   1.26  1.h4h1
 2/ 6->   0.02       0k   28k   0.55  1.h4h6 g8f8
 3/11->   0.02       2k  101k   1.10  1.h4h6 b8e8 2.h6h1
 4/10->   0.04       7k  187k   0.49  1.h4h6 b8e8 2.g2g1 g8f8
 5/13->   0.06      15k  255k   0.76  1.h4h6 b7b3 2.f3e4 e7g5 3.h6h1
 6/13     0.09      20k  228k   0.50  1.h4h6 b7b3 2.f3e4 e7g5 3.h6h1 f7f5
 6/18->   0.16      38k  241k   0.50  1.h4h6 b7b3 2.f3e4 e7g5 3.h6h1 f7f5
 7/15     0.28      73k  263k   0.33  1.h4h6 e7f8 2.h6h1 f7f5 3.f3d3 b8e8
                                      4.d3d2
 7/17     0.42     104k  248k   0.62  1.h4h1 f7f5 2.g3g4 b7b5 3.f3e2 b5d7
                                      4.g4f5 g6f5
 7/17->   0.48     120k  251k   0.62  1.h4h1 f7f5 2.g3g4 b7b5 3.f3e2 b5d7
                                      4.g4f5 g6f5
 8/18     0.78     198k  254k   0.50  1.h4h1 f7f5 2.g3g4 f5g4 3.f3e4 g8g7
                                      4.f2f3 g4f3 5.e4f3 b8f8
 8/33     4.67    1192k  255k   0.92  1.c4d6
 8/219    4.67    1192k  255k         1.c4d6 (1/37)


Reached the depth of 219 plies until the engine crashed!!! :)



>
>Looking at Fritz's parameters, the default values are selectivity=2, and
>futility pruning activated. So, we can assume that Fritz is using R=2. However,
>looking at its analysis it rapidly reaches very deep while not ignoring any
>significant tactical threats. That's also the case with Shredder, which uses
>selectivity=-1 (it is not a typo, -1 ?!) and futility=2.
>
>Falcon's tactical strength is somewhat superior to that of Crafty, but comparing
>it to other null-movers, Fritz and Shredder, it is way behind in tactics...
>
>BTW, when in quiescence you detect that one side is in check, do you do the
>following:
>
>int quiesce(int alpha, int beta) {
>    ...
>    if (checked)
>        return search(alpha, beta, 1);
>    ...
>}
>
>
>I haven't implemented checks in quiescence yet, but it seems inevitable...
>
>
>>>I don't think Christophe uses null move. At least, if he does, I don't think
>>>it's the "main algorithm" contributing to Chess Tiger's strength. I remember
>>
>>May i beg your pardon?
>>
>>Without nullmove you can go home.
>
>Junior and Rebel are good examples of non null-mover successful programs. And
>there are some strange programs like Hiarcs; I don't think it is using null-move
>pruning, at least not anything with R > 1.



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.