package aima.core.probability.bayes; import java.util.List; import aima.core.probability.RandomVariable; /** * Artificial Intelligence A Modern Approach (3rd Edition): page 510.<br> * <br> * Bayesian Networks are used to represent the dependencies among Random * Variables. They can represent essentially any full joint probability * distribution and in many cases can do so very concisely. A Bayesian network * is a directed graph in which each node is annotated with quantitative * probability information. The full specification is as follows:<br> * <br> * 1. Each node corresponds to a random variable, which may be discrete or * continuous.<br> * <br> * 2. A set of directed links or arrows connects pairs of nodes. If there is an * arrow from node X to node Y, X is said to be a parent of Y. The graph has no * directed cycles (and hence is a directed acyclic graph, or <b>DAG</b>.<br> * <br> * 3. Each node X<sub>i</sub> has a conditional probability distribution * P(X<sub>i</sub> | Parents(X<sub>i</sub>)) that quantifies the effect of the * parents on the node.<br> * <br> * The topology of the network - the set of nodes and links - specifies the * conditional independence relationships that hold in the domain.<br> * <br> * A network with both discrete and continuous variables is called a <b>hybrid * Bayesian network</b>.<br> * <br> * <b>Note(1)</b>: "Bayesian Network" is the most common name used, but there * are many synonyms, including "belief network", "probabilistic network", * "causal network", and "knowledge map". * * @author Ciaran O'Reilly */ public interface BayesianNetwork { /** * @return a list of the Random Variables, in topological order, contained * within the network. */ List<RandomVariable> getVariablesInTopologicalOrder(); /** * * @param rv * the RandomVariable whose corresponding Node is to be * retrieved. * @return the Node associated with the random variable in this Bayesian * Network. */ Node getNode(RandomVariable rv); }