Esempio n. 1
0
def test_max_flow_scale_free_directed(n):
    seed_number = randint(1, 1000)
    generator = ScaleFree(n, directed=True, seed_number=seed_number)
    graph, source, target = generator.generate()
    solver = GoldbergWave(graph)
    max_flow = solver.get_max_flow(source, target)

    generator = ScaleFree(n, directed=True, seed_number=seed_number)
    graph, source, target = generator.generate()
    res = gt.push_relabel_max_flow(graph, source, target, graph.ep.cap)
    res.a = graph.ep.cap.a - res.a  # the actual flow
    gt_max_flow = sum(res[e] for e in target.in_edges())
    assert max_flow == gt_max_flow
Esempio n. 2
0
def test_max_flow_scale_random_undirected(size):
    seed_number = randint(1, 1000)
    generator = Random(size[0], size[1], directed=False, seed_number=seed_number)
    graph, source, target = generator.generate()
    solver = GoldbergWave(graph)
    max_flow = solver.get_max_flow(source, target)

    generator = Random(size[0], size[1], directed=False, seed_number=seed_number)
    graph, source, target = generator.generate()
    res = gt.push_relabel_max_flow(graph, source, target, graph.ep.cap)
    res.a = graph.ep.cap.a - res.a  # the actual flow
    gt_max_flow = sum(res[e] for e in target.in_edges())
    assert max_flow == gt_max_flow
def get_algorithm(algorithm, graph):
    if algorithm == 'generic':
        return Goldberg(graph)
    elif algorithm == 'height':
        return GoldbergHeight(graph)
    elif algorithm == 'wave':
        return GoldbergWave(graph)
def test_max_flow_triangulation_delaunay_directed(n):
    seed_number = randint(1, 1000)
    generator = Triangulation(n,
                              type="delaunay",
                              directed=True,
                              seed_number=seed_number)
    graph, source, target = generator.generate()
    solver = GoldbergWave(graph)
    max_flow = solver.get_max_flow(source, target)

    generator = Triangulation(n,
                              type="delaunay",
                              directed=True,
                              seed_number=seed_number)
    graph, source, target = generator.generate()
    res = gt.push_relabel_max_flow(graph, source, target, graph.ep.cap)
    res.a = graph.ep.cap.a - res.a  # the actual flow
    gt_max_flow = sum(res[e] for e in target.in_edges())
    assert max_flow == gt_max_flow
from max_flow_wave import GoldbergWave
import math
from generation.ScaleFree import ScaleFree
from generation.Triangulation import Triangulation
from generation.Random import Random

file = open("temporal_complexity_data_wave", "w")

for nodes in [100, 200 ,300, 400, 500]:
    for i in range(0, 15):
        #Goldberg version - using as graph generator Random
        seed_number = randint(1, 1000)
        generator = Random(nodes, nodes*4, directed=True, seed_number=seed_number)
        g, source, target = generator.generate()

        title = '- Parte grafo versione Wave con ' + str(nodes) + ' nodi e ' + str(len(g.get_edges())) + ' archi - Random.'
        print(title)
        file.write(title)
        solver = GoldbergWave(graph=g)

        pr = cProfile.Profile()
        pr.enable()
        solution = solver.get_max_flow(source, target)
        pr.disable()
        s = StringIO()
        sortby = 'cumulative'
        ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
        ps.print_stats()

        file.write(s.getvalue())
file.close()
res = gt.push_relabel_max_flow(g, src, tgt, cap)
res.a = cap.a - res.a  # the actual flow
max_flow = sum(res[e] for e in tgt.in_edges())
print("Il max flow trovato da GraphTool è:", max_flow)
labels = g.new_edge_property("string")
for edge in g.edges():
    labels[edge] = str(res[edge]) + "/" + str(cap[edge])

gt.graph_draw(g,
              edge_pen_width=gt.prop_to_size(res, mi=1, ma=5, power=1),
              output="max-flow-library-solution.pdf",
              vertex_text=g.vertex_index,
              edge_text=labels)

# using WaveImplementation, find the solution to test and print the resulting graph
solver = GoldbergWave(graph=g)
solution = solver.get_max_flow(src, tgt)
print("Il max flow trovato da Wave è:", solution)

labels = g.new_vertex_property("string")
for vertex in g.vertices():
    labels[vertex] = str(g.vertex_index[vertex]) + "(" + str(
        g.vp.height[vertex]) + "," + str(g.vp.excess[vertex]) + ")"

gt.graph_draw(g,
              edge_pen_width=gt.prop_to_size(g.ep.residual,
                                             mi=1,
                                             ma=5,
                                             power=1),
              output="max-flow-wave-solution.pdf",
              vertex_text=labels,