使用SLSQP的optimize.minimize未收敛,结果小于ftol求原因
优化器不收敛问题排查
result = optim.minimize(fun, x0, method='SLSQP', options={'eps': 0.0001, 'ftol': 1000}, bounds=[(0, 0.01)], args=(file,)) def fun(opt_vars, file): # 已知值 v = np.zeros(5) v[0] = 454.546412 v[1] = 3242.201274 v[2] = 1000023 v[3] = 5.2 v[4] = 1.1 output = myfunction(opt_vars, file) return abs((v[0]-output[0])/v[0] + (v[1]-output[1])/v[1] + (v[2]-output[2])/v[2] + (v[3]-output[3])/v[3] + (v[4]-output[4])/v[4])
fun是一个归一化代价函数,当前输出值约为1.28e-4。尝试将ftol从1000调整到1e-4的不同取值,优化器始终无法收敛。根据SLSQP方法的文档,无法设置xtol,因此排除该参数影响。目前无法确定是minimize函数本身的问题还是使用方式有误——毕竟1.28e-4远小于ftol=1000的阈值,理论上应该立即收敛。
已执行的调试操作:
- 查阅官方文档
- 尝试设置
xtol(发现SLSQP不支持) - 测试不同
ftol取值 - 咨询AI工具求助
- 在GitHub发帖,被指引至相关平台
内容的提问来源于stack exchange,提问作者long-environment123
相关产品推荐
相关产品推荐

