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

如何为Scipy的optimize.shgo定义线性约束?为何出现下标错误?

Scipy optimize.shgo线性约束定义错误解决方法

错误原因

scipy.optimize.shgo的constraints参数要求传入约束对象的列表,而非单个LinearConstraint实例——这是它和optimize.minimize的核心区别,后者支持传入单个或列表形式的约束。直接传单个约束对象会触发TypeError: 'LinearConstraint' object is not subscriptable,因为函数内部会尝试对约束对象执行下标遍历操作。

修正步骤

  1. 将单个LinearConstraint对象包裹进列表,作为constraints参数的值
  2. 修正args参数写法:必须传入元组形式,即使只有一个参数也要加逗号(避免被解析为可迭代对象拆分)

修正后的完整代码

def scipy_shgo(id):
    data = get_data(id)
    lb = [0]
    ub = [np.inf]
    linear_constraint = LinearConstraint([0,0,-1,1], lb=lb, ub=ub)
    bounds = [(0, None)] * 4

    # 两处关键修正:约束放入列表,args改为元组格式
    res = shgo(mae_func, bounds=bounds, constraints=[linear_constraint], args=(data,))

    return res

result = scipy_shgo('some_id')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:52:18