This example illustrates how to manually construct a factor graph and write it to a file.
#include <iostream>
#include <fstream>
int main() {
P_C.set(0, 0.5);
P_C.set(1, 0.5);
P_S_given_C.set(0, 0.5);
P_S_given_C.set(1, 0.9);
P_S_given_C.set(2, 0.5);
P_S_given_C.set(3, 0.1);
P_R_given_C.set(0, 0.8);
P_R_given_C.set(1, 0.2);
P_R_given_C.set(2, 0.2);
P_R_given_C.set(3, 0.8);
P_W_given_S_R.set(0, 1.0);
P_W_given_S_R.set(1, 0.1);
P_W_given_S_R.set(2, 0.1);
P_W_given_S_R.set(3, 0.01);
P_W_given_S_R.set(4, 0.0);
P_W_given_S_R.set(5, 0.9);
P_W_given_S_R.set(6, 0.9);
P_W_given_S_R.set(7, 0.99);
vector<Factor> SprinklerFactors;
SprinklerFactors.push_back( P_C );
SprinklerFactors.push_back( P_R_given_C );
SprinklerFactors.push_back( P_S_given_C );
SprinklerFactors.push_back( P_W_given_S_R );
cout << "Sprinkler network written to sprinkler.fg" << endl;
cout << SprinklerNetwork.
nrVars() <<
" variables" << endl;
cout << SprinklerNetwork.
nrFactors() <<
" factors" << endl;
for(
size_t I = 0; I < SprinklerNetwork.
nrFactors(); I++ )
P *= SprinklerNetwork.
factor( I );
cout << "P(W=1) = " << denom << endl;
cout <<
"P(S=1 | W=1) = " << P.
marginal(
VarSet( S, W ) )[3] / denom << endl;
cout <<
"P(R=1 | W=1) = " << P.
marginal(
VarSet( R, W ) )[3] / denom << endl;
return 0;
}