28 #define HEUR_NAME "actconsdiving" 29 #define HEUR_DESC "LP diving heuristic that chooses fixings w.r.t. the active constraints" 30 #define HEUR_DISPCHAR 'a' 31 #define HEUR_PRIORITY -1003700 33 #define HEUR_FREQOFS 5 34 #define HEUR_MAXDEPTH -1 35 #define HEUR_TIMING SCIP_HEURTIMING_AFTERLPPLUNGE 36 #define HEUR_USESSUBSCIP FALSE 37 #define DIVESET_DIVETYPES SCIP_DIVETYPE_INTEGRALITY 43 #define DEFAULT_MINRELDEPTH 0.0 44 #define DEFAULT_MAXRELDEPTH 1.0 45 #define DEFAULT_MAXLPITERQUOT 0.05 46 #define DEFAULT_MAXLPITEROFS 1000 47 #define DEFAULT_MAXDIVEUBQUOT 0.8 49 #define DEFAULT_MAXDIVEAVGQUOT 0.0 51 #define DEFAULT_MAXDIVEUBQUOTNOSOL 1.0 52 #define DEFAULT_MAXDIVEAVGQUOTNOSOL 1.0 53 #define DEFAULT_BACKTRACK TRUE 54 #define DEFAULT_LPRESOLVEDOMCHGQUOT 0.15 55 #define DEFAULT_LPSOLVEFREQ 0 56 #define DEFAULT_ONLYLPBRANCHCANDS TRUE 58 #define DEFAULT_RANDSEED 149 92 assert(downscore !=
NULL);
93 assert(upscore !=
NULL);
109 for( r = 0; r < nrows; ++r )
160 upcoefsum /= nlprows;
161 downcoefsum /= nlprows;
168 assert(score <= 3.0);
169 assert(score >= 0.0);
171 *downscore = downcoefsum;
172 *upscore = upcoefsum;
186 assert(scip !=
NULL);
202 assert(heur !=
NULL);
204 assert(scip !=
NULL);
208 assert(heurdata !=
NULL);
223 assert(heur !=
NULL);
228 assert(heurdata !=
NULL);
243 assert(heur !=
NULL);
248 assert(heurdata !=
NULL);
270 assert(diveset !=
NULL);
302 if( mayrounddown && mayroundup )
305 if(
SCIPisEQ(scip, candsfrac, 0.5) )
308 *roundup = (candsfrac > 0.5);
310 else if( mayrounddown || mayroundup )
311 *roundup = mayrounddown;
313 *roundup = (downscore > upscore);
316 candsfrac = 1.0 - candsfrac;
319 if(
SCIPisEQ(scip, candsfrac, 0.01) )
327 else if( candsfrac < 0.01 )
335 if( mayrounddown || mayroundup )
338 assert(!(mayrounddown || mayroundup) || *score <= 0.0);
363 assert(heur !=
NULL);
#define DEFAULT_MAXDIVEAVGQUOT
int SCIPgetNIntVars(SCIP *scip)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#define DEFAULT_MAXLPITEROFS
#define DEFAULT_BACKTRACK
SCIP_Real * SCIPcolGetVals(SCIP_COL *col)
SCIP_RETCODE SCIPsetHeurExit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXIT((*heurexit)))
SCIP_DIVESET ** SCIPheurGetDivesets(SCIP_HEUR *heur)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_HeurData SCIP_HEURDATA
#define SCIPfreeBlockMemory(scip, ptr)
SCIP_RETCODE SCIPincludeHeurBasic(SCIP *scip, SCIP_HEUR **heur, const char *name, const char *desc, char dispchar, int priority, int freq, int freqofs, int maxdepth, SCIP_HEURTIMING timingmask, SCIP_Bool usessubscip, SCIP_DECL_HEUREXEC((*heurexec)), SCIP_HEURDATA *heurdata)
int SCIPrandomGetInt(SCIP_RANDNUMGEN *randnumgen, int minrandval, int maxrandval)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
#define DIVESET_DIVETYPES
#define DEFAULT_MAXDIVEUBQUOTNOSOL
static SCIP_DECL_HEURFREE(heurFreeActconsdiving)
SCIP_Real SCIPgetBranchScore(SCIP *scip, SCIP_VAR *var, SCIP_Real downgain, SCIP_Real upgain)
static SCIP_DECL_HEUREXEC(heurExecActconsdiving)
const char * SCIPheurGetName(SCIP_HEUR *heur)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree)))
SCIP_ROW ** SCIPcolGetRows(SCIP_COL *col)
#define DEFAULT_ONLYLPBRANCHCANDS
#define DEFAULT_MINRELDEPTH
LP diving heuristic that chooses fixings w.r.t. the active constraints the variable appear in...
int SCIPgetNLPRows(SCIP *scip)
static SCIP_DECL_HEURINIT(heurInitActconsdiving)
static SCIP_Real getNActiveConsScore(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real *downscore, SCIP_Real *upscore)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
int SCIPheurGetNDivesets(SCIP_HEUR *heur)
#define SCIP_PROBINGSCORE_PENALTYRATIO
#define DEFAULT_MAXLPITERQUOT
SCIP_RANDNUMGEN * SCIPdivesetGetRandnumgen(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPcreateDiveset(SCIP *scip, SCIP_DIVESET **diveset, SCIP_HEUR *heur, const char *name, SCIP_Real minreldepth, SCIP_Real maxreldepth, SCIP_Real maxlpiterquot, SCIP_Real maxdiveubquot, SCIP_Real maxdiveavgquot, SCIP_Real maxdiveubquotnosol, SCIP_Real maxdiveavgquotnosol, SCIP_Real lpresolvedomchgquot, int lpsolvefreq, int maxlpiterofs, unsigned int initialseed, SCIP_Bool backtrack, SCIP_Bool onlylpbranchcands, SCIP_Bool specificsos1score, SCIP_DECL_DIVESETGETSCORE((*divesetgetscore)))
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
int SCIPgetNBinVars(SCIP *scip)
#define DEFAULT_MAXDIVEUBQUOT
static SCIP_DECL_HEUREXIT(heurExitActconsdiving)
#define DEFAULT_MAXDIVEAVGQUOTNOSOL
SCIP_RETCODE SCIPperformGenericDivingAlgorithm(SCIP *scip, SCIP_DIVESET *diveset, SCIP_SOL *worksol, SCIP_HEUR *heur, SCIP_RESULT *result, SCIP_Bool nodeinfeasible)
#define DEFAULT_LPSOLVEFREQ
SCIP_RETCODE SCIPsetHeurInit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINIT((*heurinit)))
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURCOPY((*heurcopy)))
static SCIP_DECL_DIVESETGETSCORE(divesetGetScoreActconsdiving)
#define DEFAULT_LPRESOLVEDOMCHGQUOT
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
SCIP_RETCODE SCIPincludeHeurActconsdiving(SCIP *scip)
int SCIPcolGetNLPNonz(SCIP_COL *col)
SCIP_SOL * SCIPdivesetGetWorkSolution(SCIP_DIVESET *diveset)
#define DEFAULT_MAXRELDEPTH
SCIP_Real SCIProwGetNorm(SCIP_ROW *row)
SCIP_Bool SCIPvarMayRoundUp(SCIP_VAR *var)
static SCIP_DECL_HEURCOPY(heurCopyActconsdiving)
SCIP_Bool SCIPvarMayRoundDown(SCIP_VAR *var)
SCIP_RETCODE SCIPcreateSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)