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

函数拟合时从固定值列表选取指定拟合参数的方案问询

问题解答

可行性说明

你的需求完全可实现。本质是给优化变量b增加了离散取值约束,不需要依赖无约束优化的近似求解结果。

对应算法名称

这类问题属于混合整数优化范畴,针对你的场景有两类常用实现思路:

  • 暴力网格搜索:因为你的possible_b可选值极少,直接遍历所有候选的b,对每个固定的b单独拟合最优的连续参数a,最终选择总误差最小的参数组合即可,运算成本极低。
  • 混合整数非线性规划(MINLP):如果离散候选值更多、或者约束更复杂,就属于这类通用优化问题,有专门的求解算法。

支持的相关库

  • 轻量场景直接用scipy即可:既可以手动遍历离散值做简单计算,也可以直接调用scipy.optimize.brute接口直接定义离散参数的候选网格。
  • 复杂混合整数优化场景可以用CVXPY、Google OR-Tools、PuLP等库,原生支持离散变量、整数变量的约束定义。

适配你需求的代码修改示例

直接修改fit方法即可,不需要改动原有其他逻辑:

def fit(self):
    time_beg = time.time()
    min_err = float('inf')
    best_a = None
    best_b = None
    # 遍历所有候选的b
    for b_candidate in self.possible_b:
        # 固定b,只优化a
        def obj_fun(a):
            y_fit = self._fun_linear(self.x_exp, a[0], b_candidate)
            return np.linalg.norm(y_fit - self.y_exp)
        # 求解当前b下最优的a
        res_a = minimize(obj_fun, x0=self.params_init[0])
        current_err = res_a.fun
        # 记录最优结果
        if current_err < min_err:
            min_err = current_err
            best_a = res_a.x[0]
            best_b = b_candidate
    # 保存结果和原接口兼容
    self.res = type('MockRes', (), {})()
    self.res.x = [best_a, best_b]
    self.res.fun = min_err
    time_end = time.time()
    print(time_end - time_beg)
    print(self.res.x)
    print(self.res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:57:03