def test_source_sink_triangulation_delaunay(n): seed_number = randint(1, 1000) generator = Triangulation(n, type="delaunay", directed=True, seed_number=seed_number) graph, source, sink = generator.generate() count_source, src = has_unique_source(graph) count_sink, snk = has_unique_sink(graph) assert count_source == 1 assert count_sink == 1 assert source == src assert sink == snk
def get_graph(graph_type, n, m, directed, seed_number): if graph_type == 'random': graph = Random(n, m, seed_number=seed_number, directed=directed) elif graph_type == 'scale-free': graph = ScaleFree(n, seed_number=seed_number, directed=directed) else: graph = Triangulation(n, type=graph_type, seed_number=seed_number, directed=directed) return 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 = Goldberg(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
return graph '''#seed_number = randint(1, 1000) # generator = Random(10, 40, directed=True, seed_number=seed_number) seed_number = 386 generator = Triangulation(50, type="delaunay", directed=True, seed_number=seed_number) # generator = Wikipedia() g, source, target = generator.generate() print("Source: " + str(source) + " target " + str(target)) gt.graph_draw(g, edge_pen_width=gt.prop_to_size(g.ep.cap, mi=1, ma=5, power=1), output="cf/cf_capacities.pdf", vertex_text=g.vertex_index, edge_text=g.ep.cap)''' #seed_number = randint(1, 1000) seed_number = 14 generator = Triangulation(50, type="delaunay", directed=True, seed_number=seed_number) g, source, target = generator.generate() gt.graph_draw(g, edge_pen_width=gt.prop_to_size(g.ep.cap, mi=1, ma=5, power=1), output="cf/cf_capacities.pdf", vertex_text=g.vertex_index, edge_text=g.ep.cap) # source = g.vertex(0) # target = g.vertex(3) solver = Goldberg(g) solution = solver.get_max_flow(source, target) print("Il max flow trovato da Golberg è:", 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]) + ")"
from numpy.random import seed, random, random_integers from scipy.linalg import norm from scipy.stats import poisson from max_flow_residuals import Goldberg from max_flow_wave import GoldbergWave import numpy as np import math from generation.Triangulation import Triangulation # Number of nodes N = 5 # Number of edges M = 10 seed_number = 45 generator = Triangulation(N, directed=False, seed_number=seed_number) g, src, tgt = generator.generate() cap = g.ep.cap gt.graph_draw(g, edge_pen_width=gt.prop_to_size(cap, mi=1, ma=1, power=1), output="graph_to_solve.pdf", vertex_text=g.vertex_index, edge_text=g.ep.cap) # using GraphTool algorithm, find the solution to test and print the resulting graph 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")