⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initinference.cpp

📁 gibbs
💻 CPP
字号:
#include "InferenceMethod.h"#include "GibbsSampler.h"#include "DummyInference.h"#include "BeliefPropagation.h"#include "NaiveBayesInference.h"#include <iostream>#include <fstream>#include "VarSchema.h"InferenceMethod* initDummyInference(int argc, char* argv[], int minArg){    ifstream in(argv[minArg]);    if (!in) {        cout << "ERROR: could not open schema \"" << argv[minArg] << "\"\n";        exit(-1);    }    VarSchema schema;    in >> schema;    return new DummyInference(schema);}InferenceMethod* initGibbsSampler(int argc, char* argv[], int minArg){    FILE* inFile = fopen(argv[minArg], "r");    if (!inFile) {        cout << "ERROR: could not open model file \"" << argv[minArg] << "\"\n";        exit(-1);    }    BayesNet* model = new BayesNet();    loadModel(inFile, *model);    // Start out with reasonable defaults    int numChains = 10;    int burnInIters = 100;    int minIters = 1000;    double ratio = 1.1;    bool fixedIters = false;    // Adjust them as indicated by arguments    for (int i = minArg+1; i < argc; i++) {        if (argv[i][0] != '-') {            cout << "Skipping unknown parameter: " << argv[i] << endl;            continue;        }        switch (argv[i][1]) {            case 'c': numChains = atoi(argv[++i]); break;            case 'r': ratio = atof(argv[++i]); break;            case 'b': burnInIters = atoi(argv[++i]); break;            case 'm': minIters = atoi(argv[++i]); break;            case 'f': fixedIters = true; break;            default: cout << "Skipping unknown parameter: " << argv[i] << endl;        }    }        return new GibbsSampler(*model, numChains, ratio, burnInIters, minIters,            fixedIters);}InferenceMethod* initBeliefPropagation(int argc, char* argv[], int minArg){    FILE* inFile = fopen(argv[minArg], "r");    if (!inFile) {        cout << "ERROR: could not open model file \"" << argv[minArg] << "\"\n";        exit(1);    }    BayesNet model;    loadModel(inFile, model);    // Start out with reasonable defaults    double ratio = 1.1;    // Adjust them as indicated by arguments    for (int i = minArg+1; i < argc; i++) {        if (argv[i][0] != '-') {            cout << "Skipping unknown parameter: " << argv[i] << endl;            continue;        }        switch (argv[i][1]) {            case 'r': ratio = atof(argv[++i]); break;            default: cout << "Skipping unknown parameter: " << argv[i] << endl;        }    }        return new BeliefPropagation(model, ratio);}#include "../src/AbsVarAbstractionSet.h"InferenceMethod* initNaiveBayesInference(int argc, char* argv[], int minArg){    ifstream in(argv[minArg]);    if (!in) {        cout << "ERROR: could not open model file \"" << argv[minArg] << "\"\n";        exit(-1);    }    int modelType;    in >> modelType;    if (!in || modelType != 3) {        cout << "Invalid model file \"" << argv[minArg] << "\"\n";        exit(-1);    }    AbstractionSet* model = new AbsVarAbstractionSet;    in >> *model;    return new NaiveBayesInference(model);}InferenceMethod* initInferenceMethod(int argc, char* argv[], int minArg){    InferenceMethod* method = NULL;    switch(argv[minArg][1]) {        // Baseline "dummy" algorithm        case 'd': method = initDummyInference(argc, argv, minArg+1);                  break;        // Gibbs sampling        case 'g': method = initGibbsSampler(argc, argv, minArg+1);                  break;        // Belief propagation        case 'b': method = initBeliefPropagation(argc, argv, minArg+1);                  break;        // Naive Bayes        case 'n': method = initNaiveBayesInference(argc, argv, minArg+1);                  break;        default:  cout << "Unknown inference method \"" << argv[minArg] << "\"\n";                  exit(-1);                  break;    }    return method;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -