index 84c62e4..74a7441 100644 (file)
@@ -1,5 +1,16 @@
+/*  This file is part of libDAI - http://www.libdai.org/
+ *
+ *  libDAI is licensed under the terms of the GNU General Public License version
+ *  2, or (at your option) any later version. libDAI is distributed without any
+ *  warranty. See the file COPYING for more details.
+ *
+ *  Copyright (C) 2008-2010  Joris Mooij  [joris dot mooij at libdai dot org]
+ */
+
+
#include <dai/factorgraph.h>
#include <iostream>
+#include <fstream>

using namespace std;
using namespace dai;
@@ -13,7 +24,7 @@ int main() {
Var S(1, 2);  // Define binary variable Sprinkler (with label 1)
Var R(2, 2);  // Define binary variable Rain (with label 2)
Var W(3, 2);  // Define binary variable Wetgrass (with label 3)
+
// Define probability distribution for C
Factor P_C( C );
P_C = 0.5;   // C = 0
@@ -54,9 +65,7 @@ int main() {

// Write factorgraph to a file
SprinklerNetwork.WriteToFile( "sprinkler.fg" );
-
-    // Reread the factorgraph from the file
+    cout << "Sprinkler network written to sprinkler.fg" << endl;

// Output some information about the factorgraph
cout << SprinklerNetwork.nrVars() << " variables" << endl;
@@ -64,16 +73,15 @@ int main() {

// Calculate joint probability of all four variables
Factor P;
-    for( size_t I = 0; I < SprinklerNetwork.nrFactors(); I++ ) {
+    for( size_t I = 0; I < SprinklerNetwork.nrFactors(); I++ )
P *= SprinklerNetwork.factor( I );
-    }
// P.normalize();  // Not necessary: a Bayesian network is already normalized by definition

// Calculate some probabilities
-    double denom = P.marginal( W );
+    Real denom = P.marginal( W );
cout << "P(W=1) = " << denom << endl;
cout << "P(S=1 | W=1) = " << P.marginal( VarSet( S, W ) ) / denom << endl;
cout << "P(R=1 | W=1) = " << P.marginal( VarSet( R, W ) ) / denom << endl;

-       return 0;
+    return 0;
}