Couenne 0.5.8
Loading...
Searching...
No Matches
CouenneExprOddPow.hpp
Go to the documentation of this file.
1/* $Id: CouenneExprOddPow.hpp 698 2011-06-20 13:36:43Z pbelotti $
2 *
3 * Name: CouenneExprOddPow.hpp
4 * Author: Pietro Belotti
5 * Purpose: definition of powers with odd exponent
6 *
7 * (C) Pietro Belotti 2011
8 * This file is licensed under the Eclipse Public License (EPL)
9 */
10
11#ifndef COUENNE_EXPRODDPOW_HPP
12#define COUENNE_EXPRODDPOW_HPP
13
14#include <math.h>
15
16#include "CouenneExprPow.hpp"
17
18namespace Couenne {
19
21
22 class exprOddPow: public exprPow {
23
24 public:
25
27 exprOddPow (expression **al, int n = 2):
28 exprOp (al, n) {} //< non-leaf expression, with argument list
29
32 exprOp (arg0, arg1) {}
33
35 expression *clone (Domain *d = NULL) const
36 {return new exprOddPow (clonearglist (d), nargs_);}
37
39 std::string printOp () const
40 {return "^";}
41
44
47
49 void getBounds (CouNumber &lb, CouNumber &ub);
50
53 exprAux *standardize (CouenneProblem *p, bool addAux = true);
54
56 void generateCuts (expression *w, //const OsiSolverInterface &si,
57 OsiCuts &cs, const CouenneCutGenerator *cg,
58 t_chg_bounds * = NULL, int = -1,
61
65 {return arglist_ [0];}
66
68 virtual enum expr_type code ()
69 {return COU_EXPRPOW;}
70
73
76 virtual CouNumber selectBranch (const CouenneObject *obj,
77 const OsiBranchingInformation *info,
78 expression * &var,
79 double * &brpts,
80 double * &brDist, // distance of current LP
81 // point to new convexifications
82 int &way);
83
86 virtual bool isCuttable (CouenneProblem *problem, int index) const;
87 };
88
91 // return (currValue_ = safe_pow (base, exponent));
92 return (safe_pow ((**arglist_) (), (*(arglist_ [1])) ()));
93 }
94}
95
96#endif
#define COUENNE_INFINITY
Cut Generator for linear convexifications.
OsiObject for auxiliary variables $w=f(x)$.
Class for MINLP problems with symbolic information.
Define a dynamic point+bounds, with a way to save and restore previous points+bounds through a LIFO s...
Auxiliary variable.
Power of an expression (binary operator), with constant.
expression * getFixVar()
return an index to the variable's argument that is better fixed in a branching rule for solving a non...
virtual bool isCuttable(CouenneProblem *problem, int index) const
can this expression be further linearized or are we on its concave ("bad") side
void generateCuts(expression *w, OsiCuts &cs, const CouenneCutGenerator *cg, t_chg_bounds *=NULL, int=-1, CouNumber=-COUENNE_INFINITY, CouNumber=COUENNE_INFINITY)
generate equality between *this and *w
expression * clone(Domain *d=NULL) const
cloning method
exprAux * standardize(CouenneProblem *p, bool addAux=true)
reduce expression in standard form, creating additional aux variables (and constraints)
void getBounds(expression *&, expression *&)
Get lower and upper bound of an expression (if any)
virtual enum expr_type code()
code for comparison
std::string printOp() const
print operator
void getBounds(CouNumber &lb, CouNumber &ub)
Get value of lower and upper bound of an expression (if any)
exprOddPow(expression **al, int n=2)
Constructor.
CouNumber operator()()
function for the evaluation of the expression
exprOddPow(expression *arg0, expression *arg1)
Constructor with only two arguments.
bool impliedBound(int, CouNumber *, CouNumber *, t_chg_bounds *, enum auxSign=expression::AUX_EQ)
implied bound processing
virtual CouNumber selectBranch(const CouenneObject *obj, const OsiBranchingInformation *info, expression *&var, double *&brpts, double *&brDist, int &way)
set up branching object by evaluating many branching points for each expression's arguments
general n-ary operator-type expression: requires argument list.
int nargs_
number of arguments (cardinality of arglist)
expression ** arglist_
argument list is an array of pointers to other expressions
expression ** clonearglist(Domain *d=NULL) const
clone argument list (for use with clone method)
Power of an expression (binary operator), with constant.
Expression base class.
auxSign
"sign" of the constraint defining an auxiliary.
status of lower/upper bound of a variable, to be checked/modified in bound tightening
general include file for different compilers
CouNumber safe_pow(CouNumber base, CouNumber exponent, bool signpower=false)
compute power and check for integer-and-odd inverse exponent
double CouNumber
main number type in Couenne
expr_type
code returned by the method expression::code()