【发布时间】:2014-10-05 20:35:16
【问题描述】:
试图用一个变量解决一个简单的非线性最小化问题。
from scipy.optimize import minimize
import math
alpha = 0.05
waiting = 50
mean_period = 50
neighborhood_size = 5
def my_func(w):
return -(2/(w+1) + alpha*math.floor(waiting/mean_period))*(1-(2/(w+1) + alpha*math.floor(waiting/mean_period)))**(neighborhood_size-1)
print minimize(my_func, mean_period, bounds=(2,200))
这给了我
ValueError: length of x0 != length of bounds
我输入错了吗?我应该如何格式化?
如果我删除边界,我会得到:
status: 2
success: False
njev: 19
nfev: 69
hess_inv: array([[1]])
fun: array([-0.04072531])
x: array([50])
message: 'Desired error not necessarily achieved due to precision loss.'
jac: array([-1386838.30676792])
函数看起来像that,因此我需要边界来将解限制在我感兴趣的局部最大值内。
【问题讨论】:
-
你能试试 bounds=((2,200),) 吗?
-
@ambi ,实际上解决了它。我想我在第一次尝试时打错了。一个快速反问:来自 C 背景,很容易从函数签名中确定参数的类型。在那种情况下,新用户如何知道它需要一个元组而不实际查看源 (github.com/scipy/scipy/blob/v0.14.0/scipy/optimize/…)?
标签: python optimization scipy nonlinear-optimization minimization