Problem
The Maximum Supported Demand (MSD) workflow step was rebuilding the AnalysisContext for each binary search probe, causing significant overhead. Profiling showed _build_graph_core being called 15 times during
a single MSD run, taking 166s out of 309s total (54% of runtime).
Solution
Cache the AnalysisContext once at the start of MSD and reuse it for all alpha probes. Key changes:
- Create stable TrafficDemand objects with fixed IDs at MSD start
- Expand demands once to get augmentations (these don't change with alpha)
- Build AnalysisContext once with the augmentations
- Pre-build node/edge masks (no exclusions during MSD)
- Add _evaluate_alpha_cached() method that scales demand volumes without rebuilding infrastructure