📄 gibbssampler.h
字号:
#ifndef GIBBSSAMPLER_H#define GIBBSSAMPLER_H#include "InferenceMethod.h"#include "BayesNet.h"#include <vector>#include <list>#include "Distribution.h"class GibbsSampler : public InferenceMethod{private: const BayesNet& model; int numChains; double convergenceRatio; int burnInIters; int minIters; bool fixedIters; vector<Distribution> marginals; Distribution jointDistrib;public: GibbsSampler(const BayesNet& bn, int chains, double ratio, int burnIn, int min, bool fixed) : model(bn), numChains(chains), convergenceRatio(ratio), burnInIters(burnIn), minIters(min), fixedIters(fixed), marginals(model.getNumVars()) { /* NOP */ } virtual ~GibbsSampler() { /* NOP */ } virtual void runMarginalInference(const VarSet& evidence); virtual void runJointInference(const list<int>& queryVars, const VarSet& evidence); //virtual Distribution getMarginal(int i) const { return marginals[i]; } virtual double singleConditionalLogProb( const list<int>& queryVars, const VarSet& evidence, const VarSet& answer) const; virtual double getMarginalProb(int i, double value) const { return marginals[i][(int)value]; } virtual double getJointProb(const VarConfig& query) const { // TODO -- update this to handle continuous vars... return jointDistrib[query.getIndex()]; } virtual int getRange(int i) const { return model.getRange(i); }private: int configIndex(VarSet& allVars, list<int>& testIndices) const; void burnInChain(VarSet &chain, const VarSet& evidence, int burnInIters) const; unsigned int sampleFromDist(const vector<double>& dist) const; double testConvergence(vector<vector<double> > summaries, vector<vector<double> > sqSummaries, int n) const; double predictIters(vector<vector<double> > summaries, vector<vector<double> > sqSummaries, int n) const;};#endif // ndef GIBBSSAMPLER_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -