example_sprinkler_gibbs.cpp
This example shows how to use the Gibbs class.
#include <dai/factorgraph.h>
#include <dai/gibbs.h>
#include <dai/properties.h>
#include <iostream>
#include <fstream>
using namespace std;
using namespace dai;
int main() {
FactorGraph SprinklerNetwork;
SprinklerNetwork.ReadFromFile( "sprinkler.fg" );
cout << "Sprinkler network read from sprinkler.fg" << endl;
cout << SprinklerNetwork.nrVars() << " variables" << endl;
cout << SprinklerNetwork.nrFactors() << " factors" << endl;
PropertySet gibbsProps;
gibbsProps.set("iters", size_t(100));
gibbsProps.set("burnin", size_t(0));
gibbsProps.set("verbose", size_t(0));
Gibbs gibbsSampler( SprinklerNetwork, gibbsProps );
ofstream outfile;
outfile.open( "sprinkler.tab" );
if( !outfile.is_open() )
throw "Cannot write to file!";
for( size_t i = 0; i < SprinklerNetwork.nrVars(); i++ )
outfile << (i == 0 ? "" : "\t") << SprinklerNetwork.var(i).label();
outfile << endl << endl;
size_t nrSamples = 1000;
std::vector<size_t> state;
for( size_t t = 0; t < nrSamples; t++ ) {
gibbsSampler.run();
state = gibbsSampler.state();
for( size_t i = 0; i < state.size(); i++ )
outfile << (i == 0 ? "" : "\t") << state[i];
outfile << endl;
}
cout << nrSamples << " samples written to sprinkler.tab" << endl;
outfile.close();
return 0;
}