def saveGraphs(): g = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1],0,1) Graphs = [] a = snap.TIntV() for file in sys.argv[2:]: Graphs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) folder = str(file).split("/")[0] if folder != "data": sys.exit("comparison should be made with file in 'data' folder") data = sys.argv[2].split("/")[1] path = "/" if "DCS_LP" in sys.argv[1]: path = "results/snap/"+data+"DCS_LP/" else :# DCS_GREEDY path = "results/snap/"+data+"DCS_GREEDY/" if not os.path.exists(path) : os.makedirs(path) for i in g.Nodes() : a.Add(i.GetId()) for i in range(0,len(Graphs)): Graphs[i] = snap.GetSubGraph(Graphs[i],a) filename = raw_input('Enter a snapgraph name: ') print "saving graphs in: " + path +" under names "+filename+"i.txt" for i in range(0,len(Graphs)): snap.SaveEdgeList(Graphs[i],path+filename+str(i+1)+".txt","Minimal graph from" + sys.argv[1])
def main(argv): asUnDir = False oneGraph = False if (len(argv) < 2): sys.exit("usage: python lp.py [-d] <file1> ... <fileN>") if (len(argv) == 2): if argv[1] == "-d": sys.exit("no input.") oneGraph = True if (len(argv) == 3 and argv[1] == "-d"): asUnDir = True oneGraph = True if (len(argv) > 3 and argv[1] == "-d"): asUnDir = True if (oneGraph): if (asUnDir): Graph = snap.LoadEdgeList(snap.PNGraph, argv[2], 0, 1) snap.MakeUnDir(Graph) else: Graph = snap.LoadEdgeList(snap.PUNGraph, argv[1], 0, 1) printSingleGraph(Graph) else: Graphs = [] if (asUnDir): for file in argv[2:]: g = snap.LoadEdgeList(snap.PNGraph, file, 0, 1) snap.MakeUnDir(g) Graphs.append(g) else: for file in argv[1:]: Graphs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) printMoreGraphs(Graphs) dense = cplex.Cplex("dense.lp") os.remove("dense.lp") alg = dense.parameters.lpmethod.values dense.parameters.lpmethod.set(alg.barrier) # include the below line to not do the crossover and get a close # but not exact solution that can be extracted with filterLpSolution dense.parameters.barrier.crossover.set(-1) startTime = time.clock() #dense.parameters.lpmethod.set(5) # sifting algorithm dense.solve() printResults.save(dense) print("time taken: " + str(time.clock() - startTime)) print "The solution is", dense.solution.get_status_string() print "Density:", dense.solution.get_objective_value()
def loadGraph(): print("using graph " + sys.argv[1]) graph = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1], 0, 1) print( str(graph.GetNodes()) + " nodes and " + str(graph.GetEdges()) + " edges.") return graph
def printStats(): g = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1],0,1) for i in range(2,len(sys.argv)): cName,cExt = os.path.splitext(sys.argv[i]) a = snap.TIntV() gi = snap.LoadEdgeList(snap.PUNGraph, sys.argv[i], 0, 1) print "Printing stats..." for n in g.Nodes(): a.Add(n.GetId()) g0 = snap.GetSubGraph(gi,a) n = g0.GetNodes() e = g0.GetEdges() print "---" print "Stats from : " + str(cName) print "Nodes : "+str(n) print "Edges : "+str(e) print "Density : "+ str( e / float(n))
def findSmallestGraph(): g = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1],0,1) Graphs = [] names = [] for file in sys.argv[2:]: Graphs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) lpName,lpExt = os.path.splitext(file) names.append(lpName) a = snap.TIntV() for i in g.Nodes() : a.Add(i.GetId()) density = 500 for i in range(0,len(Graphs)): Graphs[i] = snap.GetSubGraph(Graphs[i],a) newD = Graphs[i].GetEdges() / float(Graphs[i].GetNodes()) if newD < density : density = newD g = i print "Smallest graph was: "+ str(names[i]) print "Density: "+str(density) return (names[i],Graphs[g])
def fsg(nodes): g = -1 Graphs = [] names = [] for file in sys.argv[1:]: Graphs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) lpName, lpExt = os.path.splitext(file) names.append(lpName) a = snap.TIntV() for i in nodes: a.Add(i) density = sys.maxint for i in range(0, len(Graphs)): Graphs[i] = snap.GetSubGraph(Graphs[i], a) newD = Graphs[i].GetEdges() / float(Graphs[i].GetNodes()) if newD < density: density = newD g = i print "Smallest graph was: " + str(names[g]) print "Density: " + str(density) return (names[g], Graphs[g], density)
return a # returns the induced subgraph of the nodes from graph over the graph target_graph def getSubgraph(target_graph, graph): a = snap.TIntV() for i in graph.Nodes(): a.Add(i.GetId()) return snap.GetSubGraph(target_graph, a) # Start of main program if (len(sys.argv) < 3): usage() pG = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1], 0, 1) gG = snap.LoadEdgeList(snap.PUNGraph, sys.argv[2], 0, 1) if "minLP" not in sys.argv[1]: usage() if "minGREEDY" not in sys.argv[2]: usage() print "What would you like to do?" print "1) print common nodes" print "2) print structural properties" i = "" while i not in ["1", "2"]: i = raw_input(">") if i == "1": # calc similarities between node sets... lpN = getNodes(lpG)
def loadGraphs(locations): graphs = [] for arg in locations: graphs.append(snap.LoadEdgeList(snap.PUNGraph, arg, 0, 1)) return graphs
def main(argv): if len(argv) < 1: usage() gs = [] for file in argv[1:]: gs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) # Load and solve LP usr_in = "" print "Program: minimize..." print "use the following input" print "data/oregonFAULT-2/oregon2_010421.txt data/oregonFAULT-2/oregon2_010428.txt data/oregonFAULT-2/oregon2_010407.txt" print "1) minimize nodes wrt sys.argv[1:]" print "2) Does this input fail (sys.argv[1:]) yes/no" print "3) Run this: Example nodes" while usr_in not in ["1", "2", "3"]: usr_in = raw_input(">") print "You have Choosen " + usr_in + "!" if usr_in == "1": lp.printMoreGraphs(gs) dense = cplex.Cplex("dense.lp") os.remove("dense.lp") alg = dense.parameters.lpmethod.values dense.parameters.lpmethod.set(alg.barrier) dense.solve() # get the nodes for the LP nodes = getNodes(getNonZero(dense)) print "size nodes:" + str(nodes) # minimize the nodes and respective graphs n, gs = ddmin(2, nodes, gs) gs0 = [] for g in gs: gs0.append(getSubgraph(g, n)) lp.printMoreGraphs(gs) dense = cplex.Cplex("dense.lp") os.remove("dense.lp") alg = dense.parameters.lpmethod.values dense.parameters.lpmethod.set(alg.barrier) dense.solve() t = getSolution(getNonZero(dense)) (name, graph, density) = findSmallestGraph(n, gs) print "t* = " + str(t) print "density = " + str(density) print "t* =? density : " + str(abs(t - density) < 0.000005) print "Local minimal nodes: " + str(n) print "---" print "Would you like to save the fault inducing minimized graphs? y/n" while usr_in not in ["y", "n"]: usr_in = raw_input(">") if usr_in == "y": data = sys.argv[1].split("/")[1] path = "results/snap/minimal/" if not os.path.exists(path): os.makedirs(path) filename = raw_input('Enter a snapgraph name: ') print "saving graphs in: " + path + " under names " + filename + "i.txt" for i in range(0, len(gs)): snap.SaveEdgeList(gs[i], path + filename + str(i + 1) + ".txt", "Minimal graph from" + data) else: print "exiting..." if usr_in == "2": if testGraphs(gs, True): print "No, input does not fail, e.g t* = density" else: print "Yes, input does fail, e.g t* != density" if usr_in == "3": nodes = [5388, 6659, 13237, 5466, 9019, 9013, 5611] for g in gs: g = getSubgraph(g, nodes) lp.printMoreGraphs(gs) dense = cplex.Cplex("dense.lp") os.remove("dense.lp") alg = dense.parameters.lpmethod.values dense.parameters.lpmethod.set(alg.barrier) dense.solve() t = getSolution(getNonZero(dense)) (name, graph, density) = fsg(nodes) print "t* = " + str(t) print "density = " + str(density) print "t* =? density : " + str(abs(t - density) < 0.000005) print "Local minimal nodes: " + str(nodes)
# remove duplicates nodes = list(set(nodes)) print "maximize t" print "\nsubject to" print(" +\n".join(nodes)) + " <= 1" # sum yi <= 1 for e in allEdges: print(" +\n".join(e)) + " - t >= 0" # sum xij >= t for c in allEdgeCons: print " \n".join(c) # xij <= yi and xij <= yj print "\nend" if (oneGraph): if (asUnDir): Graph = snap.LoadEdgeList(snap.PNGraph, sys.argv[2], 0, 1) snap.MakeUnDir(Graph) else: Graph = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1], 0, 1) printSingleGraph(Graph) else: Graphs = [] if (asUnDir): for file in sys.argv[2:]: g = snap.LoadEdgeList(snap.PNGraph, file, 0, 1) snap.MakeUnDir(g) Graphs.append(g) else: for file in sys.argv[1:]: Graphs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) printMoreGraphs(Graphs)
xijm = [e for es in allEdges for e in es] with open("dense.lp", "w") as f: print >> f, "maximize "+tobj+" +" print >> f, " +\n".join(xijm) print >> f, "\nsubject to" print >> f, (" +\n".join(nodes))+" <= 1" # sum yi <= 1 for c in allEdgeCons: print >> f, " \n".join(c) # xij <= yi and xij <= yj print >> f, "\nend" Graphs = [] for file in sys.argv[1:]: Graphs.append(snap.LoadEdgeList(snap.PUNGraph, file, 0, 1)) printGraphs(Graphs) # index for all x's are 1-len(xijm), in cplex. print "Warning: This file assumes already preprocessed files," print " meaning the input should be undirected and" print " all node-sets should be equal, see preprocess.py.\n" print "Warning: Only does " + str(5) + " iterations.\n" print "Info: total number of edges:" + str(len(xijm)) dense0 = cplex.Cplex("dense.lp") #dense0.set_results_stream(None) alg = dense0.parameters.lpmethod.values dense0.parameters.lpmethod.set(alg.barrier) dense0.parameters.barrier.crossover.set(-1)
from lib import snap import os import sys def usage(): sys.exit("usage: python pic.py <inputGraph.txt>") if len(sys.argv) < 2: usage() g = snap.LoadEdgeList(snap.PUNGraph, sys.argv[1], 0, 1) labels = snap.TIntStrH() for NI in g.Nodes(): labels[NI.GetId()] = str(NI.GetId()) name = "" while name == "": name = raw_input("save file as: ") print ">" snap.DrawGViz(g, snap.gvlDot, name + ".png", " ", labels)