Code: Select all
int MTD(int guess, int depth)
{
int lowerBound = -short.MaxValue;
int upperBound = short.MaxValue;
do
{
int beta = guess != lowerBound ? guess : guess + 1;
guess = AlphaBetaWithMemory(beta - 1, beta, depth);
if (guess < beta)
{
upperBound = guess;
}
else
{
lowerBound = guess;
}
} while (lowerBound < upperBound);
return guess;
}
Code: Select all
// Improved???
int ImprovedMTD(int guess, int depth)
{
int lowerBound = -short.MaxValue;
int upperBound = short.MaxValue;
do
{
int beta = guess != lowerBound ? guess : guess + 1;
guess = AlphaBetaWithMemory(beta - 1, beta, depth);
if (guess < beta)
{
upperBound = guess;
}
else
{
lowerBound = guess;
}
// !!! TADAAAA !!!
guess = (lowerBound + upperBound) / 2;
} while (lowerBound < upperBound);
return guess;
}