Files
foxhunt/docs
jgrusewski a86fba2b1d fix(dqn): val_dir_dist + active_frac measurement artifact (-1 sentinel)
After done_flags[w]=1 (capital floor breach), backtest_env_step
early-returns without writing actions_history_buf for remaining slots
in [done_step, max_len). The prior zero-init decoded those slots as
Short Quarter Market Normal (action 0) via `dir = 0/27 = 0` and
inflated val_dir_dist's Short bucket / active_frac to a measurement
artifact masking real model behaviour.

Two-part fix:

1. `gpu_backtest_evaluator.rs::reset_evaluation_state`: replace
   `memset_zeros` for actions_history_buf with
   `cuMemsetD32Async(0xFFFFFFFFu32)` writing -1 sentinel. The Rust
   readers already filter `if a < 0 { continue; }` so unwritten slots
   are skipped correctly post-fix.

2. `backtest_metrics_kernel.cu`: add `if (act < 0) continue;` after
   reading actions_history. The reduce-side metrics
   (buy_count/sell_count/hold_count → active_frac/dir_entropy +
   bnd_* trade-boundary detection) now consistently skip unwritten
   slots. step_returns at those slots are still zero-init (correct)
   so summing them with r=0 is a no-op.

Empirical impact (local 3-fold × 5-epoch smoke, RTX 3050 Ti):
  val_dir_dist Short: 81-84% → 13-29% (matches val_picked within 5pp)
  active_frac:       87-91% → 31-50%
  dir_entropy:       0.57    → 0.83-1.02

The pre-fix "val-Flat-collapse" / "Short-collapse" pathology that
motivated substantial subsequent investigation (incl. the 4-plan
distributional-RL Thompson rollout draft) was largely a measurement
artifact from this bug surfacing differently before vs after the
Kelly cap fix (`0c9d1ee39`). Pre-Kelly the Kelly cap clamped most
Long/Short → Flat → actions_history was densely written with Flat
encoding → 80% Flat reading (real Kelly pathology + small artifact).
Post-Kelly the picks survive but the poor smoke-trained model
breaches capital floor often → many unwritten Short slots → 83%
Short reading (pure artifact). With both fixes, val_dir_dist now
reflects real model behaviour.

Audit entry updated in docs/dqn-wire-up-audit.md.
2026-04-27 10:36:09 +02:00
..