Computational Analysis of Social Complexity
Fall 2025, Spencer Lyon
Prerequisites
- Networks
- Game Theory
Outcomes
- Represent network traffic weighted DiGraph
- Analyze equilibrium network outcomes using the concept of Nash Equilibirum
- Understand Braes’ paradox
- Learn about the concept of social welfare and a social planners
References
- Easley and Kleinberg chapter 8
Congestion¶
- We regularly use physical networks of all kinds
- Power grids
- The internet
- Streets
- Railroads
- What happens when the networks get congested?
- Typically -- flow across the network slows down
- Today we’ll study how game theoretic ideas are helpful when analyzing how a network with finite capacity or increasing costs
A Traffic Network¶
- We’ll start by considering a traffic network
- The figure caption has extra detail -- so be sure to read it!

- We’ll write up some helper Julia functions that will let us create and visualize the traffic network for arbitrary values of x
using Graphs, SimpleWeightedGraphs, GraphPlotfunction traffic_graph1(x)
A = [
0 0 x/100 45;
0 0 0 0;
0 45 0 0;
0 x/100 0 0
]
SimpleWeightedDiGraph(A)
endtraffic_graph1 (generic function with 1 method)function plot_traffic_graph(g::SimpleWeightedDiGraph)
locs_x = [1.0, 3, 2, 2]
locs_y = [1.0, 1, 0, 2]
labels = collect('A':'Z')[1:nv(g)]
gplot(g, locs_x, locs_y, nodelabel=labels, edgelabel=weight.(edges(g)))
endplot_traffic_graph (generic function with 1 method)plot_traffic_graph(traffic_graph1(10))- Try changing the argument to
traffic_graph1to see how the network changes
The Game¶
- Now suppose, as indicated in the figure caption, that we have 4,000 drivers that need to commute from A to B in the morning
- If all take the upper route (A-C-B) we get a total time of 40 + 45 = 85 minutes
- If all take the lower route (A-D-B) we get a total time of 40 + 45 = 85 minutes
- If, however, they evenly divide we get a total time of 20 + 45 = 65 minutes
Equilibrium¶
- Recall that for a set of strategies (here driving paths) to be a Nash Equilibrium, each player’s strategy must be a best response to the strategy of all other players
- We’ll argue that the only NE of this commuting game is that 2,000 drivers take (A-C-B) and 2,000 take (A-D-B) and everyone takes 65 minutes to commute
Exercise¶
- Show that this strategy (2,000 drivers take (A-C-B) and 2,000 take (A-D-B)) is indeed a Nash equilibrium
- To do this recognize that the game is symmetric for all drivers
- Then, argue that if 3,999 drivers are following that strategy, the best response for the last driver is also to follow the strategy
Numerical Verification¶
Let’s verify why the 50-50 split is indeed an equilibrium:
Current equilibrium: 2,000 drivers on each path, everyone takes 65 minutes
If you’re driver #2,001 considering which path to take:
If you join the upper path (A-C-B):
- Edge A-C now has 2,001 drivers: 2,001/100 = 20.01 minutes
- Edge C-B still takes 45 minutes
- Total time: 20.01 + 45 = 65.01 minutes
If you join the lower path (A-D-B):
- Edge A-D now has 2,001 drivers: 2,001/100 = 20.01 minutes
- Edge D-B still takes 45 minutes
- Total time: 20.01 + 45 = 65.01 minutes
Result: Both paths give the same travel time! No driver has an incentive to switch paths. This confirms our Nash equilibrium.
- Your work HERE!
Discussion¶
- Note a powerful outcome here -- without any coordination by a central authority, drivers will automatically balance perfectly in equilibrium
- The only assumptions we made were:
- Drivers want to minimize driving time
- Drivers are allowed to respond to the decisions of others
- The first assumption is very plausable -- nobody wants to sit in more traffic than necessary
- The second highlights a key facet of our modern society...
- Information availability (here decisions of other drivers) can (and does!) lead to optimal outcomes without the need for further regulation or policing
function traffic_graph2(x) G = traffic_graph1(x) # Add an edge with minimal weight (1e-16 instead of 0) because # GraphPlot doesn’t display edges with weight 0 add_edge!(G, 3, 4, 1e-16) G end
function traffic_graph2(x)
G = traffic_graph1(x)
# need to add an edge with minimal weight so it shows up in plot
add_edge!(G, 3, 4, 1e-16)
G
endtraffic_graph2 (generic function with 1 method)plot_traffic_graph(traffic_graph2(10))Exercise¶
- Is a 50/50 split of traffic still a Nash equilibrium in this case?
- Why or why not?
- Is all 4,000 drivers doing (A-C-D-B) a Nash equilibrium?
- Why or why not?
Braess’ Paradox¶
- In the previous exercise, we saw a rather startling result...
- Doing a network “upgrade” -- adding a wormhole connecting C and D -- resulted in a worse equilibrium outcome for everyone!
- The equilibrium driving time is now 80 minutes for all drivers instead of 65 minutes (which was the case before the wormhole)
- This is known as Braess’ paradox
Real-World Examples¶
Braess’ paradox is not just theoretical - it has been observed in real traffic networks:
New York City (1990): When 42nd Street was closed for Earth Day, traffic flow actually improved rather than worsened. The city later made some closures permanent.
Stuttgart, Germany (1969): After investing in a new road to ease congestion, traffic conditions worsened. The road was eventually removed, restoring better traffic flow.
Seoul, South Korea (2003): The demolition of the Cheonggyecheon highway led to improved traffic conditions, contrary to predictions of chaos.
These cases demonstrate that sometimes removing network capacity can lead to better equilibrium outcomes - a counterintuitive result that game theory helps us understand!
Follow ups¶
- Braess’ paradox was the starting point for a large body of research on using game theory to analyze network traffic
- Some questions that have been asked are:
- How much larger can equilibrium travel time increase after a network upgrade?
- How can network upgrade be designed to be resilient to Braess’ paradox?
Social Welfare¶
- Many economic models are composed of individual actors who make autonomous decisions and have autonomous payoffs
- We’ve been studying some of these settings using tools from game theory, focusing on the individual perspective
- Our notion of equilibrium is dependent on no individual wanting to change strategy in response to other strategies
- Another form of analysis works at the macro level -- we analyze the total payoff for all agents (i.e. sum of payoffs)
- We call this aggregate payoff social welfare
The Social Planner¶
- In an economic model, someone who seeks to maximize social welfare is called a social planner
- A social planner is given the authority to make decisions for all agents
- In our traffic model, a social planner would choose to ignore the wormhole and have 1/2 the drivers take A-C-B and the other half take A-D-B
- In this case everyone would be better off with a cost of 65 minutes instead of the equilibrium 80 minutes
Cost of Freedom¶
- Question: in a generic traffic model, how much worse can the equilibrium outcome be than the social optimum?
- In our example,
- Optimal social welfare is 4000 * 65 = 260,000 total minutes
- Equilibrium social welfare is 4000 * 80 = 320,000 total minutes
- A change of 60,000 total minutes
- Price of Anarchy: This ratio of equilibrium cost to optimal cost is formally called the Price of Anarchy
- Price of Anarchy = Worst Nash Equilibrium Cost / Social Optimum Cost
- In our example: PoA = 320,000 / 260,000 = 1.23 (the equilibrium is 23% worse than optimal)
- To answer this question for a general traffic model, we need to be able to compute the equilibrium for a generic traffic model
- We may study this next week, or perhaps even on your homework 😉