CMPUT 657 - Algorithms for Combinatorial Games

Contents:

Course Overview

In this course we delve deeply into the world of combinatorial games, and learn how to solve them by computer algorithms. Combinatorial games are two player games with perfect information, where both players know the game state completely. Much research on two player games has pursued one of two main directions:

  1. Playing well against humans and other programs
  2. Solving games by finding perfect (not just very good) play

We will discuss both, with a strong focus on the second goal of solving games. For both playing and solving, most games programs use a standard search algorithm such as alphabeta minimax search or Monte Carlo Tree Search (MCTS). In the standard approach, each search state represents a complete board position. In this course, we study algorithms that take advantage of the sum game structure that is typical for combinatorial games: a game consists of several independent subgames, and a player must choose to play in exactly one of these at each turn. Examples are games such as Nim, Clobber, Amazons, endgames in the game of Go, and many others.

There is a very strong computational advantage that comes from having sumgame structure: We can gain a lot of information, greatly reduce the search needed, or even play perfectly, from analysing individual subgames, which have a much smaller state space than the full game.

In the first part of this course we study the basic concepts of classical (full-board) search methods such as minimax, alphabeta and proof number search. Next, we study the basics of combinatorial games, leading to algorithms that can play or solve games with subgame structure. We start from basic concepts and proceed step by step to the current state of the art. The course will focus on algorithms and computational aspects, as opposed to studying combinatorial game theory as a purely mathematical subject.

Our course includes a large hands-on component, where you will work on concrete examples and program your own algorithms. We will be building on software such as Siegel's CGSuite and our own Minimax-based Combinatorial Game Solver (MCGS). Projects can be done either individually or in small teams.

Detailed Course Content

This list reflects my plan at the start of term. Details will change depending on our speed of progress, student and instructor interests, and new publications we can discuss.

Part 1 - Two player board games

About one month: Introduction to two player games and solution strategies. Games, minimax search, playing vs. solving, alphabeta and proof-number search, search efficiency

Part 2 - Introduction to Combinatorial games

A bit more than one month: We will discuss combinatorial games using many examples such as Go, NoGo, Amazons, Clobber, Domineering,... We will also begin our investigation of basic algorithms for playing combinatorial games well, or perfectly, by using the subgame structure. We will use software tools: CGSuite and MCGS.

Part 3 - Efficient algorithms and case studies for combinatorial games

Remaining course time: Studying further topics while working on course projects. In this part of the course, we study more algorithms for both playing and solving combinatorial games. At the same time, you will deepen and apply your knowledge by doing a software project in a small group. You will have a large degree of freedom in choosing our topics, both for projects and for in-class discussions, as long as it fits our course.

We will discuss a subset of the topics below, plus possibly others:

Limitations: what this course is NOT about

This course covers a lot of material from a relatively narrow area. There are many other interesting related topics that we will not discuss here, such as:


Martin Müller, last update Aug 5, 2025