Frank-Wolfe Traffic Assignment

Solve the user-equilibrium traffic assignment problem using the Frank-Wolfe algorithm: minimize the Beckmann objective by alternating between an all-or-nothing direction-finding step and a one-dimensional line search.

Step 1 of 157%

Tutorial

The Beckmann Objective

The Frank-Wolfe algorithm solves the user-equilibrium traffic assignment problem by minimizing the Beckmann objective

Z(x)=aA0xaca(s)ds,Z(\mathbf{x}) = \sum_{a \in A} \int_0^{x_a} c_a(s)\, ds,

where AA is the set of links (or routes), xax_a is the flow on link aa, and ca()c_a(\cdot) is its cost function. The minimizer of ZZ over the set of demand-feasible flows is the user-equilibrium flow.

For a linear cost ca(xa)=ta+baxa,c_a(x_a) = t_a + b_a x_a, the link contribution is

0xa(ta+bas)ds=taxa+ba2xa2.\int_0^{x_a}(t_a + b_a s)\, ds = t_a\, x_a + \dfrac{b_a}{2}\, x_a^2.

For example, if a single link has c(x)=2+0.5xc(x) = 2 + 0.5\, x and carries flow x=4,x = 4, then

04(2+0.5s)ds=2(4)+0.52(42)=8+4=12.\int_0^4 (2 + 0.5\, s)\, ds = 2(4) + \dfrac{0.5}{2}(4^2) = 8 + 4 = 12.

Frank-Wolfe minimizes ZZ iteratively. Each iteration has two parts:

  1. A direction-finding step (all-or-nothing assignment), and
  2. A line search for the step size along that direction.
navigate · Enter open · Esc close · ⌘K/Ctrl K toggle