exprSub.hpp

Go to the documentation of this file.
00001 /* $Id: exprSub.hpp 154 2009-06-16 18:52:53Z pbelotti $ */
00002 /*
00003  * Name:    exprSub.hpp
00004  * Author:  Pietro Belotti
00005  * Purpose: definition of subtractions
00006  *
00007  * (C) Carnegie-Mellon University, 2006. 
00008  * This file is licensed under the Common Public License (CPL)
00009  */
00010 
00011 #ifndef COUENNE_EXPRSUB_HPP
00012 #define COUENNE_EXPRSUB_HPP
00013 
00014 #include "exprOp.hpp"
00015 #include "CouennePrecisions.hpp"
00016 #include "CouenneProblem.hpp"
00017 
00019 
00020 class exprSub: public exprOp {
00021 
00022  public:
00023 
00025   exprSub  (expression **al, int n = 2): 
00026     exprOp (al, n) {} //< non-leaf expression, with argument list
00027 
00029   exprSub (expression *arg0, expression *arg1):
00030     exprOp (arg0, arg1) {}
00031 
00033   expression *clone (Domain *d = NULL) const
00034     {return new exprSub (clonearglist (d), nargs_);}
00035 
00037   std::string printOp () const
00038     {return "-";}
00039 
00041   CouNumber operator () ();
00042 
00044   expression *differentiate (int index); 
00045 
00047   expression *simplify ();
00048 
00050   virtual inline int Linearity () {
00051 
00052     int lin1 = arglist_ [0] -> Linearity ();
00053     int lin2 = arglist_ [1] -> Linearity ();
00054 
00055     if (lin1 < lin2) return lin2;
00056     else             return lin1;
00057   }
00058 
00060   void getBounds (expression *&, expression *&);
00061 
00063   void getBounds (CouNumber &lb, CouNumber &ub);
00064 
00067   virtual exprAux *standardize (CouenneProblem *p, bool addAux = true);
00068 
00070   virtual void generateCuts (expression *, const OsiSolverInterface &, 
00071                              OsiCuts &, const CouenneCutGenerator *,
00072                              t_chg_bounds * = NULL, int = -1,
00073                              CouNumber = -COUENNE_INFINITY, 
00074                              CouNumber =  COUENNE_INFINITY);
00075 
00077   virtual enum expr_type code () {return COU_EXPRSUB;}
00078 
00080   bool impliedBound (int, CouNumber *, CouNumber *, t_chg_bounds *);
00081 };
00082 
00083 
00085 
00086 inline CouNumber exprSub::operator () ()
00087 {return ((*(*arglist_)) () - (*(arglist_ [1])) ());}
00088 
00089 #endif

Generated on Wed May 19 03:07:13 2010 for Couenne by  doxygen 1.4.7