| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * ConstrainedChordalBayesNet.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Created on: Aug 11, 2009 | 
					
						
							|  |  |  |  *      Author: alexgc | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef CONSTRAINEDCHORDALBAYESNET_H_
 | 
					
						
							|  |  |  | #define CONSTRAINEDCHORDALBAYESNET_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "ChordalBayesNet.h"
 | 
					
						
							|  |  |  | #include "DeltaFunction.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ConstrainedChordalBayesNet : public ChordalBayesNet{ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							|  |  |  | 	std::map<std::string, DeltaFunction::shared_ptr> delta_nodes; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	typedef std::map<std::string, DeltaFunction::shared_ptr>::const_iterator const_delta_iterator; | 
					
						
							|  |  |  | 	typedef std::map<std::string, DeltaFunction::shared_ptr>::iterator delta_iterator; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	typedef boost::shared_ptr<ConstrainedChordalBayesNet> shared_ptr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Default Constructor | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	ConstrainedChordalBayesNet(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/**
 | 
					
						
							|  |  |  | 	 * Copies an existing ChordalBayesNet | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	ConstrainedChordalBayesNet(const ChordalBayesNet& cbn); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual ~ConstrainedChordalBayesNet(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** insert: use reverse topological sort (i.e. parents last) */ | 
					
						
							|  |  |  | 	void insert_df(const std::string& key, DeltaFunction::shared_ptr node); | 
					
						
							|  |  |  | 	void insert(const std::string& key, ConditionalGaussian::shared_ptr node); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** optimize the solution - just a wrapper on the existing optimize implementation */ | 
					
						
							|  |  |  | 	boost::shared_ptr<FGConfig> optimize(); | 
					
						
							|  |  |  | 	boost::shared_ptr<FGConfig> optimize(const boost::shared_ptr<FGConfig> &c); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** convert to a regular cbn - strips out the delta functions
 | 
					
						
							|  |  |  | 	 * TODO: make this check whether this is a safe conversion | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	ChordalBayesNet convert() const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** get delta functions by key */ | 
					
						
							| 
									
										
										
										
											2009-08-28 22:55:33 +08:00
										 |  |  | 	DeltaFunction::shared_ptr get_delta(const std::string& key) const | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		const_delta_iterator cg = delta_nodes.find(key); | 
					
						
							|  |  |  | 		assert( cg != delta_nodes.end() ); | 
					
						
							|  |  |  | 		return cg->second; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2009-08-22 06:23:24 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** check equality */ | 
					
						
							|  |  |  | 	bool equals(const ConstrainedChordalBayesNet& cbn) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** prints the contents */ | 
					
						
							|  |  |  | 	void print(const std::string& s="") const; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** check equality for testing */ | 
					
						
							|  |  |  | bool assert_equal(const ConstrainedChordalBayesNet& expected, const ConstrainedChordalBayesNet& actual, double tol=1e-9); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* CONSTRAINEDCHORDALBAYESNET_H_ */
 |