Files
foxhunt/crates/ml
jgrusewski b6b17d46bb feat(sp17-3.2): V_share + advantage_clip_bound producers + extended emit
Phase 3.2 lands the remaining two SP17 dueling-Q diagnostic producers
atomically with kernel + launcher + Rust wrapper + extended HEALTH_DIAG
emit + GPU oracle tests per `feedback_wire_everything_up`.

V_share[d] = |E[V]| / (|E[V]| + |E[A_centered, picked]|)
  where picked = argmax_a Σ_z A_raw[i, a, z] (max-Q semantic — tractable
  per-batch without depending on actions_history_buf which is collector-
  time state stale relative to the cuBLAS forward at HEALTH_DIAG cadence).
  Pearl-A bootstrap (sentinel 0.5) + α=WELFORD_ALPHA_MIN=0.4 + bilateral
  [0, 1] clamp per `pearl_symmetric_clamp_audit`. 4 blocks × 256 threads.

advantage_clip_bound = p99(|A_centered|) × ADVANTAGE_CLIP_SAFETY_FACTOR=1.5
  via sp4_histogram_p99 (block tree-reduce + per-warp tile binning, NO
  atomicAdd per `pearl_fused_per_group_statistics_oracle`). EMA α=0.01
  slow per-fold + bilateral clamp [0.1, 100.0] per
  `pearl_symmetric_clamp_audit`. Pearl-A bootstrap (sentinel 1.0).
  Single block × 256 threads + flat |A_centered| scratch buffer
  (mapped-pinned, sized to B × Σ_d b_d × NA).

Observability-only — the actual clipping wire-up is Phase 5 follow-up.
The Phase 1 mean-zero contract (commits eabcf8d52..6f53d676f) makes
A_centered a meaningful signal; this commit observes it.

Extended HEALTH_DIAG line:

  HEALTH_DIAG[N]: dueling [v_share=(d=X m=Y o=Z u=W)]
                          [a_var=(d=A m=B o=C u=D)] [clip=K]

GPU oracle tests on RTX 3050 Ti (all pass, 13/13 SP17 tests):
- v_share_per_branch_matches_closed_form: synthetic V=2.0 + linear A
  per branch; closed-form V_share = 2/(2 + |K_d × (n_d-1)/2|);
  ε=1e-4. Pearl-A bootstrap REPLACES on first launch.
- advantage_clip_bound_tracks_p99_safety: synthetic A with action-
  dominant + per-(i,z) jitter (the jitter is REQUIRED — pathologically
  lockstep values undercount in sp4_histogram_p99's non-atomic warp
  tile binning per the kernel's documented "1/(256×32) loss for
  uniformly distributed signals" qualifier; concentrated values violate
  the assumption. Real |A_centered| in production is continuous, so
  this is a test-data-only effect.) ε=0.20 (jitter + linear histogram
  quantization).

Plan: docs/superpowers/plans/2026-05-08-sp17-dueling-q-network.md
      Phase 3.2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 23:02:35 +02:00
..

ml

10-model ML ensemble for the Foxhunt HFT system, built on Candle v0.9.1.

Models

  • DQN (Rainbow) — deep Q-network with prioritized replay, dueling heads, noisy nets
  • PPO — proximal policy optimization with GAE, LSTM policies, clip-higher
  • TFT — temporal fusion transformer for multi-horizon forecasting
  • Mamba2 — state space model for sequence prediction
  • Liquid Networks — biologically inspired networks for non-stationary data
  • TLOB — transformer-based limit order book analysis
  • KAN — Kolmogorov-Arnold networks
  • xLSTM — extended LSTM architecture
  • TGGN — temporal graph neural network
  • Diffusion — diffusion-based generative model

Key Modules

  • ensemble — model ensemble coordination and confidence aggregation
  • hyperopt — PSO-based hyperparameter optimization with per-model adapters
  • trainers — unified training loops (DQN, PPO, supervised)
  • inferenceInferenceAdapter trait for prediction
  • checkpoint — model checkpointing and restoration
  • evaluation — walk-forward evaluation pipeline

Usage

use ml::dqn::DQN;
use ml::ppo::PpoTrainer;