ExactConstraintSatisfaction.hh 2.18 KB
Newer Older
1
2
3
4
#ifndef EXACTCONSTRAINTSATISFACTION_HH
#define EXACTCONSTRAINTSATISFACTION_HH

#include <CoMISo/Config/config.hh>
Robin Brost's avatar
Robin Brost committed
5
#include <CoMISo/Config/CoMISoDefines.hh>
6
7
8

#include <CoMISo/NSolver/NProblemInterface.hh>
#include <vector>
9
#include <list>
10

Robin Brost's avatar
Robin Brost committed
11
class COMISODLLEXPORT ExactConstraintSatisfaction
12
13
14
15
{
public:
    ExactConstraintSatisfaction();

16
    typedef Eigen::SparseVector<int>::InnerIterator iteratorV;
17
18
19
    typedef Eigen::SparseVector<int> sparseVec;
    typedef Eigen::SparseMatrix<int, Eigen::ColMajor> SP_Matrix_C;
    typedef Eigen::SparseMatrix<int, Eigen::RowMajor> SP_Matrix_R;
20
21

    //-----------------------helpfull methods---------------------------------
22
23
    void   print_matrix(const Eigen::SparseMatrix<int, Eigen::RowMajor> A);
    void   print_vector(Eigen::VectorXi b);
24
25


Robin Brost's avatar
Robin Brost committed
26
    int    gcd(const int a, const int b);
27
28
    int    gcd_row(const Eigen::SparseVector<int> row, const int b);

Robin Brost's avatar
Robin Brost committed
29
30
    int    lcm(const int a, const int b);
    int    lcm_list(const std::list<int> D);
31

32
33
34
35
    void   swap_rows(Eigen::SparseMatrix<int, Eigen::RowMajor>& mat,  int row1, int row2);
    void   eliminate_row(Eigen::SparseMatrix<int, Eigen::RowMajor>& mat, int row1, int row2);
    int    largest_exponent(const Eigen::SparseMatrix<int, Eigen::ColMajor>& A, const Eigen::VectorXd& x);
    int    index_pivot(const sparseVec row);
Robin Brost's avatar
Robin Brost committed
36
    double F_delta(double x);
37
    double get_delta();
Robin Brost's avatar
Robin Brost committed
38

39
40
    //--------------------matrix transformation-------------------------------

41
42
    void   IREF_Gaussian(Eigen::SparseMatrix<int, Eigen::RowMajor>& A, Eigen::VectorXi& b, const Eigen::VectorXd x);
    void   IRREF_Jordan(Eigen::SparseMatrix<int, Eigen::RowMajor>& A, Eigen::VectorXi& b);
43
44
45

    //-------------------Evaluation--------------------------------------------

46
    void   evaluation(Eigen::SparseMatrix<int, Eigen::RowMajor>& _A, Eigen::VectorXi& b, Eigen::VectorXd& x);
47
    double makeDiv(const std::list<int>& D, double x);
48
49
50
51
52
53
    double safeDot(const std::list<std::pair<int, double>>& S);

private:

    //-----------------------helpfull variables-------------------------------

Robin Brost's avatar
Robin Brost committed
54
55
56
    int    number_pivots_ = 0; //number of rows with a pivot;
    int    largest_exponent_ = 0;
    double delta_ = 0;
57
58
59
};

#endif // EXACTCONSTRAINTSATISFACTION_HH