Computer Chess Club Archives


Search

Terms

Messages

Subject: Crafty question to Dr. Robert Hyatt

Author: Alvaro Jose Povoa Cardoso

Date: 05:52:20 05/02/01


The code below is in the Iterate() function.
Could someone (namely Dr. Robert Hyatt) explain the lines below (line 1, line 2
and line 3)?

line 1 and line 2 takes care of root_alpha.
line 3 takes care of root_beta.
What exactly is the .status member variable in "root_moves[0].status" ?
What values can it have and what do they mean?
In other words what are the conditions in this code that modify root_alpha and
root_beta?
(Yes I noticed root_beta is also modified in SearchRoot())

Thank you,
Alvaro Cardoso




        value=SearchRoot(tree,root_alpha, root_beta, wtm,
                         iteration_depth*INCPLY+30);
        root_print_ok=tree->nodes_searched > noise_level;
        cpu_time_used+=ReadClock(cpu)-thread_start_time[0];
        if (abort_search || time_abort) break;
        if (value >= root_beta) {
          root_moves[0].status|=2;
          root_moves[0].status&=255-128;
line 1    if (root_moves[0].status&1) root_alpha=-MATE-1;
line 2    else root_alpha=root_beta-1;
          root_value=root_alpha;
          root_beta=MATE+1;
          root_moves[0].nodes=0;
          if (root_print_ok) {
            Print(2,"               %2i   %s     ++   ",iteration_depth,
            DisplayTime(end_time-start_time));
            if (display_options&64) Print(2,"%d. ",move_number);
            if ((display_options&64) && !wtm) Print(2,"... ");
            Print(2,"%s!!\n",
                  OutputMove(tree,tree->pv[1].path[1],1,wtm));
            whisper_text[0]=0;
            if (display_options&64)
              sprintf(whisper_text," %d.",move_number);
            if ((display_options&64) && !wtm)
              sprintf(whisper_text+strlen(whisper_text)," ...");
            sprintf(whisper_text+strlen(whisper_text)," %s!!",
                    OutputMove(tree,tree->pv[1].path[1],1,wtm));
            Whisper(6,wtm,iteration_depth,end_time-start_time,value,
                    tree->nodes_searched,-1, tree->egtb_probes_successful,
                    whisper_text);
          }
        }
        else if (value <= root_alpha) {
          if (!(root_moves[0].status&2)) {
            root_moves[0].status&=255-128;
            root_moves[0].nodes=0;
            root_moves[0].status|=1;
line 3      if (root_moves[0].status&2) root_beta=MATE+1;
            root_alpha=-MATE-1;
            root_value=root_alpha;
            easy_move=0;
            if (root_print_ok && !time_abort && !abort_search) {
              Print(4,"               %2i   %s     --   ",iteration_depth,
                    DisplayTime(ReadClock(time_type)-start_time));
              if (display_options&64) Print(4,"%d. ",move_number);
              if ((display_options&64) && !wtm) Print(4,"... ");
              Print(4,"%s\n",OutputMove(tree,root_moves[0].move,1,wtm));
            }
          }
          else break;
        }
        else break;
      }






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.