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

Gurobi报错TypeError:int与tupledict不支持减法,求问题排查

问题分析与解决

你的错误根源确实在w的定义上。

问题原因

mdl.addVars(0,1)会创建一个tupledict类型的变量集合(包含两个变量:w[0]和w[1]),而非单个二进制变量。当你在约束中写1 - w时,Python尝试用整数1减去整个tupledict,这就触发了TypeError: unsupported operand type(s) for -: 'int' and 'tupledict'错误。

修正方案

场景1:w是单个全局辅助变量

把w的定义改成单个变量,使用addVar而非addVars:

w = mdl.addVar(vtype=GRB.BINARY, name='w')

约束中的w引用保持不变即可:

for i in customers:
    for j in customers:
        if i != j:
            mdl.addConstr(y[j] + z[j] <= y[i] + z[i] - df.demand[j]*(x1[i,j] + x2[i,j])
                          + 100000 * (1 - w), name='C8')

场景2:w是与(i,j)对绑定的辅助变量集合

如果你的逻辑需要每个(i,j)对对应一个独立的w,则需调整定义和约束引用:

  • 定义时指定索引范围:
w = mdl.addVars(customers, customers, vtype=GRB.BINARY, name='w')
  • 约束中引用对应索引的w:
for i in customers:
    for j in customers:
        if i != j:
            mdl.addConstr(y[j] + z[j] <= y[i] + z[i] - df.demand[j]*(x1[i,j] + x2[i,j])
                          + 100000 * (1 - w[i,j]), name=f'C8_{i}_{j}')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:22:13