scipy.optimize 向量函数

问题描述 投票:0回答:2

我想最小化一个具有多个输入但也有多个输出的函数。更具体地说,我调用 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})

有什么想法吗?

python multidimensional-array scipy scipy-optimize-minimize
2个回答
2
投票

注意:我不确定以下内容是否符合您的要求。特别是,你说“我想让变量“A”小于特定值。”,这与“我想选择

x
以便
A
尽可能小”不同。 。不管怎样,这里是对您问题的一种解释的答案。

如果您想最小化输出的一个组成部分,正如您对函数

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.