使用gurobipy编写模型约束方程7遇阻,请求技术协助
解决Gurobi约束中quicksum的s循环范围问题
你代码里的s循环范围完全取决于你的模型中s的定义以及约束7的数学逻辑:
- 如果
s代表某个独立的全局集合(比如时间段、场景集合),循环范围直接写这个集合的名称(比如你预先定义的S集合) - 如果
s和l/i存在关联(比如每个l对应特定的s子集),则需要写成for s in S[l]这类形式,前提是你已定义好这种关联子集
给两个常见场景的修正示例:
示例1:s属于全局集合S
若s是独立的全局集合(比如场景集合S),代码调整为:
mdl2.addConstrs( T[i, j, k] >= quicksum(p[l]*y[i, l, s] + s[l]*x[i, l, s] for l in N for s in S) - d[j] - 100000*(1 - x[i, j, k]) for i in M for j in N for k in N ) #7
示例2:s与l存在关联子集
若每个l对应专属的s子集(比如预先定义的S_subset字典,key为l,value是对应的s集合),代码调整为:
# 假设已定义S_subset,存储每个l对应的s子集 mdl2.addConstrs( T[i, j, k] >= quicksum(p[l]*y[i, l, s] + s[l]*x[i, l, s] for l in N for s in S_subset[l]) - d[j] - 100000*(1 - x[i, j, k]) for i in M for j in N for k in N ) #7
如果仍不确定,补充约束7的数学表达式原文以及s对应的参数/变量定义,或者贴出完整模型代码,能更精准定位问题。
内容的提问来源于stack exchange,提问作者Salih
相关产品推荐
相关产品推荐

