netflow。py例子细节

现在让我们走进这个例子中,逐行,了解它如何实现所需的结果计算最优网络流。与前面给出的简单的Python示例一样,这个例子首先导入Gurobi函数和类:


进口gurobipy gurobipy进口伽马线暴gp

然后,我们创建一些包含模型数据列表:


#基本数据商品=[“铅笔”、“笔”]节点=[“底特律”、“掘金”,波士顿,纽约,西雅图的]弧能力= gp。multidict({ ('Detroit', 'Boston'): 100, ('Detroit', 'New York'): 80, ('Detroit', 'Seattle'): 120, ('Denver', 'Boston'): 120, ('Denver', 'New York'): 120, ('Denver', 'Seattle'): 120})

模型适用于两个大宗商品(铅笔和钢笔),和网络包含5节点和6弧。我们初始化大宗商品节点作为简单的Python列表。我们使用Gurobimultidict函数初始化(列表键),能力(一个字典)。

该模型还需要为每个commodity-arc对成本数据:


#成本三胞胎commodity-source-destination成本={(“铅笔”,“底特律”,“波士顿”):10(“铅笔”,“底特律”,“纽约”):20日(“铅笔”,“底特律”,“西雅图”):60岁(“铅笔”,“掘金”,“波士顿”):40岁(“铅笔”,“掘金”,“纽约”):40岁(“铅笔”,“掘金”,“西雅图”):30日(“笔”、“底特律”、“波士顿”):20日(“笔”,“底特律”,“纽约”):20日(“笔”,“底特律”,“西雅图”):80(“笔”、“掘金”,“波士顿”):60岁(“笔”、“掘金”,“纽约”):70(“笔”、“掘金”,“西雅图”):30}

一旦创建了这本字典,移动一个单位的商品的成本h从节点j可以查询成本((h i, j))。回想一下,Python可以省略括号使用元组索引字典时,这可以缩短成本(h i, j)

使用相似的结构来初始化节点需求/供应数据:


#对小商品城流入需求={(“铅笔”,“底特律”):50岁(“铅笔”、“掘金”):60岁(“铅笔”,“波士顿”):-50(“铅笔”,“纽约”):-50(“铅笔”,“西雅图”):-10(“笔”,“底特律”):60岁(“笔”、“掘金”):40岁(“笔”、“波士顿”):-40年,(“笔”、“纽约”):-30(“笔”、“西雅图”):-30}

正值表示需求,而一个负值表明供应。