储存环的动力学孔径(Dynamic Aperture,DA)有多大,即使只在模拟里回答也很费计算:要在一组六极铁设置下发射几千个粒子,把每一个都跟踪几千圈,再数一数有多少存活下来,这才得到一个设置的孔径。遗传算法对每一个候选设置都要这样算一遍,因此一次设计研究通常算到 1,000 个左右的设计就停下了。多点 BAX(multipoint Bayesian Algorithm Execution)则每次模拟只跟踪一个粒子,粒子选在模型预测的稳定边界附近,设置选在模型预测的最优区域附近。整张存活图(每个出发点上粒子存活圈数的分布)由一个神经网络从这些单粒子的结果里学出来。我是这篇文章的第一作者,七位作者来自 SLAC,DESY,LBNL,USC 和 Jefferson Lab。文章已被 Physical Review Accelerators and Beams 作为 Letter 接收。
- 40×达到同一超体积所需的跟踪模拟次数比 NSGA-II 少的倍数,已计入最后的完整核验
- >400×只计优化循环内部的模拟调用时,比 NSGA-II 少的倍数
动力学孔径与动量接受度
动力学孔径是粒子偏离闭轨多远出发仍能留在环里的范围,它决定了注入的束流有多少能被接住。动量接受度(Momentum Aperture,MA)是粒子能承受多大的能量偏差,它决定了束流寿命。两个孔径都由六极铁塑造,把一个推大,另一个通常就会缩小,因此设计要找的是 DA 面积与 MA 面积之间的一条 Pareto 前沿。前沿上的每一个点都对应一组六极铁设置,而这一组设置的两个面积都要由两张跟踪出来的存活图各自归结得到。
贝叶斯优化(Bayesian Optimization,BO)试的设置更少(文章把 MG-GPO 也列在这类早期尝试里,那是 Xiaobiao Huang 的方法,我参与了它的开发),但每试一组设置仍要跟踪一整张图。多点 BAX 把建模的位置往下放了一层,学的是从设置和出发点到存活圈数的映射,再把设计算法放在这个模型上运行。这套方法不是我提出的。BAX 出自 Neiswanger,Wang 和 Ermon,多点 BAX 出自 Miskovich 等人(我的两位合作者 Neiswanger 和 Ratner 也在其中)。我们的文章把它用到了 DA 和 MA 上。

一轮循环
一次完整的运行有 2,000 轮循环,累积起来超过 100,000 个跟踪过的粒子,这个数据量对高斯过程(Gaussian Process,GP)来说太大了。因此模型用的是神经网络,输入是四个旋钮(knob)的值和一个出发位置,输出是粒子存活的圈数占跟踪总圈数的比例,DA 和 MA 各有一个网络。两个网络先在 3,000 次随机的单粒子跟踪上预训练。之后的每一轮循环,先在两个网络上运行 NSGA-II(第二代非支配排序遗传算法)得到预测的 Pareto 前沿,由于这一步不跟踪任何粒子,代价很小。然后用两个条件圈定可以跟踪的候选:设置必须是保留在预测前沿附近的那些,出发点必须是 DA 网络认为落在稳定边界附近一条带里的点;MA 网络也照此处理,只是那条带由它自己给出。这样剩下的候选大约有 2,500 个,从中随机抽 50 个交给 pyAT 跟踪,再用结果微调两个网络。

这个方法实际上比它的名字听起来的要粗糙。网络只有一个而且是确定性的,采集函数用的是贪心的 MeanBAX(Chitturi 等人提出),因此整个循环里没有任何量带着不确定性;每轮的 50 个点是随机抽的,用联合互信息来选会更合理;超参数我们也几乎没有调过。
SSRL-X
测试对象是 SSRL-X,一个低发射度的磁聚焦结构(lattice),也是将来升级 SSRL 的候选方案之一(由 Raimondi 等人设计)。按 Huang 和 Safranek 的做法,它的六个六极铁家族归并成四个不改变色品的旋钮。每一次调用模拟器都从 10 个误差种子(error seed)里随机取一个,最后的核验则用新的种子。
与 NSGA-II 的比较
对照的基准是 NSGA-II,也就是 BAX 在网络上运行的那个优化器,两种方法各跑了两次。运行过程中看不到真实的超体积(Hypervolume,HV),因此 BAX 的停止判据看的是网络本身:当预测前沿相对 50 轮之前不再漂移时就停下。对 BAX 来说这一点出现在大约 25,000 次模拟处。我们之后继续跑了下去,事后看这个停止点与真实超体积走平的位置是一致的。NSGA-II 达到同一超体积用了大约 1,100 万次模拟。

页首两个倍数之间的差距就是最后的核验。BAX 的模拟只有十分之一发生在循环内部,其余都花在跟踪选中设置的完整存活图上,部分原因是四个旋钮的搜索本身太容易。若问题更难,核验所占的份额就会缩小。
网络学到了什么

对于前沿上的设置,网络最初给出的边界小了很多,到结束时形状已经与真实图相当接近。对于差的设置,网络几乎没有变化,这是由于模型一旦判定某个区域没有希望,BAX 就不再往那里采样。运行结束后网络本身也保留了下来:它能画出任意一组六极铁设置的 DA 图和 MA 图,可以手动转动旋钮,看孔径怎样变化。
mpBAX
后来我把这类循环整理成了一个通用的软件包 mpBAX。一次完整的实验由一份配置描述,可以是一个 Python 字典或一个 YAML 文件,每个目标各有自己的 oracle(即真正的模拟器)和模型。每一轮循环都存断点,因此一次运行可以从断点继续,也可以回退。它的核心只依赖 NumPy 和 PyYAML。
让智能体来改优化器
2026 年我们让大语言模型(Large Language Model,LLM)智能体(agent)直接修改这个优化器。用的框架是 LBNL 的 autoresearch-commissioning(由文章的合作者之一 T. Hellert 写成),我们组是 LBNL 之外第一个用它的组。每一次实验里,一个智能体对训练脚本提出一处改动,另一个独立的审查智能体读它的 diff。改动在固定的跟踪预算下运行,只有当留出的误差种子上跟踪出的真实超体积上升时才会合并。我们用这种方式做了几百次实验。
最能说明问题的一次测试用的是一个更严格的基准:哪些设置被打分,由一个智能体碰不到的搜索决定。代理模型一开始被削成只有一个线性层,得分接近零,而一个验证过的三层多层感知机(MLP)可以回到 10.80。第一次试运行里,第 1 个实验就发现了欠拟合,重建了三层 MLP,得分正好落在这个数上,之后的 39 个实验没有一个超过它。第二次试运行在第 7 个实验就越过了这个数,达到 11.40。起作用的改动是一个由粗到细的掩码(mask):代理模型还不准确时掩码放宽,之后再收紧。
这些超体积来自另一个基准,它的预算更小,打分方式也不同,因此不能与文章里的图相比较。这个严格版本到目前为止只做过两次试运行。
文章已被 Physical Review Accelerators and Beams 作为 Letter 接收(2026 年),doi:10.1103/4t6l-7jmg,arXiv:2511.17850。数字与图出自文章及其补充材料,autoresearch 的数字出自我们内部的实验回顾。
