Massively Parallel Proof-Number Search for Impartial Games and Beyond
📝 Abstract
Proof-Number Search is a best-first search algorithm with many successful applications, especially in game solving. As large-scale computing clusters become increasingly accessible, parallelization is a natural way to accelerate computation. However, existing parallel versions of Proof-Number Search are known to scale poorly on many CPU cores. Using two parallelized levels and shared information among workers, we present the first massively parallel version of Proof-Number Search that scales efficiently even on a large number of CPUs. We apply our solver, enhanced with Grundy numbers for reducing game trees of impartial games, to the Sprouts game, a case study motivated by the long-standing Sprouts Conjecture. Our algorithm achieves 332.9 $\times$ speedup on 1024 cores, significantly improving previous parallelizations and outperforming the state-of-the-art Sprouts solver GLOP by four orders of magnitude in runtime while generating proofs 1,000 $\times$ more complex. Despite exponential growth in game tree size, our solver verified the Sprouts Conjecture for 42 new positions, nearly doubling the number of known outcomes.
💡 Analysis
Proof-Number Search is a best-first search algorithm with many successful applications, especially in game solving. As large-scale computing clusters become increasingly accessible, parallelization is a natural way to accelerate computation. However, existing parallel versions of Proof-Number Search are known to scale poorly on many CPU cores. Using two parallelized levels and shared information among workers, we present the first massively parallel version of Proof-Number Search that scales efficiently even on a large number of CPUs. We apply our solver, enhanced with Grundy numbers for reducing game trees of impartial games, to the Sprouts game, a case study motivated by the long-standing Sprouts Conjecture. Our algorithm achieves 332.9 $\times$ speedup on 1024 cores, significantly improving previous parallelizations and outperforming the state-of-the-art Sprouts solver GLOP by four orders of magnitude in runtime while generating proofs 1,000 $\times$ more complex. Despite exponential growth in game tree size, our solver verified the Sprouts Conjecture for 42 new positions, nearly doubling the number of known outcomes.
📄 Content
Game-solving is a well-established and difficult task in artificial intelligence, which involves computing outcomes under perfect play of all players, often requiring a deep traversal of vast game trees. Despite these challenges, several classical games have already been solved, including Connect Four (Allis 1988), Gomoku (Allis, van den Herik, and Huntjens 1996), Checkers (Schaeffer et al. 2007), and Othello (Takizawa 2023). Proof-Number Search (Allis, van der Meulen, and van den Herik 1994) is among the most successful game-solving algorithms. It is a best-first tree search algorithm designed to compute game outcomes efficiently. This algorithm has been widely used due to its ability to focus on the most promising parts of the game tree, making it particularly effective in domains with large branching factors or unbalanced trees. Beyond games, its variants and related algorithms have been applied in various other settings, for example, in chemistry (Franz et al. 2022), graphical models (Dechter and Mateescu 2007), medicine (Heifets and Jurisica 2012), and theorem proving (Lample et al. 2022).
With increasing computational power, it is natural to pursue parallel versions of Proof-Number Search; yet, despite many efforts, existing variants have failed to scale efficiently across many CPUs. Several studies have suggested using parallel Proof-Number Search or its variants in diverse domains (Franz et al. 2022;Kishimoto, Marinescu, and Botea 2015), but scalability remains a challenge. These limitations led Kishimoto et al. (2012) to pose the problem of developing a well-scaling, massively parallel Proof-Number Search.
Many combinatorial games remain far from being solved, including Chess, Shogi, Go, Cram, or Sprouts. In Sprouts, two players alternately connect n given spots in the plane according to simple rules, where the last player unable to make a move loses; see Čížek and Balko (2021) for the implementation. We use this game as our experimental domain, as it features highly unbalanced game trees with a large branching factor, which makes it well-suited for Proof-Number Search. Designed by Conway and Paterson to resist computer analysis (Roberts 2015), Sprouts poses a challenging benchmark: the complexity of its game tree surpasses Chess and Go for relatively small values of n; see Figure 1. The computation of outcomes of Sprouts positions is further motivated by the long-standing Sprouts Conjecture (Applegate, Jacobson, and Sleator 1991), which states that the n-spot position, consisting of n given spots, is winning for the first player if and only if n is congruent to 3, 4, or 5 modulo 6.
We address the problem posed by Kishimoto et al. (2012) and develop a new variant of Proof-Number Search that scales efficiently on many CPUs. Building on this, we implement a parallel solver for combinatorial games. Together with a new memory-efficient algorithm for impartial games, we achieve numerous new results for the game Sprouts.
Well-Scaling Parallel Proof-Number Search. We introduce PNS-PDFPN, a massively parallel Proof-Number Search for distributed-memory systems combining two parallelized levels with shared information among workers. It achieves 208.6× speedup on 1024 cores over sequential DFPN, significantly outperforming prior methods, whose best scaling factor in the same setting was 21.3. Using minimal domain knowledge, the speedup increases to 332.9.
DFPN Search with Grundy Numbers. Proof-Number
Search is designed to solve problems that are represented as AND/OR trees. We formalize the notion of game trees with Grundy numbers to reduce the complexity of game trees of the so-called impartial games, as introduced by Lemoine and Viennot (2012). We adapt Depth-First Proof-Number Search with Grundy numbers, a popular and memory-efficient variant of Proof-Number Search, to work with such trees.
Solving Sprouts Positions. To demonstrate the efficiency of our new algorithms, we implemented a solver for the Sprouts game, and used it to determine many new outcomes.
Our solver outperforms the state-of-the-art solver GLOP by Lemoine and Viennot (2015), achieving a four-order-ofmagnitude speedup and generating proofs 1,000 times more complex. Despite the exponential growth of the game trees, our solver verifies the Sprouts Conjecture for 42 new positions, nearly doubling the number of known outcomes.
A considerable amount of work has been devoted to designing parallel versions of Proof-Number Search. These include RP-PNS, introduced by Saito, Winands, and van den Herik (2010), a parallel variant of DFPN by Kaneko (2010), and SPDFPN algorithm by Pawlewicz and Hayward (2014). All of these were designed for shared-memory systems, which typically offer only a limited number of CPU cores. To leverage the greater computational power of clusters with many cores, algorithms tailored to distributed-memory systems are required. Such algorithms include ParaPDS by Kishimoto and Kotani (1999), Job-Level Proof-Number Sear
This content is AI-processed based on ArXiv data.