gtsam 4.2.0
gtsam
SymbolicConditional.h
Go to the documentation of this file.
1/* ----------------------------------------------------------------------------
2
3 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4 * Atlanta, Georgia 30332-0415
5 * All Rights Reserved
6 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7
8 * See LICENSE for the license information
9
10 * -------------------------------------------------------------------------- */
11
18#pragma once
19
20#include <gtsam/base/Testable.h>
21#include <gtsam/base/types.h>
22#include <gtsam/inference/Conditional-inst.h>
24
25namespace gtsam {
26
36 class GTSAM_EXPORT SymbolicConditional :
37 public SymbolicFactor,
38 public Conditional<SymbolicFactor, SymbolicConditional> {
39
40 public:
44 typedef boost::shared_ptr<This> shared_ptr;
47
50
53
56
58 SymbolicConditional(Key j, Key parent) : BaseFactor(j, parent), BaseConditional(1) {}
59
61 SymbolicConditional(Key j, Key parent1, Key parent2) : BaseFactor(j, parent1, parent2), BaseConditional(1) {}
62
64 SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3) : BaseFactor(j, parent1, parent2, parent3), BaseConditional(1) {}
65
67 template<typename ITERATOR>
68 static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
69 {
71 (BaseFactor&)result = BaseFactor::FromIterators(firstKey, lastKey);
72 result.nrFrontals_ = nrFrontals;
73 return result;
74 }
75
77 template<typename ITERATOR>
78 static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
79 {
80 SymbolicConditional::shared_ptr result = boost::make_shared<SymbolicConditional>();
81 result->keys_.assign(firstKey, lastKey);
82 result->nrFrontals_ = nrFrontals;
83 return result;
84 }
85
87 template<class CONTAINER>
88 static SymbolicConditional FromKeys(const CONTAINER& keys, size_t nrFrontals) {
89 return FromIterators(keys.begin(), keys.end(), nrFrontals);
90 }
91
93 template<class CONTAINER>
94 static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER& keys, size_t nrFrontals) {
95 return FromIteratorsShared(keys.begin(), keys.end(), nrFrontals);
96 }
97
99 SymbolicFactor::shared_ptr clone() const { return boost::make_shared<This>(*this); }
100
104
106 void print(
107 const std::string& str = "",
108 const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override;
109
111 bool equals(const This& c, double tol = 1e-9) const;
112
116
118 double logProbability(const HybridValues& x) const override;
119
121 double evaluate(const HybridValues& x) const override;
122
123 using Conditional::operator(); // Expose evaluate(const HybridValues&) method..
124 using SymbolicFactor::error; // Expose error(const HybridValues&) method..
125
127
128 private:
130 friend class boost::serialization::access;
131 template<class Archive>
132 void serialize(Archive & ar, const unsigned int /*version*/) {
133 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseFactor);
134 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(BaseConditional);
135 }
136 };
137
139template<>
140struct traits<SymbolicConditional> : public Testable<SymbolicConditional> {
141};
142
143} //\ namespace gtsam
Typedefs for easier changing of types.
Concept check for values that can be used in unit tests.
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
std::string serialize(const T &input)
serializes to a string
Definition: serialization.h:113
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:156
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:100
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
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
Template to create a binary predicate.
Definition: Testable.h:111
A helper that implements the traits interface for GTSAM types.
Definition: Testable.h:151
HybridValues represents a collection of DiscreteValues and VectorValues.
Definition: HybridValues.h:38
Definition: Conditional.h:64
Definition: Factor.h:68
KeyVector::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:80
KeyVector::iterator iterator
Iterator over keys.
Definition: Factor.h:77
SymbolicConditional is a conditional with keys but no probability data, produced by symbolic eliminat...
Definition: SymbolicConditional.h:38
SymbolicConditional(Key j, Key parent1, Key parent2, Key parent3)
Three parents.
Definition: SymbolicConditional.h:64
SymbolicConditional()
Empty Constructor to make serialization possible.
Definition: SymbolicConditional.h:52
static SymbolicConditional FromKeys(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition: SymbolicConditional.h:88
BaseFactor::const_iterator const_iterator
iterator to keys
Definition: SymbolicConditional.h:46
boost::shared_ptr< This > shared_ptr
Typedef to the conditional base class.
Definition: SymbolicConditional.h:44
Conditional< BaseFactor, This > BaseConditional
Typedef to the factor base class.
Definition: SymbolicConditional.h:43
static SymbolicConditional::shared_ptr FromIteratorsShared(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition: SymbolicConditional.h:78
static SymbolicConditional FromIterators(ITERATOR firstKey, ITERATOR lastKey, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition: SymbolicConditional.h:68
SymbolicConditional(Key j, Key parent)
Single parent.
Definition: SymbolicConditional.h:58
SymbolicConditional(Key j)
No parents.
Definition: SymbolicConditional.h:55
SymbolicConditional(Key j, Key parent1, Key parent2)
Two parents.
Definition: SymbolicConditional.h:61
SymbolicFactor::shared_ptr clone() const
Copy this object as its actual derived type.
Definition: SymbolicConditional.h:99
BaseFactor::iterator iterator
Boost shared_ptr to this class.
Definition: SymbolicConditional.h:45
SymbolicFactor BaseFactor
Typedef to this class.
Definition: SymbolicConditional.h:42
static SymbolicConditional::shared_ptr FromKeysShared(const CONTAINER &keys, size_t nrFrontals)
Named constructor from an arbitrary number of keys and frontals.
Definition: SymbolicConditional.h:94
SymbolicFactor represents a symbolic factor that specifies graph topology but is not associated with ...
Definition: SymbolicFactor.h:39
boost::shared_ptr< This > shared_ptr
Overriding the shared_ptr typedef.
Definition: SymbolicFactor.h:48
double error(const HybridValues &c) const override
The error method throws an exception.
Definition: SymbolicFactor.cpp:30