正交的Scipy优化

时间:2017-10-22 16:14:58

标签: python optimization scipy

我试图解决优化问题,但我正在优化函数的参数而不是函数。

这是一个例子

def Q(a,b,c):
    d = integrate.quad(lambda x: (a*x**2+b*x+c), 0, 1)
    return d
def u(a,b,c):
    e = a+b+c
    return e
cons = ({'type': 'eq',
     'fun' : lambda u: np.array([u - 1]),}),
f = lambda x: Q(x[0],x[1],x[2])
res = minimize(Q, args=(3,), method='SLSQP', constraints=cons)

考虑到参数的限制,我想最小化功能积分Q.理想情况下,我也可以使约束成为一个整体。我没有把它包含在这里,因为我想从简单开始。

我得到的错误是

TypeError Traceback (most recent call last) <ipython-input-158-cdbd019dd886>         
in <module>() 8 'fun' : lambda u: np.array([u - 1]),}), 9 f = lambda x:   
Q(x[0],x[1],x[2]) ---> 10 res = minimize(Q, args=(3,), method='SLSQP', 
constraints=cons) TypeError: minimize() takes at least 2 arguments (4 given)

应该说明的是,我并不担心我使用什么样的代码或编辑来实现这一点!只是想让它发挥作用。

1 个答案:

答案 0 :(得分:3)

从基础开始:

  • minimize需要初步猜测,x0。
  • minimize使用的参数是单个向量,而不是像a,b,c这样的三个变量。
  • quad返回两个数字的元组,其中第0个是积分而另一个是错误。
  • args表示要提供给目标函数的其他(固定)参数,而不是其参数的数量。
  • 你的约束函数没有多大意义。

解决这些问题后,代码开始看起来不像现在的cargo-cult programming

from scipy import integrate
from scipy.optimize import minimize
import numpy as np

def Q(u):
    a, b, c = u
    d = integrate.quad(lambda x: (a*x**2+b*x+c), 0, 1)
    return d[0]
cons = ({'type': 'eq',
     'fun' : lambda u: u[0]+u[1]+u[2]-1})

res = minimize(Q, x0 = (1, 2, 3), method='SLSQP', constraints=cons)
print(res)