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

如何加速Scipy Powell方法的非线性最小二乘优化求解?

复杂非线性最小二乘优化加速问题

我用Python的Scipy minimize函数求解一个含14个参数的复杂非线性最小二乘问题,遇到以下核心问题:

  • 模型复杂度高,无法推导目标函数(残差平方和)的解析梯度;且可视化发现目标函数在最小值处不可微,所有基于梯度的优化方法均无法定位解。
  • 固定其余参数仅观察两个变量的目标函数时,发现极小值区域外函数值近乎恒定,导致梯度方法极易停滞,且初始猜测必须非常接近精确解才能生效。
  • 模型和数据的数值量级极小,目标函数值小于10(-5),梯度方法通常在目标函数值降至10(-7)时就终止,但精确解对应的目标函数值约为10^(-10)。

目前仅Powell方法能找到正确解,但耗时过长:原数据量下需5-10分钟,减少数据点后仍需约3分钟,目标是将优化时间控制在1分钟内。当前单次目标函数评估耗时0.07秒。


现有代码

目标函数

def objective(*parameters):
    return np.linalg.norm(data - model(xs_data, *parameters), ord = 2, axis = 0)**2

优化执行代码

minimize(lambda variables: objective(*variables), initial_guess, method='Powell', bounds = bounds, options={'xtol': 5e-4, 'ftol': 5e-4})

优化结果

message: Optimization terminated successfully.
success: True
status: 0
fun: 1.79714781920377e-11
x: [ 3.537e+00  1.661e-01 ... -1.006e+01  4.037e-01]
nit: 14
direc: [[ 3.781e-01  4.889e-02 ...  3.919e-05  1.229e-02]
       [ 0.000e+00  1.000e+00 ...  0.000e+00  0.000e+00]
       ...
       [ 0.000e+00  0.000e+00 ...  1.000e+00  0.000e+00]
       [-5.545e-03 -8.207e-04 ...  1.473e-05  4.853e-03]]
nfev: 2469

需求

希望获取加速优化的具体建议,比如是否可并行化Powell方法的搜索过程,或对数据/目标函数做变换以提升寻优效率。


最小可复现示例(仅展示逻辑,未完全还原原问题特性)

模型定义

def model(x, *parameters):
    # Initialise:
    result = 0
    for i in range(len(parameters)):
        result += np.exp(-(x-parameters[i])**2)/(parameters[i]**2 + 1)
    return result

数据生成

xs = np.linspace(-10, 20, 100)
data = model(xs, *[0.5, 3, 10, 11])

目标函数

def objective(*params):
   return np.linalg.norm(data - model(xs, *params), ord = 2, axis = 0)**2

参数约束

bounds = [(None, None) for i in range(4)]
bounds[0] = (0, 1)

初始猜测

initial_guess = [0, 0, 0, 0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:42:45