Optimize.Minimize 将 2 个参数传递给 1 个参数的函数
Optimize.Minimize passes 2 arguments to function of 1 argument
我对 optimize.minimize
有疑问。我会贴上代码,后面再解释。
def getC(p,q):
def C1D(l):
firstTerm = 1/np.sqrt(-(-l + 2*p*(-1+l))*(2 - l + 2*p*(-1+l)))
secondTerm = firstTerm = 1/np.sqrt(-(-l + 2*q*(-1+l))*(2 - l + 2*q*(-1+l)))
return 2*l*(firstTerm + secondTerm)
return C1D
pVal = []
qVal = []
lMinVal = []
for p in np.round(np.linspace(0,1,10,False),3):
for q in np.round(np.linspace(0,1,10,False),3):
pVal.append(p)
qVal.append(q)
C = getC(p,q)
def cons_quantum(l):
return C(l) - 2
cons = {'type':'ineq', 'fun': cons_quantum}
opt.minimize(C, 1, cons, bounds=((0,1),))
有这个函数 我正在尝试检查 p 和 q 的一些值(在 for 循环中定义),并且对于每个值,我将有一个更简单的函数,就是 C固定 p 和 q 的函数。然后,我将最小化这个更简单的 1 参数函数,约束条件是函数 C(l) 必须大于或等于 2。(最后我将添加将 l 的最小值附加到列表的行 lMinVal
)
我的问题是,当我 运行 它时,出现以下错误:
File "C:\Users\*****\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 293, in function_wrapper
return function(*(wrapper_args + args))
TypeError: C1D() takes 1 positional argument but 2 were given
scipy.optimize.optimize
的第三个参数是传递给函数的额外参数列表,而不是约束。你想要:
opt.minimize(C, 1, constraints=cons, bounds=((0,1),))
我对 optimize.minimize
有疑问。我会贴上代码,后面再解释。
def getC(p,q):
def C1D(l):
firstTerm = 1/np.sqrt(-(-l + 2*p*(-1+l))*(2 - l + 2*p*(-1+l)))
secondTerm = firstTerm = 1/np.sqrt(-(-l + 2*q*(-1+l))*(2 - l + 2*q*(-1+l)))
return 2*l*(firstTerm + secondTerm)
return C1D
pVal = []
qVal = []
lMinVal = []
for p in np.round(np.linspace(0,1,10,False),3):
for q in np.round(np.linspace(0,1,10,False),3):
pVal.append(p)
qVal.append(q)
C = getC(p,q)
def cons_quantum(l):
return C(l) - 2
cons = {'type':'ineq', 'fun': cons_quantum}
opt.minimize(C, 1, cons, bounds=((0,1),))
有这个函数 我正在尝试检查 p 和 q 的一些值(在 for 循环中定义),并且对于每个值,我将有一个更简单的函数,就是 C固定 p 和 q 的函数。然后,我将最小化这个更简单的 1 参数函数,约束条件是函数 C(l) 必须大于或等于 2。(最后我将添加将 l 的最小值附加到列表的行 lMinVal
)
我的问题是,当我 运行 它时,出现以下错误:
File "C:\Users\*****\AppData\Local\Continuum\anaconda3\lib\site-packages\scipy\optimize\optimize.py", line 293, in function_wrapper
return function(*(wrapper_args + args))
TypeError: C1D() takes 1 positional argument but 2 were given
scipy.optimize.optimize
的第三个参数是传递给函数的额外参数列表,而不是约束。你想要:
opt.minimize(C, 1, constraints=cons, bounds=((0,1),))