Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/models/BMF.jl
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ The Boolean Matrix Factorization (BMF) problem is defined on a binary matrix A i
struct BinaryMatrixFactorization<: AbstractProblem
A::BitMatrix
k::Int
function BinaryMatrixFactorization(A::BitMatrix, k::Int) where K
function BinaryMatrixFactorization(A::BitMatrix, k::Int)
new(A, k)
end
end
Expand Down
3 changes: 2 additions & 1 deletion src/models/BicliqueCover.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
# Variables Interface
# each vertex is assigned to a biclique, with k bicliques, variables(c::BicliqueCover) = fill(1,c.k * nv(c.graph))
num_variables(c::BicliqueCover) = nv(c.graph) * c.k
num_flavors(c::BicliqueCover) = 2
num_flavors(::Type{BicliqueCover{Int64}}) = 2

Check warning on line 38 in src/models/BicliqueCover.jl

View check run for this annotation

Codecov / codecov/patch

src/models/BicliqueCover.jl#L38

Added line #L38 was not covered by tests

# constraints interface
function constraints(c::BicliqueCover)
Expand All @@ -46,6 +46,7 @@
end
# solution_size function for BicliqueCover, the solution size is the sum of the weights of the bicliques
function solution_size_multiple(c::BicliqueCover, configs)
print(configs)
@assert all(length(config) <= c.k for config in configs)
return map(configs) do config
return SolutionSize(sum(i -> count(k -> k ==1, i),config), is_biclique_cover(c,config))
Expand Down
30 changes: 30 additions & 0 deletions src/rules/BMF_BicliqueCover.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""
$TYPEDEF

The reduction result from BinaryMatrixFactorization to BicliqueCover.

### Fields
- `bicliquecover`: The BicliqueCover problem.
- `k`: The number of bicliques.
"""
struct BMF_BicliqueCover{Int64} <: AbstractReductionResult
bicliquecover::BicliqueCover{Int64}
k::Int64
end
Base.:(==)(a::BMF_BicliqueCover, b::BMF_BicliqueCover) = a.bicliquecover == b.bicliquecover && a.k == b.k

Check warning on line 14 in src/rules/BMF_BicliqueCover.jl

View check run for this annotation

Codecov / codecov/patch

src/rules/BMF_BicliqueCover.jl#L14

Added line #L14 was not covered by tests
target_problem(res::BMF_BicliqueCover) = res.bicliquecover

function reduceto(::Type{BicliqueCover}, bmf::BinaryMatrixFactorization)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
function reduceto(::Type{BicliqueCover}, bmf::BinaryMatrixFactorization)
function reduceto(::Type{<:BicliqueCover}, bmf::BinaryMatrixFactorization)

k = bmf.k
A = Int.(bmf.A)
return BMF_BicliqueCover(ProblemReductions.biclique_cover_from_matrix(A, k), k)
end

# Not implemented
function extract_solution(res::BMF_BicliqueCover, solution::Vector{Vector{Int64}})
return solution

Check warning on line 25 in src/rules/BMF_BicliqueCover.jl

View check run for this annotation

Codecov / codecov/patch

src/rules/BMF_BicliqueCover.jl#L24-L25

Added lines #L24 - L25 were not covered by tests
end

function extract_multiple_solutions(res::BMF_BicliqueCover, solution_set)
return unique(extract_solution.(Ref(res), solution_set))

Check warning on line 29 in src/rules/BMF_BicliqueCover.jl

View check run for this annotation

Codecov / codecov/patch

src/rules/BMF_BicliqueCover.jl#L28-L29

Added lines #L28 - L29 were not covered by tests
end
3 changes: 2 additions & 1 deletion src/rules/rules.jl
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,5 @@ include("sat_dominatingset.jl")
include("independentset_setpacking.jl")
include("circuit_sat.jl")
include("vertexcovering_independentset.jl")
include("matching_setpacking.jl")
include("matching_setpacking.jl")
include("BMF_BicliqueCover.jl")
13 changes: 13 additions & 0 deletions test/rules/BMF_BicliqueCover.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Test, ProblemReductions, Graphs

@testset "BMF_BicliqueCover" begin
A = [1 0 ; 1 1]
A = BitMatrix(A)
bmf1 = BinaryMatrixFactorization(A, 2)
bc1 = ProblemReductions.biclique_cover_from_matrix(Int.(A), 2)
res = reduceto(BicliqueCover, bmf1)
@test res.k == 2
@test res.bicliquecover == bc1
@test res.bicliquecover.part1 == [i for i in 1:size(A,1)]
@test target_problem(res) == bc1
end
4 changes: 4 additions & 0 deletions test/rules/rules.jl
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ end
include("matching_setpacking.jl")
end

@testset "BMF_BicliqueCover" begin
include("BMF_BicliqueCover.jl")
end

@testset "rules" begin
circuit = CircuitSAT(@circuit begin
x = a ∨ ¬b
Expand Down
Loading