18 using namespace Couenne;
23 const OsiBranchingInformation *
info,
30 if (brDist) {free (brDist); brDist = NULL;}
37 assert ((xi >= 0) && (yi >= 0) && (zi >= 0));
40 xl = info -> lower_ [xi], yl = info -> lower_ [yi], zl = info -> lower_ [zi],
41 xu = info -> upper_ [xi], yu = info -> upper_ [yi], zu = info -> upper_ [zi];
43 brpts = (
double *) realloc (brpts,
sizeof (
double));
44 brDist = (
double *) realloc (brDist, 2 *
sizeof (
double));
69 #define SETBNDS(l,u,ind) { \
71 if (l < -COUENNE_INFINITY) {\
72 if (u > 1.) {*brpts = 0.; brDist [0] = brDist [1] = 1.; var = arglist_ [ind]; return 1.;}\
73 else {*brpts = 2*-fabs (u) - 1.; brDist [0] = brDist [1] = 1.; var = arglist_ [ind]; return 1.;}\
76 if (u > COUENNE_INFINITY) {\
77 if (l < -1.) {*brpts = 0.; brDist [0] = brDist [1] = 1.; var = arglist_ [ind]; return 1.;}\
78 else {*brpts = 2*fabs (u) + 1.; brDist [0] = brDist [1] = 1.; var = arglist_ [ind]; return 1.;}\
87 if ((xu - xl > yu - yl) && (xu - xl > zu - zl)) {*brpts = .5 * (xl + xu); brDist [0] = brDist [1] = 1.; var =
arglist_ [0];
return 1.;}
88 else if ((yu - yl > zu - zl)) {*brpts = .5 * (yl + yu); brDist [0] = brDist [1] = 1.; var =
arglist_ [1];
return 1.;}
89 else {*brpts = .5 * (zl + zu); brDist [0] = brDist [1] = 1.; var =
arglist_ [2];
return 1.;}
void fint fint fint real fint real real real real real real real real real fint real fint fint fint real fint fint fint fint * info
OsiObject for auxiliary variables $w=f(x)$.
#define SETBNDS(l, u, ind)
virtual int Index() const
Return index of variable (only valid for exprVar and exprAux)
expression ** arglist_
argument list is an array of pointers to other expressions
double CouNumber
main number type in Couenne
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 ...