{- | A comparison of variable elimination and factor elimination on a simple graph. It is a non regression test. -} module Bayes.Test.CompareEliminations( compareVariableFactor ) where import Test.HUnit.Lang(assertFailure) import Bayes.Examples(example) import Bayes.Factor import Bayes import Bayes.VariableElimination import Bayes.FactorElimination compareFactors :: String -> Maybe CPT -> CPT -> IO () compareFactors s Nothing _ = assertFailure s compareFactors s (Just a) b = if a `isomorphicFactor` b then return () else assertFailure s -- | Compare that variable elemination and factor elimination are giving -- similar results on a simple example compareVariableFactor :: IO () compareVariableFactor = do let ([winter,sprinkler,rain,wet,road],exampleG) = example jt = createJunctionTree nodeComparisonForTriangulation exampleG compareFactors "PRIOR FOR RAIN" (posterior jt rain) (priorMarginal exampleG [winter,sprinkler,wet,road] [rain]) let jt1 = changeEvidence [wet =: True] jt jt2 = changeEvidence [wet =: True, sprinkler =: True] jt1 compareFactors "POSTERIOR RAIN FOR WET" (posterior jt1 rain) (posteriorMarginal exampleG [winter,sprinkler,wet,road] [rain] [wet =: True]) compareFactors "POSTERIOR RAIN FOR WET" (posterior jt2 rain) (posteriorMarginal exampleG [winter,sprinkler,wet,road] [rain] [wet =: True, sprinkler =: True]) compareFactors "PRIOR FOR WINTER" (posterior jt winter) (priorMarginal exampleG [sprinkler,wet,road,rain] [winter]) compareFactors "PRIOR FOR SPRINKLER" (posterior jt sprinkler) (priorMarginal exampleG [winter,wet,road,rain] [sprinkler]) compareFactors "PRIOR FOR WET" (posterior jt wet) (priorMarginal exampleG [winter,sprinkler,road,rain] [wet]) compareFactors "PRIOR FOR ROAD" (posterior jt road) (priorMarginal exampleG [winter,sprinkler,wet,rain] [road])