Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Non recursive search(is there a free source code for doing it?)

Author: Stan Arts

Date: 06:53:34 04/10/04

Go up one level in this thread


On April 10, 2004 at 07:17:24, Uri Blass wrote:

>Recursive search is basically a mistake because it means that the computer
>remember every information twice(it remember beta and later alpha as minus beta
>and it is a waste of memory).
>
>people claimed in the past that it is more simple to do a recursive search but I
>believe that everything is simple after you understand it so it should not be a
>problem.
>
>I think that the only reason that people think that recursive search is simpler
>is that they are used to recursive search and not to non recursive search.
>
>My question is if there is a single free program that use alphabeta without
>recursive search(it does not have to be a chess program and can be a program in
>every thinking game).
>
>I try to figure out how basic alphabeta without recursive search should be done
>It will be productive if somebody can give a code for non recursive search that
>allow extensions and null move pruning.
>
>Uri

Hi,

Neurosis doesn't build up it's searchtree in a recursive way, but with some
repeat-until (pascal) loops.. But flexible to be able to do extentions and so.
(The main reason for me to start over with a new program after S-chess/stan's
chess, that couldn't do extentions because of how I made it build it's
searchtree. )

For each depth I have one "beta" value. That value can be alpha or beta
depending how you look at it. And if I want to know if my value is above/below
beta to cause a cutoff, I look at the value beta[current depth of the node - 1]
and alpha would be beta[current depth of the node, or -2] so that's something
you ment.
Here is my main searchtree loop/code. Sorry that it's mostly in dutch and the
most ugly piece of chessprogramming you'll ever see..  :)

