144#define SEPA_NAME "lagromory"
145#define SEPA_DESC "separator for Lagromory cuts for MIP relaxations"
146#define SEPA_PRIORITY -8000
148#define SEPA_MAXBOUNDDIST 1.0
149#define SEPA_USESSUBSCIP FALSE
150#define SEPA_DELAY FALSE
153#define DEFAULT_AWAY 0.01
154#define DEFAULT_DELAYEDCUTS FALSE
155#define DEFAULT_SEPARATEROWS TRUE
156#define DEFAULT_SORTCUTOFFSOL TRUE
157#define DEFAULT_SIDETYPEBASIS TRUE
158#define DEFAULT_DYNAMICCUTS TRUE
159#define DEFAULT_MAKEINTEGRAL FALSE
160#define DEFAULT_FORCECUTS FALSE
161#define DEFAULT_ALLOWLOCAL FALSE
164#define DEFAULT_MAXROUNDSROOT 1
165#define DEFAULT_MAXROUNDS 1
166#define DEFAULT_DUALDEGENERACYRATETHRESHOLD 0.5
167#define DEFAULT_VARCONSRATIOTHRESHOLD 1.0
168#define DEFAULT_MINRESTART 1
170#define DEFAULT_PERLPMAXCUTSROOT 50
171#define DEFAULT_PERLPMAXCUTS 10
172#define DEFAULT_PERROUNDLPITERLIMITFACTOR -1.0
174#define DEFAULT_ROOTLPITERLIMITFACTOR -1.0
176#define DEFAULT_TOTALLPITERLIMITFACTOR -1.0
178#define DEFAULT_PERROUNDMAXLPITERS 50000
179#define DEFAULT_PERROUNDCUTSFACTORROOT 1.0
181#define DEFAULT_PERROUNDCUTSFACTOR 0.5
183#define DEFAULT_TOTALCUTSFACTOR 50.0
184#define DEFAULT_MAXMAINITERS 4
185#define DEFAULT_MAXSUBGRADIENTITERS 6
188#define DEFAULT_MUPARAMCONST TRUE
189#define DEFAULT_MUPARAMINIT 0.01
190#define DEFAULT_MUPARAMLB 0.0
191#define DEFAULT_MUPARAMUB 2.0
192#define DEFAULT_MUBACKTRACKFACTOR 0.5
194#define DEFAULT_MUSLAB1FACTOR 10.0
196#define DEFAULT_MUSLAB2FACTOR 2.0
198#define DEFAULT_MUSLAB3FACTOR 0.5
200#define DEFAULT_DELTASLAB1UB 0.001
202#define DEFAULT_DELTASLAB2UB 0.01
204#define DEFAULT_UBPARAMPOSFACTOR 2.0
206#define DEFAULT_UBPARAMNEGFACTOR 0.5
208#define DEFAULT_MAXLAGRANGIANVALSFORAVG 2
209#define DEFAULT_MAXCONSECITERSFORMUUPDATE 10
210#define DEFAULT_PERROOTLPITERFACTOR 0.2
212#define DEFAULT_PERLPITERFACTOR 0.1
214#define DEFAULT_CUTGENFREQ 1
215#define DEFAULT_CUTADDFREQ 1
216#define DEFAULT_CUTSFILTERFACTOR 1.0
217#define DEFAULT_OPTIMALFACEPRIORITY 2
219#define DEFAULT_AGGREGATECUTS TRUE
221#define DEFAULT_PROJECTIONTYPE 2
224#define DEFAULT_STABILITYCENTERTYPE 1
226#define DEFAULT_RADIUSINIT 0.5
227#define DEFAULT_RADIUSMAX 20.0
228#define DEFAULT_RADIUSMIN 1e-6
229#define DEFAULT_CONST 2.0
230#define DEFAULT_RADIUSUPDATEWEIGHT 0.98
234#define MAKECONTINTEGRAL FALSE
235#define POSTPROCESS TRUE
236#define BOUNDSWITCH 0.9999
238#define FIXINTEGRALRHS FALSE
239#define MAXAGGRLEN(ncols) (0.1*(ncols)+1000)
250 SCIP_Bool delayedcuts;
251 SCIP_Bool separaterows;
252 SCIP_Bool sortcutoffsol;
253 SCIP_Bool sidetypebasis;
254 SCIP_Bool dynamiccuts;
255 SCIP_Bool makeintegral;
257 SCIP_Bool allowlocal;
264 int nrowsinhardcutslp;
265 int nrunsinsoftcutslp;
271 SCIP_Real dualdegeneracyratethreshold;
272 SCIP_Real varconsratiothreshold;
275 int nmaxcutsperlproot;
277 SCIP_Real perroundlpiterlimitfactor;
279 SCIP_Real rootlpiterlimitfactor;
281 SCIP_Real totallpiterlimitfactor;
283 int perroundnmaxlpiters;
284 SCIP_Real perroundcutsfactorroot;
286 SCIP_Real perroundcutsfactor;
288 SCIP_Real totalcutsfactor;
290 int nmaxsubgradientiters;
291 int nmaxperroundlpiters;
294 int nmaxtotallpiters;
296 int nmaxperroundcutsroot;
297 int nmaxperroundcuts;
302 SCIP_Bool muparamconst;
303 SCIP_Real muparaminit;
306 SCIP_Real mubacktrackfactor;
308 SCIP_Real muslab1factor;
310 SCIP_Real muslab2factor;
312 SCIP_Real muslab3factor;
313 SCIP_Real deltaslab1ub;
315 SCIP_Real deltaslab2ub;
317 SCIP_Real ubparamposfactor;
319 SCIP_Real ubparamnegfactor;
321 int nmaxlagrangianvalsforavg;
322 int nmaxconsecitersformuupdate;
323 SCIP_Real perrootlpiterfactor;
325 SCIP_Real perlpiterfactor;
329 SCIP_Real cutsfilterfactor;
330 int optimalfacepriority;
332 SCIP_Bool aggregatecuts;
338 int stabilitycentertype;
340 SCIP_Real radiusinit;
344 SCIP_Real radiusupdateweight;
367 SCIP_Longint nrootlpiters;
375 nruns =
sepadata->nrunsinsoftcutslp;
385 if( nruns != runnum )
393 sepadata->nmaxrootlpiters = (int)(
sepadata->rootlpiterlimitfactor * nrootlpiters);
403 sepadata->nmaxtotallpiters = (int)(
sepadata->totallpiterlimitfactor * nrootlpiters);
413 sepadata->nmaxperroundlpiters = (int)(
sepadata->perroundlpiterlimitfactor * nrootlpiters);
421 if(
sepadata->perroundnmaxlpiters > 0 )
428 for(
int i = 0;
i < ncols; ++
i )
442 sepadata->nrunsinsoftcutslp = runnum;
531 for(
int i = 0;
i < ncols; ++
i )
546 for(
int i = 0;
i < nrows; ++
i )
560 for(
int i = 0;
i < nrows; ++
i )
602 for(
int i =
sepadata->nrowsinhardcutslp - nrows;
i < ncuts; ++
i )
617 for(
int i =
sepadata->nrowsinhardcutslp - nrows;
i < ncuts; ++
i )
652 sepadata->nrowsinhardcutslp = nrows + ncuts;
676 if( (*sepadata)->lpiwithhardcuts !=
NULL )
681 (*sepadata)->nrowsinhardcutslp = 0;
682 (*sepadata)->nrunsinsoftcutslp = 0;
683 (*sepadata)->ncalls = 0;
684 (*sepadata)->nmaxperroundlpiters = 0;
685 (*sepadata)->nmaxrootlpiters = 0;
686 (*sepadata)->nrootlpiters = 0;
687 (*sepadata)->nmaxtotallpiters = 0;
688 (*sepadata)->ntotallpiters = 0;
689 (*sepadata)->nmaxperroundcutsroot = 0;
690 (*sepadata)->nmaxperroundcuts = 0;
691 (*sepadata)->nmaxtotalcuts = 0;
692 (*sepadata)->ntotalcuts = 0;
717 SCIP_Real deltaslab1ub;
718 SCIP_Real deltaslab2ub;
719 SCIP_Real muslab1factor;
720 SCIP_Real muslab2factor;
721 SCIP_Real muslab3factor;
738 muslab1factor =
sepadata->muslab1factor;
739 muslab2factor =
sepadata->muslab2factor;
740 muslab3factor =
sepadata->muslab3factor;
746 muslab1factor =
sepadata->muslab1factor;
747 muslab2factor =
sepadata->muslab3factor;
748 muslab3factor =
sepadata->muslab2factor;
752 muslab1factor =
sepadata->muslab3factor;
753 muslab2factor =
sepadata->muslab1factor;
754 muslab3factor =
sepadata->muslab2factor;
762 muslab1factor =
sepadata->muslab2factor;
763 muslab2factor =
sepadata->muslab1factor;
764 muslab3factor =
sepadata->muslab3factor;
770 muslab1factor =
sepadata->muslab2factor;
771 muslab2factor =
sepadata->muslab3factor;
772 muslab3factor =
sepadata->muslab1factor;
776 muslab1factor =
sepadata->muslab3factor;
777 muslab2factor =
sepadata->muslab2factor;
778 muslab3factor =
sepadata->muslab1factor;
857 for(
int i = 0;
i < ncuts;
i++ )
879 (*nnzsubgradientdualprod)++;
906 for(
int i = 0;
i < ncuts;
i++ )
928 for(
int i = 0;
i < ncuts;
i++ )
968 if(
sepadata->optimalfacepriority <= 1 )
989 if(
sepadata->optimalfacepriority <= 1 )
1228 alpha = 1.0 / weight;
1279 if(
sepadata->projectiontype == 1 )
1284 else if(
sepadata->projectiontype == 2 )
1289 else if(
sepadata->projectiontype == 3 )
1296 if(
sepadata->stabilitycentertype == 1 )
1320 SCIP_Bool backtrack,
1344 for(
int i = 0;
i < ncuts;
i++ )
1358 for(
int i = 0;
i < ncuts;
i++ )
1364 for(
int i = 0;
i < ncuts;
i++ )
1375 for(
int i = 0;
i < ncuts;
i++ )
1397 for(
int i = 0;
i < ncuts;
i++ )
1407 for(
int i = 0;
i < ncuts;
i++ )
1474 SCIP_Bool* solfound,
1482 SCIP_Real timelimit;
1490 SCIP_Longint ntotallpiters;
1514 if( timelimit <= 0.0 )
1531 else if( (
depth > 0) &&
1536 if(
sepadata->nmaxperroundlpiters >= 0 )
1540 if( iterlimit >= 0 )
1579 for(
int i = 0;
i < ncols; ++
i )
1612 SCIP_Bool* solfound,
1617 SCIP_Real timelimit;
1636 if( timelimit <= 0.0 )
1654 for(
int i = 0;
i < ncols; ++
i )
1693 SCIP_Real minactivity;
1694 SCIP_Real maxactivity;
1745 for( v = 0; v <
cutnnz; ++v )
1785 SCIPdebugMsg(
scip,
"cut <%s> is infeasible (sides=[%g,%g], act=[%g,%g])\n",
1794 ++(*ngeneratednewcuts);
1821 SCIP_Real minactivity;
1822 SCIP_Real maxactivity;
1919 for(
int i = 0;
i < ncols;
i++ )
1993 SCIPdebugMsg(
scip,
"cut <%s> is infeasible (sides=[%g,%g], act=[%g,%g])\n",
2005 for(
int i = 0;
i < ncols;
i++ )
2033 SCIP_Bool allowlocal,
2093 for(
int i = 0;
i < nrows; ++
i )
2185 NULL,
minfrac,
maxfrac, 1.0, aggrrow,
cutcoefs, &
cutrhs,
cutinds, &
cutnnz, &
cutefficacy, &
cutrank,
2245 for(
int i = 0;
i < ncuts;
i++ )
2270 for(
int i = 0;
i < ncols;
i++ )
2283 for(
int i = 0;
i < ncols;
i++)
2331 SCIP_Bool allowlocal,
2369 SCIP_Bool backtrack;
2462 (*nbestdualupdates)++;
2568 SCIP_Bool allowlocal,
2619 for(
int i = 0;
i < ncuts && !*
cutoff;
i++ )
2727 SCIP_Bool allowlocal,
2811 (
sepadata->nmaxsubgradientiters + 1)) );
2822 for(
int i = 0;
i < ncols;
i++ )
2879 ngeneratedcurrroundcuts, 0, -1, -1, 0.0,
NULL,
ngeneratedcurrroundcuts,
TRUE, 0.0, 0.0, 0.0, 0.0, -1,
2884 SCIP_CALL(
updateDualVector(
scip,
sepadata,
dualvector,
dualvector,
nsoftcuts, 0, -1, -1, 0.0,
NULL,
3010 for(
int i = 0;
i < nrows;
i++ )
3016 dualsol[nrows +
i] = 0.0;
3139 SCIP_Real varconsratio;
3190 if( ncols == 0 || nrows == 0 )
3204 if( bestsol !=
NULL )
3206 for(
int i = 0;
i < ncols; ++
i )
3223 for(
int i = 0;
i < ncols; ++
i )
3276 "iterations for maximal separating LP iterations in the root node (negative for no limit)",
3280 "iterations for maximal separating LP iterations in the tree (negative for no limit)",
3284 "iterations for maximal separating LP iterations per separation round (negative for no limit)",
3289 "columns for number of cuts separated per separation round in root node", &
sepadata->perroundcutsfactorroot,
3293 "columns for number of cuts separated per separation round at a non-root node",
3341 "iterations for iteration limit of each separating LP (negative for no limit)",
3345 "iterations for iteration limit of each separating LP (negative for no limit)", &
sepadata->perlpiterfactor,
TRUE,
3369 "violation score used for updating ball radius", &
sepadata->radiusupdateweight,
TRUE,
3373 "rate for separator execution", &
sepadata->dualdegeneracyratethreshold,
FALSE,
3377 "ratio on optimal face for separator execution", &
sepadata->varconsratiothreshold,
FALSE,
3418 "iterations per separation round (-1: unlimited)", &
sepadata->perroundnmaxlpiters,
FALSE,
3434 "iterations of the relax-and-cut algorithm", &
sepadata->nmaxsubgradientiters,
TRUE,
3444 "for rolling average of Lagrangian value", &
sepadata->nmaxlagrangianvalsforavg,
TRUE,
3448 "iterations used to determine if mu needs to be backtracked", &
sepadata->nmaxconsecitersformuupdate,
TRUE,
3452 "are projected for stabilization (0: no projection, 1: L1-norm ball projection, 2: L2-norm ball projection, 3: "
3456 "taking weighted average of Lagrangian multipliers for stabilization (0: no weighted stabilization, 1: best "
3461 "separator execution (0: low priority, 1: medium priority, 2: high priority)",
3465 "execution (0: from beginning of the instance solving, >= n with n >= 1: from restart round n)",
#define QUAD_ARRAY_STORE(a, idx, x)
#define SCIPquadprecProdDD(r, a, b)
#define QUAD_ARRAY_SIZE(size)
#define QUAD_ASSIGN(a, constant)
#define SCIPquadprecSumQQ(r, a, b)
#define QUAD_ARRAY_LOAD(r, a, idx)
#define SCIP_LONGINT_FORMAT
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_Real SCIPgetTransObjoffset(SCIP *scip)
SCIP_OBJSENSE SCIPgetObjsense(SCIP *scip)
SCIP_RETCODE SCIPlpiSetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, const SCIP_LPISTATE *lpistate)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
SCIP_RETCODE SCIPheurPassSolTrySol(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *sol)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
int SCIPcolGetLPPos(SCIP_COL *col)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_Bool SCIPcolIsIntegral(SCIP_COL *col)
SCIP_Real SCIPcolGetObj(SCIP_COL *col)
SCIP_Real SCIPcolGetLb(SCIP_COL *col)
SCIP_Real SCIPcolGetPrimsol(SCIP_COL *col)
SCIP_Real SCIPcolGetUb(SCIP_COL *col)
SCIP_RETCODE SCIPaddPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPaggrRowCreate(SCIP *scip, SCIP_AGGRROW **aggrrow)
SCIP_Bool SCIPisCutNew(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIPisEfficacious(SCIP *scip, SCIP_Real efficacy)
void SCIPaggrRowFree(SCIP *scip, SCIP_AGGRROW **aggrrow)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPaggrRowSumRows(SCIP *scip, SCIP_AGGRROW *aggrrow, SCIP_Real *weights, int *rowinds, int nrowinds, SCIP_Bool sidetypebasis, SCIP_Bool allowlocal, int negslack, int maxaggrlen, SCIP_Bool *valid)
SCIP_RETCODE SCIPaddDelayedPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPcalcMIR(SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real scale, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
SCIP_HEUR * SCIPfindHeur(SCIP *scip, const char *name)
SCIP_Real SCIPgetVarObjDive(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPstartDive(SCIP *scip)
SCIP_RETCODE SCIPgetLPDualDegeneracy(SCIP *scip, SCIP_Real *degeneracy, SCIP_Real *varconsratio)
SCIP_RETCODE SCIPchgVarObjDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
SCIP_RETCODE SCIPsolveDiveLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPgetLPBasisInd(SCIP *scip, int *basisind)
SCIP_RETCODE SCIPgetLPColsData(SCIP *scip, SCIP_COL ***cols, int *ncols)
SCIP_RETCODE SCIPgetLPRowsData(SCIP *scip, SCIP_ROW ***rows, int *nrows)
int SCIPgetNLPRows(SCIP *scip)
SCIP_RETCODE SCIPgetLPI(SCIP *scip, SCIP_LPI **lpi)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
SCIP_COL ** SCIPgetLPCols(SCIP *scip)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
SCIP_Bool SCIPisLPSolBasic(SCIP *scip)
SCIP_RETCODE SCIPgetLPBInvRow(SCIP *scip, int r, SCIP_Real *coefs, int *inds, int *ninds)
#define SCIPfreeCleanBufferArray(scip, ptr)
#define SCIPallocCleanBufferArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Bool SCIProwIsIntegral(SCIP_ROW *row)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_Bool SCIProwIsModifiable(SCIP_ROW *row)
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIPgetRowMinActivity(SCIP *scip, SCIP_ROW *row)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
SCIP_Real SCIPgetRowMaxActivity(SCIP *scip, SCIP_ROW *row)
int SCIProwGetNLPNonz(SCIP_ROW *row)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_RETCODE SCIPmakeRowIntegral(SCIP *scip, SCIP_ROW *row, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Real maxscale, SCIP_Bool usecontvars, SCIP_Bool *success)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_Real SCIPgetRowActivity(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_RETCODE SCIPcreateEmptyRowSepa(SCIP *scip, SCIP_ROW **row, SCIP_SEPA *sepa, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
int SCIProwGetRank(SCIP_ROW *row)
void SCIProwChgRank(SCIP_ROW *row, int rank)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
int SCIPgetRowNumIntCols(SCIP *scip, SCIP_ROW *row)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPincludeSepaBasic(SCIP *scip, SCIP_SEPA **sepa, const char *name, const char *desc, int priority, int freq, SCIP_Real maxbounddist, SCIP_Bool usessubscip, SCIP_Bool delay, SCIP_DECL_SEPAEXECLP((*sepaexeclp)), SCIP_DECL_SEPAEXECSOL((*sepaexecsol)), SCIP_SEPADATA *sepadata)
SCIP_RETCODE SCIPsetSepaFree(SCIP *scip, SCIP_SEPA *sepa,)
const char * SCIPsepaGetName(SCIP_SEPA *sepa)
int SCIPsepaGetNCallsAtNode(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsetSepaExit(SCIP *scip, SCIP_SEPA *sepa,)
SCIP_RETCODE SCIPsetSepaInit(SCIP *scip, SCIP_SEPA *sepa,)
SCIP_SEPADATA * SCIPsepaGetData(SCIP_SEPA *sepa)
void SCIPsepaSetData(SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata)
SCIP_RETCODE SCIPsetSepaCopy(SCIP *scip, SCIP_SEPA *sepa,)
SCIP_Longint SCIPsepaGetNCalls(SCIP_SEPA *sepa)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
int SCIPgetMaxDepth(SCIP *scip)
int SCIPgetNRuns(SCIP *scip)
SCIP_Longint SCIPgetNRootFirstLPIterations(SCIP *scip)
SCIP_Longint SCIPgetNNodeInitLPIterations(SCIP *scip)
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfeasFrac(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPepsilon(SCIP *scip)
SCIP_Real SCIPsumepsilon(SCIP *scip)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
SCIP_RETCODE SCIPincludeSepaLagromory(SCIP *scip)
void SCIPsortDownRealInt(SCIP_Real *realarray, int *intarray, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIPfreeSol(scip, &heurdata->sol))
SCIPcreateSol(scip, &heurdata->sol, heur))
SCIPfreeRandom(scip, &heurdata->randnumgen)
SCIPcreateRandom(scip, &heurdata->randnumgen, DEFAULT_RANDSEED, TRUE))
assert(minobj< SCIPgetCutoffbound(scip))
primal heuristic that tries a given solution
#define BMSclearMemory(ptr)
struct BMS_BlkMem BMS_BLKMEM
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define DEFAULT_MAXLAGRANGIANVALSFORAVG
#define DEFAULT_DELTASLAB1UB
#define DEFAULT_UBPARAMNEGFACTOR
#define DEFAULT_VARCONSRATIOTHRESHOLD
#define DEFAULT_DUALDEGENERACYRATETHRESHOLD
#define DEFAULT_MUPARAMINIT
static SCIP_RETCODE sepadataCreate(SCIP *scip, SCIP_SEPADATA **sepadata)
#define DEFAULT_MUPARAMUB
static SCIP_RETCODE updateMuSteplengthParam(SCIP *scip, SCIP_SEPADATA *sepadata, int subgradientiternum, SCIP_Real ubparam, SCIP_Real *lagrangianvals, SCIP_Real bestlagrangianval, SCIP_Real avglagrangianval, SCIP_Real *muparam, SCIP_Bool *backtrack)
#define DEFAULT_ALLOWLOCAL
static SCIP_RETCODE deleteLPWithSoftCuts(SCIP *scip, SCIP_SEPADATA *sepadata)
#define DEFAULT_DYNAMICCUTS
#define DEFAULT_UBPARAMPOSFACTOR
static void linfBallProjection(SCIP *scip, SCIP_Real *dualvector, int dualvectorlen, SCIP_Real radius)
#define DEFAULT_MAKEINTEGRAL
#define DEFAULT_MAXSUBGRADIENTITERS
static SCIP_RETCODE generateGMICuts(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, int mainiternum, int subgradientiternum, SCIP_SOL *sol, SCIP_Real *solvals, int nmaxgeneratedperroundcuts, SCIP_Bool allowlocal, SCIP_ROW **generatedcurrroundcuts, SCIP_Real *generatedcutefficacies, int ngeneratedcurrroundcuts, int *ngeneratednewcuts, int depth, SCIP_Bool *cutoff)
static SCIP_RETCODE solveLagromoryLP(SCIP *scip, SCIP_SEPADATA *sepadata, int depth, SCIP_Real origobjoffset, SCIP_Bool *solfound, SCIP_SOL *sol, SCIP_Real *solvals, SCIP_Real *objval, int *ncurrroundlpiters)
static SCIP_RETCODE aggregateGeneratedCuts(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, SCIP_ROW **generatedcuts, SCIP_Real *bestdualvector, int bestdualvectorlen, SCIP_ROW **aggrcuts, int *naggrcuts, SCIP_Bool *cutoff)
#define DEFAULT_MUPARAMLB
#define DEFAULT_RADIUSMAX
static SCIP_RETCODE updateDualVector(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_Real *dualvector1, SCIP_Real *dualvector2, int dualvector2len, int ndualvector2updates, int subgradientiternum, int totaliternum, SCIP_Real steplength, SCIP_Real *subgradient, int ncuts, SCIP_Bool backtrack, SCIP_Real maxviolscore, SCIP_Real maxviolscoreold, SCIP_Real nviolscore, SCIP_Real nviolscoreold, int nlpiters, SCIP_Bool *dualvecsdiffer, SCIP_Real *ballradius)
#define DEFAULT_PERLPMAXCUTSROOT
#define DEFAULT_MAXROUNDSROOT
#define DEFAULT_PROJECTIONTYPE
#define DEFAULT_CUTADDFREQ
static SCIP_RETCODE checkMainLoopTermination(SCIP_SEPADATA *sepadata, SCIP_Bool cutoff, SCIP_Bool dualvecsdiffer, int ngeneratedcurrroundcuts, int nsoftcuts, int nmaxgeneratedperroundcuts, int ncurrroundlpiters, int depth, SCIP_Bool *terminate)
#define DEFAULT_MUSLAB2FACTOR
#define DEFAULT_RADIUSINIT
#define DEFAULT_DELAYEDCUTS
#define DEFAULT_SIDETYPEBASIS
#define DEFAULT_TOTALCUTSFACTOR
static SCIP_RETCODE generateInitCutPool(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, int mainiternum, SCIP_SOL *sol, SCIP_Real *solvals, int nmaxgeneratedperroundcuts, SCIP_Bool allowlocal, SCIP_ROW **generatedcurrroundcuts, SCIP_Real *generatedcutefficacies, int *ngeneratedcutsperiter, int *ngeneratedcurrroundcuts, int depth, SCIP_Bool *cutoff)
#define DEFAULT_PERROUNDMAXLPITERS
#define DEFAULT_PERROUNDCUTSFACTOR
#define DEFAULT_MAXMAINITERS
#define DEFAULT_PERROUNDCUTSFACTORROOT
static void updateSubgradient(SCIP *scip, SCIP_SOL *sol, SCIP_ROW **cuts, int ncuts, SCIP_Real *subgradient, SCIP_Real *dualvector, SCIP_Bool *subgradientzero, int *ncutviols, SCIP_Real *maxcutviol, int *nnzsubgradientdualprod, SCIP_Real *maxnzsubgradientdualprod)
static SCIP_RETCODE l1BallProjection(SCIP *scip, SCIP_Real *dualvector, int dualvectorlen, SCIP_Real radius)
#define DEFAULT_OPTIMALFACEPRIORITY
#define DEFAULT_SORTCUTOFFSOL
#define MAXAGGRLEN(ncols)
static SCIP_RETCODE separateCuts(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, SCIP_Real ubparam, int depth, SCIP_Bool allowlocal, SCIP_RESULT *result)
#define DEFAULT_MUSLAB1FACTOR
#define DEFAULT_PERROUNDLPITERLIMITFACTOR
#define DEFAULT_CUTSFILTERFACTOR
static SCIP_RETCODE sepadataFree(SCIP *scip, SCIP_SEPADATA **sepadata)
static SCIP_RETCODE createLPWithSoftCuts(SCIP *scip, SCIP_SEPADATA *sepadata)
static SCIP_RETCODE updateObjectiveVector(SCIP *scip, SCIP_Real *dualvector, SCIP_ROW **cuts, int ncuts, SCIP_Real *origobjcoefs, SCIP_Bool *objvecsdiffer)
#define SEPA_MAXBOUNDDIST
static SCIP_RETCODE addGMICutsAsSoftConss(SCIP_Real *dualvector, int ngeneratedcuts, int *naddedcuts, int *nnewaddedsoftcuts)
static SCIP_RETCODE addCuts(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_ROW **cuts, int ncuts, SCIP_Longint maxdnom, SCIP_Real maxscale, int *naddedcuts, SCIP_Bool *cutoff)
static SCIP_RETCODE solveLPWithHardCuts(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_Bool *solfound, SCIP_SOL *sol, SCIP_Real *solvals)
#define DEFAULT_FORCECUTS
#define DEFAULT_PERLPITERFACTOR
static SCIP_RETCODE checkLagrangianDualTermination(SCIP_SEPADATA *sepadata, int nnewaddedsoftcuts, int nyettoaddsoftcuts, SCIP_Bool objvecsdiffer, int ngeneratedcurrroundcuts, int nmaxgeneratedperroundcuts, int ncurrroundlpiters, int depth, SCIP_Bool *terminate)
static SCIP_RETCODE createLPWithHardCuts(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_ROW **cuts, int ncuts)
#define DEFAULT_STABILITYCENTERTYPE
#define DEFAULT_RADIUSMIN
static SCIP_RETCODE solveLagrangianDual(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, SCIP_SOL *sol, SCIP_Real *solvals, int mainiternum, SCIP_Real ubparam, int depth, SCIP_Bool allowlocal, int nmaxgeneratedperroundcuts, SCIP_Real *origobjcoefs, SCIP_Real origobjoffset, SCIP_Real *dualvector, int *nsoftcuts, SCIP_ROW **generatedcurrroundcuts, SCIP_Real *generatedcutefficacies, int *ngeneratedcutsperiter, int *ngeneratedcurrroundcuts, int *ncurrroundlpiters, SCIP_Bool *cutoff, SCIP_Real *bestlagrangianval, SCIP_Real *bestdualvector, int *bestdualvectorlen, int *nbestdualupdates, int *totaliternum)
#define DEFAULT_PERROOTLPITERFACTOR
static SCIP_RETCODE constructCutRow(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, int mainiternum, int subgradientiternum, int cutnnz, int *cutinds, SCIP_Real *cutcoefs, SCIP_Real cutefficacy, SCIP_Real cutrhs, SCIP_Bool cutislocal, int cutrank, SCIP_ROW **generatedcuts, SCIP_Real *generatedcutefficacies, int ngeneratedcurrroundcuts, int *ngeneratednewcuts, SCIP_Bool *cutoff)
#define DEFAULT_ROOTLPITERLIMITFACTOR
#define DEFAULT_AGGREGATECUTS
static SCIP_RETCODE weightedDualVector(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_Real *dualvector, int dualvectorlen, SCIP_Real *stabilitycenter, int stabilitycenterlen, int nbestdualupdates, int totaliternum)
#define DEFAULT_MAXROUNDS
#define DEFAULT_MUBACKTRACKFACTOR
static void updateLagrangianValue(SCIP *scip, SCIP_Real objval, SCIP_Real *dualvector, SCIP_ROW **cuts, int ncuts, SCIP_Real *lagrangianval)
#define DEFAULT_MINRESTART
#define DEFAULT_CUTGENFREQ
static void updateStepLength(SCIP *scip, SCIP_Real muparam, SCIP_Real ubparam, SCIP_Real lagrangianval, SCIP_Real *subgradient, int ncuts, SCIP_Real *steplength)
#define DEFAULT_RADIUSUPDATEWEIGHT
static void updateBallRadius(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_Real maxviolscore, SCIP_Real maxviolscoreold, SCIP_Real nviolscore, SCIP_Real nviolscoreold, int nlpiters, SCIP_Real *ballradius)
#define DEFAULT_SEPARATEROWS
static void l2BallProjection(SCIP *scip, SCIP_Real *dualvector, int dualvectorlen, SCIP_Real radius)
#define DEFAULT_DELTASLAB2UB
#define DEFAULT_MUPARAMCONST
static SCIP_RETCODE stabilizeDualVector(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_Real *dualvector, int dualvectorlen, SCIP_Real *bestdualvector, int bestdualvectorlen, int nbestdualupdates, int subgradientiternum, int totaliternum, SCIP_Real maxviolscore, SCIP_Real maxviolscoreold, SCIP_Real nviolscore, SCIP_Real nviolscoreold, int nlpiters, SCIP_Real *ballradius)
#define DEFAULT_TOTALLPITERLIMITFACTOR
#define DEFAULT_PERLPMAXCUTS
#define DEFAULT_MUSLAB3FACTOR
#define DEFAULT_MAXCONSECITERSFORMUUPDATE
enum SCIP_LPSolStat SCIP_LPSOLSTAT
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_SepaData SCIP_SEPADATA
#define SCIP_DECL_SEPAEXECLP(x)
#define SCIP_DECL_SEPAFREE(x)
#define SCIP_DECL_SEPAEXIT(x)
#define SCIP_DECL_SEPACOPY(x)
#define SCIP_DECL_SEPAINIT(x)
@ SCIP_VARTYPE_CONTINUOUS