CouenneExprTrilinear.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef COUENNE_EXPRTRILINEAR_H
00011 #define COUENNE_EXPRTRILINEAR_H
00012
00013 #include <vector>
00014
00015 #include "CouenneExprMul.hpp"
00016
00017 namespace Couenne {
00018
00020
00021 class exprTrilinear: public exprMul {
00022
00023 public:
00024
00026 exprTrilinear (expression **, int);
00027
00029 exprTrilinear (expression *, expression *, expression *);
00030
00032 expression *clone (Domain *d = NULL) const
00033 {return new exprTrilinear (clonearglist (d), nargs_);}
00034
00036 CouNumber gradientNorm (const double *x);
00037
00039 virtual void getBounds (expression *&, expression *&);
00040
00042 virtual void getBounds (CouNumber &lb, CouNumber &ub);
00043
00045 void generateCuts (expression *w,
00046 OsiCuts &cs, const CouenneCutGenerator *cg,
00047 t_chg_bounds * = NULL, int = -1,
00048 CouNumber = -COUENNE_INFINITY,
00049 CouNumber = COUENNE_INFINITY);
00050
00052 virtual enum expr_type code ()
00053 {return COU_EXPRTRILINEAR;}
00054
00056 bool impliedBound (int, CouNumber *, CouNumber *, t_chg_bounds *,
00057 enum Couenne::expression::auxSign = Couenne::expression::AUX_EQ);
00058
00061 virtual CouNumber selectBranch (const CouenneObject *obj,
00062 const OsiBranchingInformation *info,
00063 expression * &var,
00064 double * &brpts,
00065 double * &brDist,
00066
00067 int &way);
00068
00070 virtual void closestFeasible (expression *varind,
00071 expression *vardep,
00072 CouNumber &left,
00073 CouNumber &right) const;
00074 };
00075 }
00076
00077 #endif