弧容量约束

弧容量约束

我们从一组简单的约束开始。电弧上的流量变量之和必须小于或等于该电弧的容量:

# Arc-capacity constraints(流量限制)总和('*', i, j) <= capacity[i, j] for i, j in arcs), "cap")

注意,这条语句使用了本节前面介绍的几个概念。

这里使用的第一个概念是总和方法,用于在变量的子集上创建线性表达式tupledict.特别是,它是所有商品的总和‘*’在第一个领域)与一对城市之间的边缘有关j

这里使用的第二个概念是生成器表达式,它遍历网络中的所有弧线。具体来说,声明的这一部分……

对于i j的弧
表示我们在遍历每条边.在每个迭代中,j中的元组的相应值将被填充.在特定的迭代中,flow.sum(‘*’,i, j)将使用这些特定的值进行计算,是吗能力(i, j)

要注意的第三件事是,我们将结果作为参数传递给addConstrs.该方法将创建一组Gurobi约束,每个生成器表达式的迭代都有一个约束。

最后要注意的是,最后一个参数提供了约束名称的基。的addConstrs方法将自动为每个约束添加相应的索引。例如,限制从丹佛到波士顿的流量的约束的名称将是帽(丹佛,波士顿)

注意,如果你喜欢自己执行循环,你可以使用以下循环获得等价的行为:

addconstr (sum(flow[h,i,j] for h in commodities) <= capacity[i,j], "cap[%s,%s]" % (i, j))