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.