8.1 Game Theory8.1.1 Types of GamesNumber of PlayersPlies, Moves, and TurnsThe Goal of the GameInformationApplying Algorithms8.1.2 The Game TreeBranching Factor and DepthTransposition8.2 Minimaxing8.2.1 The Static Evaluation FunctionRange of the FunctionCombining Scoring FunctionsSimple Move Choice8.2.2 Minimaxing8.2.3 The Minimaxing AlgorithmPseudo-CodeData Structures and InterfacesMore than Two PlayersPerformance8.2.4 NegamaxingNegamax and the Static Evaluation FunctionPseudo-CodeData Structures and InterfacesPerformanceImplementation Notes8.2.5 AB PruningAlpha PruningBeta PruningAB NegamaxPseudo-CodeData Structures and InterfacesPerformance8.2.6 The AB Search WindowMove OrderAspiration Search8.2.7 NegascoutPseudo-CodeData Structures and InterfacesPerformanceMove Ordering and NegascoutPrincipal Variation Search8.3 Transposition Tables and Memory8.3.1 Hashing Game StatesZobrist KeysHash ImplementationIncremental Zobrist HashingThe Game Class, Revisited8.3.2 What to Store in the Table8.3.3 Hash Table Implementation8.3.4 Replacement Strategies8.3.5 A Complete Transposition TablePerformanceImplementation Notes8.3.6 Transposition Table IssuesPath DependencyInstability8.3.7 Using Opponent’s Thinking Time8.4 Memory-Enhanced Test Algorithms8.4.1 Implementing TestPseudo-CodeTransposition Table8.4.2 The MTD AlgorithmMTD VariationsMemory Size8.4.3 Pseudo-CodePerformance8.5 Opening Books and Other Set Plays8.5.1 Implementing an Opening BookOpening Book in the Evaluation Function8.5.2 Learning for Opening Books8.5.3 Set Play BooksEnding Database8.6 Further Optimizations8.6.1 Iterative DeepeningMTD ImplementationHistory Heuristic8.6.2 Variable Depth ApproachesExtensionsQuiescence Pruning8.7 Turn-Based Strategy Games8.7.1 Impossible Tree SizeDivide and ConquerHeuristics8.7.2 Real-Time AI in a Turn-Based GameExercisesFigure 8.1Figure 8.2Figure 8.3Figure 8.4Figure 8.5Figure 8.6Figure 8.7Figure 8.8Figure 8.9Figure 8.10Figure 8.11Figure 8.12