22 #include <boost/optional.hpp>
23 #include <boost/shared_ptr.hpp>
29 namespace linearAlgorithms
33 boost::optional<OptimizeData&> parentData;
46 template<
class CLIQUE>
52 const boost::shared_ptr<CLIQUE>& clique,
56 myData.parentData = parentData;
58 BOOST_FOREACH(
Key parent, clique->conditional_->parents())
59 myData.cliqueResults.insert(std::make_pair(parent, myData.parentData->cliqueResults.at(parent)));
70 parentPointers.reserve(clique->conditional()->nrParents());
71 BOOST_FOREACH(
Key parent, clique->conditional()->parents()) {
72 parentPointers.push_back(myData.cliqueResults.at(parent));
73 dim += parentPointers.back()->second.size();
80 const Vector& parentVector = parentPointer->second;
81 xS.block(vectorPos,0,parentVector.size(),1) = parentVector.block(0,0,parentVector.size(),1);
82 vectorPos += parentVector.size();
86 Vector soln = c.
get_R().triangularView<Eigen::Upper>().
solve(xS);
95 collectedResult.
insert(*frontal, soln.segment(vectorPosition, c.
getDim(frontal)));
96 myData.cliqueResults.insert(make_pair(r->first, r));
97 vectorPosition += c.
getDim(frontal);
127 template<
class BAYESTREE>
128 VectorValues optimizeBayesTree(
const BAYESTREE& bayesTree)
130 gttic(linear_optimizeBayesTree);
136 treeTraversal::no_op postVisitor;
139 return preVisitor.collectedResult;
constABlock get_R() const
Return a view of the upper-triangular R block of the conditional.
Definition: GaussianConditional.h:97
virtual DenseIndex getDim(const_iterator variable) const
Return the dimension of the variable pointed to by the given key iterator todo: Remove this in favor ...
Definition: JacobianFactor.h:236
void solve(Matrix &A, Matrix &B)
solve AX=B via in-place Lu factorization and backsubstitution After calling, A contains LU...
Definition: Matrix.cpp:283
Definition: linearAlgorithms-inst.h:32
FACTOR::const_iterator endFrontals() const
Iterator pointing past the last frontal key.
Definition: Conditional.h:107
Conditional Gaussian Base class.
Values::const_iterator const_iterator
Const iterator over vector values.
Definition: VectorValues.h:97
const FastVector< Key > & keys() const
Access the factor's involved variable keys.
Definition: Factor.h:115
Pre-order visitor for back-substitution in a Bayes tree.
Definition: linearAlgorithms-inst.h:47
size_t dim(const Vector &v)
dimensionality == size
Definition: Vector.h:90
FACTOR::const_iterator beginFrontals() const
Iterator pointing to first frontal key.
Definition: Conditional.h:104
void DepthFirstForestParallel(FOREST &forest, DATA &rootData, VISITOR_PRE &visitorPre, VISITOR_POST &visitorPost, int problemSizeThreshold=10)
Traverse a forest depth-first with pre-order and post-order visits.
Definition: treeTraversal-inst.h:152
size_t Key
Integer nonlinear key type.
Definition: types.h:59
Thrown when a linear system is ill-posed.
Definition: linearExceptions.h:95
ptrdiff_t DenseIndex
The index type for Eigen objects.
Definition: types.h:74
This class represents a collection of vector-valued variables associated each with a unique integer i...
Definition: VectorValues.h:89
iterator insert(Key j, const Vector &value)
Insert a vector value with key j.
Definition: VectorValues.h:183
const constBVector getb() const
Get a view of the r.h.s.
Definition: JacobianFactor.h:255
constABlock get_S() const
Get a view of the parent blocks.
Definition: GaussianConditional.h:100
Definition: FastVector.h:38
A conditional Gaussian functions as the node in a Bayes network It has a set of parents y...
Definition: GaussianConditional.h:36
An object whose scope defines a block where TBB and OpenMP parallelism are mixed. ...
Definition: types.h:258
FastVector< Key >::const_iterator const_iterator
Const iterator over keys.
Definition: Factor.h:64