int main() {
const size_t numberOfVariables = 40;
const size_t numberOfLabels = 5;
Space space(numberOfVariables, numberOfLabels);
Model gm(space);
for(size_t v = 0; v < numberOfVariables; ++v) {
const size_t shape[] = {numberOfLabels};
for(size_t s = 0; s < numberOfLabels; ++s) {
f(s) = static_cast<double>(rand()) / RAND_MAX;
}
Model::FunctionIdentifier fid = gm.addFunction(f);
size_t variableIndices[] = {v};
gm.addFactor(fid, variableIndices, variableIndices + 1);
}
Model::FunctionIdentifier fid = gm.addFunction(f);
for(size_t v = 0; v < numberOfVariables - 1; ++v) {
size_t variableIndices[] = {v, v + 1};
gm.addFactor(fid, variableIndices, variableIndices + 2);
}
const size_t maxNumberOfIterations = numberOfVariables * 2;
const double convergenceBound = 1e-7;
const double damping = 0.0;
BeliefPropagation::Parameter parameter(maxNumberOfIterations, convergenceBound, damping);
BeliefPropagation bp(gm, parameter);
BeliefPropagation::VerboseVisitorType visitor;
bp.infer(visitor);
vector<size_t> labeling(numberOfVariables);
bp.arg(labeling);
}