gtsam
Loading...
Searching...
No Matches
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/discrete/BinaryAllDiff.h>
13
14namespace gtsam {
15
20class GTSAM_EXPORT AllDiff : public Constraint {
21 DiscreteKey discreteKey(size_t i) const {
22 Key j = keys_[i];
23 return DiscreteKey(j, cardinalities_.at(j));
24 }
25
26 public:
28 AllDiff(const DiscreteKeys& dkeys);
29
31 void print(const std::string& s = "", const KeyFormatter& formatter =
32 DefaultKeyFormatter) const override;
33
35 bool equals(const DiscreteFactor& other, double tol) const override {
36 if (!dynamic_cast<const AllDiff*>(&other))
37 return false;
38 else {
39 const AllDiff& f(static_cast<const AllDiff&>(other));
40 return cardinalities_.size() == f.cardinalities_.size() &&
41 std::equal(cardinalities_.begin(), cardinalities_.end(),
42 f.cardinalities_.begin());
43 }
44 }
45
47 double evaluate(const Assignment<Key>& values) const override;
48
50 DecisionTreeFactor toDecisionTreeFactor() const override;
51
53 TableFactor toTableFactor() const override;
54
56 DecisionTreeFactor operator*(const DecisionTreeFactor& f) const override;
57
65 bool ensureArcConsistency(Key j, Domains* domains) const override;
66
68 Constraint::shared_ptr partiallyApply(const DiscreteValues&) const override;
69
71 Constraint::shared_ptr partiallyApply(const Domains&) const override;
72};
73
74} // namespace gtsam
specialized key for discrete variables
std::pair< Key, size_t > DiscreteKey
Key type for discrete variables.
Definition DiscreteKey.h:38
Global functions in a separate testing namespace.
Definition chartTesting.h:28
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition Key.cpp:30
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:52
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition Key.h:35
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:43
bool equals(const DiscreteFactor &other, double tol) const override
Return whether another factor is an equal constraint.
Definition AllDiff.h:35
void print(const std::string &s="", const KeyFormatter &formatter=DefaultKeyFormatter) const override
Print the constraint.
Definition AllDiff.cpp:22
AllDiff(const DiscreteKeys &dkeys)
Construct from keys.
Definition AllDiff.cpp:17
An assignment from labels to value index (size_t).
Definition Assignment.h:37
Constraint(Key j)
Construct unary constraint factor.
Definition Constraint.h:42
A discrete probabilistic factor.
Definition DecisionTreeFactor.h:42
Base class for discrete probabilistic factors The most general one is the derived DecisionTreeFactor.
Definition DiscreteFactor.h:41
std::map< Key, size_t > cardinalities_
Map of Keys and their cardinalities.
Definition DiscreteFactor.h:58
DiscreteKeys is a set of keys that can be assembled using the & operator.
Definition DiscreteKey.h:41
A map from keys to values.
Definition DiscreteValues.h:34
A discrete probabilistic factor optimized for sparsity.
Definition TableFactor.h:51
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:88