jgrusewski
7ab5d4fa71
fix(ml): BUG #40 — epsilon stuck at 1.0 with noisy nets (100% random actions)
...
When use_noisy_nets=true (the conservative() default), epsilon never
decayed from 1.0 because (1) the trainer skipped update_epsilon() and
(2) DQNAgentType::set_epsilon() was a no-op for RegimeConditional agents.
This caused ALL training actions to be random — Q-values were learned but
never used for action selection.
Fix: set stored epsilon to 0.0 at training start when noisy nets are on.
Exploration is provided by NoisyLinear weight perturbation + the separate
noisy_epsilon_floor (5% safety floor for 45-action spaces).
Also fixes:
- Zstd-compressed .dbn file detection via magic bytes (0x28B52FFD)
- Test data path resolution using ancestors().find() for workspace root
- Test assertions updated for epsilon < 0.01 with noisy nets
2698 lib tests pass, 0 clippy warnings.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-04 23:13:25 +01:00
..
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 22:58:40 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 22:58:40 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 01:19:02 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 18:27:42 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-03-04 23:13:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-03 00:57:14 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-26 00:05:38 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-03 20:12:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-03 20:12:00 +01:00
2026-03-02 11:02:56 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-04 23:13:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-26 00:50:25 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-03-02 15:41:23 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00
2026-02-25 11:56:00 +01:00