Use special null move technique in low depth.
Try good captures before null move when depth < 3 * OnePly. Use this kind of null move also in Depth == OnePly. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
a5d699d62f
commit
b088f0aefd
|
@ -45,6 +45,7 @@ namespace {
|
||||||
CACHE_LINE_ALIGNMENT
|
CACHE_LINE_ALIGNMENT
|
||||||
const MovegenPhaseT MainSearchPhaseTable[] = { PH_STOP, PH_NULL_MOVE, PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
const MovegenPhaseT MainSearchPhaseTable[] = { PH_STOP, PH_NULL_MOVE, PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
||||||
const MovegenPhaseT MainSearchNoNullPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
const MovegenPhaseT MainSearchNoNullPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_GOOD_CAPTURES, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
||||||
|
const MovegenPhaseT LowSearchPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_GOOD_CAPTURES, PH_NULL_MOVE, PH_KILLERS, PH_NONCAPTURES, PH_BAD_CAPTURES, PH_STOP};
|
||||||
const MovegenPhaseT EvasionsPhaseTable[] = { PH_STOP, PH_EVASIONS, PH_STOP};
|
const MovegenPhaseT EvasionsPhaseTable[] = { PH_STOP, PH_EVASIONS, PH_STOP};
|
||||||
const MovegenPhaseT QsearchWithChecksPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_QCAPTURES, PH_QCHECKS, PH_STOP};
|
const MovegenPhaseT QsearchWithChecksPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_QCAPTURES, PH_QCHECKS, PH_STOP};
|
||||||
const MovegenPhaseT QsearchWithoutChecksPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_QCAPTURES, PH_STOP};
|
const MovegenPhaseT QsearchWithoutChecksPhaseTable[] = { PH_STOP, PH_TT_MOVES, PH_QCAPTURES, PH_STOP};
|
||||||
|
@ -79,8 +80,10 @@ MovePicker::MovePicker(const Position& p, Move ttm, Depth d,
|
||||||
|
|
||||||
if (p.is_check())
|
if (p.is_check())
|
||||||
phasePtr = EvasionsPhaseTable;
|
phasePtr = EvasionsPhaseTable;
|
||||||
else if (d > Depth(0))
|
else if (d >= Depth(3 * OnePly))
|
||||||
phasePtr = useNullMove ? MainSearchPhaseTable : MainSearchNoNullPhaseTable;
|
phasePtr = useNullMove ? MainSearchPhaseTable : MainSearchNoNullPhaseTable;
|
||||||
|
else if (d > Depth(0))
|
||||||
|
phasePtr = useNullMove ? LowSearchPhaseTable : MainSearchNoNullPhaseTable;
|
||||||
else if (d == Depth(0))
|
else if (d == Depth(0))
|
||||||
phasePtr = QsearchWithChecksPhaseTable;
|
phasePtr = QsearchWithChecksPhaseTable;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1282,7 +1282,7 @@ namespace {
|
||||||
bool isCheck = pos.is_check();
|
bool isCheck = pos.is_check();
|
||||||
|
|
||||||
bool useNullMove = ( allowNullmove
|
bool useNullMove = ( allowNullmove
|
||||||
&& depth > OnePly
|
//&& depth > OnePly
|
||||||
&& !isCheck
|
&& !isCheck
|
||||||
&& !value_is_mate(beta)
|
&& !value_is_mate(beta)
|
||||||
&& ok_to_do_nullmove(pos)
|
&& ok_to_do_nullmove(pos)
|
||||||
|
|
Loading…
Reference in a new issue