Exploration

大规模搜索设计空间

扫描进行到一半的 Exploration 工作区。一个应用窗口浮在绿色底面之上,左侧栏里是这次研究——Tuner、目标函数和约束,压在一个固定住的仿真设置之上;画布上画着 bouncing_ball 模型:带剖面线的地面、承载两个被扫描参数的弹簧-阻尼接触、小球、球上方的重力,以及把高度读出到信号端口的传感器。四张卡片浮出窗口边缘:仪表上显示每秒 24 次的 cluster.eval_rate、呈衰减波形的 bouncing_ball.height、在 248 次评估处逐渐填满的三目标 pareto_front,以及装着网格密度、求解器容差和采样数的 tuner.presets。右侧智能体面板显示请求、回复、四次工具调用和三个被改动的文件,画布下方的坞读出这次运行的进度。

Exploration 能做什么

一次仿真只回答一个问题。Exploration 一次问上千个——把任意模型包进一项研究,把每次评估都派给集群,并且让搜索本身变得可读,这样你才知道什么时候该停。

研究设置

向你的模型提一个问题

绑定一个 FMU、SSP 或 Paper 计算图,然后把问题写清楚:哪些参数是自由的、在什么边界内、对着哪些目标和约束。选好方法——参数扫描、无梯度优化、全局灵敏度,或蒙特卡洛采样——剩下的交给 Exploration。

一个 Exploration 窗口,研究就摆在一张卡片上。gearbox_2stage.fmu 以 FMI 2.0 绑定;三个自由参数标出这次研究从模型自身定义域里截取的区间——传动比 4.0 到 12.0,J_load 0.8 到 3.2 kg·m²,c_spring 5e3 到 2e4 N·m/rad;目标是最小化质量,同时把 T_peak 压在 85 °C 及以下、σ_max 压在 340 MPa 以内。底部是四个方法按钮——Sweep、Optimize、Sensitivity、Sample——选中项移到 Optimize,这个算法自己的设置随即出现在下方:NSGA-II、种群 40、25 代、种子 7。什么都还没跑;这项研究还是草稿。

实时看板

看着搜索收敛

候选一落地就流回来,不用等整批跑完。收敛曲线告诉你目标还在不在变好;平行坐标告诉你优化器押到了空间的哪个角落——以及它是不是已经悄悄塌到某条约束边界上了。

一个 Exploration 窗口,画布上只有一张收敛卡片。随着评估陆续返回,历史最优线从左侧填进来——先陡,然后拖出长而平的尾巴,而且从不上升,因为历史最优值不可能上升——同时卡片的计数器从 1000 中的 184 爬到 589,下方优化坞的进度条跟着推进。纵轴是目标值相对第一个候选的比例,所以这幅图只说搜索是否还在变好,而不给出任何已解出的数值。

结果与帕累托

读出取舍

多目标问题没有一个答案,它有一条前沿。给候选排序、筛选,把它们的时域信号叠起来看为什么某一个胜出,读帕累托集,再用一次操作把选定的设计写回源模型——并且保留这个选择的来源。

一个 Exploration 窗口,画布上是前沿,右侧开着属性面板。已评估设计的点云在质量、效率和峰值温度三个目标上逐渐填满,计数从六百二十次评估走到一千。属性面板里是选中的候选 #918:16.20 kg,效率 0.9258,84.6 °C;它的「应用到模型」按钮随后被填上应用主色,这个选择的来源落在按钮下方——传动比 8.63 写回 gearbox_2stage,出自 ratio_sweep 第 22 代。

上规模

在集群上做优化

每次评估都是一次独立的、派给算力的运行,所以一千个候选的研究是一道调度题,而不是一整夜的活。前沿不动了就暂停,约束明显被破就提前停,只为真正跑过的评估付钱。

了解 Cluster

一个 Exploration 窗口,左侧栏里是这次运行的条件——十八个 worker、一千次运行的预算、NSGA-II、六分钟墙钟时间对一百零四分钟 CPU——画布上是当前的派发窗口,一百五十个格子。排队中的槽位很淡;返回后各自画成一个点,浓淡取决于它找到的目标值;而那些撞上热约束被中途掐掉的运行,画成所有格子里最小的一个——因为它们没花掉的算力才是重点。这些中止集中在后段,那里正是搜索顶着约束的地方。有一个格子亮成应用主色,栏下一行写着:省下来没花掉的 CPU,九分零九秒。

方法

拷问一个设计的四种方式

Sweep

Optimize

Sensitivity

Sample

准备开始了吗?