improve PCGSolverParameters

release/4.3a0
Varun Agrawal 2024-10-14 21:16:31 -04:00
parent 322a23d49c
commit 91d637b092
3 changed files with 19 additions and 20 deletions

View File

@ -40,7 +40,7 @@ void PCGSolverParameters::print(ostream &os) const {
/*****************************************************************************/ /*****************************************************************************/
PCGSolver::PCGSolver(const PCGSolverParameters &p) { PCGSolver::PCGSolver(const PCGSolverParameters &p) {
parameters_ = p; parameters_ = p;
preconditioner_ = createPreconditioner(p.preconditioner_); preconditioner_ = createPreconditioner(p.preconditioner());
} }
void PCGSolverParameters::setPreconditionerParams(const std::shared_ptr<PreconditionerParameters> preconditioner) { void PCGSolverParameters::setPreconditionerParams(const std::shared_ptr<PreconditionerParameters> preconditioner) {

View File

@ -34,26 +34,30 @@ struct PreconditionerParameters;
* Parameters for PCG * Parameters for PCG
*/ */
struct GTSAM_EXPORT PCGSolverParameters: public ConjugateGradientParameters { struct GTSAM_EXPORT PCGSolverParameters: public ConjugateGradientParameters {
public: public:
typedef ConjugateGradientParameters Base; typedef ConjugateGradientParameters Base;
typedef std::shared_ptr<PCGSolverParameters> shared_ptr; typedef std::shared_ptr<PCGSolverParameters> shared_ptr;
PCGSolverParameters() { protected:
} std::shared_ptr<PreconditionerParameters> preconditioner_;
public:
PCGSolverParameters() {}
PCGSolverParameters(
const std::shared_ptr<PreconditionerParameters> &preconditioner)
: preconditioner_(preconditioner) {}
void print(std::ostream &os) const override; void print(std::ostream &os) const override;
/* interface to preconditioner parameters */ const std::shared_ptr<PreconditionerParameters> preconditioner() const {
inline const PreconditionerParameters& preconditioner() const { return preconditioner_;
return *preconditioner_;
} }
// needed for python wrapper void setPreconditionerParams(
const std::shared_ptr<PreconditionerParameters> preconditioner);
void print(const std::string &s) const; void print(const std::string &s) const;
std::shared_ptr<PreconditionerParameters> preconditioner_;
void setPreconditionerParams(const std::shared_ptr<PreconditionerParameters> preconditioner);
}; };
/** /**

View File

@ -67,20 +67,15 @@ ShonanAveragingParameters<d>::ShonanAveragingParameters(
builderParameters.augmentationWeight = SubgraphBuilderParameters::SKELETON; builderParameters.augmentationWeight = SubgraphBuilderParameters::SKELETON;
builderParameters.augmentationFactor = 0.0; builderParameters.augmentationFactor = 0.0;
auto pcg = std::make_shared<PCGSolverParameters>();
// Choose optimization method // Choose optimization method
if (method == "SUBGRAPH") { if (method == "SUBGRAPH") {
lm.iterativeParams = lm.iterativeParams =
std::make_shared<SubgraphSolverParameters>(builderParameters); std::make_shared<SubgraphSolverParameters>(builderParameters);
} else if (method == "SGPC") { } else if (method == "SGPC") {
pcg->preconditioner_ = lm.iterativeParams = std::make_shared<PCGSolverParameters>(
std::make_shared<SubgraphPreconditionerParameters>(builderParameters); std::make_shared<SubgraphPreconditionerParameters>(builderParameters));
lm.iterativeParams = pcg;
} else if (method == "JACOBI") { } else if (method == "JACOBI") {
pcg->preconditioner_ = lm.iterativeParams = std::make_shared<PCGSolverParameters>(std::make_shared<BlockJacobiPreconditionerParameters>());
std::make_shared<BlockJacobiPreconditionerParameters>();
lm.iterativeParams = pcg;
} else if (method == "QR") { } else if (method == "QR") {
lm.setLinearSolverType("MULTIFRONTAL_QR"); lm.setLinearSolverType("MULTIFRONTAL_QR");
} else if (method == "CHOLESKY") { } else if (method == "CHOLESKY") {