我想最小化一个具有多个输入但也有多个输出的函数。更具体地说,我调用 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})
有什么想法吗?
注意:我不确定以下内容是否符合您的要求。特别是,你说“我想让变量“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})
scipy.optimize.newton
允许对目标函数进行矢量化(即生成与输入形状相同的数组):