The stability penalty (15% of PSO objective) was dead weight:
- Gradient norm threshold of 20,000 NEVER fires because gradient
clipping is at 10.0 and avg raw grad norms are typically 5-50.
- Q-value std threshold of 100 rarely fires with DSR and v_range=[10,50].
Fix: log-scale ramp for gradient (threshold=50, cap=3.0) gives smooth
PSO gradient across the 50→5000 range where clip engagement indicates
instability. Linear ramp for Q-std (threshold=15, cap=3.0).
Also: delete unused smooth_transition() + calculate_exponential_sharpe_incentive()
(-160 lines dead code), fix stale docstring on HFT activity fn args.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GPU experience kernel was zero-padding OFI features (state[45..53]),
creating a train/eval mismatch where GPU-collected experiences had no
OFI context but CPU validation used real OFI data.
- Add OFI_DIM compile-time constant to common_device_functions.cuh
(default 0, set to 8 when state_dim >= market_dim + portfolio_dim + 8)
- Add ofi_features parameter to both kernel signatures (full + warp)
- Replace zero-padding loop with direct OFI load from GPU memory
- Add upload_ofi_features() method to GpuExperienceCollector
- Wire OFI upload in DQN trainer at collector init time
- Cap MaxDD at 100% in evaluation metrics (margin call boundary)
- Add running_equity + margin_called tracking to EvaluationEngine
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add backticks to type names in doc comments (doc_markdown)
- Mark eligible functions as const fn (missing_const_for_fn)
No behavior changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>