58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
		
		
			
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
|  | /**
 | ||
|  |  * @file    Factor.h | ||
|  |  * @brief   A simple factor class to use in a factor graph | ||
|  |  * @brief   factor | ||
|  |  * @author  Kai Ni | ||
|  |  * @author  Frank Dellaert | ||
|  |  */ | ||
|  | 
 | ||
|  | // \callgraph
 | ||
|  | 
 | ||
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include <list>
 | ||
|  | #include <boost/utility.hpp> // for noncopyable
 | ||
|  | #include "Testable.h"
 | ||
|  | #include "Key.h"
 | ||
|  | #include "SymbolMap.h"
 | ||
|  | 
 | ||
|  | namespace gtsam { | ||
|  | 
 | ||
|  |   /** 
 | ||
|  |    * A simple factor class to use in a factor graph. | ||
|  |    * | ||
|  |    * We make it noncopyable so we enforce the fact that factors are | ||
|  |    * kept in pointer containers. To be safe, you should make them | ||
|  |    * immutable, i.e., practicing functional programming. However, this | ||
|  |    * conflicts with efficiency as well, esp. in the case of incomplete | ||
|  |    * QR factorization. A solution is still being sought. | ||
|  |    *  | ||
|  |    * A Factor is templated on a Config, for example VectorConfig is a configuration of | ||
|  |    * labeled vectors. This way, we can have factors that might be defined on discrete | ||
|  |    * variables, continuous ones, or a combination of both. It is up to the config to  | ||
|  |    * provide the appropriate values at the appropriate time. | ||
|  |    */  | ||
|  |   template <class Config> | ||
|  |   class Factor : public Testable< Factor<Config> > | ||
|  |   { | ||
|  |   public: | ||
|  | 
 | ||
|  |     virtual ~Factor() {}; | ||
|  | 		 | ||
|  |     /**
 | ||
|  |      * negative log probability  | ||
|  |      */ | ||
|  |     virtual double error(const Config& c) const = 0; | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * return keys in preferred order | ||
|  |      */ | ||
|  |     virtual std::list<Symbol> keys() const = 0; | ||
|  | 		 | ||
|  |     /** 
 | ||
|  |      * @return the number of nodes the factor connects | ||
|  |      */ | ||
|  |     virtual std::size_t size() const = 0; | ||
|  |   }; | ||
|  | } |