【问题标题】:Can the objective function have multiple input variables except the optimizable variable?除了可优化变量之外,目标函数可以有多个输入变量吗?
【发布时间】:2019-08-11 15:59:34
【问题描述】:

使用 scipy.optimize 时,我尝试成功的目标函数只能取一个变量,标量或向量。

例如,此代码有效:

from scipy import optimize

def f(x, a=2, b=-5, c=3):
    return a*x*x+b*x+c

res=optimize.minimize_scalar(f)

print(res.x)

但是,如果我想要跟踪 res.x 随 a、b、c 的变化?以下代码不起作用,但如何使它起作用?

from scipy import optimize

def f(x, a, b, c):
    return a*x*x+b*x+c

def change(a, b, c):
    res=optimize.minimize_scalar(f(x, a, b, c))
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

我能想到的唯一方法是这样的:

from scipy import optimize

def change(a, b, c):
    def f(x):
        return a*x*x+b*x+c
    res=optimize.minimize_scalar(f)
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

另一个函数里面的函数让我感觉很糟糕,还有其他方法吗?谢谢。

【问题讨论】:

  • a,b,c可以通过args参数传入(注意tuple要求)。
  • 我不明白你的意思,你能显示一些代码吗?非常感谢!
  • docs.scipy.org/doc/scipy/reference/generated/… - 你看到args 参数了吗??
  • 谢谢,刚看到,哈,想知道怎么用……

标签: scipy scipy-optimize


【解决方案1】:

只需这样做即可:

from scipy import optimize

def f(x, a, b, c):
    return a*x*x+b*x+c

def change(a, b, c):
    tup=(a, b, c)
    res=optimize.minimize_scalar(f, args=tup)
    print(res.x)
    return res.x

change(3, 2, 1)
change(3, -9, 0)

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 2019-10-30
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多