68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
/**
|
|
* @file SQPOptimizer.h
|
|
* @brief Interface for a generic SQP-based nonlinear optimization engine
|
|
* @author Alex Cunningham
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "VectorConfig.h"
|
|
|
|
namespace gtsam {
|
|
|
|
/**
|
|
* This class is an engine for performing SQP-based optimization
|
|
* It stores a graph, a config, and needs a specific ordering, and
|
|
* then will perform optimization iterations in a functional way.
|
|
*/
|
|
template<class FactorGraph, class Config>
|
|
class SQPOptimizer {
|
|
|
|
public:
|
|
// useful for storing configurations
|
|
typedef boost::shared_ptr<const Config> shared_config;
|
|
typedef boost::shared_ptr<const VectorConfig> shared_vconfig;
|
|
|
|
private:
|
|
// keep const references to the graph and the original ordering
|
|
const FactorGraph* graph_;
|
|
const Ordering* ordering_;
|
|
|
|
// keep configurations
|
|
shared_config config_;
|
|
shared_vconfig lagrange_config_;
|
|
double error_;
|
|
|
|
public:
|
|
/**
|
|
* Standard external constructor
|
|
* @param graph is the nonlinear graph to optimize
|
|
* @param ordering is the elimination ordering to use
|
|
* @param config is the initial configuration for the real variables
|
|
*/
|
|
SQPOptimizer(const FactorGraph& graph, const Ordering& ordering,
|
|
shared_config config);
|
|
|
|
/**
|
|
* Constructor that includes a lagrange initialization. Primarily
|
|
* for internal iterations, but if the user has an idea of what a good
|
|
* set of lagrange multipliers is, they can specify them, assuming that
|
|
* the naming convention is the same as the internal system.
|
|
* @param graph is the nonlinear graph to optimize
|
|
* @param ordering is the elimination ordering to use
|
|
* @param config is the initial configuration for the real variables
|
|
* @param lagrange is the configuration of lagrange multipliers
|
|
*/
|
|
SQPOptimizer(const FactorGraph& graph, const Ordering& ordering,
|
|
shared_config config, shared_vconfig lagrange);
|
|
|
|
/// Access functions
|
|
const FactorGraph* graph() const { return graph_; }
|
|
const Ordering* ordering() const { return ordering_; }
|
|
shared_config config() const { return config_; }
|
|
|
|
};
|
|
|
|
}
|
|
|