如何用Python中Gurobi quicksum编写约束?报错求解
Gurobi约束编写报错问题分析与修复
错误原因
你的代码存在两个核心问题:
- 约束名称重复:循环中每次调用
addConstr都使用固定名称"c2",Gurobi要求所有约束名称唯一,重复命名会直接触发报错。 - 循环逻辑错误:原约束意图应该是「对每个城市
j,所有频率i对应的x[i,j]之和≤1」,但你嵌套了i的循环,这会为每一组(i,j)单独添加约束(即每个x[i,j]≤1),完全偏离了原约束的逻辑,同时也会生成大量冗余约束。
修正后的代码
for j in city: # 对每个城市j,计算所有频率i对应的x[i,j]之和,并添加约束 c2 = m.addConstr( gp.quicksum(x[i,j] for i in frequency) <= 1, name=f"c2_{j}" # 用f-string生成唯一约束名 )
额外检查点
如果修正后仍报错,需确认:
- 变量
x是否为正确的Gurobi二维变量,比如通过x = m.addVars(frequency, city, vtype=gp.GRB.BINARY)(根据需求选择变量类型)初始化。 frequency和city是否为合法的可迭代对象,确保遍历过程中不会出现索引错误。
内容的提问来源于stack exchange,提问作者DJ-coding
相关产品推荐
相关产品推荐

