ReactiveMP.jl
ReactiveMP.jl copied to clipboard
Multiple `RequireMarginals` with SP and `PointMass` constraint do not update/ask for missing rule
When using PointMass
constraints in SP, the behaviour is incorrect as in this issue on RxInfer
. Patching this using RequireMarginals
on both adjacent nodes also results in either not updating the variables (example below) or in asking for missing rules (notebook).
Example
using RxInfer, LinearAlgebra
# adds missing rule (solved in addons PR)
@rule Categorical(:out, Marginalisation) (m_p::Dirichlet,) = begin
return Categorical(normalize(mean(m_p), 1))
end
@model function model_issue()
y = datavar(Vector{Float64})
α ~ Dirichlet(0.01 .* ones(3))
z_old ~ Categorical(α) where { pipeline = RequireMarginal(out) }
z_new ~ Transition(z_old, diagm(ones(3))) where { pipeline = RequireMarginal(in) }
y ~ Transition(z_new, diagm(ones(3)))
return y, z_new, z_old, α
end
@constraints function constraints_issue()
q(z_old) :: PointMass
end
results_combination = inference(
model = model_issue(),
data = ( y = [1.0, 0.0, 0.0], ),
constraints = constraints_issue(),
returnvars = ( α=KeepLast(), ),
)