All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
heur_octane.c
Go to the documentation of this file.
21 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
40 #define DEFAULT_USEFRACSPACE TRUE /**< use heuristic for the space of fractional variables or for whole space? */
47 int f_first; /**< {0,1}-points to be generated at first in order to check whether restart is necessary */
49 SCIP_Bool usefracspace; /**< use heuristic for the space of fractional variables or for the whole space? */
50 SCIP_Bool useobjray; /**< should the inner normal of the objective be used as one ray direction? */
51 SCIP_Bool useavgray; /**< should the average ray of the basic cone be used as one ray direction? */
52 SCIP_Bool usediffray; /**< should difference between root sol and current LP sol be used as one ray direction? */
53 SCIP_Bool useavgwgtray; /**< should the weighted average ray of the basic cone be used as one ray direction? */
54 SCIP_Bool useavgnbray; /**< should the average ray of the nonbasic cone be used as one ray direction? */
63 /** tries to insert the facet obtained from facet i flipped in component j into the list of the fmax nearest facets */
98 /* inserting new facet into list, new facet is facet at position i flipped in coordinate j, new distance lam */
108 /** constructs a solution from a given facet paying attention to the transformations made at the beginning of OCTANE */
130 /* after permutation, a variable should be set to 1, iff there was no reflection in this coordinate and the hit
145 /** generates the direction of the shooting ray as the inner normal of the objective function */
165 /** generates the direction of the shooting ray as the difference between the root and the current LP solution */
187 /** generates the direction of the shooting ray as the average of the extreme rays of the basic cone */
229 SCIP_CALL( SCIPgetLPBInvACol(scip, SCIPcolGetLPPos(SCIPvarGetCol(subspacevars[j])), tableaurows[j]) );
271 /** generates the direction of the shooting ray as the average of the normalized non-basic vars and rows */
390 /** translates the inner point of the LP to an inner point rayorigin of the unit hyper octahedron and
488 /* reverse search for facets from which the actual facet can be got by a single, decreasing + to - flip */
489 /* a facet will be inserted into the queue, iff it is one of the fmax closest ones already found */
490 for( j = 0; j < nsubspacevars && !facets[i][j] && SCIPisFeasGT(scip, negquotient[j], lambda[i]); ++j )
499 /* reverse search for facets from which the actual facet can be got by a single, nonincreasing - to + flip */
500 /* a facet will be inserted into the queue, iff it is one of the fmax closest ones already found */
501 for( j = nsubspacevars - 1; j >= 0 && facets[i][j] && SCIPisFeasLE(scip, negquotient[j], lambda[i]); --j )
630 SCIP_SOL** first_sols; /* stores the first ffirst sols in order to check for common violation of a row */
634 SCIP_VAR** subspacevars; /* the variables on which the search is performed. Either coinciding with vars or with the
645 SCIP_Bool usefracspace; /* determines whether the search concentrates on fractional variables and fixes integer ones */
646 SCIP_Bool cons_viol; /* used for checking whether a linear constraint is violated by one of the possible solutions */
659 int f_first; /* {0,1}-points to be generated at first in order to check whether a restart is necessary */
700 if( SCIPgetNNodes(scip) % (SCIPheurGetNCalls(heur) / (100 * SCIPheurGetNBestSolsFound(heur) + 10*heurdata->nsuccess + 1) + 1) != 0 )
718 /* determine the space one which OCTANE should work either as the whole space or as the space of fractional variables */
796 SCIPdebugMessage("run Octane heuristic on %s variables, which are %d vars, generate at most %d facets, using rule number %d\n",
864 /* calculate negquotient, the ratio of rayorigin and raydirection, paying special attention to the case raydirection[i] == 0 */
886 SCIPsortDownRealRealRealBoolPtr( negquotient, raydirection, rayorigin, sign, (void**) subspacevars, nsubspacevars);
896 /* find the first facet of the octahedron hit by a ray shot from rayorigin into direction raydirection */
918 generateNeighborFacets(scip, facets, lambda, rayorigin, raydirection, negquotient, nsubspacevars, f_max, i, &nfacets);
924 SCIP_CALL( getSolFromFacet(scip, facets[i], first_sols[i], sign, subspacevars, nsubspacevars) );
956 /* if the row's lhs is violated by the first sol, test, whether it is violated by the next ones, too */
997 /* if there was no row violated by all solutions, try whether one or more of them are feasible */
1005 /* search for further facets and construct and try solutions out of facets fixed as closest ones */
1010 generateNeighborFacets(scip, facets, lambda, rayorigin, raydirection, negquotient, nsubspacevars, f_max, i, &nfacets);
|