// Copyright (C) 2003, International Business Machines // Corporation and others. All Rights Reserved. #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 &x, CoinDenseVector &grad) const=0; virtual void getHessian(ClpInterior * model, CoinDenseVector &x, CoinDenseVector &H) const=0; virtual double getObj(ClpInterior * model, CoinDenseVector &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
NOTE: 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