Python Scipy最小化迭代过界
我正在尝试使用scipy最小化3个输入变量的函数。函数的内容如下所示-Python Scipy最小化迭代过界,python,scipy,scipy-optimize-minimize,Python,Scipy,Scipy Optimize Minimize,我正在尝试使用scipy最小化3个输入变量的函数。函数的内容如下所示- def myfunc(x): x[0] = a x[1] = b x[2] = c n = f(a,b,c) return n bound1 = (80,100) bound2 = (10,20) bound3 = (312,740) guess = [a0,b0,c0] bds = (bound1,bound2,bound3) result = minimize(myfunc, g
def myfunc(x):
x[0] = a
x[1] = b
x[2] = c
n = f(a,b,c)
return n
bound1 = (80,100)
bound2 = (10,20)
bound3 = (312,740)
guess = [a0,b0,c0]
bds = (bound1,bound2,bound3)
result = minimize(myfunc, guess,method='L-BFGS-B',bounds=bds)
我当前尝试运行的函数在a=100
、b=10
、c=740
达到最小值,该值位于边界的末尾
minimize函数不断尝试迭代超过界限3的末尾(在其最后一次迭代中获得c0值740.0000000 149012
)
有没有办法阻止这种情况发生?即在我的边界实际结束时停止迭代?这种情况是由于数值微分引起的,它本身不仅需要推断步长方向和大小,还需要推断终止的原因
通常情况下,对于正在使用的任何解算器(以及许多后端解算器),如果不非常小心,您将无法做很多事情。基本思想是用您提供的自动数值微分替换该自动数值微分:该自动微分将尊重这些边界,并且必须小心解算器的内部,例如。“如何解释终止合同的原因”
修正一个:
使用触及您的配置的:L-BFGS-B
时,您的问题应该会自动消失
看起来,此PR不是当前版本的一部分(因为这是在PR之前2个月)
另请参见,其中提到了有关某些更改的里程碑1.5.0,包括遵守num-diff中的边界
对于上述PR,您需要从以下来源安装scipy:
- 在linux上非常可行(可能还有os x)
- 您不应该在windows上尝试这些功能!
- 相信我
trust constr
,它对此有明确的支持,请参阅
请注意,在设置边界时需要明确地发出信号!这是由于数值微分引起的,数值微分本身不仅用于推断步长方向和大小,还用于推断终止
一般来说,对于正在使用的任何解算器(并且有许多后端解算器),如果不非常小心,您将无法做很多事情。基本思想是用您提供的自动数值微分替换该自动数值微分:该自动微分将尊重这些边界,并且必须小心解算器的内部,例如。”如何对此终止进行推理”
修正一个:
使用触及您的配置的:L-BFGS-B
时,您的问题应该会自动消失
看起来,此PR不是当前版本的一部分(因为这是在PR之前2个月)
另请参见,其中提到了有关某些更改的里程碑1.5.0,包括遵守num-diff中的边界
对于上述PR,您需要从以下来源安装scipy:
- 在linux上非常可行(可能还有os x)
- 您不应该在windows上尝试这些功能!
- 相信我
trust constr
,它对此有明确的支持,请参阅
请注意,在设置边界时,您需要明确指出这一点!谢谢,使用
trust constr
和keep_exability=True
对我有效。您能告诉我从GitHub源代码安装scipy所需的确切文档吗?我对Git没有太多经验。我有os x和d使用PyCharm。谢谢,使用trust constr
和keep_exability=True
对我来说很有效。你能告诉我从GitHub源代码安装scipy需要的确切文档吗?我对Git没有太多经验。我有os x和PyCharm。