3

in my minimax function I have a first few lines looking something like this:

children = board.get_all_possible_moves(board)

if depth = 0 or board.is_check_mate or board.is_draw:
    return None, evaluation(board)

The problem is that it takes time to calculate the children one "extra time" if the depth is 0 and the position is not draw or check mate. However, I want to know if the board state at depth 0 is check mate or draw.

As of now I detect check mate and draw by the following logic:

if not possible_moves:
    if board.is_check:
        board.is_check_mate = True
    else:
        board.is_draw = True

Is there a better way of finding whether a posisiton is check mate or not? Without having to calculate the opponents possible moves first, to save time in the minimax recursive function. Thank you in advance.

2

Your approach is correct. Stockfish does it as well.

https://github.com/official-stockfish/Stockfish/blob/master/src/search.cpp

if (rootMoves.empty())
{
  rootMoves.emplace_back(MOVE_NONE);
  sync_cout << "info depth 0 score "
            << UCI::value(rootPos.checkers() ? -VALUE_MATE : VALUE_DRAW)
            << sync_endl;
 }

There shouldn't be much penalty in performance, because:

  1. You will always need to generate candidate moves anyway
  2. Your code should maintain a bitboard (or other data structure) for the pieces checking the king. You will always need this information in your evaluation.

Consequently, what you're doing is just checking information that you already have.

|improve this answer|||||
  • Thank you. I thought it would be a better way. My engine can currently only reach a depth of 3 (1.5 ply?) which is not very good. Not using bitboards at the moment, the board is a class (in Python) with all move information and stuff in it. – eligolf Jan 16 at 10:54
  • @eligolf Would that be possible to accept my answer? – SmallChess Jan 17 at 13:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.