【问题标题】:Combine objective and jacobian for Python's scipy minimize为 Python 的 scipy 最小化结合目标和雅可比
【发布时间】:2019-11-29 02:55:24
【问题描述】:

我想知道是否可以使用一个函数同时返回目标值和雅可比值,这样程序就不必计算某些值两次。

我想在 Python 的 scipy 优化最小化例程中使用它。在https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html 的示例中,他们没有这样做,所以我只是想知道这是否可能。

我正在寻找的是这样的:

 def obj_jac(c1):
    A2 = RR*A1 + y1 - c1

    obj = some_fun1(A2)
    jac = some_fun2(A2)
    return obj,jac

然后:

  sol = minimize(obj_jac[0],c1_0,jac=obj_jac[1])

objective 是obj_jac 的第一个返回值,jacobian 是第二个。但是,上述格式给出了错误:“TypeError: 'function' object is not subscriptable”。

这是当前有效的代码,但计算 A2 两次:

 def obj_fun(c1):

    A2 = RR*A1 + y1 - c1

    obj = some_fun1(A2)
    return obj


 def jac_fun(c1):

    A2 = RR*A1 + y1 - c1

   jac = some_fun2(A2)
   return jac


sol = minimize(obj_fun,c1_0,jac=jac_fun)

有没有办法避免两次计算 A2? (这只是一个非常简单的例子)。

【问题讨论】:

    标签: python scipy scipy-optimize


    【解决方案1】:

    minimize 的文档说:

    jac{callable, ‘2-point’, ‘3-point’, ‘cs’, bool}, optional

    如果 jac 是一个布尔值并且为 True,则假设 fun 将梯度与目标函数一起返回。

    所以只需使用:

    sol = minimize(obj_jac, c1_0, jac=True)
    

    https://stackoverflow.com/a/37735355/1358308

    【讨论】:

    • 谢谢!!如此简单......我永远不会从文档中的描述中得到它,对我来说太神秘了。
    猜你喜欢
    • 2019-05-17
    • 2011-04-27
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多