scipy.optimize.minimize Nelder-Mead 'fatol' 什么都不做,我做错了什么?

问题描述 投票:0回答:0

我正在对适应度函数运行 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

它继续运行,我想让它停止。

对此行为的任何帮助将不胜感激,谢谢。

python optimization scipy minimize scipy-optimize-minimize
© www.soinside.com 2019 - 2024. All rights reserved.