CouenneExprExp.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef COUENNE_EXPREXP_HPP
00012 #define COUENNE_EXPREXP_HPP
00013
00014 #include <math.h>
00015
00016 #include "CouenneExprUnary.hpp"
00017
00018 namespace Couenne {
00019
00021
00022 class exprExp: public exprUnary {
00023
00024 public:
00025
00027 exprExp (expression *al):
00028 exprUnary (al) {}
00029
00031 expression *clone (Domain *d = NULL) const
00032 {return new exprExp (argument_ -> clone (d));}
00033
00035 inline unary_function F () {return exp;}
00036
00038 std::string printOp () const
00039 {return "exp";}
00040
00042 inline CouNumber gradientNorm (const double *x)
00043 {return (argument_ -> Index () < 0) ? 0. : exp (x [argument_ -> Index ()]);}
00044
00046 expression *differentiate (int index);
00047
00049 void getBounds (expression *&, expression *&);
00050
00052 virtual void getBounds (CouNumber &lb, CouNumber&ub);
00053
00055 void generateCuts (expression *w,
00056 OsiCuts &cs, const CouenneCutGenerator *cg,
00057 t_chg_bounds * = NULL, int = -1,
00058 CouNumber = -COUENNE_INFINITY,
00059 CouNumber = COUENNE_INFINITY);
00060
00062 virtual enum expr_type code () {return COU_EXPREXP;}
00063
00065 bool impliedBound (int, CouNumber *, CouNumber *, t_chg_bounds *, enum auxSign = expression::AUX_EQ);
00066
00069 virtual CouNumber selectBranch (const CouenneObject *obj,
00070 const OsiBranchingInformation *info,
00071 expression * &var,
00072 double * &brpts,
00073 double * &brDist,
00074
00075 int &way);
00076
00078 virtual bool isBijective() const {return true;}
00079
00081 virtual CouNumber inverse(expression *vardep) const
00082 {
00083 return log((*vardep)());
00084 }
00085
00088 virtual bool isCuttable (CouenneProblem *problem, int index) const;
00089
00091
00092
00093 };
00094
00095 }
00096
00097 #endif