Added some documentation

release/4.3a0
Richard Roberts 2010-10-23 15:07:18 +00:00
parent 6c85702ee6
commit bb4a9dbba5
2 changed files with 52 additions and 23 deletions

View File

@ -32,15 +32,6 @@ void VariableIndex::permute(const Permutation& permutation) {
index_.permute(permutation); index_.permute(permutation);
} }
/* ************************************************************************* */
void VariableIndex::rebaseFactors(ptrdiff_t baseIndexChange) {
BOOST_FOREACH(Factors& factors, index_.container()) {
BOOST_FOREACH(size_t& factor, factors) {
factor += baseIndexChange;
}
}
}
/* ************************************************************************* */ /* ************************************************************************* */
bool VariableIndex::equals(const VariableIndex& other, double tol) const { bool VariableIndex::equals(const VariableIndex& other, double tol) const {
if(this->nEntries_ == other.nEntries_ && this->nFactors_ == other.nFactors_) { if(this->nEntries_ == other.nEntries_ && this->nFactors_ == other.nFactors_) {

View File

@ -32,10 +32,12 @@ namespace gtsam {
class Inference; class Inference;
/** /**
* The VariableIndex class stores the information necessary to perform * The VariableIndex class computes and stores the block column structure of a
* elimination, including an index of factors involving each variable and * factor graph. The factor graph stores a collection of factors, each of
* the structure of the intermediate joint factors that develop during * which involves a set of variables. In contrast, the VariableIndex is built
* elimination. This maps variables to collections of factor indices. * from a factor graph prior to elimination, and stores the list of factors
* that involve each variable. This information is stored as a vector of
* lists of factor indices.
*/ */
class VariableIndex { class VariableIndex {
public: public:
@ -47,25 +49,61 @@ public:
protected: protected:
std::vector<Factors> indexUnpermuted_; std::vector<Factors> indexUnpermuted_;
Permuted<std::vector<Factors>, Factors&> index_; Permuted<std::vector<Factors>, Factors&> index_; // Permuted view of indexUnpermuted.
size_t nFactors_; size_t nFactors_; // Number of factors in the original factor graph.
size_t nEntries_; // Sum of involved variable counts of each factor size_t nEntries_; // Sum of involved variable counts of each factor.
public: public:
/** Default constructor, creates an empty VariableIndex */
VariableIndex() : index_(indexUnpermuted_), nFactors_(0), nEntries_(0) {} VariableIndex() : index_(indexUnpermuted_), nFactors_(0), nEntries_(0) {}
/**
* Create a VariableIndex that computes and stores the block column structure
* of a factor graph. This constructor is used when the number of variables
* is known beforehand.
*/
template<class FactorGraph> VariableIndex(const FactorGraph& factorGraph, Index nVariables); template<class FactorGraph> VariableIndex(const FactorGraph& factorGraph, Index nVariables);
/**
* Create a VariableIndex that computes and stores the block column structure
* of a factor graph.
*/
template<class FactorGraph> VariableIndex(const FactorGraph& factorGraph); template<class FactorGraph> VariableIndex(const FactorGraph& factorGraph);
/**
* The number of variable entries. This is one greater than the variable
* with the highest index.
*/
Index size() const { return index_.size(); } Index size() const { return index_.size(); }
size_t nFactors() const { return nFactors_; }
size_t nEntries() const { return nEntries_; }
const Factors& operator[](Index variable) const { checkVar(variable); return index_[variable]; }
Factors& operator[](Index variable) { checkVar(variable); return index_[variable]; }
void permute(const Permutation& permutation);
template<class FactorGraph> void augment(const FactorGraph& factorGraph);
void rebaseFactors(ptrdiff_t baseIndexChange);
/** The number of factors in the original factor graph */
size_t nFactors() const { return nFactors_; }
/** The number of nonzero blocks, i.e. the number of variable-factor entries */
size_t nEntries() const { return nEntries_; }
/** Access a list of factors by variable */
const Factors& operator[](Index variable) const { checkVar(variable); return index_[variable]; }
/** Access a list of factors by variable */
Factors& operator[](Index variable) { checkVar(variable); return index_[variable]; }
/**
* Apply a variable permutation. Does not rearrange data, just permutes
* future lookups by variable.
*/
void permute(const Permutation& permutation);
/**
* Augment the variable index with new factors. This can be used when
* solving problems incrementally.
*/
template<class FactorGraph> void augment(const FactorGraph& factorGraph);
/** Test for equality (for unit tests and debug assertions). */
bool equals(const VariableIndex& other, double tol=0.0) const; bool equals(const VariableIndex& other, double tol=0.0) const;
/** Print the variable index (for unit tests and debugging). */
void print(const std::string& str = "VariableIndex: ") const; void print(const std::string& str = "VariableIndex: ") const;
protected: protected: