Hand-built ONNX graph surgery toolkit for the Kaggle neurogolf-2026 competition (Google Brain / IJCAI-ECAI 2026).
🥉 Bronze Medalist · Public LB 7411.14 · v324 (2026-07-13) · Top target 7864.02
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,单 outputoutput,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__)"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。
每个 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 涨幅一致
- 逐 task 手工 ONNX 算子压缩:不训练神经网络,直接用 ONNX 算子(Conv / QLinearConv / Einsum / Gather / Where 等)构造能精确匹配所有 train+test+arc-gen 例子的变换,目标是
cost = memory + params最小。 - Rolling ledger 累积接受:每个通过 hidden test 的候选并入 ledger,新版本 = 旧版本 + 改一个 task。
- fresh10000 真值验证:每个候选在官方 ARC-GEN fresh 10000 例上零分歧才能进 ledger。
- Zero-cost Einsum 搜索:对每 task 暴力搜索 two-copy / three-copy Einsum 方程,找 cost=0 的解(仅 task067 / 179 / 241 命中,见
ZERO_COST_SEARCH_2026-07-12.md)。 - Graph surgery:CSE、dead-end 删除、initializer 去重、cast 交换等语义保持变换做尾压。
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使用
ARCHITECTURE.md— 三层架构与数据流,rolling ledger 机制WORK_LOG_2026-07-11.md— 3362 行完整冲榜日志,每版 cost/LB/SHA-256CHANGELOG.md— 版本里程碑摘要NOTES.md— 项目笔记与评分公式细节ZERO_COST_SEARCH_2026-07-12.md— zero-cost Einsum 搜索覆盖与命中记录CONTRIBUTING.md— 贡献指南CODE_OF_CONDUCT.md— 行为准则CITATION.cff— 学术引用solvers/README.md— 单 task 子目录索引
欢迎提交 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}
}MIT License — 冲榜代码,仅供学习参考。比赛规则的所有内容归 Kaggle / Google Brain 所有。