Python:通过最小化第一个输出上的计算密集型函数来获取第二个输出变量

计算科学 优化 Python 非线性方程 约束优化
2021-12-27 15:11:25

我在 python 中有一个计算量很大的函数,其形式如下:

def f(x, args):
    ...
    return y_1, y_2  # where y_1 is scalar, and y_2 can
                     # be a vector of other results

我需要相对于 x 最小化 y_1,并且我对 x 有一个非常好的初始猜测,这样最小化器通常不会进行很多迭代。我为此目的包装了该功能:

def g(x, args):
    return f(x,args)[0]

我对最优 x 以及这个 x 处的函数 y_1 和 y_2 的值都感兴趣,因为我以后需要它们。计算 y_1 和 y_2 需要对相同函数进行多次多维插值,这就是函数需要一段时间来计算的原因。但是,在给定这些插值的情况下计算 y_2(对于 y_1 也是相同的)非常快。

我可以通过运行 f(x_opt,args)[1] 轻松地重新计算给定 x_opt 的 y_2,但这很昂贵。我想知道一旦最小化器找到最佳 x,是否有办法直接将 y_2 作为最小化过程的输出。

1个回答

您是否考虑过定义y_2为全局变量,以便之后其他函数可以引用它f(x)从您的问题的声音来看,您只是y_2在初始计算后尝试参考,不是吗?