MINLPView.h

Go to the documentation of this file.
00001 // Copyright (C) 2006 Ivo Nowak and Stefan Vigerske
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // Author: Stefan Vigerske
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         //TODO: VariableIterator, ConstraintIterator, BlockIterator...
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         // evaluation and so on...
00146 };
00147 
00148 #endif //_MINLPVIEW_H_

Generated on Wed Oct 22 03:12:39 2008 for LaGO by  doxygen 1.4.7