Stan


   repeat
    diepl:=zbni;zbklaar:=0;
    repeat
     oneven:=odd(diepl);zbni:=1;

     if zetnummer[diepl]>aantzetten[diepl] then begin  {start van nieuwe ply}
      nm[diepl]:=0;best1[diepl]:=21;best2[diepl]:=21;htsort1:=21;htsort2:=21;
      a:=diepl-1;if (zetnummer[a]<>0)or(diepl=2) then cpnvbord(a);
      rokade[diepl]:=rokade[a];enpassant[diepl]:=10;kposC[diepl]:=kposC[a];
      kposM[diepl]:=kposM[a];if nm[a]<>1 then doezet(zetnummer[a],a);
      beta[diepl]:=beta[diepl-2];schaakC[diepl]:=0;schaakM[diepl]:=0;
      pat[diepl]:=250;qmets[diepl]:=0;exten[diepl]:=0;
      if oneven then begin eval[diepl]:=-25000;
      schaakM[diepl]:=aanvalopM(kposM[diepl]);
      if schaakM[diepl]=0 then begin
      if diepl<Sdiepte+1 then begin
      schaakC[diepl]:=aanvalopC(kposC[diepl]);
      hashcode[diepl]:=geefhashcode(1,rokade[diepl],enpassant[diepl]);
      verifcode[diepl]:=verifterug;veri2code[diepl]:=veri2terug;
      {herhalingen tellen en remise detectie}
      herh:=0;if zet50>1 then for b:=0 to (zet50 div 2)-1 do
      if driex[(zet50-2)-b*2]=hashcode[diepl] then
      if driexverif[(zet50-2)-b*2]=verifcode[diepl] then herh:=herh+1;
      for b:=0 to ((diepl-1) div 2)-1 do if hashcode[1+b*2]=hashcode[diepl] then
      if (verifcode[1+b*2]=verifcode[diepl])and(nm[1+b*2]<>1) then herh:=herh+1;
      c:=herh;if zet50+diepl>100 then begin lg:=0;lh:=0;
      for a:=0 to 7 do for b:=0 to 7 do begin d:=b+21+(a*10);
      lg:=lg+(s1c[vbord[d]]+s1m[vbord[d]])*rsleutel2[b+a*8]*vbord[d];
      lh:=lh+stukdaar[vbord[d]];end;
      if (pion50=lg)and(stuk50=lh) then c:=10;end;
      if c>1 then begin eval[diepl]:=0;aantzetten[diepl]:=250;end;
      {hashtable en zetgeneratie}
      alphanode:=0;
      if c<2 then if hashtafelC=0 then begin
       aantzetten[diepl]:=genereerC(diepl,0);pat[diepl]:=aantzetten[diepl];
       if aantzetten[diepl]=250 then if schaakC[diepl]=0 then pat[diepl]:=-1;
       end;
      {nullmove proberen}
      if diepl<NMdiepte then if NMdiepte=diepte then
      if aantzetten[diepl]<250 then if geennmizC=0 then
      if beta[diepl-1]<8000 then if schaakC[diepl]=0 then
      if alphanode=0 then begin b:=0;
         for a:=21 to 98 do begin b:=b+s2c[vbord[a]]*3;
         b:=b+s3c[vbord[a]]*3;b:=b+s4c[vbord[a]]*5;b:=b+s5c[vbord[a]]*9;end;
         if b>4 then
         if evaluatie(diepl+1)>beta[diepl-1]-(80*opofferstijl) then begin
         beta[diepl]:=beta[diepl-1]-1;
         Sdiepte:=diepte-1;if diepl<NMdiepte-1 then Sdiepte:=Sdiepte-1;
         nm[diepl]:=1;NMdiepte:=Sdiepte;nmply:=diepl;end;
        end;
      {extenties}
      if diepl=Sdiepte then begin
       if schaakC[diepl]<>0 then
       if Sdiepte<diepte+msed then begin exten[diepl]:=1;
       if herh>0 then if evaluatie(diepl+1)<0 then exten[diepl]:=0;
       if NMdiepte<diepte then if not odd(nmply) then exten[diepl]:=0;
       if exten[diepl]=1 then Sdiepte:=diepl+1;end;
       end;
      end else begin e:=0;              {Quiescent}
       if (diepl=Sdiepte+1)or(qmets[diepl-1]=1) then begin
       if qmets[diepl-2]=0 then if aanvalopC(kposC[diepl])<>0 then
        schaakC[diepl]:=1;
      f:=0;if Sdiepte<NMdiepte+1 then if qmets[diepl-1]=0 then begin b:=0;
      b:=b+s1m[vbord[31]];b:=b+s1m[vbord[32]];b:=b+s1m[vbord[33]];
      b:=b+s1m[vbord[34]];b:=b+s1m[vbord[35]];b:=b+s1m[vbord[36]];
      b:=b+s1m[vbord[37]];b:=b+s1m[vbord[38]];if b>1 then f:=1;
      if b=1 then if pionMop7e=0 then f:=1;end;
      if (f=1)or(schaakC[diepl]<>0) then begin
      hashcode[diepl]:=geefhashcode(1,rokade[diepl],enpassant[diepl]);
      verifcode[diepl]:=verifterug;veri2code[diepl]:=veri2terug;
      e:=1;Sdiepte:=diepl;herh:=0;c:=0;
      if qmets[diepl-1]=0 then begin
      if zet50>1 then for b:=0 to (zet50 div 2)-1 do
      if driex[(zet50-2)-b*2]=hashcode[diepl] then
      if driexverif[(zet50-2)-b*2]=verifcode[diepl] then herh:=herh+1;
      for b:=0 to ((diepl-1) div 2)-1 do if hashcode[1+b*2]=hashcode[diepl] then
      if (verifcode[1+b*2]=verifcode[diepl])and(nm[1+b*2]<>1) then herh:=herh+1;
      c:=herh;if zet50+diepl>100 then begin lg:=0;lh:=0;
      for a:=0 to 7 do for b:=0 to 7 do begin d:=b+21+(a*10);
      lg:=lg+(s1c[vbord[d]]+s1m[vbord[d]])*rsleutel2[b+a*8]*vbord[d];
      lh:=lh+stukdaar[vbord[d]];end;
      if (pion50=lg)and(stuk50=lh) then c:=10;end;
      if c>1 then begin eval[diepl]:=0;aantzetten[diepl]:=250;end;
      if schaakC[diepl]<>0 then if diepl<diepte+msed then
       begin exten[diepl]:=1;
       if herh>0 then if evaluatie(diepl+1)<0 then exten[diepl]:=0;
       if NMdiepte<diepte then if not odd(nmply) then exten[diepl]:=0;
       if exten[diepl]=1 then Sdiepte:=diepl+1;end;
      end;if c<2 then
      if hashtafelC=0 then begin aantzetten[diepl]:=genereerC(diepl,0);
       pat[diepl]:=aantzetten[diepl];if aantzetten[diepl]=250 then
       if schaakC[diepl]=0 then pat[diepl]:=-1;end;
      if qmets[diepl-1]=1 then begin schaakC[diepl]:=0;pat[diepl]:=250;end;
      end;
     end;
       if e=0 then begin eval[diepl]:=evaluatie(diepl);
       if eval[diepl]>beta[diepl] then beta[diepl]:=eval[diepl];
       if eval[diepl]<beta[diepl-1] then begin
       if (diepl<diepte+5)or(diepl<Sdiepte+4) then begin
       if nm[diepl-1]=1 then begin
       hashcode[diepl]:=geefhashcode(1,rokade[diepl],enpassant[diepl]);
       verifcode[diepl]:=verifterug;veri2code[diepl]:=veri2terug;herh:=0;
       vbordncp(diepl);qmets[diepl]:=1;
       if hashtafelC=0 then qmetschaakC;end else
       aantzetten[diepl]:=genereerC(diepl,zet2[zetnummer[diepl-1],diepl-1]);
       end else
       aantzetten[diepl]:=genereerSEEC(zet2[zetnummer[diepl-1],diepl-1],diepl);
       end else aantzetten[diepl]:=250;end;{e=0}
       end;{qsearch}
       end else begin eval[diepl]:=10002-diepl;aantzetten[diepl]:=250;
      if schaakM[diepl-1]=0 then pat[diepl-1]:=pat[diepl-1]-1;end;
      end;
      if not oneven then begin eval[diepl]:=25000;
      schaakC[diepl]:=aanvalopC(kposC[diepl]);
      if schaakC[diepl]=0 then begin
      if diepl<Sdiepte+1 then begin
      schaakM[diepl]:=aanvalopM(kposM[diepl]);
      hashcode[diepl]:=geefhashcode(0,rokade[diepl],enpassant[diepl]);
      verifcode[diepl]:=verifterug;veri2code[diepl]:=veri2terug;
      {herhalingen tellen en remise detectie}
      herh:=0;if zet50>0 then for b:=0 to (zet50-1) div 2 do
      if driex[(zet50-1)-b*2]=hashcode[diepl] then
      if driexverif[(zet50-1)-b*2]=verifcode[diepl] then herh:=herh+1;
      if diepl>2 then for b:=1 to (diepl div 2)-1 do
      if hashcode[b*2]=hashcode[diepl] then
      if (verifcode[b*2]=verifcode[diepl])and(nm[b*2]<>1) then herh:=herh+1;
      c:=herh;if zet50+diepl>100 then begin lg:=0;lh:=0;
      for a:=0 to 7 do for b:=0 to 7 do begin d:=b+21+(a*10);
      lg:=lg+(s1c[vbord[d]]+s1m[vbord[d]])*rsleutel2[b+a*8]*vbord[d];
      lh:=lh+stukdaar[vbord[d]];end;
      if (pion50=lg)and(stuk50=lh) then c:=10;end;
      if c>1 then begin eval[diepl]:=0;aantzetten[diepl]:=250;end;
      {hashtable en zetgeneratie}
      alphanode:=0;
      if c<2 then if hashtafelM=0 then begin
       aantzetten[diepl]:=genereerM(diepl,0);pat[diepl]:=aantzetten[diepl];
       if aantzetten[diepl]=250 then if schaakM[diepl]=0 then pat[diepl]:=-1;
       if diepl=2 then sorteeropeval;end;
      {nullmove proberen}
      if diepl<NMdiepte then if NMdiepte=diepte then
      if aantzetten[diepl]<250 then if geennmizM=0 then
      if beta[diepl-1]>-8000 then if schaakM[diepl]=0 then
      if diepl>2 then if alphanode=0 then begin b:=0;
         for a:=21 to 98 do begin b:=b+s2m[vbord[a]]*3;
         b:=b+s3m[vbord[a]]*3;b:=b+s4m[vbord[a]]*5;b:=b+s5m[vbord[a]]*9;end;
         if b>4 then
         if evaluatie(diepl+1)<beta[diepl-1]+(80*opofferstijl) then begin
         beta[diepl]:=beta[diepl-1]+1;
         Sdiepte:=diepte-1;if diepl<NMdiepte-1 then Sdiepte:=Sdiepte-1;
         nm[diepl]:=1;NMdiepte:=Sdiepte;nmply:=diepl;end;
        end;
      {extenties}
      if diepl=Sdiepte then begin
       if schaakM[diepl]<>0 then
       if Sdiepte<diepte+msed then begin exten[diepl]:=1;
       if herh>0 then if evaluatie(diepl+1)>0 then exten[diepl]:=0;
       if NMdiepte<diepte then if odd(nmply) then exten[diepl]:=0;
       if exten[diepl]=1 then Sdiepte:=diepl+1;end;
       end;
      end else begin e:=0;                  {Quiescent}
       if (diepl=Sdiepte+1)or(qmets[diepl-1]=1) then begin
       if qmets[diepl-2]=0 then if aanvalopM(kposM[diepl])<>0 then
        schaakM[diepl]:=1;
      f:=0;if Sdiepte<NMdiepte+1 then if qmets[diepl-1]=0 then begin b:=0;
      b:=b+s1c[vbord[81]];b:=b+s1c[vbord[82]];b:=b+s1c[vbord[83]];
      b:=b+s1c[vbord[84]];b:=b+s1c[vbord[85]];b:=b+s1c[vbord[86]];
      b:=b+s1c[vbord[87]];b:=b+s1c[vbord[88]];if b>1 then f:=1;
      if b=1 then if pionCop7e=0 then f:=1;end;
      if (f=1)or(schaakM[diepl]<>0) then begin
      hashcode[diepl]:=geefhashcode(0,rokade[diepl],enpassant[diepl]);
      verifcode[diepl]:=verifterug;veri2code[diepl]:=veri2terug;
      e:=1;Sdiepte:=diepl;herh:=0;c:=0;
      if qmets[diepl-1]=0 then begin
      if zet50>0 then for b:=0 to (zet50-1) div 2 do
      if driex[(zet50-1)-b*2]=hashcode[diepl] then
      if driexverif[(zet50-1)-b*2]=verifcode[diepl] then herh:=herh+1;
      if diepl>2 then for b:=1 to (diepl div 2)-1 do
      if hashcode[b*2]=hashcode[diepl] then
      if (verifcode[b*2]=verifcode[diepl])and(nm[b*2]<>1) then herh:=herh+1;
      c:=herh;if zet50+diepl>100 then begin lg:=0;lh:=0;
      for a:=0 to 7 do for b:=0 to 7 do begin d:=b+21+(a*10);
      lg:=lg+(s1c[vbord[d]]+s1m[vbord[d]])*rsleutel2[b+a*8]*vbord[d];
      lh:=lh+stukdaar[vbord[d]];end;
      if (pion50=lg)and(stuk50=lh) then c:=10;end;
      if c>1 then begin eval[diepl]:=0;aantzetten[diepl]:=250;end;
      if schaakM[diepl]<>0 then if diepl<diepte+msed then
       begin exten[diepl]:=1;
       if herh>0 then if evaluatie(diepl+1)>0 then exten[diepl]:=0;
       if NMdiepte<diepte then if odd(nmply) then exten[diepl]:=0;
       if exten[diepl]=1 then Sdiepte:=diepl+1;end;
      end;if c<2 then
      if hashtafelM=0 then begin aantzetten[diepl]:=genereerM(diepl,0);
       pat[diepl]:=aantzetten[diepl];if aantzetten[diepl]=250 then
       if schaakM[diepl]=0 then pat[diepl]:=-1;end;
      if qmets[diepl-1]=1 then begin schaakM[diepl]:=0;pat[diepl]:=250;end;
      end;
     end;
       if e=0 then begin eval[diepl]:=evaluatie(diepl);
       if eval[diepl]<beta[diepl] then beta[diepl]:=eval[diepl];
       if eval[diepl]>beta[diepl-1] then begin
       if (diepl<diepte+5)or(diepl<Sdiepte+4) then begin
       if nm[diepl-1]=1 then begin
       hashcode[diepl]:=geefhashcode(0,rokade[diepl],enpassant[diepl]);
       verifcode[diepl]:=verifterug;veri2code[diepl]:=veri2terug;herh:=0;
       vbordncp(diepl);qmets[diepl]:=1;
       if hashtafelM=0 then qmetschaakM;end else
       aantzetten[diepl]:=genereerM(diepl,zet2[zetnummer[diepl-1],diepl-1]);
       end else
       aantzetten[diepl]:=genereerSEEM(zet2[zetnummer[diepl-1],diepl-1],diepl);
       end else aantzetten[diepl]:=250;end;
       end; {qsearch}
       end else begin eval[diepl]:=diepl-10003;aantzetten[diepl]:=250;
       if schaakC[diepl-1]=0 then pat[diepl-1]:=pat[diepl-1]-1;end;
      end;
      zetnummer[diepl]:=0;if aantzetten[diepl]<250 then begin
      if qmets[diepl]=0 then vbordncp(diepl);end else zetnummer[diepl]:=252;
      doevolgende[diepl]:=0;doevolgende[diepl+1]:=0;
      if diepl>Sdiepte+1 then begin inc(qnode);
      if diepl-1>maxdiep then maxdiep:=diepl-1;end else
      qnode:=qnode+qmets[diepl-1]+qmets[diepl-2];
      zetnummer[diepl+1]:=252;aantzetten[diepl+1]:=250;
      inc(node);
     end;

    if doevolgende[diepl]=1 then begin       {volgende zet doen op ply}
      zetnummer[diepl+1]:=252;aantzetten[diepl+1]:=250;
      doevolgende[diepl+1]:=0;doevolgende[diepl]:=0;
      if oneven then begin
       if eval[diepl]>=beta[diepl-1] then begin
        if cpbord[zet2[zetnummer[diepl],diepl],diepl]=10 then
        if nm[diepl]<>1 then begin
        if (killer1[diepl]<>killer3[diepl])or
           (killer2[diepl]<>killer4[diepl]) then begin
           killer3[diepl]:=killer1[diepl];killer4[diepl]:=killer2[diepl];end;
        killer1[diepl]:=zet1[zetnummer[diepl],diepl];
        killer2[diepl]:=zet2[zetnummer[diepl],diepl];end;
        zetnummer[diepl]:=aantzetten[diepl];end;
       {extenties}
       if diepl=Sdiepte then if exten[diepl]=1 then Sdiepte:=diepl+1;
      end else begin
       if eval[diepl]<=beta[diepl-1] then begin
        if cpbord[zet2[zetnummer[diepl],diepl],diepl]=10 then
        if nm[diepl]<>1 then begin
        if (killer1[diepl]<>killer3[diepl])or
           (killer2[diepl]<>killer4[diepl]) then begin
           killer3[diepl]:=killer1[diepl];killer4[diepl]:=killer2[diepl];end;
        killer1[diepl]:=zet1[zetnummer[diepl],diepl];
        killer2[diepl]:=zet2[zetnummer[diepl],diepl];end;
        zetnummer[diepl]:=aantzetten[diepl];end;
       {extenties}
       if diepl=Sdiepte then if exten[diepl]=1 then Sdiepte:=diepl+1;
      end;
      inc(zetnummer[diepl]);
     end;

     if (zetnummer[diepl]>aantzetten[diepl])or((nm[diepl]=1) {einde van ply}
        and(zetnummer[diepl]>0)) then begin
      lb:=0;if nm[diepl]<>0 then if aantzetten[diepl]<250 then begin
       if nm[diepl]=2 then begin {verificatie gedaan}
        if pat[diepl]<0 then eval[diepl]:=0;
        if oneven then if eval[diepl]<beta[diepl-1] then lb:=1;
        if not oneven then if eval[diepl]>beta[diepl-1] then lb:=1;
        eval[diepl]:=beta[diepl-1];
        if lb=1 then begin
          zetnummer[diepl]:=0;beta[diepl]:=beta[diepl-2];cpnvbord(diepl);
          pat[diepl]:=aantzetten[diepl];
         if oneven then eval[diepl]:=-25000 else eval[diepl]:=25000;
        end;
         Sdiepte:=diepte;NMdiepte:=diepte;
         best1[diepl]:=21;best2[diepl]:=21;nm[diepl]:=0;
        end;
       if nm[diepl]=1 then begin
       if oneven then if eval[diepl]<beta[diepl-1] then lb:=1;
       if not oneven then if eval[diepl]>beta[diepl-1] then lb:=1;
       pat[diepl]:=aantzetten[diepl];best1[diepl]:=21;best2[diepl]:=21;
       nm[diepl]:=2;zetnummer[diepl]:=0;
       nullers:=nullers+1;nullhits:=nullhits+1;
       Sdiepte:=NMdiepte;cpnvbord(diepl);
       if oneven then begin beta[diepl]:=beta[diepl-1]-1;
       eval[diepl]:=-25000 end else
       begin eval[diepl]:=25000;beta[diepl]:=beta[diepl-1]+1;end;
       if lb=1 then begin nullhits:=nullhits-1;
         Sdiepte:=diepte;NMdiepte:=diepte;nm[diepl]:=0;
         beta[diepl]:=beta[diepl-2];
        end;lb:=1;
       end;
      end;
     if lb=0 then begin
      if pat[diepl]<0 then eval[diepl]:=0;
      if diepl<Sdiepte+1 then begin
       if aantzetten[diepl]<250 then begin
       b:=3;if diepl>1 then begin if oneven then begin {0=exact 1=beta 2=alpha}
        if eval[diepl]<beta[diepl-1] then
         if eval[diepl]>beta[diepl-2] then b:=0;
        if eval[diepl]<=beta[diepl-2] then b:=2;
        if eval[diepl]>=beta[diepl-1] then b:=1;end else begin
        if eval[diepl]>beta[diepl-1] then
         if eval[diepl]<beta[diepl-2] then b:=0;
        if eval[diepl]>=beta[diepl-2] then b:=2;
        if eval[diepl]<=beta[diepl-1] then b:=1;end;
       end;
       a:=0;if diepl<NMdiepte+1 then a:=(NMdiepte-diepl)+1;
       hashopslaan(hashcode[diepl],verifcode[diepl],veri2code[diepl],
        best1[diepl],best2[diepl],a,b,eval[diepl]);
       end;
       {extentie diepte verkleinen met 1 ply}
       if Sdiepte<>NMdiepte then begin Sdiepte:=diepl-1;
        if qmets[diepl-1]=1 then Sdiepte:=diepl-2;
        if Sdiepte<NMdiepte then Sdiepte:=NMdiepte;end;
      end;
      doevolgende[diepl-1]:=1;zbni:=diepl-1;zbklaar:=1;
      if oneven then begin
       if diepl=1 then plyklaar:=1;
       if eval[diepl]<beta[diepl-1] then beta[diepl-1]:=eval[diepl];
       if eval[diepl]<eval[diepl-1] then begin eval[diepl-1]:=eval[diepl];
        best1[diepl-1]:=zet1[zetnummer[diepl-1],diepl-1];
        best2[diepl-1]:=zet2[zetnummer[diepl-1],diepl-1];end;
      end else begin
       if eval[diepl]>beta[diepl-1] then beta[diepl-1]:=eval[diepl];
       if eval[diepl]>eval[diepl-1] then begin eval[diepl-1]:=eval[diepl];
        best1[diepl-1]:=zet1[zetnummer[diepl-1],diepl-1];
        best2[diepl-1]:=zet2[zetnummer[diepl-1],diepl-1];
        if diepl=2 then begin
         beste:=zetnummer[1];g:=0;punten:=eval[diepl];
         if eval[diepl]>=raamPlus then begin if failMin<>1 then begin
          zetnummer[1]:=zetnummer[1]-1;
          if herzoek=0 then beta[0]:=punten+250;
          if herzoek=1 then beta[0]:=punten+600;
          if herzoek>1 then beta[0]:=25000;
          herzoek:=herzoek+1;failMin:=2;if diepte>4 then posteval;
          raamPlus:=beta[0];raamMin:=punten-1;eval[1]:=-25000;g:=1;end;
          if failMin=1 then if diepte>2 then begin
          zetnummer[1]:=-1;failMin:=0;onstabiel:=onstabiel+1;
          if onstabiel=1 then begin raamPlus:=punten+5;raamMin:=punten-3;end;
          if onstabiel=2 then begin raamPlus:=punten+50;raamMin:=punten-50;end;
          if onstabiel=3 then begin
