指南

优化器

优化目标、变量设置与搜索边界

Optimizer 用于自动搜索更优参数组合。你在本页定义“什么结果算更优”(目标)、“哪些输入允许被修改”(变量),以及“搜索预算和精细度”(算法参数),然后通过顶部工具栏执行 Run Optimizer

本页负责建立优化任务,不负责解释最终结果。运行完成后,应到结果区的 Optimization Report 查看最优解、搜索历史和阶段结果。

页面职责与推荐操作顺序

进入 Optimizer 之前,通常应先满足:

  1. Structure 已通过验证。
  2. Optics 已通过验证。
  3. 若使用 Sweep,你已经理解哪些参数最敏感,知道哪些变量值得优先优化。
  4. 你已经明确“优化目标”是什么,而不是只想让软件随机搜索。

从工程角度,推荐按以下顺序配置:

  1. 先定义 Objectives,再定义 Variables
  2. 变量边界先给保守、物理可行的范围。
  3. 最后再调整算法参数。
  4. 先用较小预算做第一次试跑,确认方向正确后再增加预算。

如果先给变量、后想目标,最常见的问题是:你很难判断“结果不收敛”究竟是目标冲突,还是搜索空间过大。

页面结构与全局入口

当前 Optimizer 页面分为三个纵向区域:

  1. Optimization Objectives
  2. Optimization Variables
  3. Algorithm Parameters

顶部仍使用全局工具栏:

  • Run Optimizer:仅当整份模型验证通过时可执行。
  • 运行开始后,本页输入会锁定。
  • 若本页存在错误,Footer 会把错误归类到 Optimizer,并保持运行入口禁用。

本页的工程重点是:目标清晰、变量可控、预算合理。

优化目标(Objectives)

目标表定义“什么结果算更优”。当前实现支持多目标;所有启用目标会按权重组合成总适应度。

目标表的配置逻辑

目标表上方支持 Add / Insert / Duplicate / Move Up / Move Down / Delete,这些操作只影响目标列表本身,不改变底层求解逻辑。

默认目标来自 createDefaultOptimizationObjective(),其起始值为:

  • target = R
  • direction = maximize
  • angle = 0°
  • pRatio = 0.5
  • wavelengthMode = single
  • wavelengthSingle = 550 nm
  • wavelengthFrom / To / Step = 400 / 700 / 10
  • wavelengthAggregation = average
  • weight = 1
  • targetValue 初始为空

默认值的意义是“先给出一个可编辑模板”,不是推荐的工程目标。实际使用时通常应立即改成与你的设计任务一致的目标定义。

目标字段与约束

字段作用当前规则
启用该目标是否参与总适应度禁用后保留配置,但不参与优化
Target目标量当前仅支持 R / T / A
Direction优化方向minimize / maximize / approach
Target Value目标值仅在 approach 时启用,范围 0~1
Angle目标入射角0° ~ 89.9°
Wavelength Mode波长模式single / range
Wavelength单点波长或范围单点 >= 1 nm;范围要求 From < ToStep > 0
Aggregation范围聚合方式仅在 range 模式下有效,支持 average / sum
pRatiop 偏振比例0 ~ 1
Weight目标权重必须 > 0

三种优化方向的工程含义

方向求解器在做什么适合场景
maximize尽量提高该量提高透射、提高吸收、提高反射
minimize尽量压低该量压低反射、压低吸收
approach尽量逼近指定数值设计点需要逼近特定目标值

其中 approach 有一个硬性约束:必须填写 Target Value。如果为空,Schema 校验立即失败。

波长模式的选择原则

模式行为适用任务
single只评估单一波长点单点设计,例如 550 nm 增透
range在一段波长区间逐点计算,再聚合为一个评分宽带增透、宽带反射控制、宽带吸收

当你切换到 range

  1. 必须补齐 From / To / Step
  2. To 必须大于 From
  3. Step 必须大于 0
  4. Aggregation 才会生效。

Aggregation 的工程差异也很明确:

  • average 更适合控制区间平均表现。
  • sum 更适合强调区间总量,而不是平均值。

目标配置建议

第一次优化建议使用 1~2 个目标:

  1. 先定义一个主目标,例如“550 nm、0°、最大化 T”。
  2. 如需加入第二约束,再增加一个低权重目标,例如“同一条件下最小化 R”。
  3. 当多个目标冲突时,优先调整 Weight,而不是立刻扩大变量范围。

优化变量(Variables)

变量表定义“算法被允许修改哪些输入”。没有变量,目标再清楚也无法执行优化。

变量表的配置逻辑

变量表同样支持 Add / Insert / Duplicate / Move / Delete,但有一个实现细节必须注意:

  • Add 创建的新行默认启用。
  • 新行初始路径和边界为空,因此 Footer 会立即报错,直到你补齐配置或先禁用该行。
  • Insert 创建的新行默认禁用,更适合作为占位草稿。

如果你只是想先占位,不希望当前页面立即报错,优先使用 Insert

当前界面暴露的路径范围

当前 Optimizer 页面的路径选择器复用扫描页的路径结构,但界面实际只暴露两类:

  1. structure
  2. surroundings

