diff --git a/python/conda package/k_hop_dominating_set_gurobi/k_hop_dominating_set_gurobi/k_hop_dom_set.py b/python/conda package/k_hop_dominating_set_gurobi/k_hop_dominating_set_gurobi/k_hop_dom_set.py index a64a8933c443d646f7b51d38986a4dd1095bf3e9..5e12bc1a12e6deef15054e41905f8156818d9fd4 100755 --- a/python/conda package/k_hop_dominating_set_gurobi/k_hop_dominating_set_gurobi/k_hop_dom_set.py +++ b/python/conda package/k_hop_dominating_set_gurobi/k_hop_dominating_set_gurobi/k_hop_dom_set.py @@ -165,6 +165,44 @@ class ConnectedKHopDominatingSet(KHopDominatingSet): ds = {i for i,x_i in enumerate(self.m.getVars()) if x_i.x > 0.5} return ds + # Probably uncorrect version + # def elim_unconnectivity(model, where): + # if where == GRB.Callback.MIPSOL: + # vals = model.cbGetSolution(model._vars) + # ds = {i for i in model._vars.keys() if vals[i] > 0.5} + + # G_prime_prime = model._G.subgraph(ds) + # if(not nx.is_connected(G_prime_prime)): + # C = [c for c in nx.algorithms.components.connected_components(G_prime_prime)] + # for i in range(len(C)-1): + # C_i = C[i] + # for j in range(i+1, len(C)): + # C_j = C[j] + # h = next(iter(C_i)) + # l = next(iter(C_j)) + # min_ij_sep = ConnectedKHopDominatingSet.min_ij_separator(model._G, h, l, C_i) + # model.cbLazy(gp.quicksum(model._vars[s] for s in min_ij_sep) >= model._vars[h] + model._vars[l] - 1) + + # V1 + # def elim_unconnectivity(model, where): + # if where == GRB.Callback.MIPSOL: + # vals = model.cbGetSolution(model._vars) + # ds = {i for i in model._vars.keys() if vals[i] > 0.5} + + # G_prime_prime = model._G.subgraph(ds) + # if(not nx.is_connected(G_prime_prime)): + # C = [c for c in nx.algorithms.components.connected_components(G_prime_prime)] + # for i in range(len(C)): + # C_i = C[i] + # for j in range(len(C)): + # C_j = C[j] + # h = next(iter(C_i)) + # l = next(iter(C_j)) + # min_ij_sep = ConnectedKHopDominatingSet.min_ij_separator(model._G, h, l, C_i) + # if min_ij_sep: + # model.cbLazy(gp.quicksum(model._vars[s] for s in min_ij_sep) >= model._vars[h] + model._vars[l] - 1) + + # V2 def elim_unconnectivity(model, where): if where == GRB.Callback.MIPSOL: vals = model.cbGetSolution(model._vars) @@ -173,15 +211,16 @@ class ConnectedKHopDominatingSet(KHopDominatingSet): G_prime_prime = model._G.subgraph(ds) if(not nx.is_connected(G_prime_prime)): C = [c for c in nx.algorithms.components.connected_components(G_prime_prime)] - for i in range(len(C)-1): + for i in range(len(C)): C_i = C[i] - for j in range(i+1, len(C)): + for j in range(len(C)): C_j = C[j] h = next(iter(C_i)) l = next(iter(C_j)) min_ij_sep = ConnectedKHopDominatingSet.min_ij_separator(model._G, h, l, C_i) - model.cbLazy(gp.quicksum(model._vars[s] for s in min_ij_sep) >= model._vars[h] + model._vars[l] - 1) - + if min_ij_sep: + for w in C_i: + model.cbLazy(gp.quicksum(model._vars[s] for s in min_ij_sep) >= model._vars[w] + model._vars[l] - 1) class RootedConnectecKHopDominatingSet(ConnectedKHopDominatingSet): @@ -192,10 +231,10 @@ class RootedConnectecKHopDominatingSet(ConnectedKHopDominatingSet): self.m.addConstr(self.nodes[root] >= 1) # self.add_all_combinations_root_separators() - print("neighborhood separators:") - self.add_all_neighborhood_root_separators() - print("single node separators:") - self.add_single_root_separators() + # print("neighborhood separators:") + # self.add_all_neighborhood_root_separators() + # print("single node separators:") + # self.add_single_root_separators() def add_single_root_separators(self): number_of_found_separators = 0