scipy.optimize为矢量函数

时间:2015-07-22 14:28:05

标签: python optimization multidimensional-array scipy minimize

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

例如一些代码片段:

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

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

如果您希望最小化输出的一个组成部分,请根据您对该功能f1的评论建议(并且您不能只修改f1以仅返回A),您和# 39; ll需要将现有函数包装在另一个调用f1的函数中,并返回A(假设A实际上是标量)。

E.g。

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})