revised interfaces
parent
012e6b86cc
commit
71a5f26d40
|
|
@ -20,19 +20,27 @@ namespace gtsam {
|
||||||
class ConjugateGradientSolver : public IterativeSolver {
|
class ConjugateGradientSolver : public IterativeSolver {
|
||||||
|
|
||||||
protected:
|
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 ;
|
typedef boost::shared_ptr<VectorValues> sharedVectorValues ;
|
||||||
|
|
||||||
|
const LINEAR *ptr_;
|
||||||
sharedVectorValues zeros_;
|
sharedVectorValues zeros_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef boost::shared_ptr<const ConjugateGradientSolver> shared_ptr ;
|
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 ¶meters = Parameters()):
|
||||||
IterativeSolver(parameters), ptr_(0), zeros_(boost::make_shared<VectorValues>(initial.zero(ordering))) {}
|
IterativeSolver(parameters), ptr_(0), zeros_(boost::make_shared<VectorValues>(initial.zero(ordering))) {}
|
||||||
|
|
||||||
ConjugateGradientSolver(const LINEAR &GFG) {
|
ConjugateGradientSolver(const LINEAR &GFG) {
|
||||||
|
std::cout << "[ConjugateGradientSolver] Unexpected usage.." << std::endl;
|
||||||
throw std::runtime_error("SubgraphSolver: gaussian factor graph initialization not supported");
|
throw std::runtime_error("SubgraphSolver: gaussian factor graph initialization not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,36 @@ namespace gtsam {
|
||||||
|
|
||||||
// a container for all related parameters
|
// a container for all related parameters
|
||||||
struct IterativeOptimizationParameters {
|
struct IterativeOptimizationParameters {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SILENT,
|
SILENT,
|
||||||
ERROR,
|
ERROR,
|
||||||
} verbosityLevel;
|
} 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():
|
IterativeOptimizationParameters():
|
||||||
maxIterations_(100),
|
maxIterations_(100),
|
||||||
reset_(101),
|
reset_(101),
|
||||||
epsilon_(1e-5),epsilon_abs_(1e-5),verbosity_(SILENT) {}
|
epsilon_(1e-5),
|
||||||
|
epsilon_abs_(1e-5),
|
||||||
|
verbosity_(SILENT) {}
|
||||||
|
|
||||||
|
IterativeOptimizationParameters(const IterativeOptimizationParameters ¶meters):
|
||||||
|
maxIterations_(parameters.maxIterations_),
|
||||||
|
reset_(parameters.reset_),
|
||||||
|
epsilon_(parameters.epsilon_),
|
||||||
|
epsilon_abs_(parameters.epsilon_abs_),
|
||||||
|
verbosity_(parameters.verbosity_) {}
|
||||||
|
|
||||||
|
|
||||||
IterativeOptimizationParameters
|
IterativeOptimizationParameters
|
||||||
(int maxIterations, double epsilon, double epsilon_abs, verbosityLevel verbosity=SILENT, int reset=-1):
|
(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_ ; }
|
double epsilon_abs() const { return epsilon_abs_ ; }
|
||||||
verbosityLevel verbosity() const { return verbosity_ ; }
|
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_;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,9 @@ public:
|
||||||
IterativeSolver(const IterativeSolver &solver):
|
IterativeSolver(const IterativeSolver &solver):
|
||||||
parameters_(solver.parameters_) {}
|
parameters_(solver.parameters_) {}
|
||||||
|
|
||||||
|
IterativeSolver(const IterativeOptimizationParameters ¶meters):
|
||||||
|
parameters_(new IterativeOptimizationParameters(parameters)) {}
|
||||||
|
|
||||||
IterativeSolver(const sharedParameters parameters):
|
IterativeSolver(const sharedParameters parameters):
|
||||||
parameters_(parameters) {}
|
parameters_(parameters) {}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,11 @@ namespace gtsam {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
SubgraphSolver(const GRAPH& G, const VALUES& theta0, const Parameters ¶meters = Parameters()):
|
||||||
|
IterativeSolver(parameters){ initialize(G,theta0); }
|
||||||
|
|
||||||
SubgraphSolver(const LINEAR &GFG) {
|
SubgraphSolver(const LINEAR &GFG) {
|
||||||
|
std::cout << "[SubgraphSolver] Unexpected usage.." << std::endl;
|
||||||
throw std::runtime_error("SubgraphSolver: gaussian factor graph initialization not supported");
|
throw std::runtime_error("SubgraphSolver: gaussian factor graph initialization not supported");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,10 +71,6 @@ namespace gtsam {
|
||||||
sharedParameters parameters = boost::make_shared<Parameters>()) :
|
sharedParameters parameters = boost::make_shared<Parameters>()) :
|
||||||
IterativeSolver(parameters), ordering_(ordering), pairs_(pairs), pc_(pc) {}
|
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 ;
|
shared_ptr update(const LINEAR &graph) const ;
|
||||||
VectorValues::shared_ptr optimize() const ;
|
VectorValues::shared_ptr optimize() const ;
|
||||||
shared_ordering ordering() const { return ordering_; }
|
shared_ordering ordering() const { return ordering_; }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue