83 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#ifndef BP_BP_NODE_H
							 | 
						||
| 
								 | 
							
								#define BP_BP_NODE_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <vector>
							 | 
						||
| 
								 | 
							
								#include <map>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "BPSolver.h"
							 | 
						||
| 
								 | 
							
								#include "BayesNode.h"
							 | 
						||
| 
								 | 
							
								#include "Shared.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//class Edge;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using namespace std;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class BPNodeInfo
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    BPNodeInfo (int);
							 | 
						||
| 
								 | 
							
								    BPNodeInfo (BayesNode*);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ParamSet               getBeliefs (void) const;
							 | 
						||
| 
								 | 
							
								    double                 getPiValue (unsigned) const;
							 | 
						||
| 
								 | 
							
								    void                   setPiValue (unsigned, Param);
							 | 
						||
| 
								 | 
							
								    double                 getLambdaValue (unsigned) const;
							 | 
						||
| 
								 | 
							
								    void                   setLambdaValue (unsigned, Param);
							 | 
						||
| 
								 | 
							
								    double                 getBeliefChange (void);
							 | 
						||
| 
								 | 
							
								    bool                   receivedBottomInfluence (void) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ParamSet& getPiValues (void)              { return piVals_; }
							 | 
						||
| 
								 | 
							
								    ParamSet& getLambdaValues (void)          { return ldVals_; }
							 | 
						||
| 
								 | 
							
								    bool arePiValuesCalculated (void)         { return piValsCalc_; }
							 | 
						||
| 
								 | 
							
								    bool areLambdaValuesCalculated (void)     { return ldValsCalc_; }
							 | 
						||
| 
								 | 
							
								    void markPiValuesAsCalculated (void)      { piValsCalc_ = true; }
							 | 
						||
| 
								 | 
							
								    void markLambdaValuesAsCalculated (void)  { ldValsCalc_ = true; }
							 | 
						||
| 
								 | 
							
								    void incNumPiMsgsRcv (void)               { nPiMsgsRcv_ ++;     }
							 | 
						||
| 
								 | 
							
								    void incNumLambdaMsgsRcv (void)           { nLdMsgsRcv_ ++;     }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool receivedAllPiMessages (void)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return node_->getParents().size() == nPiMsgsRcv_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool receivedAllLambdaMessages (void)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      return node_->getChilds().size() == nLdMsgsRcv_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool readyToSendPiMsgTo (const BayesNode*) const ;
							 | 
						||
| 
								 | 
							
								    bool readyToSendLambdaMsgTo (const BayesNode*) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    CEdgeSet getIncomingParentLinks (void)  { return inParentLinks_;  }
							 | 
						||
| 
								 | 
							
								    CEdgeSet getIncomingChildLinks (void)   { return inChildLinks_;   }
							 | 
						||
| 
								 | 
							
								    CEdgeSet getOutcomingParentLinks (void) { return outParentLinks_; }
							 | 
						||
| 
								 | 
							
								    CEdgeSet getOutcomingChildLinks (void)  { return outChildLinks_;  }
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								    void addIncomingParentLink  (Edge* l)   { inParentLinks_.push_back (l);  }
							 | 
						||
| 
								 | 
							
								    void addIncomingChildLink   (Edge* l)   { inChildLinks_.push_back (l);   }
							 | 
						||
| 
								 | 
							
								    void addOutcomingParentLink (Edge* l)   { outParentLinks_.push_back (l); }
							 | 
						||
| 
								 | 
							
								    void addOutcomingChildLink  (Edge* l)   { outChildLinks_.push_back (l);  }
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    DISALLOW_COPY_AND_ASSIGN (BPNodeInfo);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ParamSet               piVals_;     // pi values
							 | 
						||
| 
								 | 
							
								    ParamSet               ldVals_;     // lambda values
							 | 
						||
| 
								 | 
							
								    ParamSet               oldBeliefs_;
							 | 
						||
| 
								 | 
							
								    unsigned               nPiMsgsRcv_;
							 | 
						||
| 
								 | 
							
								    unsigned               nLdMsgsRcv_;
							 | 
						||
| 
								 | 
							
								    bool                   piValsCalc_;
							 | 
						||
| 
								 | 
							
								    bool                   ldValsCalc_;
							 | 
						||
| 
								 | 
							
								    EdgeSet                inParentLinks_;
							 | 
						||
| 
								 | 
							
								    EdgeSet                inChildLinks_;
							 | 
						||
| 
								 | 
							
								    EdgeSet                outParentLinks_;
							 | 
						||
| 
								 | 
							
								    EdgeSet                outChildLinks_;
							 | 
						||
| 
								 | 
							
								    unsigned               ds_;
							 | 
						||
| 
								 | 
							
								    const BayesNode*       node_;
							 | 
						||
| 
								 | 
							
								    map<const BayesNode*, bool> pmsgs_;
							 | 
						||
| 
								 | 
							
								    map<const BayesNode*, bool> cmsgs_;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif //BP_BP_NODE_H
							 | 
						||
| 
								 | 
							
								
							 |