You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在最小化两函数之和时允许两个函数的x参数独立变化

结论

完全可以用scipy.optimize实现该需求,不需要引入额外的Python模块。

实现思路

你只需要将原来的3维优化参数扩展为4维,把f和g的独立参数拆分开即可。以你需要让x参数在两个函数中独立变化为例,优化参数列表从[x, y, z]调整为[x_f, x_g, y, z],其中:

  • x_f是传给f函数的x参数
  • x_g是传给g函数的x参数
  • y、z仍然是两个函数共享的参数

修改后代码示例

import scipy.optimize as op

def f(x,y,z):
    return scalar # 你的f函数原有实现

def g(x,y,z):
    return another_scalar # 你的g函数原有实现

def h(theta):
    # 拆分独立参数和共享参数
    x_f, x_g, y, z = theta
    return f(x_f, y, z) + g(x_g, 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

# 初始猜测对应4个参数:x_f初始值、x_g初始值、y初始值、z初始值
# 可根据业务需求给两个x设置相同或不同的初始值
g = [x0, x0, y0, z0]
bf = bestfit(g, method='Nelder-Mead')
# 优化结果的x属性依次为x_f最优值、x_g最优值、y最优值、z最优值
print(bf)

补充说明

如果后续需要让更多参数在两个函数间独立变化,只需要按照同样的逻辑扩展优化参数的维度,把独立参数拆分、共享参数保留即可。如果你的函数存在多个局部最优解,需要全局优化能力,可以直接使用scipy.optimize自带的basinhopping、differential_evolution等方法,无需引入第三方库。

内容的提问来源于stack exchange,提问作者psi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:05