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.