Skip to content

Commit 8d622db

Browse files
authored
Merge pull request #55 from OptimalBranching/xz/ipmis
add ip solver for mis problem
2 parents f536fd7 + f79d58d commit 8d622db

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

lib/OptimalBranchingMIS/src/OptimalBranchingMIS.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export TensorNetworkSolver
1616
export NumOfVertices, D3Measure
1717

1818
export mis_size, mis_branch_count
19+
export ip_mis
1920
export counting_mis1, counting_mis2, counting_xiao2013
2021

2122
include("types.jl")

lib/OptimalBranchingMIS/src/algorithms/algorithms.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ include("mis1.jl")
3030
include("mis2.jl")
3131
include("xiao2013.jl")
3232
include("xiao2013_utils.jl")
33-
33+
include("ip.jl")
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using OptimalBranchingCore.JuMP, OptimalBranchingCore.HiGHS
2+
3+
function ip_mis(g::AbstractGraph; optimizer=HiGHS.Optimizer, verbose::Bool=false)
4+
model = Model(optimizer)
5+
!verbose && set_silent(model)
6+
n = nv(g)
7+
@variable(model, 0 <= x[i = 1:n] <= 1, Int)
8+
@objective(model, Max, sum(x))
9+
for e in edges(g)
10+
@constraint(model, x[src(e)] + x[dst(e)] <= 1)
11+
end
12+
optimize!(model)
13+
@assert is_solved_and_feasible(model)
14+
return Int(round(sum(value.(x))))
15+
end

lib/OptimalBranchingMIS/test/mis.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using EliminateGraphs, EliminateGraphs.Graphs
22
using Test, Random
33

4+
using OptimalBranchingMIS
45
using OptimalBranchingMIS: find_children, unconfined_vertices, is_line_graph, first_twin, twin_filter!, short_funnel_filter!, desk_filter!, effective_vertex, all_three_funnel, all_four_funnel, rho, optimal_four_cycle, optimal_vertex, has_fine_structure, count_o_path, closed_neighbors, is_complete_graph
56

67
function graph_from_edges(edges)
@@ -168,6 +169,7 @@ end
168169
mis_size_mis1 = counting_mis1(g).size
169170
mis_size_mis2 = counting_mis2(g).size
170171
mis_size_xiao = counting_xiao2013(g).size
171-
@test mis_size_standard == mis_size_mis1 == mis_size_mis2 == mis_size_xiao
172+
mis_size_ip = ip_mis(g)
173+
@test mis_size_standard == mis_size_mis1 == mis_size_mis2 == mis_size_xiao == mis_size_ip
172174
end
173175
end

0 commit comments

Comments
 (0)