netflow.py例子

netflow.py例子

我们的示例在小型网络上解决了多商品流程模型。在该示例中,两个城市(底特律和丹佛)生产了两个商品(铅笔和钢笔),必须在三个城市(波士顿,纽约和西雅图)的仓库运送到令人满意的需求。运输网络中的每个弧都具有与之相关的成本和总容量。

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


# !/usr/bin/python #版权所有2019,Gurobi优化狗万app足彩,LLC #解决多商品流问题。两种产品manbetx官网手机登入(“铅笔”和“钢笔”)#在两个城市(“底特律”和“丹佛”)生产,必须送到3个城市(“波士顿”,“纽约”和“西雅图”)的#仓库,以#满足需求(“流入[h,i]”)。# #交通网络上的流动必须尊重容量限制#('容量[i,j]')。目标是最小化电弧#运输成本('成本[i,j]')的总和。from gurobipy import * # Base data commodities =['铅笔','钢笔']nodes =['底特律','丹佛','波士顿','纽约']arcs, capacity = multidict({('底特律','波士顿'):100,('底特律','纽约'):80,('底特律','西雅图'):120,('丹佛','波士顿'):120,('丹佛','纽约'):120,('丹佛','纽约'):120,('丹佛','西雅图'):120}) # Cost for triplets commodity-source-destination Cost ={('铅笔','底特律','波士顿'):10,('铅笔','底特律','纽约'):20,('铅笔','底特律','西雅图'):60,('铅笔','丹佛','波士顿'):40,('铅笔','丹佛','纽约'):40,('铅笔','丹佛','西雅图'):30,('钢笔','底特律','波士顿'):2、('Pens', '底特律','纽约'):20,('Pens', '底特律','波士顿'):80,('Pens', '丹佛','波士顿'):60,('Pens', '丹佛','纽约'):70,('Pens', '丹佛','西雅图'):30}#-50年,(“铅笔”,“西雅图”):-10年,(“笔”,“底特律”):60岁(“笔”、“掘金”):40岁(“笔”、“波士顿”):-40年,(“笔”、“纽约”):-30(“笔”、“西雅图”):-30} #创建优化模型m = model ('netflow') #创建变量flow = m.d addvars (commodities, arcs, obj=cost, name="flow") # adds ((flow.sum('*',i,j) <= capacity[i,j] for i,j in arcs), "cap") #使用Python的等效版本# 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( # (quicksum(flow[h,i,j] for i,j in arcs.select('*',j)) + inflow[h,j] == # 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.Status.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]))