Skip to report

Test parking policy before choosing it.

A reproducible parking simulator for comparing prices, routing, driver access, and affordability under the same demand.

CIS 505 team project · University of Michigan–Dearborn
Evaluation updated 12 November 2026 · Simulation only

Dynamic pricing helps under high demand, with trade-offs.

On ten fresh seeds at high demand, dynamic pricing increases modeled revenue by 9.2% and parking success by 8.2 percentage points versus static pricing with the same distance routing. Mean quoted stay cost rises from $6.31 to $6.91. Lower-demand scenarios improve access at a revenue cost.

The comparison below isolates pricing by holding distance routing constant. Revenue is measured over six hours; stay cost describes the full quoted stay of successful arrivals.

Ten fresh validation seeds. Means: static-distance → dynamic-distance.
Demand Simulated revenue Paired revenue effect (95% CI) Parked arrivals Quoted stay cost
Low $42,386 → $35,722 (-15.7%) $-6,804 to $-6,523 71.5% → 77.4% $6.20 → $4.91
Medium $86,589 → $80,870 (-6.6%) $-5,930 to $-5,508 65.9% → 73.1% $6.28 → $5.66
High $122,263 → $133,526 (+9.2%) $+10,982 to $+11,545 58.3% → 66.5% $6.31 → $6.91
Fresh validation study: dynamic pricing increases simulated parking success at all three demand levels; revenue rises at high demand and falls at low and medium demand.
All four policies, across three demand levels. Means and 95% confidence intervals across ten seeds. Click a chart for full resolution.
High-demand policy means and seed intervals for revenue, occupancy, parking success, and quoted stay cost.
High demand: compare revenue and parking access alongside the higher quoted stay cost.

A controlled comparison, followed by fresh seeds.

The original five seeds (11–15) and ten fresh seeds (21–30) are reported separately. The algorithm was frozen before both sets were run with entry-rate billing. Static and dynamic prices are crossed with distance and traffic-weighted routing: 180 policy runs across three demand levels.

Every policy in a seed receives matching driver and zone inputs. Each run lasts eight hours; the first two hours are excluded. There are 113 modeled zones and 17,472 spaces. Low, medium, and high demand generate 15,389, 32,975, and 50,562 drivers per run. Offered load means arrival rate times expected stay divided by capacity, rather than an achieved occupancy target.

Prices are bounded at USD 1–10/hour with a 15% maximum movement per update. Each driver keeps the hourly rate accepted on entry. Revenue counts occupied minutes during measurement and stops at departure or simulation end. Driver outcomes use arrivals after warm-up and retain unresolved arrivals.

Effects use paired Student t intervals across identical seeds. They capture random-seed variability, omit model uncertainty, and are not adjusted for multiple comparisons. Full-stay costs are conditional means for successful drivers; the population can differ between policies.

Run a scenario locally.

The Python dashboard provides scenario controls, saved comparison charts, and report downloads. Synthetic scenarios work offline. Local map files add geographic context; all controlled studies use simulated traffic.

# After the pinned setup in the repository README
.venv/bin/parking-optimize --mode dashboard --port 8765
# Open http://127.0.0.1:8765

# A capacity-scaled study, with optional Apple GPU computation
.venv/bin/parking-optimize --mode study --data-source map \
  --duration 8 --warmup 2 --seeds 21,22,23,24,25,26,27,28,29,30 \
  --array-backend mlx --workers 4

NumPy is the portable baseline. MLX computes batched walking distances on Apple silicon; graph searches and driver decisions remain on the CPU. No whole-system speedup or concurrent-user claim is implied.

Read setup and reproduction instructions

What this evidence can support.

The model shows a demand-dependent pricing effect and makes its trade-offs inspectable. Demand, behavior, destinations, and price preferences still need field calibration. Many capacities and rates are estimates or defaults, and original dataset provenance is incomplete. Exact geographic reproduction requires the same local input snapshot, which is not distributed with the report.

The road extract is small and disconnected: 58 nodes, 137 directed edges, and eight strongly connected components. Time-based routing shows little separation here. Five-minute decisions constrain search-delay measurements. The study establishes neither reduced congestion nor field forecast accuracy, latency guarantees, concurrent-user capacity, or municipal revenue gains.

The next useful work is observed arrival and stay data, a larger connected road network, calibrated price responses, and an explicit revenue, availability, and affordability objective before a monitored field comparison.

Built as a team project.

Jeremy Cleland, Saif Khan, and Asem Zahran.
CIS 505 Algorithms Analysis and Design, University of Michigan–Dearborn, Summer 2025.