| # NeuroGolf Solver — Roadmap |
|
|
| > Current: v5.2 · 51 Kaggle validated · LB 594.84 · Target: 3000+ |
| > Philosophy: **Research → Design → Experiment → Analyze → Research** loop until confirmed score increase. |
| > Rule: **NEVER claim a feature works without full arc-gen validation on representative tasks.** |
| > Updated: 2026-04-27 — LB 594.84 confirmed. Phase 3 redesigned from expert review + literature. |
| > **All 400 tasks count. There are NO excluded tasks. Unsolved = 1.0 pt (Kaggle adds automatically).** |
|
|
| --- |
|
|
| ## Current Solver Breakdown (51/400 solved, LB 594.84) |
|
|
| | Category | Tasks | Solvers | |
| |----------|-------|---------| |
| | Conv (lstsq) | 25 | conv_fixed, conv_var, conv_diff, conv_var_diff | |
| | Analytical | 24 | identity, constant, color_map, transpose, flip, rotate, shift, tile, upscale, mirror, concat, spatial_gather, etc. | |
| | Gravity | 1 | gravity_unrolled (Task 78) | |
| | Mode fill | 1 | mode_fill (Task 129) | |
| | **Unsolved** | **349** | — | |
| |
| --- |
| |
| ## Phase 1: Score Optimization on Existing Tasks |
| |
| ### 1a: Opset 17 Slice-Based Analytical Solvers ⬜ |
| > Convert Gather-based solvers to Slice(step=-1) + Transpose for ~0 MACs. |
| |
| ### 1b: ONNX Optimizer Pass ⬜ |
| > `onnxoptimizer.optimize()` for dead-code elimination. |
| |
| --- |
| |
| ## Phase 2: Regularization — EXHAUSTED |
| |
| > Exps 0-3 tested. Architecture mismatch, not overfitting. Conv ceiling = ~25 tasks. |
| |
| --- |
| |
| ## Phase 3: New Solver Types |
| |
| > Organized by architecture type. Each solver is a separate .py file. |
| > **Build rule:** Scan for matches FIRST, build only what has hits, validate on arc-gen. |
| |
| --- |
| |
| ### Category A: Static Spatial Remapping (Gather/Slice/Pad) |
| |
| These are cheap, zero/low-MAC solvers that use precomputed index mappings. Highest score per task. Build these first. |
| |
| | # | Solver | Pattern | Key Ops | Status | |
| |---|--------|---------|---------|--------| |
| | A1 | `extract_inner` | Remove N-pixel border frame → smaller output | Gather | ⬜ | |
| | A2 | `add_border` | Add constant-color border → larger output | Gather+const | ⬜ | |
| | A3 | `pad_align` | Input pasted into larger canvas at fixed offset | Gather+const | ⬜ | |
| | A4 | `downsample_stride` | `out[r,c] = inp[r*sH, c*sW]` | Gather | ⬜ | |
| | A5 | `extract_and_tile` | Find smallest repeating unit, tile to fill output | Gather | ⬜ | |
| | A6 | `sparse_fill` | Each non-zero pixel becomes NxN block | Gather | ⬜ | |
| | A7 | `symmetry_complete` | Mirror sparse data to complete L-R or T-B symmetry | Gather | ⬜ | |
| | A8 | `multi_stamp` | Union of shifted copies of input at fixed offsets | Gather+Add | ⬜ | |
| | A9 | `affine_remap` | General integer coordinate remap: stride+offset, axis swap | Gather | ⬜ | |
| | A10 | `crop_paste` | Crop from input, paste at different position in output | Gather+const | ⬜ | |
|
|
| --- |
|
|
| ### Category B: Channel/Color Operations |
|
|
| Color-level transforms that work in the 10-channel one-hot space. |
|
|
| | # | Solver | Pattern | Key Ops | Status | |
| |---|--------|---------|---------|--------| |
| | B1 | `channel_filter` | Keep only certain colors, rest → background | Mul(mask [1,10,1,1]) | ⬜ | |
| | B2 | `overlay_constant` | Input + fixed pixel pattern overlaid | Add or Where + constant tensor | ⬜ | |
| | B3 | `fill_bg_with_mode` | Background pixels filled with dominant color, non-bg unchanged | ReduceSum→ArgMax→Where | ⬜ | |
| | B4 | `row_mode_fill` | Each row filled with its dominant color | ReduceSum(width)→ArgMax→Tile(width) | ⬜ | |
| | B5 | `col_mode_fill` | Each column filled with its dominant color | ReduceSum(height)→ArgMax→Tile(height) | ⬜ | |
|
|
| --- |
|
|
| ### Category C: Composition / Chaining |
|
|
| Chain two existing solvers. If transform(input) → intermediate, and color_map(intermediate) → output, emit one combined graph. |
| |
| | # | Solver | Pattern | Key Ops | Status | |
| |---|--------|---------|---------|--------| |
| | C1 | `transform_then_recolor` | rotate/flip/transpose + color_map | Chain existing | ⬜ | |
| | C2 | `crop_then_transform` | fixed_crop + rotate/flip | Chain existing | ⬜ | |
| | C3 | `recolor_then_tile` | color_map + tile/upscale | Chain existing | ⬜ | |
|
|
| --- |
|
|
| ### Category D: Unrolled Propagation (Conv+Where loops) |
|
|
| Dynamic solvers that need N unrolled steps. Higher MAC cost (~8-12 score). |
|
|
| | # | Solver | Pattern | Key Ops | Status | |
| |---|--------|---------|---------|--------| |
| | D1 | `gravity_unrolled` | Directional compaction, 4 dirs × 10 bg colors | Conv+Where ×N steps | ✅ Task 78 | |
| | D2 | `flood_fill` | BFS: seed spreads through passable cells | Conv+Clip+Mul ×N steps | ⬜ | |
| | D3 | `edge_detect` | Laplacian/Sobel boundary detection | Conv(3×3)+Abs+Greater | ✅ built, 0 matches | |
|
|
| --- |
|
|
| ### Category E: Global Aggregation |
|
|
| Solvers that compute a global statistic and broadcast it. |
|
|
| | # | Solver | Pattern | Key Ops | Status | |
| |---|--------|---------|---------|--------| |
| | E1 | `mode_fill` | Output = solid fill of most common input color | ReduceSum→ArgMax→Expand | ✅ Task 129 | |
| | E2 | `cumsum_fill` | Running sums for object extent, directional filling | CumSum | ⬜ | |
| | E3 | `bbox_crop_pad` | Find bounding box via ReduceSum+ArgMax, crop+pad | ReduceSum→ArgMax→Slice→Pad | ⬜ | |
|
|
| --- |
|
|
| ### Build Order (highest expected ROI first) |
|
|
| **Wave 1 — Static remapping (Category A):** Cheapest to build, highest score per task, most likely to have matches. ~1 day. |
| 1. A1 `extract_inner` + A2 `add_border` (border ops) |
| 2. A5 `extract_and_tile` + A6 `sparse_fill` (pattern ops) |
| 3. A3 `pad_align` + A4 `downsample_stride` (placement ops) |
| 4. A7 `symmetry_complete` (symmetry) |
|
|
| **Wave 2 — Color/channel ops (Category B):** Builds on mode_fill. ~0.5 day. |
| 5. B1 `channel_filter` + B3 `fill_bg_with_mode` |
| 6. B4 `row_mode_fill` + B5 `col_mode_fill` |
| |
| **Wave 3 — Composition (Category C):** Chains existing solvers, no new ONNX ops. ~0.5 day. |
| 7. C1 `transform_then_recolor` |
| |
| **Wave 4 — Propagation (Category D):** More complex, lower score. ~1 day. |
| 8. D2 `flood_fill` |
|
|
| **Wave 5 — Global aggregation (Category E):** Needs careful design. ~1 day. |
| 9. E2 `cumsum_fill` + E3 `bbox_crop_pad` |
|
|
| --- |
|
|
| ### Honest Projections |
|
|
| I will NOT repeat the Phase 2 mistake of projecting fantasy numbers. Here's what I know: |
|
|
| - **51 tasks solved today.** LB 594.84. |
| - **Each Wave:** Might add 2-10 tasks. Might add 0. We don't know until we scan and test. |
| - **The only reliable estimate:** Gravity added 1 task. Mode fill added 1 task. Edge detect added 0. Hit rate so far: ~1 new task per solver built. |
| - **If hit rate holds:** 20 new solvers × ~1 task each = ~20 new tasks → ~70 solved → LB ~800-900. |
| - **If some solvers hit 5+ tasks:** Could reach 100-120 solved → LB ~1200-1500. |
| - **3000+ requires a fundamentally different approach** (test-time training, learned architectures) that we're not doing. |
|
|
| | Scenario | Solved | Est LB | Confidence | |
| |----------|--------|--------|------------| |
| | Wave 1 only | 55-65 | 650-800 | 60% | |
| | Wave 1+2 | 60-75 | 750-950 | 50% | |
| | Wave 1+2+3 | 65-85 | 850-1100 | 40% | |
| | All waves | 70-120 | 900-1500 | 30% | |
|
|
| --- |
|
|
| ## Phase 4: Score Optimization |
|
|
| ### 4a: Best-of-N Model Selection ⬜ |
| ### 4b: Official Scoring Alignment (onnx_tool) ⬜ |
| |
| --- |
| |
| ## BLENDING — EXPLICITLY EXCLUDED |
| |
| --- |
| |
| ## Experiment Log |
| |
| | Date | Experiment | Result | Decision | |
| |------|-----------|--------|----------| |
| | 2026-04-24 | v4.2 baseline | 50 arc-gen, LB ~501 | Baseline | |
| | 2026-04-26 | v5.0 refactor | 49 solved, ~604 score | New baseline | |
| | 2026-04-26 | Exp 1-3 (regularization) | 0 improvement | **EXHAUSTED** | |
| | 2026-04-26 | v5.2 gravity+mode | +2 tasks (78, 129) | ✅ Kept | |
| | 2026-04-27 | **v5.2 Kaggle submission** | **51 solved, LB 594.84** | **Current best** | |
| |
| --- |
| |
| ## Research Queue |
| |
| 1. ✅ CompressARC — CumMax/ReduceSum architecture |
| 2. ✅ TRM — recursive reasoning |
| 3. ✅ ARC Prize 2025 Tech Report |
| 4. ✅ Expert review #1 — Phase 3 solver list (pad_align, crop_paste, downsample, etc.) |
| 5. ✅ Expert review #2 — 6 concrete solvers with code (extract_inner, add_border, etc.) |
| 6. [ ] **Task taxonomy scan** — for each Wave 1 solver, count matching unsolved tasks before building |
| |