mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 09:13:08 +00:00
Synchronize variable listing of 4 different search routines
search() is used as a "leading star" and other routines are modified according to it. No functional change Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
7bcd97933a
commit
3888d14bd4
1 changed files with 33 additions and 24 deletions
|
@ -1039,14 +1039,16 @@ namespace {
|
||||||
assert(threadID >= 0 && threadID < TM.active_threads());
|
assert(threadID >= 0 && threadID < TM.active_threads());
|
||||||
|
|
||||||
Move movesSearched[256];
|
Move movesSearched[256];
|
||||||
|
EvalInfo ei;
|
||||||
StateInfo st;
|
StateInfo st;
|
||||||
const TTEntry* tte;
|
const TTEntry* tte;
|
||||||
Move ttMove, move;
|
Move ttMove, move;
|
||||||
Depth ext, newDepth;
|
Depth ext, newDepth;
|
||||||
Value oldAlpha, value;
|
Value bestValue, value, oldAlpha;
|
||||||
bool isCheck, mateThreat, singleEvasion, moveIsCheck, captureOrPromotion, dangerous;
|
bool isCheck, singleEvasion, moveIsCheck, captureOrPromotion, dangerous;
|
||||||
|
bool mateThreat = false;
|
||||||
int moveCount = 0;
|
int moveCount = 0;
|
||||||
Value bestValue = value = -VALUE_INFINITE;
|
bestValue = value = -VALUE_INFINITE;
|
||||||
|
|
||||||
if (depth < OnePly)
|
if (depth < OnePly)
|
||||||
return qsearch(pos, ss, alpha, beta, Depth(0), ply, threadID);
|
return qsearch(pos, ss, alpha, beta, Depth(0), ply, threadID);
|
||||||
|
@ -1085,7 +1087,6 @@ namespace {
|
||||||
isCheck = pos.is_check();
|
isCheck = pos.is_check();
|
||||||
if (!isCheck)
|
if (!isCheck)
|
||||||
{
|
{
|
||||||
EvalInfo ei;
|
|
||||||
ss[ply].eval = evaluate(pos, ei, threadID);
|
ss[ply].eval = evaluate(pos, ei, threadID);
|
||||||
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
update_gains(pos, ss[ply - 1].currentMove, ss[ply - 1].eval, ss[ply].eval);
|
||||||
}
|
}
|
||||||
|
@ -1778,20 +1779,25 @@ namespace {
|
||||||
// splitting, we don't have to repeat all this work in sp_search(). We
|
// splitting, we don't have to repeat all this work in sp_search(). We
|
||||||
// also don't need to store anything to the hash table here: This is taken
|
// also don't need to store anything to the hash table here: This is taken
|
||||||
// care of after we return from the split point.
|
// care of after we return from the split point.
|
||||||
|
// FIXME: We are currently ignoring mateThreat flag here
|
||||||
|
|
||||||
void sp_search(SplitPoint* sp, int threadID) {
|
void sp_search(SplitPoint* sp, int threadID) {
|
||||||
|
|
||||||
assert(threadID >= 0 && threadID < TM.active_threads());
|
assert(threadID >= 0 && threadID < TM.active_threads());
|
||||||
assert(TM.active_threads() > 1);
|
assert(TM.active_threads() > 1);
|
||||||
|
|
||||||
|
StateInfo st;
|
||||||
|
Move move;
|
||||||
|
Depth ext, newDepth;
|
||||||
|
Value value, futilityValueScaled;
|
||||||
|
bool isCheck, moveIsCheck, captureOrPromotion, dangerous;
|
||||||
|
int moveCount;
|
||||||
|
value = -VALUE_INFINITE;
|
||||||
|
|
||||||
Position pos(*sp->pos);
|
Position pos(*sp->pos);
|
||||||
CheckInfo ci(pos);
|
CheckInfo ci(pos);
|
||||||
SearchStack* ss = sp->sstack[threadID];
|
SearchStack* ss = sp->sstack[threadID];
|
||||||
StateInfo st;
|
isCheck = pos.is_check();
|
||||||
Value value = -VALUE_INFINITE;
|
|
||||||
Move move;
|
|
||||||
int moveCount;
|
|
||||||
bool isCheck = pos.is_check();
|
|
||||||
|
|
||||||
// Step 10. Loop through moves
|
// Step 10. Loop through moves
|
||||||
// Loop through all legal moves until no moves remain or a beta cutoff occurs
|
// Loop through all legal moves until no moves remain or a beta cutoff occurs
|
||||||
|
@ -1806,13 +1812,12 @@ namespace {
|
||||||
|
|
||||||
assert(move_is_ok(move));
|
assert(move_is_ok(move));
|
||||||
|
|
||||||
bool moveIsCheck = pos.move_is_check(move, ci);
|
moveIsCheck = pos.move_is_check(move, ci);
|
||||||
bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
|
captureOrPromotion = pos.move_is_capture_or_promotion(move);
|
||||||
|
|
||||||
// Step 11. Decide the new search depth
|
// Step 11. Decide the new search depth
|
||||||
bool dangerous;
|
ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, false, false, &dangerous);
|
||||||
Depth ext = extension(pos, move, false, captureOrPromotion, moveIsCheck, false, false, &dangerous);
|
newDepth = sp->depth - OnePly + ext;
|
||||||
Depth newDepth = sp->depth - OnePly + ext;
|
|
||||||
|
|
||||||
// Update current move
|
// Update current move
|
||||||
ss[sp->ply].currentMove = move;
|
ss[sp->ply].currentMove = move;
|
||||||
|
@ -1834,7 +1839,7 @@ namespace {
|
||||||
|
|
||||||
// Value based pruning
|
// Value based pruning
|
||||||
Depth predictedDepth = newDepth - nonpv_reduction(sp->depth, moveCount);
|
Depth predictedDepth = newDepth - nonpv_reduction(sp->depth, moveCount);
|
||||||
Value futilityValueScaled = ss[sp->ply].eval + futility_margin(predictedDepth, moveCount)
|
futilityValueScaled = ss[sp->ply].eval + futility_margin(predictedDepth, moveCount)
|
||||||
+ H.gain(pos.piece_on(move_from(move)), move_to(move)) + 45;
|
+ H.gain(pos.piece_on(move_from(move)), move_to(move)) + 45;
|
||||||
|
|
||||||
if (futilityValueScaled < sp->beta)
|
if (futilityValueScaled < sp->beta)
|
||||||
|
@ -1909,19 +1914,24 @@ namespace {
|
||||||
// don't have to repeat all this work in sp_search_pv(). We also don't
|
// don't have to repeat all this work in sp_search_pv(). We also don't
|
||||||
// need to store anything to the hash table here: This is taken care of
|
// need to store anything to the hash table here: This is taken care of
|
||||||
// after we return from the split point.
|
// after we return from the split point.
|
||||||
|
// FIXME: We are ignoring mateThreat flag!
|
||||||
|
|
||||||
void sp_search_pv(SplitPoint* sp, int threadID) {
|
void sp_search_pv(SplitPoint* sp, int threadID) {
|
||||||
|
|
||||||
assert(threadID >= 0 && threadID < TM.active_threads());
|
assert(threadID >= 0 && threadID < TM.active_threads());
|
||||||
assert(TM.active_threads() > 1);
|
assert(TM.active_threads() > 1);
|
||||||
|
|
||||||
|
StateInfo st;
|
||||||
|
Move move;
|
||||||
|
Depth ext, newDepth;
|
||||||
|
Value value;
|
||||||
|
bool moveIsCheck, captureOrPromotion, dangerous;
|
||||||
|
int moveCount;
|
||||||
|
value = -VALUE_INFINITE;
|
||||||
|
|
||||||
Position pos(*sp->pos);
|
Position pos(*sp->pos);
|
||||||
CheckInfo ci(pos);
|
CheckInfo ci(pos);
|
||||||
SearchStack* ss = sp->sstack[threadID];
|
SearchStack* ss = sp->sstack[threadID];
|
||||||
StateInfo st;
|
|
||||||
Value value = -VALUE_INFINITE;
|
|
||||||
int moveCount;
|
|
||||||
Move move;
|
|
||||||
|
|
||||||
// Step 10. Loop through moves
|
// Step 10. Loop through moves
|
||||||
// Loop through all legal moves until no moves remain or a beta cutoff occurs
|
// Loop through all legal moves until no moves remain or a beta cutoff occurs
|
||||||
|
@ -1936,13 +1946,12 @@ namespace {
|
||||||
|
|
||||||
assert(move_is_ok(move));
|
assert(move_is_ok(move));
|
||||||
|
|
||||||
bool moveIsCheck = pos.move_is_check(move, ci);
|
moveIsCheck = pos.move_is_check(move, ci);
|
||||||
bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
|
captureOrPromotion = pos.move_is_capture_or_promotion(move);
|
||||||
|
|
||||||
// Step 11. Decide the new search depth
|
// Step 11. Decide the new search depth
|
||||||
bool dangerous;
|
ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, false, false, &dangerous);
|
||||||
Depth ext = extension(pos, move, true, captureOrPromotion, moveIsCheck, false, false, &dangerous);
|
newDepth = sp->depth - OnePly + ext;
|
||||||
Depth newDepth = sp->depth - OnePly + ext;
|
|
||||||
|
|
||||||
// Update current move
|
// Update current move
|
||||||
ss[sp->ply].currentMove = move;
|
ss[sp->ply].currentMove = move;
|
||||||
|
|
Loading…
Add table
Reference in a new issue