Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Alpha-Beta Conspiracy Search

Author: Omid David Tabibi

Date: 10:00:31 10/06/03

Go up one level in this thread


On October 05, 2003 at 14:25:21, Vincent Diepeveen wrote:

>On October 05, 2003 at 14:21:54, Vincent Diepeveen wrote:
>
>>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, ... );

Heh, the real problem is defining what a "tactical move" and "very dumb move"
are :)


>
>small correction:
>     tempscore = -alfabeta(depth-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.