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

使用OR-Tools CP-SAT添加约束时出现TypeError错误求助

OR-Tools CP-SAT构建约束时出现TypeError错误

问题背景

使用Python结合OR-Tools 9.9.3963版本的CP-SAT模块求解约束满足问题,在构建变量约束时触发如下错误:

File "D:\Python39\lib\site-packages\ortools\sat\python\cp_model.py", line 342, in get_integer_var_value_map
    raise TypeError("Unrecognized linear expression: " + str(expr))
TypeError: Unrecognized linear expression: -3.0

对应的约束构建代码:

for v in range(len(self.solution)):
    for s in range(len(schedule[v])):
        self.a[v, s] = self.model.NewIntVar(0, self.data.num_T, f'a_{v}_{s}')

for v in range(len(self.solution)):
    for s in range(len(self.schedule[v]) - 1): 
        lhs = self.a[v, s + 1] - self.a[v, s]
        if self.schedule[v][s][1:] == self.schedule[v][s + 1][1:]:
            rhs = self.dwell_times[v][int(s / 2)]
        else:
            rhs = self.data.travel_time[
                (int(self.schedule[v][s][1:]), int(self.schedule[v][s + 1][1:]))]
        name = f"a_{v}_{s}"
        print(lhs)
        print(rhs)
        self.model.Add(lhs >= rhs)

根本原因

  1. 数据类型不匹配:你定义的a[v,s]是整数变量(IntVar),因此lhs是整数线性表达式,但rhs是浮点数类型(如报错中的-3.0),CP-SAT要求整数变量的表达式只能与整数常数进行比较,浮点数会导致线性表达式解析失败。
  2. 业务数据错误:rhs出现负数,不符合实际场景(停留时间、旅行时间不可能为负),说明dwell_times或travel_time数据集存在非法值。

修复方法

  • 修正非法数据:检查dwell_times和travel_time的数据源,找出并修正其中的负数错误,确保所有时间值为非负整数。
  • 统一数据类型:将rhs转换为整数类型后再传入约束,避免浮点数导致的解析问题。

修改后的代码片段:

for v in range(len(self.solution)):
    for s in range(len(self.schedule[v]) - 1): 
        lhs = self.a[v, s + 1] - self.a[v, s]
        if self.schedule[v][s][1:] == self.schedule[v][s + 1][1:]:
            rhs = self.dwell_times[v][int(s / 2)]
        else:
            rhs = self.data.travel_time[
                (int(self.schedule[v][s][1:]), int(self.schedule[v][s + 1][1:]))]
        # 排查并修正负数时间值
        if rhs < 0:
            raise ValueError(f"非法负数时间值: v={v}, s={s}, 值={rhs}")
        # 转换为整数
        rhs_int = int(rhs)
        name = f"a_{v}_{s}"
        print(lhs)
        print(rhs_int)
        self.model.Add(lhs >= rhs_int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:22