1ed7797cb6
- New guns: guess-factor (GF histogram), pattern-matcher (movement tape replay) - New modules: minimum-risk melee movement, spinning melee radar - New test bots: PatternMover, RandomMover, WaveSurfer - Fixed: FeedbackEvent now carries actualX/actualY for proper GF learning - Fixed: TM gun warmup gating + directional residuals - Fixed: circular gun integrated formula + multi-bin omega cache - Fixed: oscillator wall-bounce lockout - Fixed: phantom meteor perpendicular body orientation - 6/6 battle wins across all enemy types
4.0 KiB
4.0 KiB
Research Journal
2026-09-18 — Session 1: Foundation
Input Engineering
- Stripped Hebbian learning, kept 690-bit encoding
- Removed self-state (was 40 bits, not needed for aiming)
- Compressed wall distances: 4×7bit → 2×7bit XY position (saved 140 bits)
- Evaluated sin/cos vs Gray-code angles: sin/cos kept (no wraparound discontinuity, worth 180 extra bits)
- Final: 690 bits = 10 frames × 69 bits
Wave Feedback System
- Built circular wave system: 10 power levels, expanding at bullet speed
- Hit detection: ±18px tolerance, 95.6% hit rate
- CSV logging: binary + decimal, 181 columns, toggled via BNNBOT_CSV env var
- Provides ground truth for any future learning method
Data Analysis
- 324 rows from battle_1, 277 fully resolved
- Enemy moves in straight lines (97.8% heading stability)
- Linear extrapolation is strong baseline (15-27px MAE)
- Velocity is constant, acceleration negligible
Predictor Backtest
- Tested 3 predictors: pure linear, weighted multi-frame, linear + Hebbian residual
- Hebbian residual wins: 14-21% MAE reduction, converges within one battle
- Only 10/24 table cells activate — sparse problem
Theoretical Exploration
- XOR layers collapse (associative) — can't stack for depth
- AND with fixed masks also linear over GF(2)
- Non-linearity requires combining input-dependent signals: popcount + threshold
- Depth needs credit assignment through layers — open problem without gradients
Key Insight
The input engineering IS the deep feature hierarchy. The learnable part should be shallow unless we find a learning rule that can genuinely exploit depth under our constraints (no supervised learning, no gradient descent).
Next Steps
- Research non-gradient, non-supervised learning methods across domains
- Parallel exploration: biology, electronics, discrete math, unconventional CS
- Prototype top candidates against CSV data
2026-09-18 — Session 1 (continued): Prototype Results
Domain Research (4 parallel explorations)
- Biology: Three-factor Hebbian + eligibility traces is the universal pattern. Immune clonal selection fits binary weights. Key insight: the wave system provides delayed reward, but eligibility traces (recording which weights contributed) are the missing piece.
- Electronics: WNN/WiSARD (LUT RAM nodes) — each neuron is a lookup table, O(1) inference, learning = table write. ΣΔ correction accumulators.
- Discrete Math: The correction signal has only ~4-5 bits of entropy (Shannon analysis). Current 24-cell table is near-optimal for this opponent. Hamming k-NN over full 690 bits could replace hand-picked features.
- Unconventional CS: Tsetlin Machines — purpose-built for binary inputs + reinforcement. Regression TM handles continuous prediction. "Goes Deep" paper (2025) adds multi-layer hierarchy.
Prototype Backtests (277 rows, online learning)
| Method | Avg MAE | vs Baseline | Convergence |
|---|---|---|---|
| P1 Linear extrapolation | 12.24 | — | Instant |
| P3 Hebbian residual | ~10.45 | −14.6% | Fast (50 rows) |
| WiSARD K=12, 276 bits | 9.93 | −18.9% | Fast (50 rows) |
| TM Regression (warm) | 12.45 | Still converging | Needs 1000+ rows |
| TM last-50 only | 9.37 (p1.07) | Strong | Learning curve active |
Key Decisions
- WiSARD wins on limited data — simplest, fastest convergence, best MAE
- TM has potential but is data-hungry — needs diverse enemy battles
- XOR temporal features don't help — raw bits are sufficient
- K=12 tuple size is optimal for 277-1000 row datasets
Bot Changes Today
- fix(hebbian): symmetric learning — both active and inactive outputs learn
- feat(BNNBot): shaped reward based on miss distance — every shot teaches something
- style(BNNBot): remove 870-bit binary dump from output
- fix(hebbian): random weight init to escape zero local minimum
Still TODO
- Generate battle CSV against diverse enemy types (agent ran out of tokens)
- Re-run both prototypes on multi-enemy data
- Implement WiSARD in Nim bot
- Test TM with more data to see if it surpasses WiSARD