1 // 2 // MosekProgram.hpp 3 // Gravity 4 // 5 // Created by Guanglei Wang on 14/7/17. 6 // 7 // Note mosek fusion API is designed for CONIC Optimization. 8 9 #ifndef MosekProgram_h 10 #define MosekProgram_h 11 12 #include <stdio.h> 13 #ifdef USE_MOSEK 14 #include <fusion.h> 15 #include <monty.h> 16 #endif 17 #include <gravity/model.h> 18 19 using namespace gravity; 20 21 class MosekProgram: public Program<double>{ 22 public: 23 Model<>* _model = nullptr; 24 int _output; 25 MosekProgram(); MosekProgram(Model<double> * m)26 MosekProgram(Model<double>* m):_model(m){}; 27 ~MosekProgram(); 28 //void reset_model(); 29 30 31 bool solve(bool relax); 32 void prepare_model(); 33 void update_model(); 34 //void relax_model(); 35 36 void fill_in_mosek_vars(); 37 void create_mosek_constraints(); 38 void set_mosek_objective(); 39 //void print_constraints(); 40 41 private: 42 mosek::fusion::Model::t _mosek_model; 43 vector<mosek::fusion::Variable::t> _mosek_vars; 44 mosek::fusion::Expression::t form_Fx(const map<string, qterm>& qterms, size_t qn); 45 mosek::fusion::Expression::t form_Fx(const map<string, qterm> &qterms, size_t qn, size_t inst); 46 mosek::fusion::Expression::t create_lin_expr(const map<string, lterm>& lt, const shared_ptr<constant_>& cst, size_t inst); 47 48 }; 49 50 #endif /* MosekProgram_h */ 51