Skip to content

Repository files navigation

NeuroGolf 2026 — ARC-AGI ONNX Solver

Hand-built ONNX graph surgery toolkit for the Kaggle neurogolf-2026 competition (Google Brain / IJCAI-ECAI 2026).

License: MIT Python 3.11 ONNX Runtime 1.24.4 CI Stars Issues

🥉 Bronze Medalist · Public LB 7411.14 · v324 (2026-07-13) · Top target 7864.02

NeuroGolf 2026 Bronze Medal

📖 Table of Contents

背景

Google Brain / IJCAI-ECAI 2026 的 Kaggle 比赛 neurogolf-2026 的冲榜代码仓库。

400 个 ARC-AGI 任务,每个任务交一个 ONNX 网络,把 30×30 input grid 变换成 output grid,所有 train+test+arc-gen 例子都要精确匹配。

评分:每任务 points = max(1.0, 25.0 - ln(memory + params)),memory (bytes) + params (count) 越小分数越高。总分 = 400 题之和。Top LB 7864.02(平均 19.66/题 → cost≈208)。

ONNX 约束:

  • 单 input input,单 output output,shape [1, 10, 30, 30] float32
  • Opset 10, IR version 10
  • 文件大小 ≤ 1.44 MB

最终成绩

🥉 Bronze Medalist — Kaggle neurogolf-2026 铜牌。

版本 Public LB 日期 说明
v324 7411.14 2026-07-13 已完成最高分,6 项纯语义等价尾压合并
v325_task118_ab — 2026-07-16 task118 A/B 语义 fallback 实验,提交结果未记录

完整冲榜历史 v1 → v325 见 WORK_LOG_2026-07-11.md(3362 行,含每次提交的 SHA-256、cost 变化、LB 分数、ref 编号)。版本要点见 CHANGELOG.md。

⚠️ 注意:原 submission.zip(v324)和 submissions/submission.zip(v325_task118_ab)在仓库清理过程中被误删,本仓库不含最终提交 zip。如需重建,可参考 pipeline/build_submission_from_ledger.py 和 solvers/task118/task118_v4_fallback.py 重新生成。

仓库结构

neurogolf-2026/
├── build/                       # 173 个核心冲榜脚本
│   ├── build_taskNNN_*.py       # 单 task ONNX 构造(35+ 个)
│   ├── optimize_taskNNN_*.py    # 单 task 优化(13+ 个)
│   ├── solver_taskNNN_*.py      # 单 task 求解器(12+ 个)
│   ├── search_*.py             # 搜索类(search_zero_einsum, gpu_search 等)
│   ├── mine_taskNNN_*.py        # 数据挖掘
│   ├── sgd_*.py                 # SGD 训练类求解器
│   ├── einsum_*.py              # Einsum 优化工具
│   ├── llm_solver*.py           # LLM 生成求解器
│   ├── graph_surgery.py         # ONNX 图手术
│   ├── score.py                 # 本地评分函数
│   └── ...                      # 其他辅助工具
├── solvers/                     # 单 task build 脚本,按 task 号分子目录
│   ├── taskNNN/                 # 131 个子目录,每个含该 task 的多个 build_*.py 变体
│   │   └── taskNNN_*.py         # 每个 task 的 ONNX 算子压缩实验
│   └── *.py                     # 150 个跨 task 通用工具(absorb_*, commute_*, etc.)
├── pipeline/                    # 11 个提交 pipeline 脚本
│   ├── build_submission_from_ledger.py  # 最终组装:rolling ledger → 400 onnx → submission.zip
│   ├── assemble_from_ledger.py
│   ├── build_submission_next.py
│   ├── build_submission_v5.py / v6.py
│   ├── validate_solvers.py
│   ├── agent_candidate_screen.py
│   ├── accept_screened_candidates.py / accept_solver_attestation.py
│   └── monitor.sh / monitor_public_releases.sh
├── .github/                     # CI workflows + issue/PR templates
│   ├── workflows/ci.yml         # GitHub Actions:py_compile + import smoke test
│   ├── ISSUE_TEMPLATE/          # bug_report.md, new_solver.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── dependabot.yml / FUNDING.yml / markdown-link-check.json
├── WORK_LOG_2026-07-11.md       # 3362 行完整冲榜日志(v1 → v325)
├── CHANGELOG.md                  # 版本变更日志
├── ARCHITECTURE.md               # 三层架构与数据流说明
├── CONTRIBUTING.md               # 贡献指南
├── CODE_OF_CONDUCT.md           # 行为准则
├── CITATION.cff                  # 学术引用
├── NOTES.md                      # 项目笔记
├── ZERO_COST_SEARCH_2026-07-12.md  # Zero-cost Einsum 搜索记录
├── requirements.txt              # Python 依赖
├── LICENSE                       # MIT
└── README.md                     # 本文件

