exprSum.hpp

Go to the documentation of this file.
00001 /* $Id: exprSum.hpp 297 2010-02-13 14:13:55Z pbelotti $
00002  *
00003  * Name:    exprSum.hpp
00004  * Author:  Pietro Belotti
00005  * Purpose: definition of sum expressions
00006  *
00007  * (C) Carnegie-Mellon University, 2006-09.
00008  * This file is licensed under the Common Public License (CPL)
00009  */
00010 
00011 #ifndef COUENNE_EXPRSUM_H
00012 #define COUENNE_EXPRSUM_H
00013 
00014 #include <vector>
00015 
00016 #include "exprOp.hpp"
00017 
00018 
00020 
00021 class exprSum: public exprOp {
00022 
00023  public:
00024 
00026   exprSum  (expression ** = NULL, int = 0);
00027 
00029   exprSum (expression *, expression *);
00030 
00032   virtual ~exprSum () {}
00033  
00035   virtual expression *clone (Domain *d = NULL) const
00036     {return new exprSum (clonearglist (d), nargs_);}
00037 
00039   std::string printOp () const
00040     {return "+";}
00041 
00043   virtual CouNumber operator () ();
00044 
00046   virtual expression *differentiate (int index); 
00047 
00049   virtual expression *simplify ();
00050 
00052   virtual int Linearity ();
00053 
00055   virtual void getBounds (expression *&, expression *&);
00056 
00058   virtual void getBounds (CouNumber &, CouNumber &);
00059 
00062   virtual exprAux *standardize (CouenneProblem *p, bool addAux = true);
00063 
00065   virtual void generateCuts (expression *, //const OsiSolverInterface &, 
00066                              OsiCuts &, const CouenneCutGenerator *,
00067                              t_chg_bounds * = NULL, int = -1, 
00068                              CouNumber = -COUENNE_INFINITY, 
00069                              CouNumber =  COUENNE_INFINITY);
00070 
00072   virtual enum expr_type code () 
00073     {return COU_EXPRSUM;}
00074 
00096   virtual bool impliedBound (int, CouNumber *, CouNumber *, t_chg_bounds *);
00097 
00101   exprAux *createQuadratic (CouenneProblem *);
00102 
00103 protected:
00104 
00106   int impliedBoundSum (CouNumber wl, 
00107                        CouNumber wu, 
00108                        std::vector <CouNumber> &xl,
00109                        std::vector <CouNumber> &xu,
00110                        std::vector <std::pair <int, CouNumber> > &nl,
00111                        std::vector <std::pair <int, CouNumber> > &nu);
00112 };
00113 
00114 
00116 
00117 inline CouNumber exprSum::operator () () {
00118 
00119   CouNumber ret = 0;
00120 
00121   expression **al = arglist_;
00122 
00123   for (int n = nargs_; n--;)
00124     ret += (**al++) ();
00125 
00126   return ret;
00127 }
00128 
00129 #endif

Generated on Wed May 19 03:12:37 2010 for Couenne by  doxygen 1.4.7