Author: Jose Santos
Date: 18:54:53 09/09/03
Go up one level in this thread
Hi,
>welcome to the chess programmer community. I have just added your download >links to my new link page for Pascal/Delphi chess programmers
>http://wbholmes.de/links_pascal.htm. I hope your links are not temporary.
Thanks. I've just gone there. There's a HUGE amount of it. I downloaded and
tested some programs (not yours yet).
The links are not temporary. I'll post new versions on those links.
By the way I didn't mention but I also have a DOS version. It's here:
http://ctp.di.fct.unl.pt/~jcas/chessdos.exe
As you can guess this version was compiled with Free Pascal (1.1) and hence is
about 40% slower than Win32 version which was compiled with Delphi 7. Linux
version was compiled with Kylix 3.
>To your problem: Perhaps an error in your AlphaBeta algorythm. You should >post a part of it here for a better help.
Ok, here's my min-max
function MiniMax(CurDepth: Integer; Alpha, Beta: Integer): Integer;
//MaxNode is true when CurDepth is Even.
//At odd depths we are at min nodes (opponent nodes)
//With alpha-beta cuts!
var
Value: Integer;
I: Integer;
Moves: TMoves;
begin
if (CurDepth = MaxDepth) or (Board.KingTaken) then
begin
Inc(PositionsEvaluated);
//don't forget evaluation function gives a positive
//number if advantage is for white so we have to check that
if Color=White then
Result:=Evaluate
else//Color=Black
Result:=-Evaluate;
end else if Odd(CurDepth) then //if we are in a min node
begin
Moves:=Board.GetPossibleMoves(OppositeColor(Color));//opponent turn
for I:=1 to Moves.CountMoves do
begin
Board.DoMove(Moves.GetMove(I));
Value:=MiniMax(CurDepth+1, Alpha, Beta);
Board.UndoLastMove;
if Value < Beta then
Beta:=Value;
if Beta <= Alpha then
break;
end;
Moves.Free;
Result:=Beta;
end else//MaxNode
begin
Moves:=Board.GetPossibleMoves(Color);//this is my turn
for I:=1 to Moves.CountMoves do
begin
Board.DoMove(Moves.GetMove(I));
Value:=MiniMax(CurDepth+1, Alpha, Beta);
Board.UndoLastMove;
if Value > Alpha then
begin
Alpha:=Value;
if CurDepth=0 then//update best move
BestMove:=Moves.GetMove(I);
end;
if Alpha >= Beta then
break;
end;
Moves.Free;
Result:=Alpha;
end;
end;
Is there a problem not to generate the main variation and do
if CurDepth=0 then//update best move
BestMove:=Moves.GetMove(I);
?
I don't think so but I also don't like much my solution.
Have you tried my program ?
Regards,
Jose Santos
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.