通用拟合说明
Fit 模块用于用一个数学表达 式描述一组数据之间的关系,并围绕这个表达式做三件事:
- 拟合系数。
- 正向计算函数值。
- 反向求解变量。
适用场景
- 经验公式标定,例如
y = a*x + b、y = a*exp(-k*x)。 - 工艺参数回归,例如温度、时间、功率与结果值之间的关系。
- 目标反求,例如给定目标厚度或目标光谱指标,反求一个最佳工艺参数。
基本组成
一个拟合任务通常由四部分组成:
- 表达式:例如
a*x+b。 - 变量:例如
x,并定义它的含义、单位和取值范围。 - 系数:例如
a、b,并定义它们的初值和上下界。 - 数据:变量序列与目标函数值序列。
三种核心操作
1. 拟合系数
给定:
- 表达式。
- 变量样本值。
- 函数目标值。
输出:
- 最优系数。
- 残差或目标函数值。
- 迭代诊断信息。
2. 正向计算
给定:
- 表达式。
- 系数值。
- 变量值。
输出:
- 对应的函数值序列。
3. 反向求解
给定:
- 表达式。
- 系数值。
- 目标函数值。
- 变量范围。
输出:
- 一个最接近目标值的变量解,或一组变量解。
建议做法
- 变量和系数命名尽量使用英文和下划线,例如
temp,power_ratio,a1。 - 先做一次正向计算确认表达式没有错误,再执行拟合。
- 拟合前给出合理初值和边界,避免求解陷入无效区域。
- 多变量反求时必须给定边界,否则结果通常不稳定。
当前能力边界
当前模块适合数值表达式拟合与优化,不面向复杂符号化推导、整数规划或大规模约束优化。
CoatFlex 优化器参数(当前后端生效)
停止条件规则
OptimizeStopOption 在 LM/Simplex/DE/SA/ACO 上统一执行:
stop_by_iter=true && set_iter>0:使用该迭代上限。- 其他情况(包含 stop 未传):默认无限迭代
usize::MAX。 stop_by_merit=true:set_merit映射为容差阈值。
Simplex
当前生效字段:
need_normalizeuse_uniform_edge_lengthinitial_edge_length/individual_edge_lengthsinitialize_method(Regular/Random/Twice)need_adaptive_transform+fix_transform_parameterout_of_bound_treatment(Wall/Bound/Medium)need_restart+restart_option[]test_criteria(converge/flat/small)
DE
当前生效字段:
pop_sizedifferential_weightcrossover_rateeval_budgetmax_no_improveconvergence_tolneed_normalizebound_handlingseed + seed_value
SA
当前生效字段:
initial_temperaturefinal_temperatureiterations_per_temperaturecooling_ratecooling_scheduleparallel + parallel_countrandom_seed
ACO
当前生效字段:
ant_countinitial_pheromoneevaporation_ratealphabetaelite_weightparallel + parallel_colony_countrandom_seed
常用默认值
max_iterations = usize::MAXtolerance = 1e-8simplex_initial_edge_length = 0.05sa_initial_temp/final_temp = 1000 / 1e-2de_population_size = 50aco_num_ants = 20
Low-E 建议预设
- 基板拟合优先
Simplex→LM(use_simplex_first=true)。 - 显式设置
stop_by_iter(300~800)并开启stop_by_merit(1e-6~1e-4)。 - TabulatedNK 维度较大时,先全局(DE/SA)后局部(LM)。
已知限制
- Envelope 精修目前是单层常数 n/k 参数化。
- Envelope 目标映射按法向入射处理。
- SA/ACO parallel 是多起点/多群体聚合,不保证线程并行执行。