raamPlus:=punten+150;raamMin:=punten-150;end;
          if onstabiel=4 then begin
hashleeg;raamPlus:=punten+5;raamMin:=punten-3;end;
          if onstabiel=5 then begin
hashleeg;raamPlus:=punten+50;raamMin:=punten-50;end;
          if onstabiel=6 then begin
hashleeg;raamPlus:=punten+150;raamMin:=punten-150;end;
          if onstabiel>6 then begin
hashleeg;raamPlus:=25000;raamMin:=-25000;end;
          beta[0]:=raamPlus;beta[1]:=raamMin;
          eval[1]:=-25000;posteval;herzoek:=0;
          tijdgrens:=round(tijdideaal*12);puntenvply:=12000;g:=1;
          if onstabiel>9 then g:=0;
          if (aantzetten[1]>0)and(beste>0) then begin
          b:=zet1[beste,1];c:=zet2[beste,1];for a:=beste downto 1 do begin
          zet1[a,1]:=zet1[a-1,1];zet2[a,1]:=zet2[a-1,1];end;

zet1[0,1]:=b;zet2[0,1]:=c;b:=varieer[beste];varieer[beste]:=varieer[0];
          varieer[0]:=b;beste:=0;best1[1]:=21;best2[1]:=21;end;end;
         end;
         if eval[diepl]<=raamMin then begin if failMin<2 then begin
          zetnummer[1]:=zetnummer[1]-1;
          if herzoek=0 then beta[1]:=punten-250;
          if herzoek=1 then beta[1]:=punten-600;
          if herzoek>1 then beta[1]:=-25000;
          herzoek:=herzoek+1;failMin:=1;if diepte>4 then posteval;
          raamPlus:=punten+1;raamMin:=beta[1];
          beta[0]:=punten;eval[1]:=-25000;g:=1;end;
          if failMin=2 then if diepte>2 then begin
          zetnummer[1]:=-1;failMin:=0;onstabiel:=onstabiel+1;
          if onstabiel=1 then begin raamPlus:=punten+5;raamMin:=punten-3;end;
          if onstabiel=2 then begin raamPlus:=punten+50;raamMin:=punten-50;end;
          if onstabiel=3 then begin
