EN

MG-GPO

遗传算法每一代繁殖出几百个候选解,先由高斯过程(Gaussian Process,GP)排序,SPEAR3 储存环只测量其中排在最前的三十个,环上的两个问题都领先于粒子群优化。

在 SPEAR3 储存环上测一次注入效率大约要 17 s。遗传算法或粒子群这类优化算法每一代要测三十个个体,合起来约八分半钟的束流时间,其中相当一部分花在了本来就不会好的设定上。MG-GPO 在候选解的繁殖与机器测量之间插入一个高斯过程(Gaussian Process,GP),多数不佳的候选解在上机前就被筛除。这个方法由 Xiaobiao Huang 提出,第一版 Matlab 代码也出自他手;Minghao Song 与我一同参与开发,环上的实验由我牵头,MLST 2020 那篇文章中 Minghao 与我是共同第一作者。

一代的流程

MG-GPO 的种群里有三十个个体,每一代先从这三十个个体繁殖出几百个候选解,繁殖的算子借自粒子群优化(Particle Swarm Optimization,PSO)和 NSGA-II(第二代非支配排序遗传算法)。然后为每个目标函数各建一个 GP,用置信下界(Lower Confidence Bound,LCB)给每个候选解打分。

LCB(𝐱)=μ(𝐱)−κσ(𝐱)

其中 μ(𝐱) 为 GP 对候选解的预测值,σ(𝐱) 为这个预测的不确定度,κ 为不确定度的权重,它决定不确定度在多大程度上算作候选解的优势;所有目标函数都写成越小越好的形式。

之后非支配排序(non-dominated sorting)从中留下三十个送上机器。κ 每一代乘以一个固定的因子而逐渐减小,因此算法在早期更敢尝试不确定的区域,后期则更相信模型。

通常的贝叶斯优化(Bayesian Optimization,BO)每走一步都要在一个起伏很大的采集函数(acquisition function)上做搜索。MG-GPO 省掉了这一步,GP 只给繁殖出来的候选解排序,在环上这一步通常不到 8 s 就完成了。

MG-GPO 的一代:三十组测量过的设定组成种群,经群聚,crossover 和变异繁殖出几百个候选解;每个目标函数一个高斯过程给它们打分,非支配排序留下前三十个;只有这三十个在 SPEAR3 上测量,结果并入种群和 GP 的训练数据 种群 繁殖 GP 排序 SPEAR3 三十组设定, 都测量过, 另有一份归档, 存到目前为止的最优解 群聚,来自 粒子群优化; crossover 和变异, 来自 NSGA-II 每个目标一个 GP 按 μ − κσ 打分 非支配排序 留下前三十个 逐个测量 这三十个 (这是 慢的一步) 父代 几百个候选解 结果并入种群和 GP 的训练数据 只有这三十个
每一代繁殖出几百个候选解,环上只测量其中 GP 排在最前面的三十个。

每个 GP 对全部旋钮(knob)只用一个长度尺度(length scale),因此要拟合的超参数只有三个。我们当时没有找到合适的 Matlab GP 库,于是拟合由 Python 里的 GPy 完成,经我当时正在写的 Teeport 调用,其余部分都留在 Matlab 里。

测试问题

机器之外的比较取自 Xiaobiao 的方法论文(arXiv:1907.00250,Minghao 与我为共同作者),论文在 30 维 ZDT 问题上比较了 MG-GPO、NSGA-II 与三种粒子群类方法。在 ZDT2 上 MG-GPO 约 1,000 次评估即到达 Pareto 前沿,而次优者需 4,000 次;它并非处处占优,在 ZDT6 上耗费了 3,000 次。

十六张小散点图:行是 ZDT1,ZDT2,ZDT3 和 ZDT6,列是 1000,2000,3000 和 4000 次评估;MG-GPO 的点(蓝色)在第一列就已经落在 ZDT2 的前沿上,而 NSGA-II,MOPSO,MMOPSO 和 WOF-SMPSO 仍远在它上方
出自 Xiaobiao 的方法论文,四个 ZDT 问题在 1,000 到 4,000 次评估后的前沿,蓝点是 MG-GPO,在第一列就已经落在 ZDT2 的前沿上。

ZDT 函数没有噪声,储存环却有。因此 MLST 文章又在带噪声的 4 维 Rosenbrock 函数上比较了 MG-GPO 与 PSO:MG-GPO 约 600 次评估即接近零,而 PSO 到 1,020 次仍未收敛,把噪声放大十倍对两者均无明显影响。在 SPEAR3 垂直发射度的模拟问题上 MG-GPO 同样更快,只是十次运行的散布比 PSO 略大。

环上的两个评估器

注入效率的评估器(evaluator)先写入十个六极铁家族的设定值,读一次储存流强,注入约 10 s 后再读一次。这段时间内流强每分钟的增量除以增强器送来的电荷量即为得分,单位为任意单位(增强器无束流时除数很大,该点得分很差)。

束损率的评估器大部分时间在等待:若恒流注入(top-off)尚未结束,它轮询至注入停止,再多等几秒,然后间隔一段设定时间读两次储存流强。我们要的是更高的束损率,初看像是反的:高流强下束流损失以 Touschek 散射为主,束流在垂直方向越细,散射损失越重;SPEAR3 只在一处测束团尺寸,而束损率反映整个环。

