如何构造一个将文件名作为输入的函数? 背景

问题描述

为了解决最大流量问题,我必须定义一个函数,该函数将写入弧及其容量的文件名作为输入,我必须构建和求解模型,打印变量并构建图形只有最后的值不为零的弧线。 这是我试图运行的代码

def maxflow(filename):
 G = nx.read_edgelist("filename",nodetype=int,create_using=nx.DiGraph())
 
 # Identify the sink and the source nodes
 source=min(G.nodes)
 print(f"Source={source}")
 sink=max(G.nodes)
 print(f"Sink={sink}")

 m = gp.Model("maxflow")

 # Create variables 
 x = m.addVars(G.edges(),vtype=GRB.CONTINUOUS,name="x")
 v = m.addVar(vtype=GRB.CONTINUOUS,name="v")
 # Update new variables
 m.update()
 print(x)
 print(v)

 # Set objective
 # Set the direction
 m.modelSense = GRB.MAXIMIZE
 #Add to the model
 m.setObjective( v )

 # Capacity constraints: x_ij <= C_ij
 for e in G.edges():
    print(f"--{e}--")

    constr = x[e]
    print(f"Adding Capacity constraints to edge {e}: {constr} with capacity {G[e[0]][e[1]]['capacity']}")

    # Finally we add it to the model
    m.addConstr( constr,GRB.LESS_EQUAL,G[e[0]][e[1]]["capacity"],f"C{e[0]},{e[1]}" )

 m.addConstr(x.sum(source,'*') == v,name=f"Source{source}")
 m.addConstr(x.sum('*',sink) == v,name=f"Sink{sink}")

 for n in G.nodes():
  if n != source and n != sink:
    m.addConstr(x.sum(n,'*') - x.sum('*',n) == 0.0,name=f"N{n}")

 m.write("maxflow.lp")
 !cat maxflow.lp

 m.optimize()

# Print solution
 if m.status == GRB.status.OPTIMAL:
    print(f"Optimal solution\nObj: {m.objVal}")    
    
    for var in m.getVars():        
        print(f"Variable name: {var.varName}. Value: {var.x}")

# Construct graph with only arcs that have some flow   
    for var in m.getVars():
      G = nx.read_edgelist("./filename",create_using=nx.DiGraph())  
      
      if var.x==0.0:
        stringa=str(var.varName)
        s = stringa.replace ("x","")
        y=literal_eval(s)
        G.remove_edge(y[0],y[1])
        nx.draw(G,with_labels=True)

这样最后我就可以调用我放置文本文件的函数

maxflow ("edge_list_max_flow2.txt")

并为此数据编写代码中的所有内容。

希望有人能帮助我!提前致谢。

解决方法

你只需要改变一行,使用

G = nx.read_edgelist(filename,nodetype=int,create_using=nx.DiGraph())

代替

G = nx.read_edgelist("filename",create_using=nx.DiGraph())

背景

目前您使用的是文字 "filename" 而不是变量 filename

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...