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

使用lmfit构建简单最小化问题遇报错,请求协助排查

问题原因与解决方案

你的代码核心问题是目标函数不符合lmfit的要求:lmfit的minimize函数要求目标函数的第一个参数必须是lmfit.Parameters对象,而非单独的拟合变量。你当前的目标函数把B作为第一个参数,导致lmfit在调用时误将关键字参数中的C当作参数对象传递,触发了'3.0' is not a Parameters object的错误。

修改后的代码

import lmfit

class test_class:
    def __init__(self, A=None):
        self.A = A

def my_obj_fn(params, C=1.0, the_class=None):
    # 从Parameters对象中提取B的值
    B = params['B'].value
    D = abs(B + C + the_class.A)
    return D

if __name__ == '__main__':
    awesome_class_instance = test_class(A=2.0)
    C_val = 3.0

    my_params = lmfit.Parameters()
    my_params.add('B', 7.0, min=-10.0, max=12.0)

    key_word_args = {'C': C_val,
                    'the_class': awesome_class_instance,
                    }

    result = lmfit.minimize(
            fcn=my_obj_fn,
            params=my_params,
            kws=key_word_args,
            method='differential_evolution'
    )

    print(result)

说明

  1. 调整目标函数结构:将params作为第一个参数,从其中提取需要优化的变量B
  2. 其余关键字参数保持不变,lmfit.minimize会自动将params传递给目标函数,再传入kws中的参数

运行修改后的代码,B会收敛到-5.0(此时B + C + the_class.A = -5 +3 +2=0,目标函数值为0,达到最小值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:43:17