Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Alpha-Beta Conspiracy Search

Author: Vincent Diepeveen

Date: 11:21:54 10/05/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?!

right, works tactical very well. of course not so easy to tune.
of course you won't end up searching veyr deep. 9 to 10 ply will be
already a major depth :)

But it solves tactical anything.

>Seems a little frightening! But will try it tonight...
>
>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);

that would be pretty pricey as that can add another 7 plies of selectivity to
the search :)

No i just generate all moves and search all of 'em.

>    ...
>}
>
>
>I haven't implemented checks in quiescence yet, but it seems inevitable...

when it works well it is great to do so, when you don't manage to limit it, it's
hell.

>>>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

Really junior is searching a way which is nullmoving at any positional move
already more or less.

I guess they use some sort of principle like this:

int alfabeta(depth,alfa,beta,side .. ) {
  if( depth == 0 ) {
    if( side )
      evalscore = -INCSCORE;
    else
      evalscore = INCSCORE;
    if( evalscore >= beta )
      return evalscore;
    score = SEE(side,evalscore); /* static exchange evaluation,
      so an evaluation
      that guesses whether side can win something without too much risk,
      that gets added to the evalscore then simply and returned
     */
    return score;
  }
  generatemoves();
  for all moves ( ;; ) {

    if( movelosesmaterial(move) > 0 ) {
      if( tacticalmove() )
        units = 1;
      else if( verydumbmove() )
        units = 3;
      else
        units = 2;

    }
    else {
      if( verytacticalmove() )
        units = 2;
      else
        units = 3;
    }
    tempscore = -alfabeta(depth-1-units,-beta,-alfa,side^1, ... );
  }
  ...
}

So the effect of nullmove is already very limited thanks to major reductions.
Still it will help to use nullmove so i guess they nowadays use it. Alternative
is of course using units = 4 ;)

I know what Ed is doing, if you're already doing dubious reductions like at his
homepage and more of that similar stuff then of course your positional search
depth is already just half of the total search depth more or less. So additional
nullmoves to that are pretty dangerous to do, but they can be done.

In fact the assumptions made by junior and Rebel are basically that searching
positional deeper is not the most important thing. Their assumption, derived
from their search is that you only need to search tactical deeper and not
positional. Both are just extending captures, checks and such moves bigtime.

Shredder and DIEP are the opposite of that. If they throw something away then
they throw basically tactical stuff away and try to search positional deeper.

Then there are a lot of program forward pruning in different ways but vaste
majority is just busy searching tactics deeper. Hiarcs i do not know, never
chatted with Uniacke about it.

Considering that both Shredder and junior ended at 7.5 out of 9 last world
championship, the most important thing in computerchess is your weakest chain.
Far more than the above difference.

Personally i prefer however to search positional deeper. If tricks get found
then i consider that as a side effect from the search depth reached.

>there are some strange programs like Hiarcs; I don't think it is using null-move
>pruning, at least not anything with R > 1.

You should not confuse extensions and the last few plies pruning with nullmove.
Many extensions and pruning rules can render confusion there. I would be amazed
actually if Hiarcs doesn't use nullmove.



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.