raamPlus:=punten+150;raamMin:=punten-150;end;
          if onstabiel=4 then begin
hashleeg;raamPlus:=punten+5;raamMin:=punten-3;end;
          if onstabiel=5 then begin
hashleeg;raamPlus:=punten+50;raamMin:=punten-50;end;
          if onstabiel=6 then begin
hashleeg;raamPlus:=punten+150;raamMin:=punten-150;end;
          if onstabiel>6 then begin
hashleeg;raamPlus:=25000;raamMin:=-25000;end;
          beta[0]:=raamPlus;beta[1]:=raamMin;
          eval[1]:=-25000;posteval;herzoek:=0;
          tijdgrens:=round(tijdideaal*12);puntenvply:=12000;g:=1;
          if onstabiel>9 then g:=0;
          if (aantzetten[1]>0)and(beste>0) then begin
          b:=zet1[beste,1];c:=zet2[beste,1];for a:=beste downto 1 do begin
          zet1[a,1]:=zet1[a-1,1];zet2[a,1]:=zet2[a-1,1];end;

zet1[0,1]:=b;zet2[0,1]:=c;b:=varieer[beste];varieer[beste]:=varieer[0];
          varieer[0]:=b;beste:=0;best1[1]:=21;best2[1]:=21;end;end;
         end;
         if g=0 then begin
          raamPlus:=punten+1;raamMin:=punten-1;failMin:=0;
          beta[0]:=raamPlus;if diepte>2 then posteval;herzoek:=0;end;
        end;
       end;
       end;
      end;
     end;

    if diepl=56 then begin if Sdiepte>55 then Sdiepte:=55;
    doevolgende[55]:=1;zbklaar:=1;zbni:=54;end;
    inc(diepl);
    until zbklaar=1;        {einde zoekboom}

   inc(iteraties);
   until (iteraties>iteratielimiet)or(plyklaar=1);    {einde iteratielus}




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.