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

求和NewBoolVars结果时遇报错,是否需切换为intVars?

问题解答

不用非得切换成IntVar,OR-Tools里的BoolVar本身就是取值0/1的IntVar子类,完全可以参与求和计算,你报错大概率是用了Python原生的sum()而不是OR-Tools提供的线性表达式求和方法。

给你两个关键解决点:

  • 正确求和方式:别用Python的sum(buy[i]),改用OR-Tools的cp_model.LinearExpr.Sum(buy[i])来对每行的BoolVar数组求和,这样求解器才能识别并处理这个约束/表达式。
  • 提前筛除不满足条件的对象:要只纳入chargeRequest满足的买家和卖家,更高效的方式是直接给变量加约束——如果某个买家的chargeRequest没满足,就强制让对应时间槽的buy变量全为0,这样求和时自然不会把这些对象算进去。比如:
# 假设charge_request是存储每个买家是否满足条件的列表
for buyer_idx in range(total_buyers):
    if not charge_request[buyer_idx]:
        # 该买家所有时间槽的buy变量都设为0
        for t in range(time_slots):
            model.Add(buy[buyer_idx][t] == 0)

用BoolVar比IntVar更合适,因为求解器对0-1变量有专门的优化算法,计算效率更高,没必要换成普通IntVar。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:03:12