A Recursive Formulation of Repeated Games

Authors: Chase Coleman with Thomas Sargent

This notebook describes Julia code that implements an algorithm for computing equilibrium values and associated equilibrium strategy profiles for repeated games with $N$ players and finite actions.

The code builds on ideas of Abreu, Pearce, Stachetti (1986, 1990).

It uses a numerical algorithm called the outer hyperplane approximation algorithm invented by Judd, Yeltekin, Conklin (2003).

We focus on a particularly simple example, namely, a repeated prisoner's dilemma.

Our friends Timothy Hills and Ben Tengelsen provided useful comments about detailed aspects of the algorithm.

Technical Julia Advisory

The quant-econ Games library is currently under development and not yet a published Julia package

To get it, please run


This command may also install some additional packages such as Clp, MathProgBase, QuantEcon, Polyhedra, and CDDLib (and whatever dependencies these packages rely on).

Plotting in this notebook uses the package PlotlyJS.

A cautionary note: occasionally (but not always) users of this notebook have experienced difficulty installing CDDLib and Polyhedra (sometimes due to no fault of their own).

This, the first version of this notebook, uses the following versions of various packages:

  • CDDLib -> v0.1.2
  • Games -> v0.0.1
  • Polyhedra -> v0.1.3
  • PlotlyJS -> v0.5.2

Please verify that you have the correct versions of these packages [1, 2].

We have found that occasionally users have struggled to get CDDLib to build.

If this happens to you, make sure that you have libgmp installed.[3] After it has been installed, please run Pkg.build("CDDLib").

If you encounter problems beyond these, please raise an issue about them in the package's repository or in the QuantEcon.notebooks repository.

[1] You can do this by creating a dictionary d = Pkg.installed() and then looking at version associated with d["PackageName"]

[2] You can specify that you'd like to download a particular version of a package with Pkg.add("PackageName", v"x.y.z") where x.y.z refers to the version number (Note that the v is before the quotations on purpose).

[3] On an Ubuntu machine, you can do this with sudo apt-get install libgmp-dev

In [1]:
using Games
using PlotlyJS