SciPy.optimize.minimize带约束优化求解结果异常问题咨询
问题原因分析
你遇到的问题同时存在方法选择错误和约束逻辑矛盾的问题,核心原因是约束本身不存在可行解:
- BFGS结果超出边界的原因
BFGS是无约束优化算法,scipy.optimize.minimize的BFGS实现本身不支持边界约束和等式约束,你传入的bounds和constraints参数会被直接忽略,自然会得到超出0.8~1.2范围的结果,属于方法选择不当。如果需要处理约束,应该选择SLSQP、trust-constr这类支持约束的优化算法。 - SLSQP返回success=false的核心原因
你的约束条件本身没有可行解。三个变量的下界都是0.8,我们可以直接算出等式左侧的最小可能值:7*0.8 + 8*0.8 + 4*0.8 = 19*0.8 = 15.2
这个值远大于你等式约束要求的5,没有任何一组在0.8~1.2区间内的变量能满足该等式,所以任何带约束的优化算法都不可能找到有效解,自然返回求解失败。 - 代码的小瑕疵
你调用minimize时method参数传入了空字符串,如果要指定求解方法,需要传入对应方法的标识字符串,比如method='SLSQP'或method='BFGS',不过这不是你遇到问题的核心原因。
解决建议
先检查你的变量取值范围或者等式约束的数值是否写错,要么调整变量的上下界,要么修正等式约束的取值,确保存在可行解后再运行优化即可。
内容的提问来源于stack exchange,提问作者a12
相关产品推荐
相关产品推荐

