本文主要是介绍利用scipy中的minimize,method指定为BFGS,提示“Desired error not necessarily achieved due to precision loss”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码:
out = minimize(fun = get_expectation(n,p,initial_ansatz),x0 = initial_ansatz, method="BFGS",jac = True, options={'eps':1e-03,'disp':True,'maxiter':400})
遇到的问题:“Desired error not necessarily achieved due to precision loss”
详细信息:
原因:method指定为BFGS但未提供梯度信息的时候,会自动利用有限差分计算梯度,此时得到的梯度信息是带有误差的,当误差比较大时会报上述错误。同样的当你自身提供的梯度信息误差较大时,也会出现同样错误!
分析:当初始点处于一个山顶,利用 往下走,函数值是在变小的,但是当走到一个比较平缓的地域,此时利用无法再找到一个更小的函数值,迭代只能“被迫”终止。很明显,这个错误是一个“累加”的过程,其实前半段已经走偏了,但由于函数值是一直在变小的,所以没有报错,等到走到一个比较平缓的地域,这个错误就会变得异常清晰,迭代被迫终止,会显示报错。
因此要避免上述原因,就需要一个精确的梯度值。
在我的问题中,报错原因是这样的,特此记录,这个问题困惑了我很久,如果你也和我遇到一样的问题,希望我的答案能够帮到你。
这篇关于利用scipy中的minimize,method指定为BFGS,提示“Desired error not necessarily achieved due to precision loss”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!