def test_FI(self): print("---FI---") for i in range(0, COUNT+1): G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.fillIn_decomp(G) self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_max_independent_set(self): print("---maxIndependentSet---") for i in range(0, COUNT+1): G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.minDegree_decomp(G) S = tdlib.max_independent_set_with_treedecomposition(G, T)
def test_min_vertex_cover(self): print("---minVertexCover--") for i in range(0, COUNT+1): G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.minDegree_decomp(G) S = tdlib.min_vertex_cover_with_treedecomposition(G, T, True, True)
def test_boost_MD(self): print("---boost_MD---") for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) T, w = tdlib.boost_minDegree_decomp(G) self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_PP_FI_TM(self): print("---PP_FI_TM---") for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) T, w = tdlib.PP_FI_TM(G) self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_seperator_algorithm(self): print("---seperator_algorithm---") for i in range(0, COUNT + 1): G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.seperator_algorithm(G) self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_boost_MD(self): print("---boost_MD---") for i in range(0, COUNT + 1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) T, w = tdlib.boost_minDegree_decomp(G) self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_MSVS_trivial(self): print("---MSVS_trivial---") for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) T1, w1 = tdlib.trivial_decomposition(G) T2, w2 = tdlib.MSVS(G, T1) self.assertEqual(tdlib.is_valid_treedecomposition(G, T2), True)
def test_PP_FI_TM(self): print("---PP_FI_TM---") for i in range(0, COUNT + 1): G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.PP_FI_TM(G) self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_LB7(self): print("---LBPC_deltaC---") for i in range(0, COUNT+1): if base.skip(PREFIX, i, lambda x,y: x > 300 or y > 300): continue base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) tdlib.lower_bound(G, "LBPC_deltaC")
def test_min_vertex_cover(self): print("---minVertexCover--") for i in range(0, COUNT + 1): G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.minDegree_decomp(G) S = tdlib.min_vertex_cover_with_treedecomposition(G, T)
def test_max_independent_set(self): print("---maxIndependentSet---") for i in range(0, COUNT + 1): G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.minDegree_decomp(G) S = tdlib.max_independent_set_with_treedecomposition(G, T)
def test_PP(self): print("---PP---") for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) G_, B, lb = tdlib.preprocessing(G) if G.vertices() is []: self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_MSVS_trivial(self): print("---MSVS_trivial---") for i in range(0, COUNT + 1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) T1, w1 = tdlib.trivial_decomposition(G) T2, w2 = tdlib.MSVS(G, T1) self.assertEqual(tdlib.is_valid_treedecomposition(G, T2), True)
def test_PP(self): print("---PP---") for i in range(0, COUNT + 1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) G_, B, lb = tdlib.preprocessing(G) if G.vertices() is []: self.assertEqual(tdlib.is_valid_treedecomposition(G, T), True)
def test_LB7(self): print("---LBPC_deltaC---") for i in range(0, COUNT + 1): if base.skip(PREFIX, i, lambda x, y: x > 300 or y > 300): continue base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) tdlib.lower_bound(G, "LBPC_deltaC")
def test_conversion(self): print("---conversion---") for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) T1, w1 = tdlib.minDegree_decomp(G) O = tdlib.treedec_to_ordering(T1) T2, w2 = tdlib.ordering_to_treedec(G, O) self.assertEqual(w1, w2)
def test_conversion(self): print("---conversion---") for i in range(0, COUNT+1): G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) base.print_graph_name(PREFIX, i) T1, w1 = tdlib.minDegree_decomp(G) O = tdlib.treedec_to_ordering(T1) T2, w2 = tdlib.ordering_to_treedec(G, O) self.assertEqual(w1, w2)
def test_min_coloring(self): print("---minColoring--") for i in range(0, COUNT + 1): if i == 999: #huge graph continue G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) base.print_graph_name(PREFIX, i) T, w = tdlib.minDegree_decomp(G) S = tdlib.min_coloring_with_treedecomposition(G, T)
def test_long1(self): print("---generic search - FILL config---") for i in range(0, COUNT_NETWORKS+1): if base.skip(PREFIX_NETWORKS, i, lambda x,y: x > 100 or y > 2000): continue base.print_graph_name(PREFIX_NETWORKS, i) G = Graph(eval(PREFIX_NETWORKS+".V_"+str(i)), eval(PREFIX_NETWORKS+".E_"+str(i))) tdlib.generic_elimination_search_p17_jumper(G, MAX_NODES, MAX_ORDERINGS) print("")
def test_max_clique(self): print("---max_clique---") for i in range(0, COUNT + 1): if base.skip(PREFIX, i, lambda x, y: y > 2000): print("skip.. ") base.print_graph_name(PREFIX, i) continue base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) T, w = tdlib.minDegree_decomp(G) S = tdlib.max_clique_with_treedecomposition(G, T)
def test_long1(self): print("---generic search - PACE config---") for i in range(0, COUNT_DIMACS + 1): if base.skip(PREFIX_DIMACS, i, lambda x, y: x > 100 or y > 2000): continue base.print_graph_name(PREFIX_DIMACS, i) G = Graph(eval(PREFIX_DIMACS + ".V_" + str(i)), eval(PREFIX_DIMACS + ".E_" + str(i))) tdlib.generic_elimination_search_p17_jumper( G, MAX_NODES, MAX_ORDERINGS) print("")
def test_min_vertex_cover(self): print("---vertex_cover---") for i in range(0, COUNT + 1): if base.skip(PREFIX, i, lambda x, y: y > 2000): print("skip.. ") base.print_graph_name(PREFIX, i) continue base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) T, w = tdlib.minDegree_decomp(G) if w > 17: print("...tw > 17, skipping...") continue S = tdlib.min_vertex_cover_with_treedecomposition(G, T)
def test_min_dominating_set(self): print("---dominating_set---") for i in range(0, COUNT + 1): if i == 91: continue if base.skip(PREFIX, i, lambda x, y: y > 2000): continue base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) T, w = tdlib.minDegree_decomp(G) if w > 8: print("...tw > 8, skipping...") continue S = tdlib.min_dominating_set_with_treedecomposition(G, T)
def test_min_vertex_cover(self): print("---vertex_cover---") for i in range(0, COUNT+1): if i == 91: continue if base.skip(PREFIX, i, lambda x,y: y > 10000): continue base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) T, w = tdlib.minDegree_decomp(G) if w > 25: print("...tw > 25, skipping...") continue S = tdlib.min_vertex_cover_with_treedecomposition(G, T) print(str(S))
def test_max_clique(self): print("---max_clique---") max_vc = 0 avg_vc = 0.0 max_time = 0 avg_time = 0.0 passed = 0 for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) start = time.time() T, w = tdlib.minDegree_decomp(G) print("...width " + str(w)) if w > 30: print("......skip") continue S = tdlib.max_clique_with_treedecomposition(G, T) end = time.time() t = end-start max_vc = len(S) if len(S) > max_vc else max_vc avg_vc += len(S) max_time = t if t > max_time else max_time avg_time += t avg_vc /= (COUNT-passed) avg_time /= (COUNT-passed) print("max clique: " + str(max_vc)) print("avg clique: " + str(avg_vc)) print("max time: " + str(max_time)) print("avg time: " + str(avg_time))
def test_max_clique(self): print("---max_clique---") max_vc = 0 avg_vc = 0.0 max_time = 0 avg_time = 0.0 for n in [50,100,200,250,500]: for k in range(1, 16): for p in [.97, .95, .90, .80, .70]: for c in range(5): suffix = str(n) + '_' + str(k) + '_' + str(p).replace('.','') + '_' + str(c) base.print_graph_name(PREFIX, suffix) G = Graph(eval(PREFIX+".V_"+str(suffix)), eval(PREFIX+".E_"+str(suffix))) start = time.time() T, w = tdlib.minDegree_decomp(G) S = tdlib.max_clique_with_treedecomposition(G, T) end = time.time() t = end-start max_vc = len(S) if len(S) > max_vc else max_vc avg_vc += len(S) max_time = t if t > max_time else max_time avg_time += t avg_vc /= COUNT avg_time /= COUNT print("max clique: " + str(max_vc)) print("avg clique: " + str(avg_vc)) print("max time: " + str(max_time)) print("avg time: " + str(avg_time))
def test_min_vertex_cover(self): print("---vertex_cover---") max_n = 0 avg_n = 0.0 max_m = 0 avg_m = 0.0 max_vc = 0 avg_vc = 0.0 max_tw = 0 avg_tw = 0.0 max_time = 0 avg_time = 0.0 Ns = list() Ms = list() VCs = list() TWs = list() TIMEs = list() for i in range(0, COUNT + 1): #for i in range(1224, 1752+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX + ".V_" + str(i)), eval(PREFIX + ".E_" + str(i))) start = time.time() #T, w = tdlib.minDegree_decomp(G) T, w = tdlib.PP_FI_TM(G) s, S = tdlib.min_vertex_cover_with_treedecomposition2(G, T, False) end = time.time() t = end - start max_n = len(G.vertices()) if len(G.vertices()) > max_n else max_n avg_n += len(G.vertices()) Ns.append(len(G.vertices())) max_m = len(G.edges()) if len(G.edges()) > max_m else max_m avg_m += len(G.edges()) Ms.append(len(G.edges())) max_vc = s if s > max_vc else max_vc avg_vc += s VCs.append(s) max_tw = w if w > max_tw else max_tw avg_tw += w TWs.append(w) max_time = t if t > max_time else max_time avg_time += t TIMEs.append(t) #COUNT = 1752-1224 avg_n /= COUNT avg_m /= COUNT avg_vc /= COUNT avg_tw /= COUNT avg_time /= COUNT med_n = median(Ns) med_m = median(Ms) med_vc = median(VCs) med_tw = median(TWs) med_time = median(TIMEs) print("avg n: " + str(avg_n)) print("med n: " + str(med_n)) print("max n: " + str(max_n)) print("") print("avg m: " + str(avg_m)) print("med m: " + str(med_m)) print("max m: " + str(max_m)) print("") print("avg tw: " + str(avg_tw)) print("med tw: " + str(med_tw)) print("max tw: " + str(max_tw)) print("") print("avg vc: " + str(avg_vc)) print("med vc: " + str(med_vc)) print("max vc: " + str(max_vc)) print("") print("avg time: " + str(avg_time)) print("med time: " + str(med_time)) print("max time: " + str(max_time))
def test_LB3(self): print("---deltaC_least_c---") for i in range(0, COUNT+1): G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) base.print_graph_name(PREFIX, i) tdlib.lower_bound(G, "deltaC_least_c")
def test_LB4(self): print("---LBN_deltaC---") for i in range(0, COUNT+1): base.print_graph_name(PREFIX, i) G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) tdlib.lower_bound(G, "LBN_deltaC")
def test_LB4(self): print("---LBN_deltaC---") for i in range(0, COUNT+1): G = Graph(eval(PREFIX+".V_"+str(i)), eval(PREFIX+".E_"+str(i))) base.print_graph_name(PREFIX, i) tdlib.lower_bound(G, "LBN_deltaC")