Safe Haskell | Safe-Infered |
---|

Algorithms for factor elimination

- moralGraph :: (NamedGraph g, FoldableWithVertex g, DirectedGraph g) => g () b -> UndirectedSG () b
- nodeComparisonForTriangulation :: (UndirectedGraph g, Factor f) => g a f -> Vertex -> Vertex -> Ordering
- numberOfAddedEdges :: UndirectedGraph g => g a b -> Vertex -> Int
- weight :: (UndirectedGraph g, Factor f) => g a f -> Vertex -> Int
- weightedEdges :: (UndirectedGraph g, Factor f) => g a f -> Vertex -> Int
- triangulate :: Graph g => (Vertex -> Vertex -> Ordering) -> g () b -> ([VertexCluster], g () b)
- createClusterGraph :: (UndirectedGraph g, Factor f, Graph g') => g' e f -> [VertexCluster] -> g Int Cluster
- data Cluster
- createJunctionTree :: (DirectedGraph g, FoldableWithVertex g, NamedGraph g, Factor f, Show f) => (UndirectedSG () f -> Vertex -> Vertex -> Ordering) -> BayesianNetwork g f -> JunctionTree f
- createUninitializedJunctionTree :: (DirectedGraph g, FoldableWithVertex g, NamedGraph g, Factor f) => (UndirectedSG () f -> Vertex -> Vertex -> Ordering) -> g () f -> JunctionTree f
- type JunctionTree f = JTree Cluster f
- collect :: (Ord c, Message a c) => JTree c a -> JTree c a
- distribute :: (Ord c, Message a c) => JTree c a -> JTree c a
- posterior :: Factor f => JunctionTree f -> DV -> Maybe f
- changeEvidence :: (IsCluster c, Ord c, Factor f, Message f c) => [DVI Int] -> JTree c f -> JTree c f
- junctionTreeProperty_prop :: DirectedSG () CPT -> Property
- data VertexCluster
- junctionTreeProperty :: JTree Cluster CPT -> [Cluster] -> Cluster -> Bool
- maximumSpanningTree :: (UndirectedGraph g, IsCluster c, Factor f, Ord c) => g Int c -> JTree c f
- fromVertexCluster :: VertexCluster -> Set Vertex

# Moral graph

moralGraph :: (NamedGraph g, FoldableWithVertex g, DirectedGraph g) => g () b -> UndirectedSG () bSource

For the junction tree construction, only the vertices are needed during the intermediate steps. So, the moral graph is returned without any vertex data.

# Triangulation

nodeComparisonForTriangulation :: (UndirectedGraph g, Factor f) => g a f -> Vertex -> Vertex -> OrderingSource

Node selection comparison function used for triangulating the graph

numberOfAddedEdges :: UndirectedGraph g => g a b -> Vertex -> IntSource

Number of edges added when connecting all neighbors

weightedEdges :: (UndirectedGraph g, Factor f) => g a f -> Vertex -> IntSource

:: Graph g | |

=> (Vertex -> Vertex -> Ordering) | Criterion function for triangulation |

-> g () b | |

-> ([VertexCluster], g () b) | Returns the clusters and the triangulated graph |

Triangulate a graph using a cost function The result is the triangulated graph and the list of clusters which may not be maximal.

# Junction tree

createClusterGraph :: (UndirectedGraph g, Factor f, Graph g') => g' e f -> [VertexCluster] -> g Int ClusterSource

Create the cluster graph

Cluster of discrete variables.
Discrete variables instead of vertices are needed because the
factor are using `DV`

and we need to find
which factors must be contained in a given cluster.

:: (DirectedGraph g, FoldableWithVertex g, NamedGraph g, Factor f, Show f) | |

=> (UndirectedSG () f -> Vertex -> Vertex -> Ordering) | Weight function on the moral graph |

-> BayesianNetwork g f | Input directed graph |

-> JunctionTree f | Junction tree |

Create a function tree

createUninitializedJunctionTreeSource

:: (DirectedGraph g, FoldableWithVertex g, NamedGraph g, Factor f) | |

=> (UndirectedSG () f -> Vertex -> Vertex -> Ordering) | Weight function on the moral graph |

-> g () f | Input directed graph |

-> JunctionTree f | Junction tree |

Create a junction tree with only the clusters and no factors

type JunctionTree f = JTree Cluster fSource

# Shenoy-Shafer message passing

collect :: (Ord c, Message a c) => JTree c a -> JTree c aSource

Collect message taking into account that the tree depth may be different for different leaves.

distribute :: (Ord c, Message a c) => JTree c a -> JTree c aSource

posterior :: Factor f => JunctionTree f -> DV -> Maybe fSource

Compute the marginal posterior (if some evidence is set on the junction tree) otherwise compute just the marginal prior.

# Evidence

Change evidence in the network

# Test

data VertexCluster Source

A cluster containing only the vertices and not yet the factors

# For debug

maximumSpanningTree :: (UndirectedGraph g, IsCluster c, Factor f, Ord c) => g Int c -> JTree c fSource

Implementing the Prim's algorithm for minimum spanning tree