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

guobipy(Gurobi)引入列表绝对差约束的最大化模型不可行问题排查

Gurobi模型不可行问题修复方案

核心错误点及修复方法

  • c变量约束的维度与变量重名错误
    该错误是导致不可行的核心原因:原代码定义c[j]约束时,内层求和的迭代变量和外层循环变量均使用j,变量作用域冲突导致c[j]的计算逻辑完全错误,和后续差值约束无法匹配。
    原错误代码段:
z=0
for j in n: 
    o.addConstr(c[j]== grb.quicksum((j+1)* x[z,j] for j in range(0,N)))
    z=z+1

修复后代码段:

# 按x的行索引z计算对应赋值结果,c[z]为z行选中列的索引+1
for z in n:
    o.addConstr(c[z] == grb.quicksum((k+1)*x[z,k] for k in n))
  • 模型实例重复创建冗余错误
    原代码在with语句中创建带环境的模型后,又重新初始化了空模型,导致环境配置失效,删除冗余行即可:
    原错误代码段:
with grb.Env() as env, grb.Model(env=env) as o:
    o = grb.Model() # 冗余行,直接删除
  • 绝对值约束写法不规范
    直接调用abs_函数绑定变量可能导致约束解析异常,最大化场景下可替换为两个线性约束,逻辑等价且稳定性更高:
    原错误代码段:
for j in n:
    o.addConstr(adifc[j]== abs_(difc[j]))

修复后代码段:

for j in n:
    o.addConstr(adifc[j] >= difc[j])
    o.addConstr(adifc[j] >= -difc[j])
  • 变量边界优化(可选)
    定义adifc变量时可直接指定下界为0,减少不必要的约束校验:
adifc[j] = o.addVar(vtype=grb.GRB.INTEGER, lb=0, name='adifc'+str(j))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:00:07