|
|
How NagaSkaki plays chess
The thinking process
When NagaSkaki has to make a move, it goes through the following process:
Look in the opening book to see if it can skip the thinking process
If a move was found in the opening book, make it!
If not, decide how much time to use for this move (after each ply the thinking time
is updated so that NagaSkaki can use less time for an obvious move and more time when it sees that it will lose material)
Start a one ply search. This search cannot be interrupted, because we need at least one legal move.
If there is more than one possible move, keep increasing the search depth by one ply until
the time for this move runs out. These searches can be interrupted because we can use the best move of a previous search depth.
Here is a description of what happens inside NagaSkaki's search algorithm:
If we're in the endgame and there is not enough material for checkmate, return a draw score
Did the user press the stop button or is
our time up? In that case stop the search and set a flag for the root
function not to trust this score (because we were interrupted)
Look in the hash table to see if we can skip the search and just return the hash score.
Is this a draw by 50 move rule? If yes, return draw score
Are we in check? If yes, we increment the search depth, because this might be a dangerous line.
Try a null move (let the opponent make
two moves in a row), if that doesn't help the opponent he will probably
not play this line and we don't need to search this line further.
If we didn't find a best move in the
hash table, do internal iterative deepening (do a search of only a few
plies deep, and use the best move from that search
See if we can do futility and extended
futility pruning (if we are so far behind that even the capture of say
a queen won't bring the score to that of the best line, we don't need
to bother searching deeper) Now only do we start with the Alpha beta algorithm!
- Make the best move in the move list - each move is given a score as follows:
-
Hash move - very big bonus
-
Pawn that queens - big bonus
-
Bonus for captures - sort of MVV/LVA (most valuable victim/least valuable attacker)
-
Bonus for killer moves
-
Bonus for moves from history heuristic
-
Bonus if the piece moves to a good square
- Apply extensions - search deeper if:
- If
the remaining search depth is more than zero, call the search function
and get the score, else call the quiescent search (search only captures
exhaustively)
- After all the moves are made, return the best score
- If there were no legal moves: return zero if we are not in check, return mate value if we are.
-
A pawn moves to the 7'Th rank
-
This is the last move with pieces on the board
-
We recapture with a piece of the same value
<<
Previous Next >>
|