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

OR-Tools约束定义报错TypeError: Not a number的原因咨询

OR-Tools TypeError: Not a number: duration 问题解析与修复

问题原因

你遇到的TypeError: Not a number: duration是因为OR-Tools的IntVar对象不是Python原生数值类型,不能直接用Python内置的sum()函数累加,也不能直接用*运算符做乘法操作。这些变量是模型中的抽象变量,必须使用OR-Tools提供的表达式构造工具来构建约束。

修复方案

需要替换Python原生的sum()为OR-Tools的model.Sum(),并用model.Mul()方法来构造变量与常数、变量与变量之间的乘积项。修改后的约束代码如下:

for i in list_keys: #like ("100x15","80x12", "67x8")
    # 逐个构造乘积表达式
    constraint_terms = []
    for a, b, c in dic_stock_var[i]:
        # 先计算常数b与变量c的乘积,再与变量a相乘
        product_term = model.Mul(a, model.Mul(b, c))
        constraint_terms.append(product_term)
    # 使用OR-Tools的Sum方法累加所有项,添加约束
    model.Add(model.Sum(constraint_terms) <= dic_order[i])

关键说明

  1. 乘积构造:OR-Tools要求所有变量间的运算必须通过其内置方法(如model.Mul())来生成合法的模型表达式,不能直接用Python的*运算符。
  2. 求和操作:Python的sum()会尝试将每个项转换为数值,但OR-Tools变量是未赋值的模型元素,无法直接转换,必须用model.Sum()来构建累加表达式。
  3. 非线性约束兼容:由于你的约束中包含二元变量a与整数变量c的乘积,属于非线性整数约束,而你使用的CP-SAT求解器(从model.NewIntVar判断)是支持这类约束的,所以上述修改可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:37:16