OpenGM  2.3.x
Discrete Graphical Model Library
inference_types.cxx
#include <vector>
using namespace std; // 'using' is used only in example code
using namespace opengm;
int main() {
Model gm;
// Let us assume we have added some variables
// factors and functions to the graphical model gm
// ( see other exampels for building a model )
// ICM
{
// typedefs to a ICM minimizer and maximizer
typedef opengm::ICM<Model,Minimizer> OptimizerMinimizerType;
typedef opengm::ICM<Model,Maximizer> OptimizerMaximizerType;
typedef OptimizerMinimizerType::Parameter OptimizerMinimizerParameterType;
typedef OptimizerMaximizerType::Parameter OptimizerMaximizerParameterType;
// construct solver parameters (all parameters have default values)
//
vector<Model::LabelType> startingPoint(gm.numberOfVariables());
//fill starting point
// ....
// assume starting point is filled with labels
OptimizerMinimizerParameterType minimizerParameter(
OptimizerMinimizerType::SINGLE_VARIABLE, // flip a single variable (FACTOR for flip all var. a factor depends on)
startingPoint
);
// without starting point
OptimizerMaximizerParameterType maximizerParameter(
OptimizerMaximizerType::FACTOR, // flip a single variable (FACTOR for flip all var. a factor depends on)
startingPoint
);
// construct optimizers ( minimizer and maximizer )
OptimizerMinimizerType optimizerMinimizer(gm,minimizerParameter);
OptimizerMaximizerType optimizerMaximizer(gm,maximizerParameter);
// optimize the models ( minimizer and maximize )
optimizerMinimizer.infer();
optimizerMaximizer.infer();
// get the argmin / argmax
vector<Model::LabelType> argmin,argmax;
optimizerMinimizer.arg(argmin);
optimizerMaximizer.arg(argmax);
}
return 0;
}