EN

RCDS-S

给漂移中的储存环用的优化算法,每一步只取大概率仍低于事先设定阈值的点,在 SPEAR3 上跟上了我们自己加的一段漂移。

储存环是会漂移的:在一段长的供光运行(user run)里,硬件和它周围的隧道都会有一点变化,原因往往说不清楚,于是上一次机器研究(machine studies)班次找到的设置,慢慢就不再是最好的那一组。通常调几个旋钮(knob)就能把它找回来,但优化器在找到好设置之前总要试一些差的设置,光束线上的用户会察觉到,因此这类调机只能等下一次机器研究班次(或者有人让出束流时间,额外加一个班次)。我们在 SPEAR3 上用 MG-GPO 找到的设置就是这样,当天很好,几天以后就不行了。RCDS-S 是我针对这个问题的一次尝试:让优化器在供光运行期间也能调机,而每一步都对照事先设定的阈值来检查。这项工作由我主导,2022 年我与 Minghao Song 和 Xiaobiao Huang 一起把它发表在 Physical Review Accelerators and Beams 上。

RCDS-S 的底层是 RCDS(鲁棒共轭方向搜索)。这个算法由 Xiaobiao Huang 与 Corbett,Safranek 和 Wu 提出(NIM A,2013 年)。它沿一组共轭方向逐个做线搜索,在每个方向上取足够多的点把极小值包住,再用一条抛物线穿过这些点做拟合。RCDS-S 把这些都保留了下来,换掉的只是下一个试探点的选法:原来的 RCDS 对步长没有限制,阈值也不参与搜索。

从一个已经测过的点出发:若目标函数的变化率不超过某个斜率 L(即 Lipschitz 常数),那么与这个点相距 d 的地方,目标值在最坏情形下也只比它高 Ld。再把两次读数的噪声叠上去,就得到新的点仍然落在阈值之下的概率,我们称它为安全概率。

p(𝐱)=12[1+erf⁡(h−Emax⁡(𝐱)2(σ2+σ02))]

其中 h 为设定的阈值,Emax⁡ 为斜率上限允许该点取到的最高值,σ 与 σ0 为两次读数的噪声。

每一个测过的点都给每个候选点这样一个概率,候选点保留其中最大的一个。下一次试探放在安全概率足够高的那一段的远端(一般是背离已有点的那一侧),这样每一步都能在安全的前提下尽可能多地覆盖新的区域。若这一段够不到已有点之外,就把概率的要求放低一档再找;低到下限仍然找不到,就放弃这个方向。

一次线搜索的草图。目标函数沿一个旋钮方向画出,越低越好,阈值在靠近顶部的位置。已经测过两个点,1 和 2。从每个点出发,两条斜率为 L 的直线向上升起,标出附近目标值最高可能到哪里;两对直线中有一对仍在阈值之下(再留一点噪声余量)的区域就是安全段。下一次试探 3 放在这一段背离已测点的远端。真实的目标函数是一条极小值更靠左的虚线,算法并不知道它。 目标函数,越低越好 设定的阈值 真实的目标函数,算法不知道 最坏情形,斜率 L 123 下一次试探,远端 足够安全 一个旋钮方向
每个测过的点都限定了它附近的目标值最坏能差到哪里,下一次试探放在仍然低于阈值的那一段的远端。

用 Lipschitz 常数来保证安全并不是我们首创。SafeOpt(Sui 等,2015 年)和 Kirschner 等(2019 年)用它划出一个安全区域,再在这个区域内做高斯过程(Gaussian Process,GP)优化。我们则用它来选定一个方向上的每一个试探点,剩下的事仍然交给抛物线拟合。

旧的点会过时

漂移使上面这一切都不那么可靠,因为很久以前测的点对现在的说明力不如刚测的点。我们把漂移当作随机游走来处理,于是一个旧读数的不确定度随测量后经过时间的平方根增长,并与噪声一起放在同一个根号下。

ϵˆ≤h−Emax⁡2σn2+tσd2

其中 t 为该点测量至今经过的时间,σd 为漂移速率,σn 为上式中的读数噪声,不等式左边为一个标准正态随机变量;因此一个陈旧的点自己的根号变大,它的权重也随之减小。

于是安全概率曲线在旧的点附近下陷,安全的那一段向新测的点收缩。

带漂移的一次线搜索结束时沿一个旋钮方向的安全概率:八个编号的试探点,第一个在最右边;曲线在左边较新的点上接近 1,在右边最旧的三个点附近落下去;0.9 以上的区域涂成绿色。
带漂移的玩具问题(toy problem)上的一次线搜索,右侧最旧的几个点对曲线的支撑不如新的点。

这个模型依赖两个数,即斜率 L 和漂移速率,两者都要在运行前靠扫描得到。把旋钮固定一段时间,看目标函数如何游走,就得到漂移速率;沿每个初始方向从头到尾扫一遍,看到的最陡斜率就是 L。L 设得太小,踩到差的点的次数就多;设得太大,搜索就变得很慢。

SPEAR3 上的注入凸轨

我们先在模拟里试,最难的一个例子是用四个旋钮把束流从增强器(booster)导入储存环,加上的漂移在无人调机时会让注入效率在每个周期里有一半时间降到零。RCDS-S 把注入效率保持在高处,并且大部分时间在阈值以内;原来的 RCDS 越过了阈值,偶尔还会把漂移完全跟丢。后来单步策略(single-shot policy)学会一步校正的也是这条输运线。

环上的漂移是我们自己加的。SPEAR3 有三块注入冲击磁铁(kicker),它们触发时应当形成一个闭合的凸轨(closed bump),但实际上并不完全闭合,储存束流在此之后会留下一个小的残余振荡。这个振荡可以由逐圈的束流位置探测器(Beam Position Monitor,BPM)测出来,它就是我们的目标函数。我们让第一块冲击磁铁 K1 按一条缓慢的正弦曲线摆动(一个周期不到半小时),RCDS-S 用 K2 和 K3 去追它,起点是运行设置,也就是没有漂移时的最优设置。

第一轮把阈值设在 60 µm,结果不错,于是第二轮把阈值收紧到 50 µm,并在同一种漂移上跑原来的 RCDS 作为对照。不去管它时,振荡远远超过阈值;RCDS 一次又一次地越过阈值;RCDS-S 跟上了漂移,大部分时间保持在阈值之下。

SPEAR3 上约 850 次评估的两幅图。上方:目标函数与 50 µm 处的红色阈值线;橙色的不加调节的漂移以两个宽峰远远越过阈值,蓝色的 RCDS 多次冲到阈值之上,绿色的 RCDS-S 大部分时间在阈值之下。下方:归一化的冲击磁铁强度;橙色的 K1 走完一个正弦周期,RCDS-S 移动的 K2 和 K3 跟随同样的形状。
第二轮,橙色为不加调节的漂移,蓝色为 RCDS,绿色为 RCDS-S;下方为按正弦摆动的 K1,以及 RCDS-S 为跟随它而移动的两块冲击磁铁。

越过阈值的点

两轮实验都有少数几次小的越界。一个可能的原因是斜率不准:L 是从模拟里取的,环上的真实斜率未必与之相符。把 L 设大一些,越界会少,但搜索会变慢,而更慢的搜索更容易跟丢漂移。在我们的测试里,漂移速度加倍之后这个方法就失效了,环上和模拟里都是如此。

SPEAR3 第一轮里只有 RCDS-S 的目标函数,约 840 次评估,红色阈值线在 60 µm;点散布在 20 到 60 之间,有几个刚好在阈值之上。
第一轮,只有 RCDS-S,有几个点刚好越过 60 µm 的阈值。

所以我们手里有的是模拟结果和环上两轮机器研究实验。它从来没有在真正的供光运行期间跑过,也没有在机器自己产生的漂移上跑过,更没有进入日常运行。论文的说法是它倾向于让探索保持安全,但不推荐用于高风险的应用。引出这一切的那几次运行写在 MG-GPO 页上。

数字和图都出自 Zhang,Song 和 Huang,Phys. Rev. Accel. Beams 25, 122801(2022 年,CC BY 4.0 开放获取)。第一轮的图出自 arXiv 版本,arXiv:2205.06984。