diff --git a/crates/ml/tests/dqn_early_stopping_termination_test.rs b/crates/ml/tests/dqn_early_stopping_termination_test.rs index 25f85681c..4b49b0226 100644 --- a/crates/ml/tests/dqn_early_stopping_termination_test.rs +++ b/crates/ml/tests/dqn_early_stopping_termination_test.rs @@ -147,13 +147,14 @@ async fn test_early_stopping_terminates_with_error() { hyperparams.epochs = 10; hyperparams.gradient_collapse_multiplier = 1e9; hyperparams.gradient_collapse_patience = 3; + hyperparams.min_epochs_before_stopping = 1; // Allow collapse at any epoch hyperparams.checkpoint_frequency = 1; hyperparams.batch_size = 32; - hyperparams.buffer_size = 1024; // Minimum for GPU PER (MIN_GPU_CAPACITY) + hyperparams.buffer_size = 1024; hyperparams.min_replay_size = 32; hyperparams.warmup_steps = 0; - hyperparams.max_training_steps_per_epoch = 300; // Fast epochs: clears warmup (300>204), ~3s vs ~370s - hyperparams.replay_buffer_vram_fraction = 0.0; // Disable AutoReplaySizer for test determinism + hyperparams.max_training_steps_per_epoch = 300; + hyperparams.replay_buffer_vram_fraction = 0.0; hyperparams.gpu_n_episodes = 16; hyperparams.gpu_timesteps_per_episode = 50; @@ -218,12 +219,13 @@ async fn test_gradient_collapse_propagates_error() { hyperparams.epochs = 10; hyperparams.gradient_collapse_multiplier = 1e9; hyperparams.gradient_collapse_patience = 3; + hyperparams.min_epochs_before_stopping = 1; hyperparams.batch_size = 32; - hyperparams.buffer_size = 1024; // Minimum for GPU PER (MIN_GPU_CAPACITY) + hyperparams.buffer_size = 1024; hyperparams.min_replay_size = 32; - hyperparams.warmup_steps = 0; // Skip train_step() warmup so training_steps increments immediately - hyperparams.max_training_steps_per_epoch = 300; // Fast epochs: clears warmup (300>204), ~3s vs ~370s - hyperparams.replay_buffer_vram_fraction = 0.0; // Disable AutoReplaySizer for test determinism + hyperparams.warmup_steps = 0; + hyperparams.max_training_steps_per_epoch = 300; + hyperparams.replay_buffer_vram_fraction = 0.0; hyperparams.gpu_n_episodes = 16; hyperparams.gpu_timesteps_per_episode = 50; diff --git a/crates/ml/tests/smoke_test_real_data.rs b/crates/ml/tests/smoke_test_real_data.rs index 25b6281b8..b56eb4615 100644 --- a/crates/ml/tests/smoke_test_real_data.rs +++ b/crates/ml/tests/smoke_test_real_data.rs @@ -707,7 +707,7 @@ mod gpu_smoke { timesteps_per_episode: timesteps, total_bars: num_bars as i32, episode_length: timesteps, - epsilon: 0.0, // NoisyNets handle exploration + epsilon: 0.1, // 10% random ensures ≥2 distinct actions in 200 samples gamma: 0.99, // sigma must be large enough that NoisyNet noise dominates Q-value gaps // even on wide networks (256-dim). With random Xavier init on a 256-wide