# Adversarial Decision-Equivalent Training MVP `run_experiment.py` implements a smallest meaningful two-route instance of budgeted adversarial decision-equivalent training. ## What is implemented - Exact enumeration of all interdiction subsets with cardinality at most `B`. - Exact hard shortest-path decisions and regret evaluation. - A fixed-seed mechanism check for the decision-equivalence failure mode: `c=[2,1]`, prediction `[3,0.5]`, and a delay on edge 1. - Three equal-step predictors: - `mse`: edge-cost MSE (PFL-style control) - `nominal`: nominal soft decision loss plus a small MSE stabilizer - `adversarial`: maximum soft decision loss over all feasible interdictions plus the same stabilizer - Exact evaluation of nominal regret, worst-case budgeted regret, adversarial flip rate, and cost MSE. The training loss uses cross-entropy on the oracle path choice as the differentiable soft shortest-path surrogate. Hard shortest paths are retained for evaluation, matching the implementation plan's discrete-evaluation / differentiable-training approximation. ## Reproduce ```bash /home/maxwelhelp/main/bin/python3 run_experiment.py ``` The run writes `results.json` and uses seed `2028`. ## Observed fixed-seed result The mechanism check found regret onset at delay `1.05` on a grid (theoretical boundary `1.0`), a fitted regret-vs-delay slope of `1.0000000000000002`, and exact cost/delay scaling error `0`. Training metrics from `results.json`: | model | nominal regret | worst regret | max worst regret | adversarial flip rate | cost MSE | |---|---:|---:|---:|---:|---:| | MSE | 0.0000 | 0.0000 | 0.0000 | 0.000 | 0.000513 | | nominal | 0.0000 | 0.099685 | 0.438445 | 0.325 | 0.041751 | | adversarial | 0.0000 | 0.0000 | 0.0000 | 0.000 | 0.056332 | Thus adversarial training improves over nominal decision-only training on the intended worst-case metric in this toy setting, but it does not beat MSE here because the predictor can learn the simple exact cost mapping. This is a mechanism/MVP result, not evidence of a generalization win on larger graph datasets.