【问题标题】:scipy.optimize for vector functionscipy.optimize 向量函数
【发布时间】:2015-10-12 12:02:24
【问题描述】:

我想最小化一个有多个输入但也有多个输出的函数。更具体地说,我调用 Excel 计算并希望约束函数的特定输入和输出。到目前为止,我只是设法最小化标量函数,这意味着多个输入但只有一个输出。如果 Python/Scipy 可以解决这样的问题,谁能指导我?我想选择 x 以使 smpkt 最小化并且 A 小于特定值。

例如一些代码sn-ps:

def f1(x,params):
    y=F(x)

函数F(x)是一个外部Excel表格,有多个输入和输出,输出应该是y=[smpkt,A]。现在我想通过选择x 来最小化smpkt 并保持A 小于我的约束。

到目前为止,我设法通过以下调用将y=F(x) y=[smpkt] 最小化为标量:

res = optimize.minimize(f1, x0, args=params, method='COBYLA',options={'ftol': 0.1, 'maxiter': 5})

有什么想法吗?

【问题讨论】:

  • 此评论更适合碰巧阅读此问题的其他人。我认为您要问的是“约束最小化”,它可用于 scipy.optimization.minimization 中的某些算法。约束可以是具有不等式边界的线性或非线性函数。您也可以自己绑定参数。关键是,并非所有的最小化器都支持两者或什至两者之一。

标签: python optimization multidimensional-array scipy minimize


【解决方案1】:

注意:我不确定以下是否符合您的要求。特别是,您说“我想保持变量“A”小于特定值。”这与“我想选择x 以便A 尽可能小”不同。 .对于它的价值,这是对您问题的一种解释的答案。

如果您想按照 cmets 关于函数 f1 的建议最小化输出的一个组件(并且您不能只修改 f1 以仅返回 A),您需要包装现有的另一个函数中的函数调用 f1 并仅返回 A(假设 A 实际上是一个标量)。

例如

def objective_function(x, params):
    smpkt, A = f1(x, params)
    return A

您可以使用lambda 表达式更简洁地完成相同的效果:

res = optimize.minimize(lambda x, params: f1(x, params)[1],
                        x0, args=params, method='COBYLA',
                        options={'ftol': 0.1, 'maxiter': 5})

【讨论】:

    【解决方案2】:

    scipy.optimize.newton 允许对目标函数进行矢量化(即生成与输入形状相同的数组):

    https://docs.scipy.org/doc/scipy/reference/reference/generated/scipy.optimize.newton.html#scipy.optimize.newton

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多