架构

三层结构,详见 ARCHITECTURE.md:

build/      ── 173 个跨 task 基础设施脚本(score, search, mining, graph surgery, llm_solver, sgd)
   │           produces candidate ONNX
   ▼
solvers/    ── 131 个 taskNNN/ 子目录 + 150 个跨 task 通用工具
   │           emits candidate taskNNN.onnx
   ▼
pipeline/   ── 11 个 rolling ledger + submission.zip 组装脚本
                build_submission_from_ledger.py 是最终 400-onnx 打包器

快速开始

git clone https://github.com/calixlin/neurogolf-2026.git
cd neurogolf-2026
pip install -r requirements.txt

验证安装:

python -c "import onnx, onnxruntime, numpy; print(onnx.__version__, onnxruntime.__version__, numpy.__version__)"

Pipeline 用法

1. 从 rolling ledger 组装最终 submission.zip

python pipeline/build_submission_from_ledger.py \
    --source-version v323 \
    --version v324 \
    --models path/to/400_onnx/ \
    --ledger path/to/rolling_ledger.json \
    --full-audit path/to/full_audit.json

输出 submission.zip(400 个 taskNNN.onnx)+ manifest JSON,记录每个 task 的 SHA-256 和 gain。

2. 单 task 优化

每个 solvers/taskNNN_*.py 是一个独立的 ONNX 算子压缩实验。以 task080 为例:

python solvers/task080/task080_topk_line_color.py
# 输出 candidate task080.onnx,通过 fresh10000 真值验证后并入 rolling ledger

每接受一个候选:

  • 在 fresh 10000 例上零分歧、零运行错误
  • fixed 265/266 例子全过
  • official ORT 1.24.4 复验预测 +gain 与实际 LB 涨幅一致

核心方法论

  1. 逐 task 手工 ONNX 算子压缩:不训练神经网络,直接用 ONNX 算子(Conv / QLinearConv / Einsum / Gather / Where 等)构造能精确匹配所有 train+test+arc-gen 例子的变换,目标是 cost = memory + params 最小。
  2. Rolling ledger 累积接受:每个通过 hidden test 的候选并入 ledger,新版本 = 旧版本 + 改一个 task。
  3. fresh10000 真值验证:每个候选在官方 ARC-GEN fresh 10000 例上零分歧才能进 ledger。
  4. Zero-cost Einsum 搜索:对每 task 暴力搜索 two-copy / three-copy Einsum 方程,找 cost=0 的解(仅 task067 / 179 / 241 命中,见 ZERO_COST_SEARCH_2026-07-12.md)。
  5. Graph surgery:CSE、dead-end 删除、initializer 去重、cast 交换等语义保持变换做尾压。

示例:从 task080 提分

task080 经过 6 次压缩从 5661 → 4549(cost),各阶段代码:

阶段 cost 脚本
1. 删除动态 10×30 FLOAT OneHot 5661 → 5111 solvers/task080/task080_drop_ones30.py
2. 单次 QLinearConv 打包正交/对角邻接 5111 → 4801 solvers/task080/task080_packed_neighbor_code.py
3. 邻居读取改行后列的共享 Gather 链 4801 → 4688 solvers/task080/task080_direct_palette_gather.py
4. 3×30 UINT8 表 + TopK 线色提取 4688 → 4549 solvers/task080/task080_topk_line_color.py

本地评分

# 评分一个 submission bundle
python build/score.py --bundle path/to/submission.zip

# 从多个 bundle 中按每题最低 cost 拼出最佳
python build/score.py --blend out_bundles/*.zip --out submission.zip

评分函数复刻自官方 neurogolf_utils.py:points = max(1.0, 25.0 - math.log(max(1.0, memory + params)))。

关键依赖

  • Python 3.11
  • onnx + onnxruntime==1.24.4(官方 LB 用的版本,见 requirements.txt)
  • numpy
  • (可选) torch,仅 sgd_*.py 和 gpu_search_*.py 使用

文档

贡献

欢迎提交 ONNX graph-surgery 改进,请先读 CONTRIBUTING.md。提交 PR 前运行 pre-commit run --all-files。

引用

@software{calixlin_neurogolf_2026,
  author       = {calixlin},
  title        = {neurogolf-2026: ARC-AGI ONNX solver toolkit},
  year         = {2026},
  url          = {https://github.com/calixlin/neurogolf-2026},
  version      = {325}
}

License

MIT License — 冲榜代码,仅供学习参考。比赛规则的所有内容归 Kaggle / Google Brain 所有。

About

Kaggle neurogolf-2026 competition project (Google Brain / IJCAI-ECAI 2026)🥉 Bronze Medalist

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages