return do_see<false>(m, 0);
}
+/// Position::see_asymm() takes tempi into account.
+/// If the side who initiated the capturing sequence does the last capture,
+/// he loses a tempo. In this case if the result is below asymmThreshold
+/// the capturing sequence is considered bad.
+
int Position::see_asymm(Move m, int asymmThreshold) const
{
return do_see<true>(m, asymmThreshold);
} while (stmAttackers);
- // FIXME: Document
+ // If we are doing asymmetric SEE evaluation and the same side does the first
+ // and the last capture, he loses a tempo and gain must be at least worth "asymmThreshold".
+ // If not, we replace the score with a very low value, before negamaxing.
if (Asymmetric)
{
- for (int i = 0; i < slIndex ; slIndex += 2)
+ for (int i = 0; i < slIndex ; i += 2)
{
- if (swapList[slIndex] < asymmThreshold)
- swapList[slIndex] = - QueenValueMg * 16;
+ if (swapList[i] < asymmThreshold)
+ swapList[i] = - QueenValueMg * 16;
}
}