revised interfaces

release/4.3a0
Yong-Dian Jian 2010-10-26 21:43:57 +00:00
parent 012e6b86cc
commit 71a5f26d40
4 changed files with 39 additions and 13 deletions

View File

@ -20,19 +20,27 @@ namespace gtsam {
class ConjugateGradientSolver : public IterativeSolver {
protected:
const LINEAR *ptr_;
typedef boost::shared_ptr<GRAPH> sharedGRAPH ;
typedef boost::shared_ptr<LINEAR> sharedLINEAR ;
typedef boost::shared_ptr<VALUES> sharedVALUES ;
typedef boost::shared_ptr<VectorValues> sharedVectorValues ;
const LINEAR *ptr_;
sharedVectorValues zeros_;
public:
typedef boost::shared_ptr<const ConjugateGradientSolver> shared_ptr ;
ConjugateGradientSolver(const GRAPH &graph, const VALUES &initial, const Ordering &ordering, const sharedParameters parameters):
// ConjugateGradientSolver(const GRAPH &graph, const VALUES &initial, const Ordering &ordering, const sharedParameters parameters):
// IterativeSolver(parameters), ptr_(0), zeros_(boost::make_shared<VectorValues>(initial.zero(ordering))) {}
ConjugateGradientSolver(const GRAPH &graph, const VALUES &initial, const Ordering &ordering, const Parameters &parameters = Parameters()):
IterativeSolver(parameters), ptr_(0), zeros_(boost::make_shared<VectorValues>(initial.zero(ordering))) {}
ConjugateGradientSolver(const LINEAR &GFG) {
std::cout << "[ConjugateGradientSolver] Unexpected usage.." << std::endl;
throw std::runtime_error("SubgraphSolver: gaussian factor graph initialization not supported");
}

View File

@ -11,15 +11,36 @@ namespace gtsam {
// a container for all related parameters
struct IterativeOptimizationParameters {
public:
typedef enum {
SILENT,
ERROR,
} verbosityLevel;
protected:
int maxIterations_;
int reset_ ; // number of iterations before reset, for cg and gmres
double epsilon_; // relative error
double epsilon_abs_; // absolute error
verbosityLevel verbosity_;
public:
IterativeOptimizationParameters():
maxIterations_(100),
reset_(101),
epsilon_(1e-5),epsilon_abs_(1e-5),verbosity_(SILENT) {}
epsilon_(1e-5),
epsilon_abs_(1e-5),
verbosity_(SILENT) {}
IterativeOptimizationParameters(const IterativeOptimizationParameters &parameters):
maxIterations_(parameters.maxIterations_),
reset_(parameters.reset_),
epsilon_(parameters.epsilon_),
epsilon_abs_(parameters.epsilon_abs_),
verbosity_(parameters.verbosity_) {}
IterativeOptimizationParameters
(int maxIterations, double epsilon, double epsilon_abs, verbosityLevel verbosity=SILENT, int reset=-1):
@ -34,11 +55,5 @@ namespace gtsam {
double epsilon_abs() const { return epsilon_abs_ ; }
verbosityLevel verbosity() const { return verbosity_ ; }
protected:
int maxIterations_;
int reset_ ; // number of iterations before reset, for cg and gmres
double epsilon_; // relative error
double epsilon_abs_; // absolute error
verbosityLevel verbosity_;
};
}

View File

@ -30,6 +30,9 @@ public:
IterativeSolver(const IterativeSolver &solver):
parameters_(solver.parameters_) {}
IterativeSolver(const IterativeOptimizationParameters &parameters):
parameters_(new IterativeOptimizationParameters(parameters)) {}
IterativeSolver(const sharedParameters parameters):
parameters_(parameters) {}
};

View File

@ -54,7 +54,11 @@ namespace gtsam {
public:
SubgraphSolver(const GRAPH& G, const VALUES& theta0, const Parameters &parameters = Parameters()):
IterativeSolver(parameters){ initialize(G,theta0); }
SubgraphSolver(const LINEAR &GFG) {
std::cout << "[SubgraphSolver] Unexpected usage.." << std::endl;
throw std::runtime_error("SubgraphSolver: gaussian factor graph initialization not supported");
}
@ -67,10 +71,6 @@ namespace gtsam {
sharedParameters parameters = boost::make_shared<Parameters>()) :
IterativeSolver(parameters), ordering_(ordering), pairs_(pairs), pc_(pc) {}
SubgraphSolver(const GRAPH& G, const VALUES& theta0):IterativeSolver(){
initialize(G,theta0);
}
shared_ptr update(const LINEAR &graph) const ;
VectorValues::shared_ptr optimize() const ;
shared_ordering ordering() const { return ordering_; }