This problem is rather similar to some coding problems. Stockfish already has multiple pre-computed move sets. It represents the state of the chessboard using multiple bitboards, which it then uses to evaluate the board positions using a categorical(checks, tempos, checkmates) and statistical representation(piece values). Almost immediately, it uses an advanced alpha-beta search algorithm. In order to not analyze the same position several times, a transposition table is used. This is essentially memorization applied to the search function, which is a fundamental in many graph-theory programming problems. Thus, it actually uses a rather simple algorithm.
Here is some research done before:
Step 1. Initialize node
Step 2. Check for aborted search and immediate draw. Enforce node limit here. (This only works with 1 search thread, as of Stockfish 2.3.1.)
Step 3. Mate distance pruning. Even if we mate at the next move our score would be at best mate_in(textssrightarrowtextply+1textssrightarrowtextply+1, but if alpha is already bigger because a shorter mate was found upward in the tree then there is no need to search further, we will never beat current alpha. Same logic but with reversed signs applies also in the opposite condition of being mated instead of giving mate, in this case return a fail-high score.
Step 4. Transposition table lookup. We don’t want the score of a partial search to overwrite a previous full search. We use a different position key in case of an excluded move.
Step 5. Evaluate the position statically and update parent’s gain statistics
Step 6. Razoring (is omitted in PV nodes)
Step 7. Static null move pruning (is omitted in PV nodes). We’re betting that the opponent doesn’t have a move that will reduce the score by more than futility_margin(depth) if we do a null move.
Step 8. Null move search with verification search
Step 9. ProbCut. If we have a very good capture and a reduced search returns a value much above beta, we can (almost) safely prune the previous move.
Step 10. Internal iterative deepening.
Step 11. Loop through moves. Loop through all pseudo-legal moves until no moves remain or a beta cutoff occurs
Step 12. Extend checks and also dangerous moves
Step 13. Futility pruning.
Step 14. Make the move
Step 15. Reduced depth search (LMR). If the move fails high will be re-searched at full depth.
Step 16. Full depth search, when LMR is skipped or fails high.
Step 17. Undo move
Step 18. Check for new best move
Step 19. Check for split
Step 20. Check for mate and stalemate
Step 21. Update tables. Update transposition table entry, killers and history
I shall attempt to explain what the professor's research is talking about. Stockfish creates a search tree of the legal move.
Then, it begins to evaluate whether each move is good or bad, and how good or bad it is, by executing a shallow search field first, and then using the resulting alpha/beta cutoff values as start values for a deeper search. Stockfish also prioritises pieces. For instance, knights would be prioritised at the centre, so if a knight and bishop get forked at the centre, it will move the knight, unless there are other significant gains by moving the bishop. While this may seem complicated, this execution is approximately log(number of possible moves), hence making it rather fast still.