| 
									
										
										
										
											2009-10-29 13:39:13 +08:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * SymbolicFactorGraph.h | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *  Created on: Oct 29, 2009 | 
					
						
							|  |  |  |  *      Author: Frank Dellaert | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-12 15:16:31 +08:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2009-10-29 13:39:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <list>
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | #include <gtsam/base/types.h>
 | 
					
						
							| 
									
										
										
										
											2010-08-20 01:23:19 +08:00
										 |  |  | #include <gtsam/inference/FactorGraph.h>
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | #include <gtsam/inference/Factor-inl.h>
 | 
					
						
							|  |  |  | #include <gtsam/inference/BayesNet.h>
 | 
					
						
							|  |  |  | #include <gtsam/inference/Conditional.h>
 | 
					
						
							| 
									
										
										
										
											2009-10-29 13:39:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | typedef BayesNet<Conditional> SymbolicBayesNet; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** Symbolic Factor Graph */ | 
					
						
							|  |  |  | class SymbolicFactorGraph: public FactorGraph<Factor> { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   typedef SymbolicBayesNet bayesnet_type; | 
					
						
							|  |  |  |   typedef VariableIndex<> variableindex_type; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Construct empty factor graph */ | 
					
						
							|  |  |  |   SymbolicFactorGraph() {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Construct from a BayesNet */ | 
					
						
							|  |  |  |   SymbolicFactorGraph(const BayesNet<Conditional>& bayesNet); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** Push back unary factor */ | 
					
						
							| 
									
										
										
										
											2010-10-12 05:14:35 +08:00
										 |  |  |   void push_factor(Index key); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /** Push back binary factor */ | 
					
						
							| 
									
										
										
										
											2010-10-12 05:14:35 +08:00
										 |  |  |   void push_factor(Index key1, Index key2); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /** Push back ternary factor */ | 
					
						
							| 
									
										
										
										
											2010-10-12 05:14:35 +08:00
										 |  |  |   void push_factor(Index key1, Index key2, Index key3); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /** Push back 4-way factor */ | 
					
						
							| 
									
										
										
										
											2010-10-12 05:14:35 +08:00
										 |  |  |   void push_factor(Index key1, Index key2, Index key3, Index key4); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /**
 | 
					
						
							|  |  |  |    * Construct from a factor graph of any type | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   template<class Factor> | 
					
						
							|  |  |  |   SymbolicFactorGraph(const FactorGraph<Factor>& fg); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /**
 | 
					
						
							|  |  |  |    * Return the set of variables involved in the factors (computes a set | 
					
						
							|  |  |  |    * union). | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2010-10-12 05:14:35 +08:00
										 |  |  |   std::set<Index, std::less<Index>, boost::fast_pool_allocator<Index> > keys() const; | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /**
 | 
					
						
							|  |  |  |    * Same as eliminate in the SymbolicFactorGraph case | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   //		SymbolicBayesNet eliminateFrontals(const Ordering& ordering);
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Template function implementation */ | 
					
						
							|  |  |  | template<class FactorType> | 
					
						
							|  |  |  | SymbolicFactorGraph::SymbolicFactorGraph(const FactorGraph<FactorType>& fg) { | 
					
						
							|  |  |  |   for (size_t i = 0; i < fg.size(); i++) { | 
					
						
							|  |  |  |     if(fg[i]) { | 
					
						
							|  |  |  |       Factor::shared_ptr factor(new Factor(*fg[i])); | 
					
						
							|  |  |  |       push_back(factor); | 
					
						
							|  |  |  |     } else | 
					
						
							|  |  |  |       push_back(Factor::shared_ptr()); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2009-10-29 13:39:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-12 15:16:31 +08:00
										 |  |  | } // namespace gtsam
 |