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