底层校验函数仍支持 optics > incidentAngle / pRatio,但当前页面的可视路径选择器没有暴露 optics 分类。因此在正常 UI 操作下,你不能直接把 incidentAnglepRatio 加入优化变量表。

当前常用变量路径

分类路径格式当前限制
普通层厚度structure / {LayerName} / thickness最常用、最稳定
普通层折射率参数structure / {LayerName} / {n, k, nExt, kExt}indexType 限制
层组重复次数structure / {GroupName} / repeatCountmin/max 必须为正整数
层组内部层参数structure / {GroupName} / layers / {LayerName} / ...必须精确匹配内部层名称
入射侧介质surroundings / incidence / n只支持 n
透射侧介质surroundings / transmission / {n, k}File 模式下折射率变量被拦截

边界与重复路径规则

每个变量至少需要一组搜索边界:minmax

当前校验逻辑要求:

  1. 至少存在一条变量记录。
  2. 至少存在一条启用变量,否则优化任务仍然无效。
  3. 启用变量必须有合法路径。
  4. 启用变量之间不能出现重复路径。
  5. minmax 不能同时为空。
  6. 若两者都存在,必须满足 min < max

这几条里,最常见的问题是“复制变量后忘记改路径”以及“新增变量后边界未填”。

路径何时会失效

变量路径按名称引用模型元素,因此在以下情况下会立即失效:

场景结果处理方式
层或层组被删除路径找不到对应元素重新选择路径
层或层组被禁用路径被判定为无效引用重新启用或改选路径
层名、组名或内部层名被重命名旧路径不再匹配重新选择路径
属性与当前模式不匹配路径结构存在,但属性被拦截调整模式或改选属性

Optimizer 的变量维护高度依赖结构命名稳定性。若结构尚未定型,不建议过早建立复杂变量表。

折射率模式与 repeatCount 的特殊限制

变量是否可用,还取决于对应层当前的模式。

indexType可优化属性不可优化属性
Constantthickness, n, knExt, kExt
Const. Birefringencethickness, n, k, nExt, kExt无额外折射率限制
Filethickness所有折射率属性

环境介质限制如下:

  • incidence 只允许 n
  • transmission 允许 n / k
  • 若介质是 File 模式,折射率属性不可优化

当路径为 structure / {GroupName} / repeatCount 时,还要满足更严格的离散规则:

  1. minmax 都必须填写。
  2. min 必须是正整数。
  3. max 必须是正整数。
  4. 仍需满足 min < max

repeatCount 是离散周期数,因此必须使用整数边界。

算法参数与搜索阶段

当前界面只暴露三个算法参数,全部对应 simple-optimizer-FP.ts 中的三阶段网格搜索:

  1. maxEvaluations
  2. precisionLevel
  3. candidateCount

旧版 locale 中保留的 populationSize / mutationRate 等词条并不代表当前页面仍在使用遗传算法。当前实现是网格搜索,不是遗传算法。

三个参数的实际作用

参数当前范围直接作用
maxEvaluations20 ~ 1000限制总评估预算
precisionLevel1 ~ 5提高采样密度和局部细化强度
candidateCount2 ~ 8决定多少个粗搜索候选点进入局部细化

超出范围时,字段下方会立即出现校验错误,因此这三个参数本身也可能成为 Run Optimizer 无法执行的原因。

当前优化器的搜索流程

当前实现是固定的三阶段搜索:

  1. coarse:在全局变量范围内做粗网格采样。
  2. local:围绕粗搜索中表现较好的候选点做局部细化。
  3. fine:围绕当前最佳点做更小半径的精细搜索。

Optimization Report 中的搜索历史,也会按这三个阶段记录结果。

参数调节建议

第一次优化建议从较小预算开始:

  1. maxEvaluations = 50 ~ 150
  2. precisionLevel = 1 ~ 2
  3. candidateCount = 3

确认以下三点后,再逐步增加预算:

  1. 目标方向正确。
  2. 变量边界在物理上合理。
  3. 第一轮最优解至少具备解释意义。

如果在目标和边界都不稳定时直接提高预算,只会更快地搜索错误空间。

运行前检查、常见错误与下一步

执行 Run Optimizer 之前,建议完成以下检查:

  1. 至少存在一个启用且有效的目标。
  2. 至少存在一个启用且有效的变量。
  3. 启用变量之间没有重复路径。
  4. StructureOptics 当前本身已通过验证。
  5. 变量范围在物理上合理,不是纯粹的盲目大范围搜索。
  6. 算法参数处于允许范围内。

常见错误与处理方式如下:

现象常见原因处理方式
Run Optimizer 灰掉目标、变量或算法参数任一处仍有错误查看 Footer,再逐表修正
新增变量后立刻报错Add 创建的空行默认启用补齐路径和边界,或先禁用该行
approach 一直无效未填写 Target Value补一个 0~1 的目标值
repeatCount 无法通过验证边界不是正整数改为正整数边界
想优化 incidentAngle 却找不到当前 UI 不暴露 optics 分类这是当前界面边界,不是使用错误
优化结果很差且波动大范围过宽、目标冲突或预算不足先缩小范围,再检查目标与预算

完成本页配置后,下一章请继续阅读:基本光学结果。先掌握普通结果的读取方式,再回到 Optimization Report 分析优化过程与最优解。

Copyright © 2026 Dreapex