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
222#define DEFAULT_PROJECTIONTYPE 2
225#define DEFAULT_STABILITYCENTERTYPE 1
227#define DEFAULT_RADIUSINIT 0.5
228#define DEFAULT_RADIUSMAX 20.0
229#define DEFAULT_RADIUSMIN 1e-6
230#define DEFAULT_CONST 2.0
231#define DEFAULT_RADIUSUPDATEWEIGHT 0.98
235#define MAKECONTINTEGRAL FALSE
236#define POSTPROCESS TRUE
237#define BOUNDSWITCH 0.9999
239#define FIXINTEGRALRHS FALSE
240#define MAXAGGRLEN(ncols) (0.1*(ncols)+1000)
251 SCIP_Bool delayedcuts;
252 SCIP_Bool separaterows;
253 SCIP_Bool sortcutoffsol;
254 SCIP_Bool sidetypebasis;
255 SCIP_Bool dynamiccuts;
256 SCIP_Bool makeintegral;
258 SCIP_Bool allowlocal;
265 int nrowsinhardcutslp;
266 int nrunsinsoftcutslp;
272 SCIP_Real dualdegeneracyratethreshold;
273 SCIP_Real varconsratiothreshold;
276 int nmaxcutsperlproot;
278 SCIP_Real perroundlpiterlimitfactor;
280 SCIP_Real rootlpiterlimitfactor;
282 SCIP_Real totallpiterlimitfactor;
284 int perroundnmaxlpiters;
285 SCIP_Real perroundcutsfactorroot;
287 SCIP_Real perroundcutsfactor;
289 SCIP_Real totalcutsfactor;
291 int nmaxsubgradientiters;
292 int nmaxperroundlpiters;
295 int nmaxtotallpiters;
297 int nmaxperroundcutsroot;
298 int nmaxperroundcuts;
303 SCIP_Bool muparamconst;
304 SCIP_Real muparaminit;
307 SCIP_Real mubacktrackfactor;
309 SCIP_Real muslab1factor;
311 SCIP_Real muslab2factor;
313 SCIP_Real muslab3factor;
314 SCIP_Real deltaslab1ub;
316 SCIP_Real deltaslab2ub;
318 SCIP_Real ubparamposfactor;
320 SCIP_Real ubparamnegfactor;
322 int nmaxlagrangianvalsforavg;
323 int nmaxconsecitersformuupdate;
324 SCIP_Real perrootlpiterfactor;
326 SCIP_Real perlpiterfactor;
330 SCIP_Real cutsfilterfactor;
331 int optimalfacepriority;
333 SCIP_Bool aggregatecuts;
339 int stabilitycentertype;
341 SCIP_Real radiusinit;
345 SCIP_Real radiusupdateweight;
368 SCIP_Longint nrootlpiters;
377 nruns =
sepadata->nrunsinsoftcutslp;
387 if( nruns != runnum )
394 sepadata->nmaxrootlpiters = (int)(
sepadata->rootlpiterlimitfactor * nrootlpiters);
400 sepadata->nmaxtotallpiters = (
int)(
sepadata->totallpiterlimitfactor * nrootlpiters);
406 sepadata->nmaxperroundlpiters = (
int)(
sepadata->perroundlpiterlimitfactor * nrootlpiters);
411 if(
sepadata->perroundnmaxlpiters > 0 )
416 for(
i = 0;
i < ncols; ++
i )
429 sepadata->nrunsinsoftcutslp = runnum;
514 for(
i = 0;
i < ncols; ++
i )
529 for(
i = 0;
i < nrows; ++
i )
544 for(
i = 0;
i < nrows; ++
i )
588 for(
i =
sepadata->nrowsinhardcutslp - nrows;
i < ncuts; ++
i )
603 for(
i =
sepadata->nrowsinhardcutslp - nrows;
i < ncuts; ++
i )
638 sepadata->nrowsinhardcutslp = nrows + ncuts;
662 if( (*sepadata)->lpiwithhardcuts !=
NULL )
667 (*sepadata)->nrowsinhardcutslp = 0;
668 (*sepadata)->nrunsinsoftcutslp = 0;
669 (*sepadata)->ncalls = 0;
670 (*sepadata)->nmaxperroundlpiters = 0;
671 (*sepadata)->nmaxrootlpiters = 0;
672 (*sepadata)->nrootlpiters = 0;
673 (*sepadata)->nmaxtotallpiters = 0;
674 (*sepadata)->ntotallpiters = 0;
675 (*sepadata)->nmaxperroundcutsroot = 0;
676 (*sepadata)->nmaxperroundcuts = 0;
677 (*sepadata)->nmaxtotalcuts = 0;
678 (*sepadata)->ntotalcuts = 0;
702 SCIP_Real deltaslab1ub;
703 SCIP_Real deltaslab2ub;
704 SCIP_Real muslab1factor;
705 SCIP_Real muslab2factor;
706 SCIP_Real muslab3factor;
726 muslab1factor =
sepadata->muslab1factor;
727 muslab2factor =
sepadata->muslab2factor;
728 muslab3factor =
sepadata->muslab3factor;
734 muslab1factor =
sepadata->muslab1factor;
735 muslab2factor =
sepadata->muslab3factor;
736 muslab3factor =
sepadata->muslab2factor;
740 muslab1factor =
sepadata->muslab3factor;
741 muslab2factor =
sepadata->muslab1factor;
742 muslab3factor =
sepadata->muslab2factor;
750 muslab1factor =
sepadata->muslab2factor;
751 muslab2factor =
sepadata->muslab1factor;
752 muslab3factor =
sepadata->muslab3factor;
758 muslab1factor =
sepadata->muslab2factor;
759 muslab2factor =
sepadata->muslab3factor;
760 muslab3factor =
sepadata->muslab1factor;
764 muslab1factor =
sepadata->muslab3factor;
765 muslab2factor =
sepadata->muslab2factor;
766 muslab3factor =
sepadata->muslab1factor;
847 for(
i = 0;
i < ncuts;
i++ )
870 (*nnzsubgradientdualprod)++;
899 for(
i = 0;
i < ncuts;
i++ )
922 for(
i = 0;
i < ncuts;
i++ )
958 if(
sepadata->optimalfacepriority <= 1 )
979 if(
sepadata->optimalfacepriority <= 1 )
1216 alpha = 1.0 / weight;
1262 if(
sepadata->projectiontype == 1 )
1267 else if(
sepadata->projectiontype == 2 )
1272 else if(
sepadata->projectiontype == 3 )
1279 if(
sepadata->stabilitycentertype == 1 )
1302 SCIP_Bool backtrack,
1328 for(
i = 0;
i < ncuts;
i++ )
1340 for(
i = 0;
i < ncuts;
i++ )
1347 for(
i = 0;
i < ncuts;
i++ )
1359 for(
i = 0;
i < ncuts;
i++ )
1375 for(
i = 0;
i < ncuts;
i++ )
1385 for(
i = 0;
i < ncuts;
i++ )
1451 SCIP_Bool* solfound,
1459 SCIP_Real timelimit;
1467 SCIP_Longint ntotallpiters;
1491 if( timelimit <= 0.0 )
1509 else if( (
depth > 0) &&
1514 if(
sepadata->nmaxperroundlpiters >= 0 )
1518 if( iterlimit >= 0 )
1554 for(
i = 0;
i < ncols; ++
i )
1586 SCIP_Bool* solfound,
1591 SCIP_Real timelimit;
1610 if( timelimit <= 0.0 )
1630 for(
i = 0;
i < ncols; ++
i )
1669 SCIP_Real minactivity;
1670 SCIP_Real maxactivity;
1721 for( v = 0; v <
cutnnz; ++v )
1761 SCIPdebugMsg(
scip,
"cut <%s> is infeasible (sides=[%g,%g], act=[%g,%g])\n",
1770 ++(*ngeneratednewcuts);
1797 SCIP_Real minactivity;
1798 SCIP_Real maxactivity;
1897 for(
i = 0;
i < ncols;
i++ )
1971 SCIPdebugMsg(
scip,
"cut <%s> is infeasible (sides=[%g,%g], act=[%g,%g])\n",
1983 for(
i = 0;
i < ncols;
i++ )
2011 SCIP_Bool allowlocal,
2072 for(
i = 0;
i < nrows; ++
i )
2164 NULL,
minfrac,
maxfrac, 1.0, aggrrow,
cutcoefs, &
cutrhs,
cutinds, &
cutnnz, &
cutefficacy, &
cutrank,
2226 for(
i = 0;
i < ncuts;
i++ )
2251 for(
i = 0;
i < ncols;
i++ )
2264 for(
i = 0;
i < ncols;
i++)
2312 SCIP_Bool allowlocal,
2350 SCIP_Bool backtrack;
2445 (*nbestdualupdates)++;
2547 SCIP_Bool allowlocal,
2599 for(
i = 0;
i < ncuts && !*
cutoff;
i++ )
2707 SCIP_Bool allowlocal,
2793 (
sepadata->nmaxsubgradientiters + 1)) );
2804 for(
i = 0;
i < ncols;
i++ )
2860 ngeneratedcurrroundcuts, 0, -1, -1, 0.0,
NULL,
ngeneratedcurrroundcuts,
TRUE, 0.0, 0.0, 0.0, 0.0, -1,
2865 SCIP_CALL(
updateDualVector(
scip,
sepadata,
dualvector,
dualvector,
nsoftcuts, 0, -1, -1, 0.0,
NULL,
2991 for(
i = 0;
i < nrows;
i++ )
2996 dualsol[nrows +
i] = 0.0;
3118 SCIP_Real varconsratio;
3170 if( ncols == 0 || nrows == 0 )
3184 if( bestsol !=
NULL )
3186 for(
i = 0;
i < ncols; ++
i )
3203 for(
i = 0;
i < ncols; ++
i )
3256 "iterations for maximal separating LP iterations in the root node (negative for no limit)",
3260 "iterations for maximal separating LP iterations in the tree (negative for no limit)",
3264 "iterations for maximal separating LP iterations per separation round (negative for no limit)",
3269 "columns for number of cuts separated per separation round in root node", &
sepadata->perroundcutsfactorroot,
3273 "columns for number of cuts separated per separation round at a non-root node",
3321 "iterations for iteration limit of each separating LP (negative for no limit)",
3325 "iterations for iteration limit of each separating LP (negative for no limit)", &
sepadata->perlpiterfactor,
TRUE,
3349 "violation score used for updating ball radius", &
sepadata->radiusupdateweight,
TRUE,
3353 "rate for separator execution", &
sepadata->dualdegeneracyratethreshold,
FALSE,
3357 "ratio on optimal face for separator execution", &
sepadata->varconsratiothreshold,
FALSE,
3398 "iterations per separation round (-1: unlimited)", &
sepadata->perroundnmaxlpiters,
FALSE,
3413 "iterations of the relax-and-cut algorithm", &
sepadata->nmaxsubgradientiters,
TRUE,
3423 "for rolling average of Lagrangian value", &
sepadata->nmaxlagrangianvalsforavg,
TRUE,
3427 "iterations used to determine if mu needs to be backtracked", &
sepadata->nmaxconsecitersformuupdate,
TRUE,
3431 "are projected for stabilization (0: no projection, 1: L1-norm ball projection, 2: L2-norm ball projection, 3: "
3435 "taking weighted average of Lagrangian multipliers for stabilization (0: no weighted stabilization, 1: best "
3440 "separator execution (0: low priority, 1: medium priority, 2: high priority)",
3444 "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_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
#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
static void weightedDualVector(SCIP_SEPADATA *sepadata, SCIP_Real *dualvector, int dualvectorlen, SCIP_Real *stabilitycenter, int stabilitycenterlen, int nbestdualupdates, int totaliternum)
#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