content: 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);
  }
  