Example: Sequential price competition

Consider the famous game of sequential price competition by Maskin and Tirole (1988).

There are two firms, each producing a homogeneous product at zero marginal cost. The two firms compete on price to maximize the net present value of profits given a common discount factor. Time runs in discrete periods and firms take turns to set their prices. In odd periods, firm 0 sets its price and firm 1’s price is locked in, and vice versa in even periods. Each period, firms face market demand \(d(p) = 2 - p\) which goes to the firm with the lowest price. In case of equal prices, demand is split evenly. Finally, firms choose prices from a grid \(P = \{0.0, 0.1, ..., 1.0, 1.1\}\).

The following assumes that the SGameSolver and NumPy packages have been imported and that the game has been defined as in Example: Stochastic game with sequential moves, which also offers further information on the underlying state space.

import sgamesolver
import numpy as np

game = sgamesolver.SGame(...)

The price competition game has a vast multiplicity of equilibria, some featuring constant equilibrium prices and some featuring Edgeworth price cycles (with sequential undercutting and occasional resets).

Before searching the prior space, we need set the number of searches and initialize a container to keep track of the equilibrium strategies found by the solver.

runs = 100
strategies = np.zeros(shape=(runs, 24, 2, 11), dtype=np.float64)

Here, strategies is a 4D array with index (run, state, player, action).