两个评估器也都在 Teeport 上注册,因此留在控制室里,优化器可在别处运行。我也用 Python 重写了这些测量程序,即 spear3-opt-pkg,它在移动任何六极铁之前先关掉注入。

两个评估器的逐步流程。注入效率:写入十个六极铁家族的设定值,读储存流强,注入约 10 s,读增强器送来的电荷量,再读一次储存流强,返回注入积累速率除以增强器电荷量。束损率:若恒流注入尚未结束就等到它停止,再多等几秒,读储存流强,等一段设定的时间,再读一次,返回每分钟的流强下降。 注入效率 束损率 写入十个六极铁家族的设定值 读一次储存流强 注入大约10 s 读增强器送来的电荷量 注入之后再读一次储存流强 恒流注入中?等到它停止 再多等几秒 读一次储存流强 等一段设定的时间 等待之后再读一次储存流强 注入积累速率 ÷增强器电荷量 每分钟的流强下降
两种评估各一次,从左到右;虚线的步骤是等待,束损率的评估从等恒流注入结束开始。

十三块斜四极铁

垂直发射度的实验在约 500 mA 下移动十三块通电的斜四极铁。MG-GPO 几乎从一开始就领先,一直保持到约 480 次评估;同样条件下的 PSO 改进得更慢,停在了 −1.48 mA/min。

SPEAR3 上约 480 次评估的束损率负值随评估次数的变化:MG-GPO 的每次评估为蓝色,PSO 的为橙色,各有一条虚线表示到当时为止的最好值;MG-GPO 的最好值到约 −1.66,PSO 的到约 −1.48
每次评估的束损率取负值,虚线为到当时为止的最好值,蓝色是 MG-GPO,橙色是 PSO,这里越低越好。

两轮注入实验

动力学孔径(Dynamic Aperture,DA)是指一个粒子离储存束流多远出发仍能在环里转下去。注入束从一侧进来,刚好越过切割磁铁(septum)的切割板,因此孔径越大,被俘获的注入束就越多,而决定孔径的是六极铁。

模拟得到的两张水平相空间图,横轴 x 单位 mm,纵轴 x' 单位 mrad。−10 mm 附近的黑色竖线是切割板,原点处围绕储存束流的椭圆是接受度。左图为拉平的六极铁:椭圆刚刚越过切割板,注入束团里只有一小条橙色落在椭圆内,其余为蓝色。右图为优化之后:大得多的椭圆容下了注入束团的大部分,呈橙色。
模拟中,六极铁全部拉平(左)只俘获了注入束的一小条,经 MG-GPO 优化后(右)接受度容下了它的大部分,橙色为俘获,蓝色为丢失。

在那次模拟里 MG-GPO 把孔径从 11.8 mm 开到了 16.5 mm;由于得分在接近全部俘获时就饱和了,PSO 后来也追了上来。

在环上我们调的是注入效率,用它来代表孔径。八个旋钮把六极铁家族混在一起,使色品在一阶上保持不变,且每个家族相较拉平设置(全部聚焦六极铁相等,全部散焦六极铁也相等)偏离不超过 20 A。第一轮从拉平的六极铁出发,此设置下注入很差,因此注入凸轨(kicker bump)保持标准强度。五代之后 MG-GPO 接近 −2.9,同起点的 PSO 到 −2.2(注入效率取负值送入优化器,故越负越好)。

151 次评估的注入效率负值随评估次数的变化,MG-GPO 的每次评估为蓝色,PSO 的为橙色,各有一条虚线表示到当时为止的最好值;MG-GPO 的最好值结束在 −2.9 附近,PSO 的在 −2.2 附近
第一轮从拉平的六极铁出发,151 次评估,蓝色是 MG-GPO,橙色是 PSO。

接着我们把问题变难:注入凸轨降到标准的 80%,孔径的作用就更大了,第二轮从第一轮的最优解附近出发。机时不够,因此第二轮只跑了 MG-GPO。凸轨变小后目标值升到了约 −0.5,这一轮又把它拉回到约 −1.4。

我们也直接测了孔径:储存少量束流,逐步加大冲击磁铁(kicker)的电压,记下丢掉一半束流时的电压。拉平的六极铁在 0.76 kV 丢掉一半,第一轮的最优解在 0.8 kV,第二轮的还要更高一些。

归一化储存流强随冲击磁铁 K1 电压(0.5 到 1.1 kV)的变化,三条曲线分别为原来拉平的六极铁,第一轮的最优解和第二轮的最优解;二分之一处的横线与三条曲线分别交于 0.76,0.8 和 0.9 kV
每次踢过之后剩下的储存束流,拉平的设置与两轮各自的最优解,横线标出丢掉一半的位置。

几天之后

环上的实验是对该方法的检验,当天的数字很好,但没有维持住。几天之后这些解不再成立,没有一个进入 SPEAR3 的日常运行。解的失效引出了我的下一个方法 RCDS-S:我们怀疑环在漂移,因此新方法必须能应付漂移与噪声,以小步调机,每步都对照事先划好的一条线来检查。

数字出自 Zhang,Song 和 Huang 的 MLST 文章(Mach. Learn.: Sci. Technol. 2, 015014,2020 年 12 月在线发表),Huang,Song 和 Zhang 的 arXiv:1907.00250,以及我们 2021 年给 SSRL 的项目报告。评估器的步骤出自我们的 Matlab 评估器代码。