make evaluate a common base method
							parent
							
								
									3add91d399
								
							
						
					
					
						commit
						88b36da602
					
				|  | @ -130,14 +130,9 @@ namespace gtsam { | |||
|     /// @name Standard Interface
 | ||||
|     /// @{
 | ||||
| 
 | ||||
|     /// Calculate probability for given values `x`, 
 | ||||
|     /// Calculate probability for given values, 
 | ||||
|     /// is just look up in AlgebraicDecisionTree.
 | ||||
|     double evaluate(const Assignment<Key>& values) const  { | ||||
|       return ADT::operator()(values); | ||||
|     } | ||||
| 
 | ||||
|     /// Evaluate probability distribution, sugar.
 | ||||
|     double operator()(const DiscreteValues& values) const override { | ||||
|     double operator()(const Assignment<Key>& values) const override { | ||||
|       return ADT::operator()(values); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -92,8 +92,21 @@ class GTSAM_EXPORT DiscreteFactor : public Factor { | |||
| 
 | ||||
|   size_t cardinality(Key j) const { return cardinalities_.at(j); } | ||||
| 
 | ||||
|   /**
 | ||||
|    * @brief Calculate probability for given values. | ||||
|    * Calls specialized evaluation under the hood. | ||||
|    * | ||||
|    * Note: Uses Assignment<Key> as it is the base class of DiscreteValues. | ||||
|    * | ||||
|    * @param values Discrete assignment. | ||||
|    * @return double | ||||
|    */ | ||||
|   double evaluate(const Assignment<Key>& values) const { | ||||
|     return operator()(values); | ||||
|   } | ||||
| 
 | ||||
|   /// Find value for given assignment of values to variables
 | ||||
|   virtual double operator()(const DiscreteValues&) const = 0; | ||||
|   virtual double operator()(const Assignment<Key>& values) const = 0; | ||||
| 
 | ||||
|   /// Error is just -log(value)
 | ||||
|   virtual double error(const DiscreteValues& values) const; | ||||
|  |  | |||
|  | @ -133,7 +133,7 @@ bool TableFactor::equals(const DiscreteFactor& other, double tol) const { | |||
| } | ||||
| 
 | ||||
| /* ************************************************************************ */ | ||||
| double TableFactor::operator()(const DiscreteValues& values) const { | ||||
| double TableFactor::operator()(const Assignment<Key>& values) const { | ||||
|   // a b c d => D * (C * (B * (a) + b) + c) + d
 | ||||
|   uint64_t idx = 0, card = 1; | ||||
|   for (auto it = sorted_dkeys_.rbegin(); it != sorted_dkeys_.rend(); ++it) { | ||||
|  | @ -180,6 +180,7 @@ DecisionTreeFactor TableFactor::toDecisionTreeFactor() const { | |||
|   for (auto i = 0; i < sparse_table_.size(); i++) { | ||||
|     table.push_back(sparse_table_.coeff(i)); | ||||
|   } | ||||
|   // NOTE(Varun): This constructor is really expensive!!
 | ||||
|   DecisionTreeFactor f(dkeys, table); | ||||
|   return f; | ||||
| } | ||||
|  |  | |||
|  | @ -155,14 +155,8 @@ class GTSAM_EXPORT TableFactor : public DiscreteFactor { | |||
|   // /// @name Standard Interface
 | ||||
|   // /// @{
 | ||||
| 
 | ||||
|   /// Calculate probability for given values `x`,
 | ||||
|   /// is just look up in TableFactor.
 | ||||
|   double evaluate(const DiscreteValues& values) const { | ||||
|     return operator()(values); | ||||
|   } | ||||
| 
 | ||||
|   /// Evaluate probability distribution, sugar.
 | ||||
|   double operator()(const DiscreteValues& values) const override; | ||||
|   /// Evaluate probability distribution, is just look up in TableFactor.
 | ||||
|   double operator()(const Assignment<Key>& values) const override; | ||||
| 
 | ||||
|   /// Calculate error for DiscreteValues `x`, is -log(probability).
 | ||||
|   double error(const DiscreteValues& values) const override; | ||||
|  |  | |||
|  | @ -26,7 +26,7 @@ void AllDiff::print(const std::string& s, const KeyFormatter& formatter) const { | |||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| double AllDiff::operator()(const DiscreteValues& values) const { | ||||
| double AllDiff::operator()(const Assignment<Key>& values) const { | ||||
|   std::set<size_t> taken;  // record values taken by keys
 | ||||
|   for (Key dkey : keys_) { | ||||
|     size_t value = values.at(dkey);      // get the value for that key
 | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ class GTSAM_UNSTABLE_EXPORT AllDiff : public Constraint { | |||
|   } | ||||
| 
 | ||||
|   /// Calculate value = expensive !
 | ||||
|   double operator()(const DiscreteValues& values) const override; | ||||
|   double operator()(const Assignment<Key>& values) const override; | ||||
| 
 | ||||
|   /// Convert into a decisiontree, can be *very* expensive !
 | ||||
|   DecisionTreeFactor toDecisionTreeFactor() const override; | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ class BinaryAllDiff : public Constraint { | |||
|   } | ||||
| 
 | ||||
|   /// Calculate value
 | ||||
|   double operator()(const DiscreteValues& values) const override { | ||||
|   double operator()(const Assignment<Key>& values) const override { | ||||
|     return (double)(values.at(keys_[0]) != values.at(keys_[1])); | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ string Domain::base1Str() const { | |||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| double Domain::operator()(const DiscreteValues& values) const { | ||||
| double Domain::operator()(const Assignment<Key>& values) const { | ||||
|   return contains(values.at(key())); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -82,7 +82,7 @@ class GTSAM_UNSTABLE_EXPORT Domain : public Constraint { | |||
|   bool contains(size_t value) const { return values_.count(value) > 0; } | ||||
| 
 | ||||
|   /// Calculate value
 | ||||
|   double operator()(const DiscreteValues& values) const override; | ||||
|   double operator()(const Assignment<Key>& values) const override; | ||||
| 
 | ||||
|   /// Convert into a decisiontree
 | ||||
|   DecisionTreeFactor toDecisionTreeFactor() const override; | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ void SingleValue::print(const string& s, const KeyFormatter& formatter) const { | |||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| double SingleValue::operator()(const DiscreteValues& values) const { | ||||
| double SingleValue::operator()(const Assignment<Key>& values) const { | ||||
|   return (double)(values.at(keys_[0]) == value_); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ class GTSAM_UNSTABLE_EXPORT SingleValue : public Constraint { | |||
|   } | ||||
| 
 | ||||
|   /// Calculate value
 | ||||
|   double operator()(const DiscreteValues& values) const override; | ||||
|   double operator()(const Assignment<Key>& values) const override; | ||||
| 
 | ||||
|   /// Convert into a decisiontree
 | ||||
|   DecisionTreeFactor toDecisionTreeFactor() const override; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue