54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.5 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     QPInitSolver.h
 | 
						|
 * @brief    This finds a feasible solution for a QP problem
 | 
						|
 * @author   Duy Nguyen Ta
 | 
						|
 * @author   Ivan Dario Jimenez
 | 
						|
 * @date     6/16/16
 | 
						|
 */
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <gtsam_unstable/linear/LPInitSolver.h>
 | 
						|
 | 
						|
namespace gtsam {
 | 
						|
 | 
						|
/**
 | 
						|
 * This class finds a feasible solution for a QP problem.
 | 
						|
 * This uses the Matlab strategy for initialization
 | 
						|
 * For details, see
 | 
						|
 * http://www.mathworks.com/help/optim/ug/quadratic-programming-algorithms.html#brrzwpf-22
 | 
						|
 */
 | 
						|
class QPInitSolver {
 | 
						|
    const QP& qp_;
 | 
						|
public:
 | 
						|
    /// Constructor with a QP problem
 | 
						|
    QPInitSolver(const QP& qp) : qp_(qp) {}
 | 
						|
 | 
						|
    ///@return a feasible initialization point
 | 
						|
    VectorValues solve() const {
 | 
						|
      // Make an LP with any linear cost function. It doesn't matter for
 | 
						|
      // initialization.
 | 
						|
      LP initProblem;
 | 
						|
      // make an unrelated key for a random variable cost
 | 
						|
      Key newKey = maxKey(qp_) + 1;
 | 
						|
      initProblem.cost = LinearCost(newKey, Vector::Ones(1));
 | 
						|
      initProblem.equalities = qp_.equalities;
 | 
						|
      initProblem.inequalities = qp_.inequalities;
 | 
						|
      LPInitSolver initSolver(initProblem);
 | 
						|
      return initSolver.solve();
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
} |