netflow.py例子

netflow.py例子

我们的例子解决了一个小网络上的多商品流模型。在这个例子中,在两个城市(底特律和丹佛)生产两种商品(铅笔和钢笔),必须运到三个城市(波士顿、纽约和西雅图)的仓库以满足给定的需求。运输网络中的每条弧线都有一个与之相关的单位成本,以及最大总运输能力。

这是我们示例的完整源代码(也可用 / examples/python/netflow.py)......


#!/ usr / bin / env python3.7#版权所有2020,guro狗万app足彩bi优化,llc#解决了多商品流量问题。两种产品manbetx官网手机登入('铅笔'和'笔)#是在2个城市('底特律'和'丹佛')制作的,并且必须在3个城市('波士顿','纽约'和'西雅图'的#仓库发送到#仓库)到#满足需求('流入[H,I]')。##运输网络上的流动必须尊重电弧容量约束#('容量[i,j]')。目标是最小化Arc#运输成本的总和('成本[i,J]')。从Gurobipy导入Grb#基础数据商品= ['铅笔','Pens']节点= ['底特律','波士顿','纽约','西雅图']弧,容量=GP.Multidict({('底特律','Boston'):100,('底特律','纽约'):80,('底特律','西雅图'):120,('丹佛','波士顿'')):120,('丹佛','纽约'):120,('丹佛','西雅图'):120})#三胞胎的商品 - 源 - 目的地成本= {('铅笔','底特律','波士顿'):10,('铅笔,'底特律','纽约'):20,('铅笔','底特律','西雅图'):60,('铅笔','丹佛','波士顿'):40,('铅笔','丹佛','纽约'):40,('铅笔','丹佛','西雅图'):30,('Pens','底特律','波士顿'):20,('Pens','底特律','纽约'):20,('Pens','底特律','西雅图'):80,('Pens','丹佛','波士顿''):60,'丹佛','纽约'):70,('Pens','丹佛','西雅图'):30}#对商品城的需求 -  incown = {('铅笔','底特律'):50,('铅笔','丹佛'):60,('铅笔','波士顿'):-50,('铅笔S','纽约'):-50,(“铅笔”,'西雅图'):-10,('笔','底特律'):60,('Pens','丹佛'):40,('Pens', 'Boston'): -40, ('Pens', 'New York'): -30, ('Pens', 'Seattle'): -30} # Create optimization model m = gp.Model('netflow') # Create variables flow = m.addVars(commodities, arcs, obj=cost, name="flow") # Arc-capacity constraints m.addConstrs( (flow.sum('*', i, j) <= capacity[i, j] for i, j in arcs), "cap") # Equivalent version using Python looping # for i, j in arcs: # m.addConstr(sum(flow[h, i, j] for h in commodities) <= capacity[i, j], # "cap[%s, %s]" % (i, j)) # Flow-conservation constraints m.addConstrs( (flow.sum(h, '*', j) + inflow[h, j] == flow.sum(h, j, '*') for h in commodities for j in nodes), "node") # Alternate version: # m.addConstrs( # (gp.quicksum(flow[h, i, j] for i, j in arcs.select('*', j)) + inflow[h, j] == # gp.quicksum(flow[h, j, k] for j, k in arcs.select(j, '*')) # for h in commodities for j in nodes), "node") # Compute optimal solution m.optimize() # Print solution if m.status == GRB.OPTIMAL: solution = m.getAttr('x', flow) for h in commodities: print('\nOptimal flows for %s:' % h) for i, j in arcs: if solution[h, i, j] > 0: print('%s -> %s: %g' % (i, j, solution[h, i, j]))