ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI如何探索数学谜题:以Erdős无3-AP集合搜索为例

AI如何探索数学谜题:以Erdős无3-AP集合搜索为例 1. 背景为什么 Erdős 的谜题适合被 AI 重新探索如果你关注近两年的 AI 前沿动态会发现一个有趣的趋势AI 不再只停留在图像识别、自然语言处理这类“工程应用”里而是开始进入数学研究领域尝试寻找新定理、构造反例甚至生成可验证的证明。在这个方向上很多研究者都会反复提到一个名字Erdős埃尔德什。Paul Erdős 是 20 世纪最著名的数学家之一以“到处旅行、与人合作、到处提出问题”著称。他一生合作发表过超过 1500 篇论文在很多领域留下了大量猜想其中不少问题表述非常简单却几十年甚至上百年无人能解。数学界甚至用“Erdős 数”来衡量一个研究者与 Erdős 之间的“合作距离”直接和他合作过的人 Erdős 数为 1和这些人合作过的人 Erdős 数为 2以此类推。这个看似“玩梗”的指标其实反映了 Erdős 开创的一种开放、协作式数学文化。正因为 Erdős 的许多问题结构清晰、边界明确它们非常适合被计算机复现成“可搜索”的问题。过去我们只能用穷举、剪枝等经典算法去试探很小规模的数据今天有了 AI 大模型、强化学习、进化搜索和自动推理工具我们可以在更大的搜索空间里寻找构造与反例再交由数学家进行逻辑验证。本文会围绕“AI 如何走向纯数学研究前沿”展开并以一个与 Erdős 有直接关系的经典问题——无三项等差数列集合无 3-AP 集合——为例带大家从零写一个搜索器体验 AI 参与数学发现的基本流程。无论你是后端开发者、算法工程师还是对数学 AI 交叉方向感兴趣的学生这篇文章都能提供一个可运行的起点。我们会先讲清楚 AI 参与纯数学研究的几种路径再进入代码实战最后讨论常见陷阱和工程化建议。2. AI 参与纯数学研究的四条主要路径很多人以为“数学 AI”就是让大模型做几道应用题或者在聊天框里问“请证明费马大定理”。实际上当前 AI 纯数学研究已经形成了几种相对成熟的路径它们各有侧重也各有局限。2.1 计算搜索反例与构造最朴素也最有效的方式是直接用程序在有限空间里搜索反例或构造。数学猜想往往带有“对所有正整数成立”“不存在某种结构”这类全称命题要推翻它只需要找到一个反例要验证它在小范围内成立也可以让程序快速检查。这类方法并不神秘几十年来数学家一直在用。差异在于过去我们只能做小规模的枚举而现在 AI 驱动的搜索算法可以在更大、更复杂的空间中寻找结构。比如在组合数学中很多上界或构造问题本质上是“在一个指数级规模的空间里寻找一个满足若干约束的对象”这非常依赖高效的启发式搜索。2.2 数据驱动让模型“看出”规律第二种路径是监督学习。我们可以把数学对象编码成特征然后训练一个模型去预测某种性质再分析模型认为重要的特征从而提炼出人类可能忽略的规律。这方面有一个很经典的例子DeepMind 的研究团队曾用神经网络去研究扭结knot的几何不变量训练模型预测某个代的签名signature等属性。模型准确率高之后研究者再反向分析模型关注的几何特征最终提出了一个新的数学猜想并经过数学家后续证明。这种“模型先学到、人类再提炼”的方式已经进入了真实的现代数学研究流程。它的核心思想是模型虽然不能直接给出证明但它能提供“注意力线索”帮助数学家知道该往哪个方向走。2.3 强化学习与进化搜索在巨大搜索空间中找构造第三种路径更适合组合数学、极值图论这类“构造性”问题。代表性工作是 DeepMind 发布的 AlphaTensor 和 FunSearch。AlphaTensor 通过强化学习在矩阵乘法的算法空间中搜索发现了一些比人类已知更快的矩阵乘法算法虽然提升幅度不算夸张但证明了“AI 可以在数学结构的搜索空间里做决策”。FunSearch 则把大语言模型与进化算法结合让模型不断提出新的程序片段再通过自动评估筛选出满足约束的解最终在极值组合学中的 cap set 问题里发现了新的构造。这类方法把数学对象编码成“程序”或“构造步骤”让 AI 在搜索中不断尝试天然适合 Erdős 留下的大量组合问题。2.4 大模型与自动定理证明从“猜”到“证明”最后一条路径是自动定理证明。数学发现不仅需要“找到对的结论”还需要“证明结论可靠”。Lean、Coq、Isabelle 等证明助手把数学证明变成一种可由计算机校验的形式语言。近年来研究者开始把大语言模型当作“证明搜索策略”的一部分让模型在证明树中选择下一步该应用哪个引理、该做哪种改写。DeepMind 的 AlphaGeometry 在国际数学奥林匹克几何题上达到了接近金牌选手的水平就是这类方向的典型例子。不过也要清醒地看到LLM 生成的证明文本很容易出现幻觉看起来有板有眼实际上可能完全错误。因此在工程落地中通常会引入形式化验证工具作为“安全网”而不是盲目信任模型输出。3. 环境准备与项目结构这一节我们准备进入代码实战。我们的目标不是复现 AlphaTensor 或 FunSearch而是实现一个能运行、能观察、能理解的小型“数学谜题搜索器”并在这个过程中体会 AI 数学研究的通用框架。本文示例采用 Python主要考虑是语法清晰、生态完善几乎不依赖第三方库就能演示核心思路。3.1 运行环境操作系统Windows / macOS / Linux 均可Python 版本3.10 或以上第三方库不需要使用标准库random即可如果你希望画图展示结果可以额外安装matplotlib但本文代码不强制依赖它。3.2 项目结构建议新建一个项目目录例如math-ai-puzzlermath-ai-puzzler/ ├── no3ap.py ├── search_demo.py └── README.mdno3ap.py放核心搜索函数search_demo.py放运行演示代码。你也可以把全部代码写在同一个文件里不影响理解。4. 实战编写一个“无 3-AP 集合搜索器”下面我们选一个与 Erdős 直接相关的经典问题在集合 {1,2,...,N} 中找出一个尽可能大的子集使得其中任意三个不同的数都不能构成等差数列。这样的集合称为无三项等差数列集合简称“无 3-AP 集合”。这个问题看起来很简单但它在极值组合学中有非常深厚的背景。Erdős 和 Turán 曾研究过整数集合中的等差数列密度问题后来的 Roth 定理、Szemerédi 定理都与此相关。具体到“无 3-AP 集合最大能有多大”至今在大规模场景下仍然是很困难的问题。我们用一个聚焦的小问题来动手在小规模 N 下用不同策略搜索无 3-AP 集合。4.1 定义基础工具函数无论使用哪种搜索策略都需要两个基础函数has_3ap(S)判断一个集合中是否存在三项等差数列。is_valid_with_new(S, x)判断在已有集合 S 的基础上新增元素 x 后是否仍然合法。先实现判断函数def has_3ap(S): 判断集合 S 中是否存在任意三项等差数列。 T set(S) for a in S: for b in S: if a b and (a b) % 2 0: mid (a b) // 2 if mid in T: return True return False这里的思想是任取两个数 a 和 b假设它们是等差数列的两个端点那么中项就是(a b) / 2。只要中项仍然是集合中的整数就说明存在三项等差数列。注意判断条件是a b这样可以避免重复检查也能保证中项不等于端点因为两个不同整数的平均值不可能等于其中任意一个。再实现“新增元素后是否合法”的判断def is_valid_with_new(S, x): 判断将 x 加入 S 后S ∪ {x} 是否仍然没有三项等差数列。 T set(S) # 情况1x 作为等差数列的端点S 中某数作为中项 for a in S: other 2 * a - x if other in T: return False # 情况2x 作为等差数列的中项S 中两个数作为端点 for a in S: if (a x) % 2 0: mid (a x) // 2 if mid in T: return False return True新增一个元素 x 时它只可能出现在新的等差数列的三个位置之一端点、中项。如果我们能保证这两种情况都不触发那么新集合仍然是合法的。4.2 贪心构造第一种搜索策略是贪心。我们从 1 到 N 依次扫描只要当前数字加入后不破坏“无 3-AP”性质就把它选进集合。def greedy_no_3ap(n): 贪心构造一个尽可能大的无 3-AP 集合。 result [] for x in range(1, n 1): if is_valid_with_new(result, x): result.append(x) return result贪心策略的优点是快缺点是结果未必是最优解因为“先到先得”的局部选择可能阻塞后面更好的组合。但它可以作为后续更复杂搜索的初始基线。对 n 30 运行n 30 g greedy_no_3ap(n) print(n , n) print(Greedy length:, len(g)) print(Greedy set:, g)这个结果是确定的你可以直接在自己的环境里运行验证。你会发现贪心算法得到的集合通常已经不小但并不是最大。4.3 回溯精确搜索既然贪心不保证最优我们可以用回溯法对小规模 N 做精确搜索。回溯法的核心是依次决定每个数字“选”还是“不选”在搜索过程中用当前已知最优集合进行剪枝。def backtrack_no_3ap(n, start, selected, best): 在 1..n 中搜索最大无 3-AP 集合。 selected: 当前已选中的数字列表。 best: 当前搜索到的最优结果。 # 剪枝即使从 start 到 n 全部选上也不可能超过 best则提前返回 if len(selected) (n - start 1) len(best): return best # 搜索完成 if start n: if len(selected) len(best): best selected.copy() return best # 分支1不选当前数字 best backtrack_no_3ap(n, start 1, selected, best) # 分支2选当前数字但需要满足约束 if is_valid_with_new(selected, start): selected.append(start) best backtrack_no_3ap(n, start 1, selected, best) selected.pop() return best调用方式如下n_small 12 best backtrack_no_3ap(n_small, 1, [], []) print(Exact search n , n_small) print(Best length:, len(best)) print(Best set:, best)回溯法能保证找到最优解但复杂度是指数级的。n 12 时运行很快n 20 时可能就需要比较长时间n 30 时基本不可行。这也正是为什么数学搜索需要更聪明的启发式算法。4.4 启发式局部搜索接下来我们实现一个简单的启发式局部搜索这个思路更接近 AI 当前在数学搜索中的实际做法。算法流程如下用贪心结果作为初始集合。每一轮先随机删掉一个元素。尝试把某个未选元素加入集合只要加入后仍然合法就接受。如果新集合长度不小于历史最优则更新历史最优。循环若干轮。import random def hill_climb_no_3ap(n, max_iter3000): 用随机删除 添加的爬山式搜索寻找更大的无 3-AP 集合。 current greedy_no_3ap(n) best current[:] for _ in range(max_iter): if len(current) 0: break # 随机删除一个元素 idx random.randrange(len(current)) candidate current[:idx] current[idx 1:] # 尝试把未选元素加入 candidate_set set(candidate) pool [x for x in range(1, n 1) if x not in candidate_set] random.shuffle(pool) for x in pool: if is_valid_with_new(candidate, x): candidate.append(x) candidate.sort() break # 更新最优 if len(candidate) len(best) and not has_3ap(candidate): best candidate[:] current candidate return best运行random.seed(42) h hill_climb_no_3ap(30, max_iter3000) print(Hill climbing n 30) print(Best length:, len(h)) print(Best set:, h)需要说明的是这是一个非常简单的局部搜索示例实际效果依赖随机种子和迭代次数。它不一定能超过贪心太多但已经能体现“搜索 约束检查 持续优化”的 AI 数学研究基本范式。4.5 让大模型辅助生成搜索算法在真实项目里我们还会用大模型辅助写代码。比如我们可以给模型一个提示词你是数学研究助手。请设计一个 Python 函数在 1 到 N 的整数中寻找不含三项等差数列的最大子集。 要求 1. 先给出合法集合的判空函数 2. 再设计一个模拟退火或遗传算法 3. 输出集合长度与具体集合。大模型可以快速生成一版代码但你必须人工检查逻辑因为 LLM 生成的代码可能存在边界条件错误或者产生“看似合理但实际跑不通”的伪代码。这就是 AI 工程实践中最常见的现象AI 负责快速生成候选人类负责验证和修正。4.6 运行与结果说明把上面所有代码整合进一个search_demo.py运行后你会看到类似这样的输出具体数值可能因随机种子不同而略微变化n 30 Greedy length: 14 Greedy set: [1, 2, 4, 5, 10, 11, 13, 14, 19, 20, 22, 23, 28, 29] Exact search n 12 Best length: 6 Best set: [1, 2, 4, 5, 10, 11] Hill climbing n 30 Best length: 14 Best set: [1, 2, 4, 5, 10, 11, 13, 14, 19, 20, 22, 23, 28, 29]注意上面只是示例输出不代表所有环境的固定结果。重要的是观察趋势贪心很快回溯保证最优但只能处理小规模爬山类启发式能在中等规模下继续搜索更优解。5. 从搜索到验证AI 数学研究的工程架构前面我们写了一个小规模搜索器但真实 AI 数学研究项目要比这复杂得多。以当前比较成熟的 AI 数学工程框架为例通常包含四个模块。5.1 数学对象的编码计算机不能直接理解“集合”“图”“函数”这些数学对象必须先编码成机器可处理的格式。例如集合可以编码成二进制向量1 表示选中0 表示未选。图可以编码成邻接矩阵或边列表。公式可以编码成表达式树。证明步骤可以编码成形式化语言。编码方式会直接影响搜索效率。在 AlphaTensor 中矩阵乘法算法被编码成张量分解在 FunSearch 中数学构造被编码成 Python 程序在 AlphaGeometry 中几何图形被编码成符号对象。选择编码方式本身就是一项关键研究。5.2 候选生成器候选生成器负责提出“可能正确的构造或猜想”策略包括穷举和剪枝贪心算法局部搜索 / 模拟退火遗传算法强化学习大语言模型生成新程序每种策略都有适用场景。比如组合搜索中局部搜索和进化算法很常用在形式化证明中大模型可以负责生成“下一步动作”。5.3 评估与验证评估器的作用是快速判断候选是否合理。在无 3-AP 集合问题中评估器就是has_3ap这样的函数。更严肃的研究中评估可能分成两层启发式评估快速筛选比如“这个构造在 N1000 时能否保持密度上界”。严格验证用形式化证明系统Lean / Coq或人工证明来确认。评估器和验证器是两个不同层次不可混为一谈。AI 发现了一个现象只是“怀疑”验证器才是“确认”。5.4 人机协同闭环最终数学家仍然是决策者。AI 模型擅长快速搜索但很难判断一个结果是否有长远研究价值。人机协同的典型闭环是AI 生成大量候选猜想或构造。计算机快速筛选、打分。人类数学家浏览高置信度的候选提炼出可能的通用规律。人类或证明助手给出证明。证明成功的结论反过来成为训练数据帮助 AI 在下一轮表现更好。6. 常见问题与排查思路在 AI 数学项目中最常见的错误并不是“模型不够准”而是我们错误地信任了模型输出。下面整理一份排查清单。问题现象常见原因解决思路模型给出“看起来正确”的证明但实际有逻辑漏洞大模型幻觉用形式化验证或人工逐条审阅搜索算法在小规模结果很好扩大到 N 后失效过拟合小规模数据增加不同规模验证观察增长趋势程序运行很慢无法搜索较大 N搜索空间过大剪枝不足引入启发式搜索、贪心初始化、并行采样对同一个问题多次运行结果差异大随机种子影响固定随机种子记录实验参数AI 生成的新构造无法被理解可解释性差分析模型注意到的特征用符号回归提取规则搜索结果无法用于正式论文缺乏严格证明将候选交给证明助手验证还有一个常见误区把“小规模验证”当成“一般性结论”。比如回溯法在 n12 找到最优集合并不代表 n100 时某个构造仍然最优。数学推理中全称命题需要严格的逻辑覆盖不能只靠采样和实验。7. 最佳实践与工程建议如果你打算在真实项目中使用 AI 辅助数学研究下面几条经验值得参考。第一把“搜索”和“验证”彻底分开。不要让同一个模型既负责生成候选又负责判断候选是否正确。独立的验证器可以避免模型带着先入为主的偏见评价自己的输出。第二建立小规模基线。在引入复杂 AI 模型之前先用贪心、回溯、局部搜索把问题的“下限”摸清楚。否则你很难判断模型到底有没有贡献。第三保留完整的实验记录。数学搜索往往依赖随机种子和参数记录不完整会导致结果无法复现。建议至少记录随机种子搜索策略与超参数N 的取值范围运行时间最终集合或最优值第四优先使用形式化验证工具。如果项目涉及“证明某条定理”尽量让最终结果在 Lean、Coq 或 Isabelle 中得到机器校验这是目前最可靠的安全网。第五让数学专家参与进来。AI 可以发现一个看起来很奇怪的构造但只有熟悉研究脉络的人类专家才知道这个构造是否真正解决了某个猜想、是否属于已有框架的变体。产品开发中常见“AI 辅助、专家决策”的协作模式在数学研究中同样适用。第六警惕大模型的“不可信自信”。当大模型说“这个结果很容易证明”时你需要更加警惕因为语言模型并不会真的为自己的结论感到“确定”或“怀疑”。所有输出都应该被视为候选假设而不是事实。8. 总结与下一步学习路线我们从 Erdős 的数学遗产出发梳理了 AI 参与纯数学研究的四条路径计算搜索、数据驱动猜想、强化学习与进化搜索、大模型与自动定理证明。然后用一个无 3-AP 集合搜索器把“候选生成 约束检查 启发式优化”的流程完整跑了一遍。你可以先复制本文代码把 N 改成不同值观察贪心、回溯和爬山三种策略的差异。当你能理解这个小项目后再去看 AlphaTensor、FunSearch、AlphaGeometry 等系统理解会完全不同它们并不是“魔法”而是把搜索、评估、验证的工程框架应用到了更抽象的数学对象上。下一步学习建议如下如果想深入数学背景可以阅读组合数学、极值图论相关教材重点关注 Ramsey 理论、算术级数和集合构造。如果想做算法侧可以学习模拟退火、遗传算法、强化学习并用类似的方法改进本文的搜索器。如果想做推理侧可以尝试学习 Lean 证明助手并把本文的小搜索器结果写成存在性证明。如果想做工程侧可以研究如何用大模型 API 构建自动“生成猜想 - 过滤 - 验证”的流水线。数学研究向来是“少数人凭直觉探索”的领域而 AI 正在把它变成“人机协作的搜索过程”。Erdős 留下的谜题或许不会很快全部解开但至少我们已经有了一种全新的工具可以像当年的 Erdős 一样把问题抛给世界然后让更多人、更多算法一起去寻找答案。如果你在运行代码或
返回列表