improve PCGSolverParameters
parent
322a23d49c
commit
91d637b092
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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") {
|
||||||
|
|
Loading…
Reference in New Issue