The simulation pipeline itself is correct — it faithfully implements the optimal policy given the parameters it receives. The problem is upstream: the estimated δ is an artifact. Once v6 converges with both bugs fixed, the timing results from this report are expected to change substantially.
NFXP, L-BFGS-B, N=825 workers, 28 groups by (ts, te), LL = −19,187.07. v5 is the only converged run (v4 crashed with OOM mid-optimization). Transport parameters fixed at HH MNL estimates.
| Index | Parameter | Description | Estimate | Note |
|---|---|---|---|---|
| [0] | δ (delta) | WORK on-schedule marginal utility /min | 0.0408 | < μ_home ← artifact of zone bug |
| [1] | α (alpha) | Pre-schedule earliness penalty rate | 0.0011 | Mild |
| [2] | β (beta) | Post-schedule lateness penalty rate | 0.0030 | Sharp after t_e |
| [3] | β₁_shop | SHOPPING attractiveness sensitivity | 0.3233 | |
| [4] | β₀_shop | SHOPPING base marginal utility /min | −0.7955 | Negative base |
| [5] | β₁_leis | LEISURE attractiveness sensitivity | 0.3918 | |
| [6] | β₀_leis | LEISURE base marginal utility /min | −0.2652 | |
| [7] | c_change | Activity switching cost | −0.3013 | Net −0.60/trip |
| [8] | μ_home | HOME marginal utility /min | 0.0617 | > δ ← consequence of zone bug |
| [9] | θ_travel | Travel time scale factor | 1.0363 | ≈1 (calibrated) |
| Fixed transport parameter | Value |
|---|---|
| Car constant | 1.0720 |
| Train constant | 0.1190 |
| Walk constant | 0.0000 (base) |
| Bicycle constant | 0.6860 |
| Bus constant | −0.2760 |
| Travel time coef (θ_t) | −0.0260 /min |
| Cost coef (θ_c) | −0.0001 /JPY |
Forward simulation using estimated K=10 parameters, 934 worker agents across 28 schedule groups. Observed data from Higashihiroshima household travel survey.
| Metric | Observed | Simulated | Gap | Cause |
|---|---|---|---|---|
| Work start time (mean) | ~08:30 | 14:51 | +6.4h | μ_home > δ; BI near-indifferent in plateau |
| Home return time (mean) | ~18:00 | 18:04 | +0.1h | Good match |
| Trips per person (mean) | ~4–5 | 2.41 | −2 | c_change cost discourages extra trips |
| Car mode share | 58.0% | 40.7% | −17pp | Bicycle over-predicted |
| Train mode share | 23.1% | 0.3% | −23pp | Train under-predicted |
| Bicycle mode share | 4.2% | 55.0% | +51pp | Bicycle constant may be mis-calibrated |
| WORK time share | 24.9% | 6.2% | −19pp | Agents work minimum duration; late start |
| HOME time share | 62.1% | 85.0% | +23pp | Consequence of μ_home > δ |
Figure: Observed vs Simulated Distributions — Generated from forward simulation (N=934 workers, K=10 NFXP parameters).
Per 15-min step: HOME = 0.0617 × 15 = 0.925, WORK on-schedule = 0.0408 × 15 = 0.612. HOME exceeds WORK by 0.313 per step throughout the 9-hour on-schedule window.
Use the sliders below to explore how the utility profile changes with different parameter values. The blue horizontal line is HOME; the red curve is WORK. The shaded green band marks the on-schedule window [ts, te].
Computed from estimated parameters for group 003 (08:00–17:00 schedule, Δt = 15 min):
| Time | Region | WORK utility / step | HOME utility / step | Winner | Δ (HOME − WORK) |
|---|
The α penalty makes pre-schedule work very unattractive. The β penalty discourages post-17:00 work. But throughout the 9-hour on-schedule window (08:00–17:00), HOME consistently beats WORK by 0.313 per step.
For a worker who must do exactly one work trip (mandatory sequence), the total day utility is a function of when they depart for work. We fix:
The plot below shows U(tdep) for the estimated parameters. For any two on-schedule departure times with the same work duration W, the total utility is identical: home steps gained before work exactly cancel home steps lost after work. The curve is therefore a flat plateau across the entire on-schedule window, rising from the pre-schedule region (penalty reduces work utility) and falling after the on-schedule window ends (post-schedule penalty). The "Optimal" marker shows the first point of the plateau — not a unique maximum.
The backward induction (BI) assigns V(terminal) > −∞ only to states where the mandatory activity sequence has been completed. For workers, WORK must appear in their path.
Without mandatory_seq, the agent would never go to work (HOME always wins per-step). With mandatory_seq, they go — but at the utility-maximizing moment.
Three mechanisms act together — see the detailed table below the plots. In brief:
The exact 14:51 is a numerical result from the full BI — not derivable from a simple total-utility sum. It reflects c_change, travel utility, and Δt=15min discretisation all interacting in the value function.
Departing before 7:30 (arriving before ts=8:00) incurs the α·(ts−t) penalty. At 7:00 arrival, WORK utility = −6.81 per step vs HOME = +0.925. The BI assigns very low probability to pre-plateau departures. This is a hard floor, not the plateau.
At each HOME step during the on-schedule window, the agent compares Q(stay HOME) vs Q(go to WORK). Because home time gained before work exactly cancels home time lost after, ΔQ ≈ 0 throughout the plateau. There is no strong signal pulling agents to 7:30 or 16:30.
A ΔQ exactly equal to zero would produce departures uniformly across [7:30, 16:30] → mean arrival ~12:00. The observed 14:51 mean suggests ΔQ is slightly negative — agents marginally prefer staying home at each plateau step. This slight preference accumulates over many steps, skewing the distribution toward later departures. The exact 14:51 is a numerical BI result from the specific parameter values (c_change, θtravel, OD times, Δt=15min discretisation) — not analytically derivable from a simple utility sum.
| Mechanism | Causes | Analytically derivable? |
|---|---|---|
| Pre-schedule α penalty | Rules out departures before ~7:30 | YES — α×(ts−t) formula |
| Flat plateau (same W) | No strong timing signal within on-schedule window; agents nearly indifferent | YES — home steps cancel exactly |
| μhome > δ → minimum work | Agents prefer to minimise work duration; work at δ<μhome is "costly" | YES — breakeven δ=μhome |
| Exact 14:51 timing | Emergent from slightly negative ΔQ accumulating over plateau steps + softmax sampling | NO — numerical BI result; depends on c_change, travel utility, discretisation |
Compare two strategies for a worker with schedule [ts, te]:
With same W: timing doesn't matter (flat plateau). The breakeven instead governs work duration choice. Compare full-workday (Wmax) vs minimum-work (Wmin):
Breakeven: δ* = μhome = 0.0617 per minute
Current δ = 0.0408 (34% below breakeven). Agents prefer minimum work at latest feasible departure. The exact timing (14:51) is then set by the BI value function — the point where mandatory_seq can no longer be deferred.
The NFXP log-likelihood reflects the probability of each individual step choice, not the aggregate timing distribution. The optimizer minimises −LL over mode choice, destination, activity type, and timing simultaneously. Timing accuracy can be traded off for mode/destination fit.
Under K=10 (no hard time windows), the soft Mu(t) gradient is the only timing mechanism. The wide on-schedule window (08:00–17:00) means a departure at 8:00 and at 16:00 have identical instantaneous WORK utility (both get δ). The optimizer cannot distinguish early from late arrivals within the window from instantaneous utilities alone.
Because mandatory_seq guarantees agents eventually visit WORK regardless of δ, a lower δ can still produce positive LL on observed paths. The BI adjusts V to make WORK feasible at any on-schedule time. The optimizer discovers it can improve LL on other dimensions (e.g., HOME duration, mode choice) by setting μhome high, even at the cost of wrong work timing.
The estimated c_change = −0.301 (switching cost per activity change) adds a fixed cost of −0.602 per round trip (home→work→home). This is independent of departure time, so it does not affect the optimal timing but does reduce the total number of trips. In earlier estimation runs, c_change drifted to −∞, which is a related but distinct problem.
The following are candidate ideas, not a decided plan. Each has unresolved trade-offs that require supervisory discussion before any direction is committed.
This plot shows how the optimal work departure time changes as the ratio δ/μhome varies. When the ratio crosses 1.0 (δ = μhome), the optimal departure jumps to ts.
In a simple home → work → home trip, the home utility before and after work cancel exactly: leaving 15 min later gains 15 min of home before departure but loses 15 min of home after return. Net effect on home utility: zero.
Work utility peaks when the agent arrives on-schedule at ts = 08:00. So the optimal departure is always ts − Ttravel = 07:30, regardless of how δ or μhome compare.
The simplified model forces a work trip — there is no "stay home all day" option. The full backward induction always offers HOME as a competing choice at every time step.
When μhome > δ, home yields higher instantaneous utility than work. At each step, the agent prefers to stay one more step — and that preference propagates backwards through the value function, pushing the optimal departure later and later.
The agent eventually departs only when the post-schedule lateness penalty β drives work utility low enough that deferring further is no longer worth it. That threshold, set by the BI value function, lands at ~14:51.
| Question | Answer |
|---|---|
| Is the simulation pipeline running correctly? | YES (t_s, t_e) is applied via Mu(t); graph is built correctly; BI is correct |
| Is timing_windows ignored by ConstraintMasks? | YES, intentionally K=10 design: hard windows removed per new_settings.md S3 |
| Is estimation and simulation consistent? | YES Both use soft Mu(t) constraint only; parameters are internally consistent |
| Is the 14:51 work start a simulation bug? | NO The simulation is mechanically correct — it reflects the optimal policy given the v5 parameters |
| Is this a model specification problem? | NO The model specification is sound. δ was suppressed by an estimation bug (zone-matching), not a utility design flaw. |
| Was it an estimation bug? | YES Zone-matching bug: WORK states only built for Person 0's zone → WORK steps silently dropped from Uobs for all other workers |
| What is the fix? |
DONE Zone-agnostic
graph construction (mandatory_seq = [(WORK, None)]).
v6 running with fix applied — results expected tomorrow morning.
|