弧容量约束
弧容量约束
我们从一组简单的约束开始。电弧上的流量变量之和必须小于或等于该电弧的容量:
# 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))