Skip to content

Commit 010b415

Browse files
committed
fix MMAP constructor, add printing function for UAIInstance
1 parent 0295d2d commit 010b415

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

src/Core.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ struct Factor{T, N}
1212
vars::NTuple{N, Int64}
1313
vals::Array{T, N}
1414
end
15+
summary(f::Factor) = "Factor($(join(f.vars, ", "))), size = $(size(f.vals))"
1516

1617
"""
1718
$(TYPEDEF)
@@ -39,6 +40,20 @@ struct UAIInstance{ET, FT <: Factor{ET}}
3940
reference_solution::Union{Vector{Vector{ET}}, Vector{Int}, Float64}
4041
end
4142

43+
Base.show(io::IO, ::MIME"text/plain", uai::UAIInstance) = Base.show(io, uai)
44+
function Base.show(io::IO, uai::UAIInstance)
45+
println(io, "UAIInstance(nvars = $(uai.nvars), nclique = $(uai.nclique))")
46+
println(io, " variables :")
47+
for (var, card) in zip(1:uai.nvars, uai.cards)
48+
println(io, string_var(" $var of size $card", var uai.queryvars, Dict(zip(uai.obsvars, uai.obsvals))))
49+
end
50+
println(io, " factors : ")
51+
for f in uai.factors
52+
println(io, " $(summary(f))")
53+
end
54+
print(io, " reference_solution : $(uai.reference_solution)")
55+
end
56+
4257
"""
4358
$TYPEDSIGNATURES
4459

src/mmap.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ $(TYPEDSIGNATURES)
6060
"""
6161
function MMAPModel(instance::UAIInstance; marginalized, openvertices = (), optimizer = GreedyMethod(), simplifier = nothing)::MMAPModel
6262
return MMAPModel(
63-
1:(instance.nvars), instance.factors; marginalized, fixedvertices = Dict(zip(instance.obsvars, instance.obsvals)), optimizer, simplifier, openvertices
63+
1:(instance.nvars), instance.cards, instance.factors; marginalized, fixedvertices = Dict(zip(instance.obsvars, instance.obsvals)), optimizer, simplifier, openvertices
6464
)
6565
end
6666

6767
"""
6868
$(TYPEDSIGNATURES)
6969
"""
70-
function MMAPModel(vars::AbstractVector{LT}, factors::Vector{<:Factor{T}}; marginalized, openvertices = (),
70+
function MMAPModel(vars::AbstractVector{LT}, cards::AbstractVector{Int}, factors::Vector{<:Factor{T}}; marginalized, openvertices = (),
7171
fixedvertices = Dict{LT, Int}(),
7272
optimizer = GreedyMethod(), simplifier = nothing,
7373
marginalize_optimizer = GreedyMethod(), marginalize_simplifier = nothing
@@ -77,7 +77,7 @@ function MMAPModel(vars::AbstractVector{LT}, factors::Vector{<:Factor{T}}; margi
7777
if !isempty(setdiff(iy, vars))
7878
error("Marginalized variables should not contain any output variable.")
7979
end
80-
all_tensors = [[ones(T, 2) for _ in 1:length(vars)]..., getfield.(factors, :vals)...]
80+
all_tensors = [[ones(T, cards[i]) for i in 1:length(vars)]..., getfield.(factors, :vals)...]
8181
size_dict = OMEinsum.get_size_dict(all_ixs, all_tensors)
8282

8383
# detect clusters for marginalize variables

test/mmap.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,12 @@ end
4747
@test solution == instance.reference_solution
4848
end
4949
end
50+
51+
using Artifacts
52+
include("utils.jl")
53+
model_filepath, evidence_filepath, query_filepath, solution_filepath = get_instance_filepaths("Segmentation_11", "MMAP")
54+
instance = read_instance(model_filepath; evidence_filepath, query_filepath, solution_filepath)
55+
ref_sol = read_solution_file(solution_filepath)[2:end]
56+
57+
optimizer = TreeSA(ntrials=1, niters=2, βs=1:0.1:40)
58+
mmap = MMAPModel(instance; marginalized=setdiff(1:instance.nvars, instance.queryvars), optimizer)

0 commit comments

Comments
 (0)