| 
									
										
										
										
											2016-06-18 03:24:55 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * 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     RawQP.h | 
					
						
							|  |  |  |  * @brief     | 
					
						
							|  |  |  |  * @author   Ivan Dario Jimenez | 
					
						
							|  |  |  |  * @date     3/5/16 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <gtsam_unstable/linear/QP.h>
 | 
					
						
							|  |  |  | #include <gtsam/base/Matrix.h>
 | 
					
						
							|  |  |  | #include <gtsam/inference/Key.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							|  |  |  | #include <unordered_map>
 | 
					
						
							|  |  |  | #include <gtsam/inference/Symbol.h>
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  | #include <boost/fusion/sequence.hpp>
 | 
					
						
							| 
									
										
										
										
											2016-04-27 13:50:28 +08:00
										 |  |  | #include <boost/fusion/include/vector.hpp>
 | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace gtsam { | 
					
						
							|  |  |  | class RawQP { | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  | private: | 
					
						
							|  |  |  |   typedef std::unordered_map<Key, Matrix11> coefficient_v; | 
					
						
							|  |  |  |   typedef std::unordered_map<std::string, coefficient_v> constraint_v; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   std::unordered_map<std::string, constraint_v*> row_to_constraint_v; | 
					
						
							|  |  |  |   constraint_v E; | 
					
						
							|  |  |  |   constraint_v IG; | 
					
						
							|  |  |  |   constraint_v IL; | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  |   unsigned int varNumber; | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |   std::unordered_map<std::string, double> b; | 
					
						
							|  |  |  |   std::unordered_map<Key, Vector1> g; | 
					
						
							|  |  |  |   std::unordered_map<std::string, Key> varname_to_key; | 
					
						
							|  |  |  |   std::unordered_map<Key, std::unordered_map<Key, Matrix11> > H; | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  |   double f; | 
					
						
							|  |  |  |   std::string obj_name; | 
					
						
							|  |  |  |   std::string name_; | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |   std::unordered_map<Key, double> up; | 
					
						
							|  |  |  |   std::unordered_map<Key, double> lo; | 
					
						
							|  |  |  |   std::vector<Key> Free; | 
					
						
							| 
									
										
										
										
											2016-05-03 07:59:04 +08:00
										 |  |  |   const bool debug = false; | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   RawQP() : | 
					
						
							| 
									
										
										
										
											2016-06-14 10:58:36 +08:00
										 |  |  |       row_to_constraint_v(), E(), IG(), IL(), varNumber(1), b(), g(), varname_to_key(), H(), f(), obj_name(), name_(), up(), lo(), Free() { | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void setName( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>> const & name); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addColumn( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, double, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addColumnDouble( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, double, std::vector<char>, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>, std::vector<char>, double> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addRHS( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, double, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addRHSDouble( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, double, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, double> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addRow( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, char, std::vector<char>, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>, std::vector<char>> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addBound( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>, std::vector<char>, double> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addBoundFr( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>, std::vector<char>> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-08 23:34:31 +08:00
										 |  |  |   void addQuadTerm( | 
					
						
							|  |  |  |       boost::fusion::vector<std::vector<char>, std::vector<char>, | 
					
						
							|  |  |  |           std::vector<char>, std::vector<char>, std::vector<char>, double, | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |           std::vector<char>> const & vars); | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 07:00:22 +08:00
										 |  |  |   QP makeQP(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ; | 
					
						
							| 
									
										
										
										
											2016-03-07 23:29:43 +08:00
										 |  |  | } |