BPR

A BPR link performance function implementation
Description

Travel time on a link segment for a particular mode is computed using a specific link performance function that relates flow uniquely to a travel time utilising a strictly increasing monotonic function know as the BPR1 function. This function looks like the following

\(\Large \tau_{a,m} = \tau_{a,m}^{ \textrm {freeflow}}(1+ \alpha({v_a \over C_a})^{\beta}) \qquad \textrm{where } \tau_{a,m}^{ \textrm {freeflow}}= {L_a \over \vartheta_{a,m}}\)

with

\(\tau_{a,m}= \textrm{travel time on link segment } a \textrm{ for mode } m,\\ \vartheta_{a,m} = \textrm{free flow speed on link } a \textrm{ for mode } m,\\ \alpha = \textrm {calibration parameter},\\ \beta = \textrm {calibration parameter},\\ v_a = \textrm {measured flow on link segment} a,\\ L_a = \textrm {length of link segment} a,\\ C_a = \textrm {saturation flow on link segment} a,\)

The \(\alpha\) and \(\beta\) parameters can be configured hierarchically, where the most specific configuration takes precedence. The hierarchy is as follows:

  • default \(\alpha\) and \(\beta\)
  • default \(\alpha_m\) and \(\beta_m\) by mode \(m\)
  • default \(\alpha_{m,s}\) and \(\beta_{m,s}\) by mode \(m\) and link segment type \(s\)
  • default \(\alpha_{m,l}\) and \(\beta_{m,l}\) by mode \(m\) and link segment \(l\)

Whenever the more specific configuration is absent the next most specific configuration is checked and applied, until we reach the simulation wide default which have been pre-set (or overridden by the user).

1 United States, Bureau of Public Roads, Traffic assignment manual. (1964). Washington.

Defaults

Name Default Type Unit
\(\alpha\) 0.5 float None
\(\beta\) 4 float None

Methods

BPR cost exposes the following methods

Name Description
.set_default_parameters(+) Override the default \(\alpha\) and \(\beta\) in various ways
.set_parameters(+) Override the \(\alpha\) and \(\beta\) for specific link segments

Properties

This class has no properties (yet)

Example 1

from planit import *

# choose to run Planit with a traditional static traffic assignment method
planit_instance = Planit()
planit_instance.project.set(TrafficAssignment.TRADITIONAL_STATIC)

# set physical cost to BPR link performance function
planit_instance.project.assignment.set(PhysicalCost.BPR)

# override the default alpha and beta
alpha = 0.87
beta = 5
planit_instance.project.assignment.physical_cost.set_default_parameter(alpha, beta)

See also

Traffic assignment on assignments that support this physical cost implementation
PhysicalCost.<enum> for all available physical cost options
PhysicalCost landing page for all available physical cost implementations

Source code

Class BPRCostWrapper in projectwrappers.py


.set_default_parameters+

BPR link performance function method

.set_parameters+

BPR link performance function method

Last modified January 1, 0001