首页 > 解决方案 > 如何最小化两个函数的总和,允许其中一个参数在两个函数上变化?

问题描述

我有两个函数f(x,y,z)g(x,y,z)。我想最小化总和 h(x,y,z) = f(x,y,z) + g(x,y,z),允许x在函数fg上可变。

我可以使用 单独或一起最小化这两个函数scipy.optimise.minimise,它基本上在一堆 x、y 和 z 值处计算 f + g(或 h)的值,然后返回我的值(x、y、z) f + g 是最小值。这里发生的情况是:f 和 g 都以相同的 (x, y, z) 值进行评估,但我希望其中一个参数(比如 x)在 f 和 g 上变化。

这是我正在尝试的粗略概述:

    def f(x,y,z):
        return scalar

    def g(x,y,z):
        return another_scalar

    def h(theta):
        x, y, z = theta
        return f(x,y,z) + g(x,y,z)

  
    def bestfit(guess, method='Nelder-Mead'):
        result = op.minimize(h,
                             guess,
                             method=method,
                             options={'maxfev': 5000,
                                      'disp': False})

        if not result.success:
            print('Optimisation did not converge.')

        return result

    g = [x0, y0, z0]
    bf = bestfit(g, method='Nelder-Mead')
    print(bf)

我不确定我是否可以使用scipy.optimise. 我可以吗?还是我可以使用其他一些 python 模块?

标签: pythonscipy-optimizescipy-optimize-minimize

解决方案


我的第一个想法是定义新函数,比如 a 和 b,y 和 z 的值是固定的,这样你的新函数是 a(x) = f(x, y 0 , z 0 ) 和 b(x) = g(x, y 0 , z 0 ) 然后最小化这些函数。


推荐阅读