scipy.optimize.basinhopping返回值及状态消息含义咨询
lowest_optimization_result 字段说明 这个嵌套对象是basinhopping搜索到全局最优解时,对应那次局部优化流程返回的原生结果,所有统计口径都针对最终收敛到最低点的这一次局部优化,和外层basinhopping全局迭代的累计统计值是完全独立的两层统计:
nfev: 47:本次找到最优解的局部优化过程中,累计执行了47次目标函数求值nit: 39:本次局部优化(使用的L-BFGS-B求解器)内部共完成39次迭代步,和外层basinhopping的全局迭代计数无关njev: 47:本次局部优化过程中,累计执行了47次雅可比矩阵求值status: 0:局部求解器的退出状态码,结合同层级的success: True和收敛提示信息,代表本次局部优化正常满足收敛条件,无迭代超限、计算报错等异常。
迭代日志重复、函数值无变化的原因
所有迭代步输出的函数值完全一致,是因为basinhopping在第0次迭代就已经命中了全局最优解,后续所有迭代的结果都收敛回了这个点:
- 第0步从传入的初始值
x0启动局部优化,直接收敛到f=120760的最优点,这是初始的全局最低值 - 后续每一轮basinhopping的流程是:先对当前点做随机扰动得到测试点,再从测试点启动局部优化。所有随机扰动生成的测试点,经过局部优化后全部落回了同一个最优点,因此测试点优化后的函数值
trial_f和全局最低值lowest_f完全相等 - 日志中的
accepted 1代表该轮结果通过了Metropolis接受准则:因为新点函数值和当前最低点一致,自然满足接受条件,会作为下一轮迭代的起点,因此每轮都会输出接受标记。
如果怀疑存在更优的全局解,可以适当调大stepsize参数增大随机扰动步长,或者更换距离当前最优点更远的初始点重新运行验证。
内容的提问来源于stack exchange,提问作者Neil Fazel
相关产品推荐
相关产品推荐

