beliefpropagation.h

来自「gibbs」· C头文件 代码 · 共 70 行

H
70
字号
#ifndef BELIEFPROPAGATION_H#define BELIEFPROPAGATION_H#include "InferenceMethod.h"#include "MarkovNet.h"#include "BayesNet.h"class BeliefPropagation : public InferenceMethod{private:    const BayesNet& bnet;    MarkovNet model;    double convergenceThreshold;    double damping;public:    // Simple constructor    BeliefPropagation(const BayesNet& bn, double ratio)         : bnet(bn), model(bn), convergenceThreshold(ratio), damping(0.0)      { /* NOP */ }    virtual ~BeliefPropagation() { /* NOP */ }    virtual void runMarginalInference(const VarSet& evidence)    {        // Reset network        model.resetAllNodes();        model.resetAllMessages();        // Fix evidence variables        for (int i = 0; i < evidence.getNumVars(); i++) {            if (evidence.isTested(i)) {                // All network variables must be discrete.                model.fixNodeValue(i, (int)evidence[i]);            }        }        // Run belief propagation to convergence        model.runBP(convergenceThreshold, damping);    }    virtual double singleConditionalLogProb( const list<int>& queryVars,        const VarSet& evidence, const VarSet& answer) const { return 0; }#if 0    virtual Distribution getMarginal(int i) const {        return model.getMarginal(i);    }#endif    virtual double getMarginalProb(int i, double value) const {        Distribution m = model.getMarginal(i);        return m[(int)value];    }    virtual int getRange(int i) const { return bnet.getRange(i); }    virtual void runJointInference(const list<int>& queryVars,            const VarSet& evidence) {         cout << "ERROR: joint inference not supported "            << "using BeliefPropagation!\n";      }    virtual double getJointProb(const VarConfig& query) const {        return 0;    }};#endif // ndef BELIEFPROPAGATION_H

⌨️ 快捷键说明

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