| 
									
										
										
										
											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-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-03-07 23:29:43 +08:00
										 |  |  |   const bool debug = true; | 
					
						
							| 
									
										
										
										
											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-04-26 07:00:22 +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
										 |  |  | } |