Author: Daniel Shawul
Date: 03:21:44 05/13/04
Go up one level in this thread
On May 13, 2004 at 05:37:35, Vasik Rajlich wrote: >On May 13, 2004 at 05:22:41, Daniel Shawul wrote: > >>On May 13, 2004 at 05:13:10, José Carlos wrote: >> >>>On May 13, 2004 at 04:56:23, Daniel Shawul wrote: >>> >>>>On May 13, 2004 at 04:20:02, José Carlos wrote: >>>> >>>>>On May 13, 2004 at 03:35:00, Daniel Shawul wrote: >>>>> >>>>>>Hello >>>>>> >>>>>>My search is fail soft(i return the actual score) >>>>>>when i fail high at the root i widen the window by 3 pawns (300). >>>>>> >>>>>> if(score<=r_alpha) >>>>>> { >>>>>> r_beta=r_alpha; >>>>>> r_alpha=score-300; //r_alpha = -MATESCORE; >>>>>> } >>>>>> else if(score>=r_beta) >>>>>> { >>>>>> r_alpha=r_beta; >>>>>> r_beta=score + 300; //r_beta = MATESCORE; >>>>>> } >>>>>>If the search fail's high at 1.75 score but the real score was 10 >>>>>>i get a score of 4.75 (1.75 + 3) in the next iteration. Why? my search is fail >>>>>>soft and the score returned should be independent of beta. If i change the 200 >>>>>>to 300,score returned is 4.75?? >>>> >>>> a correction (1.75 + 2) = 3.75 >>>> >>>>> >>>>> Are you sure you're doing fail soft? I mean, you need some extra logic, like >>>>>starting off with -INFINITE in alpha nodes and increase the best score even in >>>>>fail lows. You also need to make sure of returning true bounds in qsearch. Also, >>>>>if you do some kind of forward prunning depeding on alpha and beta you won't be >>>>>able to return true scores. >>>> >>>> i do futility pruning and other purnings but i always return >>>> (score + margin) in all of the cases. Not alpha. >>>> >>>>for example in the following test position >>>> rnb2rk1/ppq2p1p/4p1p1/3pP1B1/3P1Q2/2b2N2/P1P2PPP/2RK1B1R w - - 8 14 >>>> >>>> 1& 34 -0.31 0.05 1. Qxf7+? >>>> 1 36 -0.10 0.05 1. Bd3 >>>> 2 138 -0.44 0.09 1. Bb5 >>>> 2 172 -0.24 0.09 1. Bf6 >>>> 3 447 0.10 0.14 1. Bf6 Qa5 >>>> 3 679 0.16 0.16 1. Bh6! >>>> 3 781 0.18 0.16 1. Bh6 Rd8 >>>> 4 1899 0.15 0.20 1. Bh6 Rd8 2. Qf6 Nc6 >>>> 5 3778 0.47 0.27 1. Bh6 Re8 2. Qf6 >>>> 6 10330 0.71 0.33 1. Bh6 Rd8 2. Qf6 >>>> 7 26798 1.06 0.44 1. Bh6! >>>> 7 86808 1.48 0.63 1. Bh6 Qe7 2. Bxf8 Qxf8 3. Qf6 Nd7 >>>> 8 208184 1.20 0.95 1. Bh6 Qe7 2. Bxf8 Qxf8 3. Bd3 Nd7 >>>> 4. Ng5 Qg7 >>>> 9 684592 1.40 2.27 1. Bh6 Nd7 2. Ng5 a6 3. f3 >>>>10 3253930 1.42 9.00 1. Bh6 Qe7 2. Qe3 Qb4 3. Bxf8 Kxf8 >>>> 4. Qh6+ Kg8 5. Bd3 f6 >>>>10 5270072 1.75 15.05 1. Bf6! >>>>10 11120355 3.75 33.33 1. Bf6! //here score is 1.75+2=3.75 >>>> //full window opened >>>>10 32259429 12.82 87.59 1. Bf6 Qxe5 2. Nxe5 Nd7 3. Nxd7 Bd2 >>>> 4. Kxd2 Bxd7 5. c4 >>>>11& 32784106 12.47 89.17 1. Bf6? Qxe5 >>>> >>>> if i change margin to 3,the result will be something like this >>>>10 11120355 4.75 33.33 1. Bf6! >>>>10 32259429 12.82 87.59 1. Bf6 Qxe5 2. Nxe5 Nd7 3. Nxd7 Bd2 >>>> 4. Kxd2 Bxd7 5. c4 >>>>11& 32784106 12.47 89.17 1. Bf6? Qxe5 >>>> >>>> I am very very sure i don't return alpha/beta anywhere in my search. >>>>I also tried turning off hashtable ,nullmove,iid etc but no success. >>>> >>>>best >>>>daniel >>> >>> I don't find the effect you present here any strange. I can be caused by many >>>things: >>> - Null move: you can cutoff with a much lower score than true score cause you >>>allow the opponent two moves in a row. >>> - Hashing: cutting off by a stored bound from a different depth >>> - Move ordering: if you search moves a, b and c with scores +1, +2, +10 you'll >>>cutoff with beta <= +1 in the first move, with beta <= +2 in the second. >>> - Forward pruning: if score > beta + margin and (some conditions) return(beta >>>+ margin) or return(beta)-not true score-. >>> - Lazy cutoffs >>> Etc... >> >> I do all of the things you said above but there is no return (alpha) or >>return (beta) in my search. The search somehow converges to beta. What i store >>in hashtables is score. Infact i tried turning off hashtable, null move , and >>pruning techniques but it all comes back to beta. >> > >Yes, this is normal, and it's the reason why MTD (f) is a reasonable alternative >to PVS. The search is really good at doing the minimum amount of work. > >Just glancing at the logs from my last run (I use MTD (f)), I see that 100% of >the fail-lows at the maximum depth returned the exact bounds value, and 73.3% of >the fail-highs did so. > >These numbers are normal. It's also normal for soft fail-highs to be softer than >soft fail-lows, even at big remaining depths. (It's obvious why it should be so >at remaining depth == 0, but it also holds true throughout the search.) I accept your logic. This thing has been troubling me for a long time. I thought it was a bug. But it may be the similarity of PVS to MTD(f) that is causing this. Thank you all for your help daniel > >Vas > >> >>> >>> If all of that is disabled, then make sure you have something like (simplified >>>search, and also in qsearch): >>> >>>search(alpha,beta,depth) >>>{ >>> int best = -INFINITY; // Make sure you start with -INF, not with alpha >>> int score; >>> >>> while(all moves) >>> { >>> score = -search(); >>> if (score >= beta) >>> return(score); >>> if (score >= best) >>> best = score; // update this even when score <= alpha >>> } >>> >>> return(best) >>>} >> >> That is exactly what i do in my search. >> >>> >>> José C.
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.