summaryrefslogtreecommitdiff
path: root/newstructure/thirdparty/linux/include/coin/ClpPdcoBase.hpp
blob: cb8fd8fdc6ff1a7e28411fc4a85aa1d1ccb27fa9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* $Id: ClpPdcoBase.hpp 1665 2011-01-04 17:55:54Z lou $ */
// Copyright (C) 2003, International Business Machines
// Corporation and others.  All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).

#ifndef ClpPdcoBase_H
#define ClpPdcoBase_H

#include "CoinPragma.hpp"

#include "CoinPackedMatrix.hpp"
#include "CoinDenseVector.hpp"
class ClpInterior;

/** Abstract base class for tailoring everything for Pcdo

    Since this class is abstract, no object of this type can be created.

    If a derived class provides all methods then all ClpPcdo algorithms
    should work.

    Eventually we should be able to use ClpObjective and ClpMatrixBase.
*/

class ClpPdcoBase  {

public:
     /**@name Virtual methods that the derived classes must provide */
     //@{
     virtual void matVecMult(ClpInterior * model, int mode, double * x, double * y) const = 0;

     virtual void getGrad(ClpInterior * model, CoinDenseVector<double> &x, CoinDenseVector<double> &grad) const = 0;

     virtual void getHessian(ClpInterior * model, CoinDenseVector<double> &x, CoinDenseVector<double> &H) const = 0;

     virtual double getObj(ClpInterior * model, CoinDenseVector<double> &x) const = 0;

     virtual void matPrecon(ClpInterior * model,  double delta, double * x, double * y) const = 0;

     //@}
     //@{
     ///@name Other
     /// Clone
     virtual ClpPdcoBase * clone() const = 0;
     /// Returns type
     inline int type() const {
          return type_;
     };
     /// Sets type
     inline void setType(int type) {
          type_ = type;
     };
     /// Returns size of d1
     inline int sizeD1() const {
          return 1;
     };
     /// Returns d1 as scalar
     inline double getD1() const {
          return d1_;
     };
     /// Returns size of d2
     inline int sizeD2() const {
          return 1;
     };
     /// Returns d2 as scalar
     inline double getD2() const {
          return d2_;
     };
     //@}


protected:

     /**@name Constructors, destructor<br>
        <strong>NOTE</strong>: All constructors are protected. There's no need
        to expose them, after all, this is an abstract class. */
     //@{
     /** Default constructor. */
     ClpPdcoBase();
     /** Destructor (has to be public) */
public:
     virtual ~ClpPdcoBase();
protected:
     // Copy
     ClpPdcoBase(const ClpPdcoBase&);
     // Assignment
     ClpPdcoBase& operator=(const ClpPdcoBase&);
     //@}


protected:
     /**@name Data members
        The data members are protected to allow access for derived classes. */
     //@{
     /// Should be dense vectors
     double d1_;
     double d2_;
     /// type (may be useful)
     int type_;
     //@}
};

#endif