我在一个适应度函数上运行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
型
根据我的理解,当fatol=0.001时,如果f(n)和f(n-1)之间的差值小于0.001,优化应该终止并且不继续。例如,请参见列表中的输出2和3:
abs(0.0002628635483247014 - 0.0009798654399516093) = 0.0007169 < 0.001
型
它继续运行,我想让它停止。
任何关于这种行为的帮助都将不胜感激,谢谢。
1条答案
按热度按时间w8rqjzmb1#
字符串
这段代码从https://github.com/scipy/scipy/blob/c0dc7fccc53d8a8569cde5d55673fca284bca191/scipy/optimize/optimize.py中提取,用于minimize Nelder Mead,表明基于fatol的停止条件在一个逻辑中,并使用xatol进行表达式。因此,将xatol与fatol一起研究是很好的。这可能解释了为什么收敛在达到fatol要求时没有停止。