Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Mate in 7 moves - diagram

Author: Bernhard Bauer

Date: 01:26:54 09/28/00

Go up one level in this thread


On September 28, 2000 at 01:01:36, Jeremiah Penery wrote:

>On September 27, 2000 at 04:45:38, Eduard Nemeth wrote:
>
>>[D]8/8/p3R3/1p5p/1P5p/6rp/5K1p/7k w - - 0 1
>>
>>Shredder 4 and Fritz 6a this don't find !
>
>I have a modified Crafty that solves this well enough:
>
>7->   0.33  -0.04   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
>                    4. bxa5 b4 5. a6 b3
>8     0.34     --   1. Re1+
>8     1.85     ++   1. Re1+!!
>8     1.86   0.61   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
>                    4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
>8->   1.88   0.61   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
>                    4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
>9     1.89     --   1. Re1+
>9     5.86     ++   1. Re1+!!
>9     5.87  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
>                    4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
>9->   5.89  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
>                    4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
>
>Part of the modifications I did was to not do a nullmove at all when the total
>depth is 5 or less, and it also doesn't use nullmove when depth_remaining is 2
>or less.  The normal "adaptive null-move reduction" has also been changed, to
>only use r=3 when depth is more than 12 instead of the normal 6.  Here's the
>modified parts of the nullmove code from Crafty's search.c
>
>  if (iteration_depth > 5 && depth > 2) {
># if defined(NULL_MOVE_DEPTH)
>                  ....
>		  null_depth=(depth > 12*INCPLY) ? 2*INCPLY : 3*INCPLY;
>                  ....
># endif
>  }

My modified Crafty solves it good enough too.

   6->   0.30  -4.81   1. Re1+ Rg1 2. Rf1 a5 3. bxa5 b4 4.
                       a6 b3
   7     0.30     ++   1. Re1+!!
   7     0.32  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
   7->   0.32  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
   8     0.33     --   1. Re1+
   8     1.53  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 <HT>
   8->   1.55  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 <HT>
   9     1.57     --   1. Re1+
   9     5.10  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 <HT>
   9->   5.13  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 <HT>
  10     5.16     --   1. Re1+
  10    20.71  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 <HT>
  10->  20.74  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 <HT>
  11    20.75  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
  11->  20.77  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
  12    20.80  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
  12->  20.82  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
  13    20.83  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
  13->  20.86  Mat07   1. Re1+ Rg1 2. Rf1 Rxf1+ 3. Kxf1 a5
                       4. bxa5 b4 5. a6 b3 6. a7 b2 7. a8=Q#
 time=21.03  cpu=200%  mat=-5  n=13078644  fh=99%  nps=621904
 ext-> checks=2624089 recaps=3032 pawns=137543 1rep=83708 thrt:30
 predicted=0  nodes=13078644  evals=89865
 endgame tablebase-> probes done=0  successful=0
 hashing-> trans/ref=105%  pawn=99%  used=69%
 SMP->  split=694  stop=32  data=8/64  cpu=42.10  elap=21.03

My modification has also to do with null move, but I do another change.
Instead of the original statement in search.c
if (do_null && !tree->in_check[ply] && pieces
                                    && (pieces>5 || depth<421)) {

I use the following statement
if (do_null && !tree->in_check[ply] && pieces>0 && depth>60 &&
                                    && (pieces>9 || depth>301) ) {

This helps a lot in null move related positions.
For the bench command I get:

MyCrafty.exe version17.14
mt  pos1    pos2    pos3    pos4    pos5    pos6      nps  etime  ttply
 1  5.25   49.62   23.45   37.09   45.64   43.93   231873    204  3.137255
 2  3.19   28.29   13.20   19.41   24.18   33.35   441338    121  5.289256

WCrafty.exe version17.14 (Nalimov executable)
mt  pos1    pos2    pos3    pos4    pos5    pos6      nps  etime  ttply
 1  4.36   42.14   29.44   31.71   38.23   37.22   278854    183  3.497268
 2  2.73   23.79   24.64   15.64   20.14   27.04   530251    114  5.614035

Kind regards
Bernhard



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.