gtsam  4.0.0
gtsam
AllDiff.h
1 /*
2  * AllDiff.h
3  * @brief General "all-different" constraint
4  * @date Feb 6, 2012
5  * @author Frank Dellaert
6  */
7 
8 #pragma once
9 
10 #include <gtsam_unstable/discrete/BinaryAllDiff.h>
12 
13 namespace gtsam {
14 
22  class GTSAM_UNSTABLE_EXPORT AllDiff: public Constraint {
23 
24  std::map<Key,size_t> cardinalities_;
25 
26  DiscreteKey discreteKey(size_t i) const {
27  Key j = keys_[i];
28  return DiscreteKey(j,cardinalities_.at(j));
29  }
30 
31  public:
32 
34  AllDiff(const DiscreteKeys& dkeys);
35 
36  // print
37  virtual void print(const std::string& s = "",
38  const KeyFormatter& formatter = DefaultKeyFormatter) const;
39 
41  bool equals(const DiscreteFactor& other, double tol) const {
42  if(!dynamic_cast<const AllDiff*>(&other))
43  return false;
44  else {
45  const AllDiff& f(static_cast<const AllDiff&>(other));
46  return cardinalities_.size() == f.cardinalities_.size()
47  && std::equal(cardinalities_.begin(), cardinalities_.end(),
48  f.cardinalities_.begin());
49  }
50  }
51 
53  virtual double operator()(const Values& values) const;
54 
56  virtual DecisionTreeFactor toDecisionTreeFactor() const;
57 
59  virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
60 
61  /*
62  * Ensure Arc-consistency
63  * Arc-consistency involves creating binaryAllDiff constraints
64  * In which case the combinatorial hyper-arc explosion disappears.
65  * @param j domain to be checked
66  * @param domains all other domains
67  */
68  bool ensureArcConsistency(size_t j, std::vector<Domain>& domains) const;
69 
71  virtual Constraint::shared_ptr partiallyApply(const Values&) const;
72 
74  virtual Constraint::shared_ptr partiallyApply(const std::vector<Domain>&) const;
75  };
76 
77 } // namespace gtsam
A non-templated config holding any types of Manifold-group elements.
Definition: Values.h:70
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition: Constraint.h:32
specialized key for discrete variables
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:141
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:57
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition: DiscreteFactor.h:34
boost::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:33
A discrete probabilistic factor.
Definition: DecisionTreeFactor.h:38
std::pair< Key, size_t > DiscreteKey
Key type for discrete conditionals Includes name and cardinality.
Definition: DiscreteKey.h:34
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
bool equal(const T &obj1, const T &obj2, double tol)
Call equal on the object.
Definition: Testable.h:83
General AllDiff constraint Returns 1 if values for all keys are different, 0 otherwise DiscreteFactor...
Definition: AllDiff.h:22
bool equals(const DiscreteFactor &other, double tol) const
equals
Definition: AllDiff.h:41
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition: DiscreteKey.h:37
Point2 operator *(double s, const Point2 &p)
multiply with scalar
Definition: Point2.h:170