gtsam
Loading...
Searching...
No Matches
Domain.h
1/*
2 * Domain.h
3 * @brief Domain restriction constraint
4 * @date Feb 13, 2012
5 * @author Frank Dellaert
6 */
7
8#pragma once
9
12
13#include <optional>
14
15namespace gtsam {
16
21class GTSAM_EXPORT Domain : public Constraint {
22 size_t cardinality_;
23 std::set<size_t> values_;
24
25 public:
26 typedef std::shared_ptr<Domain> shared_ptr;
27
29 Domain(const DiscreteKey& dkey)
30 : Constraint(dkey.first), cardinality_(dkey.second) {
31 for (size_t v = 0; v < cardinality_; v++) values_.insert(v);
32 }
33
35 Domain(const DiscreteKey& dkey, size_t v)
36 : Constraint(dkey.first), cardinality_(dkey.second) {
37 values_.insert(v);
38 }
39
41 Key key() const { return keys_[0]; }
42
44 DiscreteKey discreteKey() const { return DiscreteKey(key(), cardinality_); }
45
47 void insert(size_t value) { values_.insert(value); }
48
50 void erase(size_t value) { values_.erase(value); }
51
53 uint64_t nrValues() const override { return values_.size(); }
54
56 bool isSingleton() const { return nrValues() == 1; }
57
59 size_t firstValue() const { return *values_.begin(); }
60
62 void print(const std::string& s = "", const KeyFormatter& formatter =
63 DefaultKeyFormatter) const override;
64
66 bool equals(const DiscreteFactor& other, double tol) const override {
67 if (!dynamic_cast<const Domain*>(&other))
68 return false;
69 else {
70 const Domain& f(static_cast<const Domain&>(other));
71 return (cardinality_ == f.cardinality_) && (values_ == f.values_);
72 }
73 }
74
76 std::string base1Str() const;
77
79 bool contains(size_t value) const { return values_.count(value) > 0; }
80
82 double evaluate(const Assignment<Key>& values) const override;
83
85 DecisionTreeFactor toDecisionTreeFactor() const override;
86
88 DecisionTreeFactor operator*(const DecisionTreeFactor& f) const override;
89
97 bool ensureArcConsistency(Key j, Domains* domains) const override;
98
106 std::optional<Domain> checkAllDiff(const KeyVector keys,
107 const Domains& domains) const;
108
110 Constraint::shared_ptr partiallyApply(
111 const DiscreteValues& values) const override;
112
114 Constraint::shared_ptr partiallyApply(const Domains& domains) const override;
115};
116
117} // 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
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:91
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
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
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
A map from keys to values.
Definition DiscreteValues.h:34
DiscreteKey discreteKey() const
The associated discrete key.
Definition Domain.h:44
void erase(size_t value)
Erase a value, non const :-(.
Definition Domain.h:50
bool equals(const DiscreteFactor &other, double tol) const override
Return whether another factor is an equal domain.
Definition Domain.h:66
uint64_t nrValues() const override
Return the number of allowed values.
Definition Domain.h:53
Domain(const DiscreteKey &dkey)
Construct an all-allowed domain on a discrete key.
Definition Domain.h:29
size_t firstValue() const
Return the first allowed value.
Definition Domain.h:59
bool contains(size_t value) const
Check whether the domain contains a specific value.
Definition Domain.h:79
Domain(const DiscreteKey &dkey, size_t v)
Construct a domain with one allowed value.
Definition Domain.h:35
std::shared_ptr< Domain > shared_ptr
allowed values
Definition Domain.h:26
Key key() const
The one key.
Definition Domain.h:41
bool isSingleton() const
Return whether the domain contains exactly one value.
Definition Domain.h:56
void insert(size_t value)
Insert a value, non const :-(.
Definition Domain.h:47
KeyVector keys_
The keys involved in this factor.
Definition Factor.h:88