81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
/* ----------------------------------------------------------------------------
 | 
						|
 | 
						|
 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
 | 
						|
 * Atlanta, Georgia 30332-0415
 | 
						|
 * All Rights Reserved
 | 
						|
 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
 | 
						|
 | 
						|
 * See LICENSE for the license information
 | 
						|
 | 
						|
 * -------------------------------------------------------------------------- */
 | 
						|
 | 
						|
/**
 | 
						|
 * @file    QP.h
 | 
						|
 * @brief   Factor graphs of a Quadratic Programming problem
 | 
						|
 * @date    Dec 8, 2014
 | 
						|
 * @author  Duy-Nguyen Ta
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <gtsam/linear/GaussianFactorGraph.h>
 | 
						|
#include <gtsam_unstable/linear/EqualityFactorGraph.h>
 | 
						|
#include <gtsam_unstable/linear/InequalityFactorGraph.h>
 | 
						|
#include <gtsam/slam/dataset.h>
 | 
						|
 | 
						|
namespace gtsam {
 | 
						|
 | 
						|
/**
 | 
						|
 * Struct contains factor graphs of a Quadratic Programming problem
 | 
						|
 */
 | 
						|
struct QP {
 | 
						|
  GaussianFactorGraph cost; //!< Quadratic cost factors
 | 
						|
  EqualityFactorGraph equalities; //!< linear equality constraints: cE(x) = 0
 | 
						|
  InequalityFactorGraph inequalities; //!< linear inequality constraints: cI(x) <= 0
 | 
						|
 | 
						|
private:
 | 
						|
  mutable VariableIndex cachedCostVariableIndex_;
 | 
						|
 | 
						|
public:
 | 
						|
  /** default constructor */
 | 
						|
  QP() :
 | 
						|
      cost(), equalities(), inequalities() {
 | 
						|
  }
 | 
						|
 | 
						|
  /** constructor */
 | 
						|
  QP(const GaussianFactorGraph& _cost,
 | 
						|
      const EqualityFactorGraph& _linearEqualities,
 | 
						|
      const InequalityFactorGraph& _linearInequalities) :
 | 
						|
      cost(_cost), equalities(_linearEqualities), inequalities(
 | 
						|
          _linearInequalities) {
 | 
						|
  }
 | 
						|
 | 
						|
  /** print */
 | 
						|
  void print(const std::string& s = "") {
 | 
						|
    std::cout << s << std::endl;
 | 
						|
    cost.print("Quadratic cost factors: ");
 | 
						|
    equalities.print("Linear equality factors: ");
 | 
						|
    inequalities.print("Linear inequality factors: ");
 | 
						|
  }
 | 
						|
 | 
						|
  const VariableIndex& costVariableIndex() const {
 | 
						|
    if (cachedCostVariableIndex_.size() == 0)
 | 
						|
      cachedCostVariableIndex_ = VariableIndex(cost);
 | 
						|
    return cachedCostVariableIndex_;
 | 
						|
  }
 | 
						|
 | 
						|
  Vector costGradient(Key key, const VectorValues& delta) const {
 | 
						|
    Vector g = Vector::Zero(delta.at(key).size());
 | 
						|
    if (costVariableIndex().find(key) != costVariableIndex().end()) {
 | 
						|
      for (size_t factorIx : costVariableIndex()[key]) {
 | 
						|
        GaussianFactor::shared_ptr factor = cost.at(factorIx);
 | 
						|
        g += factor->gradient(key, delta);
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return g;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
} // namespace gtsam
 | 
						|
 |