AMF-Placer  2.0
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
QPSolverWrapper.h
Go to the documentation of this file.
1 
25 #ifndef _QPSOLVER
26 #define _QPSOLVER
27 
28 #include "Eigen/Eigen"
29 #include "Eigen/SparseCore"
30 //#include "osqp++/osqp++.h"
31 #include "strPrint.h"
32 #include <assert.h>
33 #include <fstream>
34 #include <iostream>
35 #include <sstream>
36 #include <string>
37 #include <thread>
38 #include <vector>
39 
41 {
42  public:
43  typedef struct
44  {
45  std::vector<Eigen::Triplet<float>> objectiveMatrixTripletList;
46  std::vector<float> objectiveMatrixDiag;
47  Eigen::VectorXd objectiveVector;
48  Eigen::VectorXd solution;
49  Eigen::VectorXd oriSolution;
51 
53  // osqp::OsqpSolver osqpSolver;
54 
55  Eigen::ConjugateGradient<Eigen::SparseMatrix<double>, Eigen::Lower | Eigen::Upper> CGSolver;
56  typedef struct
57  {
58  bool useUnconstrainedCG = true;
59  bool MKLorNot = false;
60  float lowerbound;
61  float upperbound;
62  int maxIters = 500;
63  float tolerence = 0.001;
64  bool solutionForward = false;
65  bool verbose = false;
68 
69  QPSolverWrapper(bool useUnconstrainedCG, bool MKLorNot, float lowerbound, float upperbound, int elementNum,
70  bool verbose)
71  {
72  solverSettings.useUnconstrainedCG = useUnconstrainedCG;
73  solverSettings.MKLorNot = MKLorNot;
74  solverSettings.lowerbound = lowerbound;
75  solverSettings.upperbound = upperbound;
76  solverSettings.verbose = verbose;
77  solverData.solution.resize(elementNum);
78  solverData.oriSolution.resize(elementNum);
79  solverData.objectiveVector.resize(elementNum);
80  }
82  {
83  }
84 
85  static void QPSolve(QPSolverWrapper *&curSolver);
86 };
87 
88 #endif
QPSolverWrapper::solverSettingsType::MKLorNot
bool MKLorNot
Definition: QPSolverWrapper.h:59
QPSolverWrapper::solverDataType
Definition: QPSolverWrapper.h:44
QPSolverWrapper::solverData
solverDataType solverData
Definition: QPSolverWrapper.h:52
QPSolverWrapper::solverSettingsType
Definition: QPSolverWrapper.h:57
QPSolverWrapper::solverDataType::objectiveMatrixDiag
std::vector< float > objectiveMatrixDiag
Definition: QPSolverWrapper.h:46
QPSolverWrapper::solverSettingsType::lowerbound
float lowerbound
Definition: QPSolverWrapper.h:60
QPSolverWrapper::solverSettingsType::upperbound
float upperbound
Definition: QPSolverWrapper.h:61
QPSolverWrapper::QPSolverWrapper
QPSolverWrapper(bool useUnconstrainedCG, bool MKLorNot, float lowerbound, float upperbound, int elementNum, bool verbose)
Definition: QPSolverWrapper.h:69
strPrint.h
QPSolverWrapper
Definition: QPSolverWrapper.h:41
QPSolverWrapper::CGSolver
Eigen::ConjugateGradient< Eigen::SparseMatrix< double >, Eigen::Lower|Eigen::Upper > CGSolver
Definition: QPSolverWrapper.h:55
QPSolverWrapper::~QPSolverWrapper
~QPSolverWrapper()
Definition: QPSolverWrapper.h:81
QPSolverWrapper::solverDataType::oriSolution
Eigen::VectorXd oriSolution
Definition: QPSolverWrapper.h:49
QPSolverWrapper::solverSettingsType::verbose
bool verbose
Definition: QPSolverWrapper.h:65
QPSolverWrapper::solverSettings
solverSettingsType solverSettings
Definition: QPSolverWrapper.h:67
QPSolverWrapper::solverDataType::objectiveVector
Eigen::VectorXd objectiveVector
Definition: QPSolverWrapper.h:47
QPSolverWrapper::QPSolve
static void QPSolve(QPSolverWrapper *&curSolver)
Definition: QPSolverWrapper.cc:29
QPSolverWrapper::solverDataType::solution
Eigen::VectorXd solution
Definition: QPSolverWrapper.h:48
QPSolverWrapper::solverSettingsType::useUnconstrainedCG
bool useUnconstrainedCG
Definition: QPSolverWrapper.h:58
QPSolverWrapper::solverDataType::objectiveMatrixTripletList
std::vector< Eigen::Triplet< float > > objectiveMatrixTripletList
Definition: QPSolverWrapper.h:45