diff --git a/Pipeline/scripts/create_vac_seq_from_sol.py b/Pipeline/scripts/create_vac_seq_from_sol.py index 023fd9ac3881c41fbe0d22b0ded83a0b012d046d..87da9d15c6cfd2d35278262af01f25daa13e9fd2 100644 --- a/Pipeline/scripts/create_vac_seq_from_sol.py +++ b/Pipeline/scripts/create_vac_seq_from_sol.py @@ -31,7 +31,7 @@ for edge in hog.edges(): edge_dict[key] = edge # create subgraph from edges chosen by ILP in order to find eulerian path to construct vaccine sequence -sub_hog = nx.DiGraph() +sub_hog = nx.MultiDiGraph() sub_hog.add_edges_from([edge_dict[e] for e in edge_dict if e in edges]) print(sub_hog) print(nx.is_eulerian(sub_hog)) diff --git a/Pipeline/scripts/vaccine_ilp_hog.py b/Pipeline/scripts/vaccine_ilp_hog.py index 689245651be3d5046e2590c9bd2d7c446aca1e92..ebb19fc3c198932d4728e6d4c9f31e144d7201bd 100644 --- a/Pipeline/scripts/vaccine_ilp_hog.py +++ b/Pipeline/scripts/vaccine_ilp_hog.py @@ -61,8 +61,8 @@ def solve_msks_hog(k, alleles, freq_vector, B_matrix, leaves, pep_count, graph, # create new model m = gp.Model('ivp_on_hog') - # set time limit to 10 hours - m.setParam('TimeLimit', 36000) + # set time limit to 48 hours + m.setParam('TimeLimit', 172800) m.setParam('Seed', 42) # m.setParam('PoolSearchMode', 2) # m.setParam('PoolSolutions', 5) @@ -78,7 +78,7 @@ def solve_msks_hog(k, alleles, freq_vector, B_matrix, leaves, pep_count, graph, log('Create edge variables') x_edges = gp.tupledict() for node_a, node_b in sorted(graph.edges): - x_edges[node_a, node_b] = m.addVar(vtype=GRB.BINARY, + x_edges[node_a, node_b] = m.addVar(vtype=GRB.INTEGER, name=graph.nodes[node_a]['string'] + '_' + graph.nodes[node_b]['string']) # the objective function is to maximize population coverage @@ -130,7 +130,8 @@ def solve_msks_hog(k, alleles, freq_vector, B_matrix, leaves, pep_count, graph, sol = m.getAttr('X', x_edges) for node_a, node_b in x_edges: # print('%s -> %s: %g' % (node_a, node_b, sol[node_a, node_b])) - if sol[node_a, node_b] >= 0.5: + traversals = round(sol[node_a, node_b]) + for i in range(traversals): if node_a in leaves.values(): chosen_pep.append(graph.nodes[node_a]['string']) if node_b in leaves.values():