00001
00002
00003
00004
00005
00006
00007 #ifndef _MINLPVIEW_H_
00008 #define _MINLPVIEW_H_
00009
00010 #include "standard.h"
00011 #include "MINLPData.h"
00012
00016 class MINLPView {
00017 protected:
00020 class ObjConView {
00021 public:
00022 virtual ~ObjConView() { }
00023
00024 virtual int dim() const=0;
00025 virtual const string& name() const=0;
00026 virtual SepQcFunc::ftype functype() const=0;
00027 virtual Func::CurvatureType curvature() const=0;
00028
00034 virtual double evaluate(const UserVector<double>& x) const=0;
00035
00041 virtual double evaluate(const double* x) const { return evaluate(dvector(x, dim())); }
00042
00048 virtual void gradient(UserVector<double>& grad, const UserVector<double>& x) const=0;
00049
00055 virtual void gradient(double* grad, const double* x) const;
00056
00063 virtual double gradientmult(const UserVector<double>& x, const UserVector<double>& factor) const;
00064
00071 virtual double evaluate_and_gradient(UserVector<double>& grad, const UserVector<double>& x) const { gradient(grad, x); return evaluate(x); }
00072
00079 virtual void hessianmult(UserVector<double>& prod, const UserVector<double>& x, const UserVector<double>& factor) const=0;
00080 };
00081
00082 public:
00083 friend ostream& operator<<(ostream& out, const MINLPView& minlpview);
00086 class VariableView {
00087 public:
00088 friend ostream& operator<<(ostream& out, const VariableView& varview);
00089
00090 virtual int index() const=0;
00091 virtual int block_nr() const=0;
00092 virtual int index_in_block() const=0;
00093 virtual const string& name() const=0;
00094 virtual double lower() const=0;
00095 virtual double upper() const=0;
00096 virtual pair<double, double> bounds() const { return pair<double,double>(lower(), upper()); }
00097 virtual bool discrete() const=0;
00098 };
00099
00102 class ObjectiveView : public virtual ObjConView {
00103 friend ostream& operator<<(ostream& out, const ObjectiveView& objview);
00104 };
00105
00108 class ConstraintView : public virtual ObjConView {
00109 public:
00110 friend ostream& operator<<(ostream& out, const ConstraintView& conview);
00111 virtual int index() const=0;
00112 virtual bool equality() const=0;
00113 };
00114
00117 class BlockView {
00118 public:
00119 virtual int size() const=0;
00120
00121 virtual int operator()(int index) const=0;
00122 };
00123
00124
00125
00126
00127 virtual ~MINLPView() { }
00128
00129 virtual int dim() const=0;
00130
00131 virtual int connr() const=0;
00132
00133 virtual int nr_discr() const=0;
00134
00135 virtual int nr_blocks() const=0;
00136
00137 virtual Pointer<BlockView> blockPtr(int block_nr) const=0;
00138
00139 virtual Pointer<VariableView> varPtr(int index) const=0;
00140
00141 virtual Pointer<ConstraintView> conPtr(int index) const=0;
00142
00143 virtual Pointer<ObjectiveView> objPtr() const=0;
00144
00145
00146 };
00147
00148 #endif //_MINLPVIEW_H_