我正在对适应度函数运行 Nelder-Mead 优化。该函数返回两个数组之间差异的均方误差 (MSE)。
我希望优化在 MSE 低于指定值时停止。
我的优化设置如下:
options = {'maxiter': 100, 'disp': False, 'initial_simplex': init_simplex_arr, 'fatol': 0.001}
result = minimize(fitness_function, x0, method='Nelder-Mead', bounds=bounds, options=options)
适应度函数总结如下:
def fitness_function(x):
# Arrays
ref_array = load_ref_arr("folder/reference_array.txt"
calc_array = calc_new_array(x)
# Calculate MSE
mse = np.mean((ref_array-calc_array)**2)
return mse
fitness_function 的示例输出:
0.0010713476460687801
0.0002628635483247014
0.0009798654399516093
0.00024260671159317867
0.00099163708787692
0.00017078416043779879
0.0010094022276385295
0.00023695061737201775
0.0005606370238849049
0.00019916645596727386
0.0004211745861734694
0.00020850874852816853
0.0004442950360513234
0.0001982226314876404
0.00038448272667955606
0.00018130359654993492
0.000321567089210017
0.00015139776932472033
0.0002222159416127054
0.0003240715869791624
0.00015971480682450465
0.00031676015901488597
0.00016306956422549413
0.0003316191108649874
0.00015673514985682063
0.0001818140712213015
0.00021525980930940775
0.00015543062242850684
0.00024112123987462002
0.00015026391998004834
0.0002119574083483072
0.00015300530091189144
0.0002051062480492777
0.0001415150195302095
0.00021263582928948626
0.00014027617152343477
0.000178745382624011
根据我的理解,如果 f(n) 和 f(n-1) 之间的差异小于 0.001,则 fatol=0.001 优化应该终止并且不会继续。例如,查看列表中的输出 2 和 3:
abs(0.0002628635483247014 - 0.0009798654399516093) = 0.0007169 < 0.001
它继续运行,我想让它停止。
对此行为的任何帮助将不胜感激,谢谢。