11 #include "CoinHelperFunctions.hpp"
17 using namespace Couenne;
24 const OsiBranchingInformation *
info,
34 CouNumber delta = (*(obj -> Reference ())) () - (*
this) ();
42 brpts = (
double *) realloc (brpts,
sizeof (
double));
43 brDist = (
double *) realloc (brDist, 2*
sizeof (
double));
52 std::vector <std::pair <exprVar *, CouNumber> > > >::iterator fi =
eigen_.begin ();
55 std::vector <std::pair <exprVar *, CouNumber> > > >::reverse_iterator ri =
eigen_.rbegin ();
59 bool changed_sign =
false;
63 for (;(((delta < 0.) && (fi !=
eigen_.
end ())) ||
64 ((delta > 0.) && (ri !=
eigen_. rend ())));
67 std::vector <std::pair <exprVar *, CouNumber> > &ev =
68 (delta < 0.) ? fi -> second : ri -> second;
70 if (((delta < 0.) && (fi -> first > 0.)) ||
71 ((delta > 0.) && (ri -> first < 0.))) {
73 if (max_span > 0.)
break;
78 for (std::vector <std::pair <exprVar *, CouNumber> >::iterator
j = ev.begin ();
79 j != ev.end (); ++
j) {
81 int index =
j -> first ->
Index ();
84 lb = info -> lower_ [index],
85 ub = info -> upper_ [index];
99 ((span = (ub-lb) * fabs (
j -> second)) > max_span +
COUENNE_EPS)) {
104 *brpts = obj -> midInterval (info -> solution_ [index], lb, ub, info);
109 if (span >= 0) max_span = span;
121 for (std::map <
exprVar *, std::pair <CouNumber, CouNumber> >::iterator i =
bounds_. begin ();
125 lb = i -> second.first,
126 ub = i -> second.second,
133 ind = var ->
Index ();
139 var = obj -> Reference ();
140 ind = var ->
Index ();
142 *brpts = obj -> midInterval (info -> solution_ [ind],
143 info -> lower_ [ind],
144 info -> upper_ [ind], info);
146 else *brpts = obj -> midInterval (info -> solution_ [ind],
147 info -> lower_ [ind],
148 info -> upper_ [ind], info);
152 return (brDist [0] = brDist [1] = fabs (delta));
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...
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)$.
virtual int Index() const
Return index of variable (only valid for exprVar and exprAux)
std::vector< std::pair< CouNumber, std::vector< std::pair< exprVar *, CouNumber > > > > eigen_
eigenvalues and eigenvectors
std::map< exprVar *, std::pair< CouNumber, CouNumber > > bounds_
current bounds (checked before re-computing eigenvalues/vectors)
double CouNumber
main number type in Couenne