assert(master !=
NULL);
177assert(slave !=
NULL);
178assert(activities !=
NULL);
192assert(ncolmasterrows == 0 || masterrows !=
NULL);
198assert(ncolslaverows == 0 || slaverows !=
NULL);
201 for(
inti = 0; i < ncolmasterrows &&
SCIProwGetLPPos(masterrows[i]) >= 0; ++i )
206assert(rowpos < nrows);
210activities[rowpos] += mastercolvals[i] * (int)masterdir * shiftval;
214 for(
intj = 0; j < ncolslaverows &&
SCIProwGetLPPos(slaverows[j]) >= 0; ++j )
219assert(rowpos < nrows);
224activities[rowpos] += slavecolvals[j] * (int)slavedir * shiftval;
233 for(
inti = 0; i < ncolmasterrows &&
SCIProwGetLPPos(masterrows[i]) >= 0; ++i )
268assert(var1 !=
NULL);
269assert(var2 !=
NULL);
279assert(nnonzeros1 == 0 || rows1 !=
NULL);
280assert(nnonzeros2 == 0 || rows2 !=
NULL);
284 for(
inti = 0; i < nnonzeros1 && i < nnonzeros2; ++i )
293 returnnnonzeros2 - nnonzeros1 ;
328assert(var1 !=
NULL);
329assert(var2 !=
NULL);
339assert(nnonzeros1 == 0 || rows1 !=
NULL);
340assert(nnonzeros2 == 0 || rows2 !=
NULL);
342 if( nnonzeros1 == 0 && nnonzeros2 == 0 )
346 if( matchingrate == 0.0 )
350nrowmaximum =
MAX(nnonzeros1, nnonzeros2);
352nrowabs =
ABS(nnonzeros1 - nnonzeros2);
353nrows1not2 = nrowmaximum - nnonzeros2;
354nrows2not1 = nrowmaximum - nnonzeros1;
359assert(nrowmaximum > 0);
361 if( (nrowmaximum - nrowabs) / (
SCIP_Real) nrowmaximum < matchingrate )
368 while( i < nnonzeros1 && j < nnonzeros2 )
433assert(sol !=
NULL);
434assert(master !=
NULL);
435assert(slave !=
NULL);
447masterbound =
bound- mastersolval;
448masterbound =
SCIPisFeasLE(
scip, mastersolval + ceil(masterbound),
bound) ? ceil(masterbound) : floor(masterbound);
453masterbound = mastersolval -
bound;
454masterbound =
SCIPisFeasGE(
scip, mastersolval - ceil(masterbound),
bound) ? ceil(masterbound) : floor(masterbound);
460slavebound =
bound- slavesolval;
461slavebound =
SCIPisFeasLE(
scip, slavesolval + ceil(slavebound),
bound) ? ceil(slavebound) : floor(slavebound);
466slavebound = slavesolval -
bound;
467slavebound =
SCIPisFeasGE(
scip, slavesolval - ceil(slavebound),
bound) ? ceil(slavebound) : floor(slavebound);
470 bound=
MIN(masterbound, slavebound);
487assert(nslaverows == 0 || slavecolvals !=
NULL);
488assert(nmasterrows == 0 || mastercolvals !=
NULL);
491(
int)masterdirection, nmasterrows,
SCIPvarGetName(slave), (
int)slavedirection, nslaverows);
498 while( i < nslaverows || j < nmasterrows )
521slaveincrement =
FALSE;
524 if( i < nslaverows )
527slaveindex = INT_MAX;
529 if( j < nmasterrows )
532masterindex = INT_MAX;
534assert(0 <= slaveindex && 0 <= masterindex);
536assert(slaveindex < INT_MAX || masterindex < INT_MAX);
539 if( slaveindex <= masterindex )
543slaveincrement =
TRUE;
544masterincrement = (slaveindex == masterindex);
548assert(j < nmasterrows);
552masterincrement =
TRUE;
554assert(row !=
NULL);
565 if( slaveindex <= masterindex )
566effect += (slavecolvals[i] * (int)slavedirection);
567 if( masterindex <= slaveindex )
568effect += (mastercolvals[j] * (int)masterdirection);
580assert( rowpos < nrows );
584 SCIPdebugMsg(
scip,
" %g <= %g <= %g, bound = %g, effect = %g (%g * %d + %g * %d) (i=%d,j=%d)\n",
586slaveindex <= masterindex ? slavecolvals[i] : 0.0, (
int)slavedirection,
587masterindex <= slaveindex ? mastercolvals[j] : 0.0, (
int)masterdirection, i, j);
589newval = (side - activities[rowpos]) / effect;
592 if( newval <
bound)
596activity = activities[rowpos] + effect * ceil(newval);
600 bound= ceil(newval);
602 bound= floor(newval);
615 SCIPdebugMsg(
scip,
" No influence of row %s, effect %g, master coeff: %g slave coeff: %g (i=%d, j=%d)\n",
616 SCIProwGetName(row), effect, mastercolvals[j], slavecolvals[i], i, j);
626 if( slaveincrement )
628 if( masterincrement )
648assert(blockend !=
NULL);
649assert(varindex <= *blockend);
651vars[varindex] = vars[*blockend];
674assert(vars !=
NULL);
676assert(nblocks !=
NULL);
677assert(maxblocksize !=
NULL);
678assert(nblockvars !=
NULL);
679assert(blockstart !=
NULL);
680assert(blockend !=
NULL);
681assert(heur !=
NULL);
682assert(heurdata !=
NULL);
688 SCIPsortPtr((
void**)(*varspointer), SCIPvarcolComp, nvars);
702 for(
intv = 1; v < nvars; ++v )
708 if( v - startindex >= 2 )
710assert(*nblocks < nvars/2);
711(*nblockvars) += v - startindex;
712(*maxblocksize) =
MAX((*maxblocksize), v - startindex);
713(*blockstart)[*nblocks] = startindex;
714(*blockend)[*nblocks] = v - 1;
719 else if( v == nvars - 1 && v - startindex >= 1 )
721assert(*nblocks < nvars/2);
722(*nblockvars) += v - startindex + 1;
723(*maxblocksize) =
MAX((*maxblocksize), v - startindex + 1);
724(*blockstart)[*nblocks] = startindex;
725(*blockend)[*nblocks] = v;
773assert(heurdata !=
NULL);
776 if( heurdata->presolved )
784heurdata->ntotalbinvars += nbinvars;
792&nbinblockvars, &(heurdata->binblockstart), &(heurdata->binblockend), heur, heurdata) );
796heurdata->binnblocks += heurdata->nbinblocks;
797heurdata->binnblockvars += nbinblockvars;
798heurdata->maxbinblocksize =
MAX(maxbinblocksize, heurdata->maxbinblocksize);
800 SCIPstatisticMessage(
" Twoopt BINARY presolving finished with <%d> blocks, <%d> block variables \n",
801heurdata->nbinblocks, nbinblockvars);
805heurdata->nbinvars = nbinvars;
806heurdata->execute = nbinvars > 1 && heurdata->nbinblocks > 0;
808 if( heurdata->intopt && nintvars > 1 )
810 SCIP_CALL(
innerPresolve(
scip, &(vars[nbinvars]), &(heurdata->intvars), nintvars, &(heurdata->nintblocks), &maxintblocksize,
811&nintblockvars, &(heurdata->intblockstart), &(heurdata->intblockend),
814heurdata->execute = heurdata->execute || heurdata->nintblocks > 0;
818heurdata->intnblocks += heurdata->nintblocks;
819heurdata->intnblockvars += nintblockvars;
820heurdata->ntotalintvars += nintvars;
821heurdata->maxintblocksize =
MAX(maxintblocksize, heurdata->maxintblocksize);
822 SCIPstatisticMessage(
" Twoopt Integer presolving finished with <%d> blocks, <%d> block variables \n",
823heurdata->nintblocks, nintblockvars);
827heurdata->nintvars = nintvars;
830heurdata->presolved =
TRUE;
845assert(heur !=
NULL);
860assert(heur !=
NULL);
866assert(heurdata !=
NULL);
879assert(heur !=
NULL);
884assert(heurdata !=
NULL);
887heurdata->nbinvars = 0;
888heurdata->nintvars = 0;
889heurdata->lastsolindex = -1;
890heurdata->presolved =
FALSE;
891heurdata->nbinblocks = 0;
892heurdata->nintblocks = 0;
900heurdata->binnexchanges = 0;
901heurdata->intnexchanges = 0;
902heurdata->binnblockvars = 0;
903heurdata->intnblockvars = 0;
904heurdata->binnblocks = 0;
905heurdata->intnblocks = 0;
907heurdata->maxbinblocksize = 0;
908heurdata->maxintblocksize = 0;
910heurdata->ntotalbinvars = 0;
911heurdata->ntotalintvars = 0;
920heurdata->binvars =
NULL;
921heurdata->intvars =
NULL;
922heurdata->binblockstart =
NULL;
923heurdata->binblockend =
NULL;
924heurdata->intblockstart =
NULL;
925heurdata->intblockend =
NULL;
954 int* bestdirections;
960assert(blockstart !=
NULL&& blockend !=
NULL);
961assert(varboundserr !=
NULL);
962assert(activities !=
NULL);
963assert(worksol !=
NULL);
964assert(improvement !=
NULL);
966*varboundserr =
FALSE;
975 for(
int b= 0;
b< nblocks; ++
b)
979blocklen = blockend[
b] - blockstart[
b] + 1;
982 for(
intm = 0; m < blocklen; ++m )
997master = vars[blockstart[
b] + m];
1005*varboundserr =
TRUE;
1006 SCIPdebugMsg(
scip,
"Solution has violated variable bounds for var %s: %g <= %g <= %g \n",
1026bestimprovement = 0.0;
1034 if( heurdata->maxnslaves >= 0 && blocklen > heurdata->maxnslaves )
1035firstslave =
SCIPrandomGetInt(heurdata->randnumgen, blockstart[
b] + m, blockend[
b]);
1037firstslave = blockstart[
b] + m + 1;
1039nslaves =
MIN((heurdata->maxnslaves == -1 ? INT_MAX : heurdata->maxnslaves), blocklen);
1044 for(
ints = 0; s < nslaves; ++s )
1055slaveindex = (firstslave + s - blockstart[
b]) % blocklen;
1056slaveindex += blockstart[
b];
1059 if( (blocklen <= heurdata->maxnslaves || heurdata->maxnslaves == -1) && slaveindex < blockstart[
b] + m )
1062 if( slaveindex == blockstart[
b] + m )
1066slave = vars[slaveindex];
1078*varboundserr =
TRUE;
1079 SCIPdebugMsg(
scip,
"Solution has violated variable bounds for var %s: %g <= %g <= %g \n",
1100equaldirbound = 0.0;
1107changedobj = (masterobj - slaveobj) * diffdirbound;
1113changedobj = (slaveobj - masterobj) * diffdirbound;
1119 if( (masterobj + slaveobj) * equaldirbound < changedobj )
1121changedobj = (masterobj + slaveobj) * equaldirbound;
1128 if( -(masterobj + slaveobj) * equaldirbound < changedobj )
1130changedobj = -(masterobj + slaveobj) * equaldirbound;
1141&& changedobj < bestimprovement )
1143bestimprovement = changedobj;
1144bestslavepos = slaveindex;
1145bestdirection = directions;
1151 if( directions / 2 == 1 )
1156 if( directions % 2 == 1 )
1161 if( bestmasterdir == bestslavedir )
1162bestbound = equaldirbound;
1164bestbound = diffdirbound;
1169 if( bestslavepos >= 0 )
1171 if( npairs == arraysize )
1177arraysize = 2 * arraysize;
1179assert( npairs < arraysize );
1181bestmasters[npairs] = master;
1182bestslaves[npairs] = vars[bestslavepos];
1183objchanges[npairs] = ((int)bestslavedir *
SCIPvarGetObj(bestslaves[npairs]) + (int)bestmasterdir * masterobj) * bestbound;
1184bestdirections[npairs] = bestdirection;
1186assert(objchanges[npairs] < 0);
1188 SCIPdebugMsg(
scip,
" Saved candidate pair {%s=%g, %s=%g} with objectives <%g>, <%g> to be set to {%g, %g} %d\n",
1190masterobj,
SCIPvarGetObj(bestslaves[npairs]), mastersolval + (
int)bestmasterdir * bestbound,
SCIPgetSolVal(
scip, worksol, bestslaves[npairs])
1191+ (
int)bestslavedir * bestbound, bestdirections[npairs]);
1201 SCIPsortRealPtrPtrInt(objchanges, (
void**)bestmasters, (
void**)bestslaves, bestdirections, npairs);
1203 for(
int b= 0;
b< npairs; ++
b)
1215master = bestmasters[
b];
1216slave = bestslaves[
b];
1222assert(0 <= bestdirections[
b] && bestdirections[
b] < 4);
1224 if( bestdirections[
b] / 2 == 1 )
1229 if( bestdirections[
b] % 2 == 1 )
1243 SCIPdebugMsg(
scip,
" Promising candidates {%s=%g, %s=%g} with objectives <%g>, <%g> to be set to {%g, %g}\n",
1245masterobj, slaveobj, mastersolval + (
int)masterdir *
bound, slavesolval + (
int)slavedir *
bound);
1249changedobj = ((int)slavedir * slaveobj + (
int)masterdir * masterobj) *
bound;
1257activities, nrows, &feasible) );
1267 SCIPdebugMsg(
scip,
" Feasible shift: <%s>[%g, %g] (obj: %f) <%f> --> <%f>\n",
1272#ifdef SCIP_STATISTIC 1275++(heurdata->binnexchanges);
1277++(heurdata->intnexchanges);
1280*improvement =
TRUE;
1300assert(heurdata !=
NULL);
1303assert(heurdata->nbinvars <= 1 || heurdata->binvars !=
NULL);
1305#ifdef SCIP_STATISTIC 1308 " Twoopt Binary Statistics : " 1309 "%6.2g %6.2g %4.2g %4.0g %6d (blocks/run, variables/run, varpercentage, avg. block size, max block size) \n",
1310heurdata->nruns == 0 ? 0.0 : (
SCIP_Real)heurdata->binnblocks/(heurdata->nruns),
1311heurdata->nruns == 0 ? 0.0 : (
SCIP_Real)heurdata->binnblockvars/(heurdata->nruns),
1312heurdata->ntotalbinvars == 0 ? 0.0 : (
SCIP_Real)heurdata->binnblockvars/(heurdata->ntotalbinvars) * 100.0,
1313heurdata->binnblocks == 0 ? 0.0 : heurdata->binnblockvars/(
SCIP_Real)(heurdata->binnblocks),
1314heurdata->maxbinblocksize);
1317 " Twoopt Integer statistics : " 1318 "%6.2g %6.2g %4.2g %4.0g %6d (blocks/run, variables/run, varpercentage, avg block size, max block size) \n",
1319heurdata->nruns == 0 ? 0.0 : (
SCIP_Real)heurdata->intnblocks/(heurdata->nruns),
1320heurdata->nruns == 0 ? 0.0 : (
SCIP_Real)heurdata->intnblockvars/(heurdata->nruns),
1321heurdata->ntotalintvars == 0 ? 0.0 : (
SCIP_Real)heurdata->intnblockvars/(heurdata->ntotalintvars) * 100.0,
1322heurdata->intnblocks == 0 ? 0.0 : heurdata->intnblockvars/(
SCIP_Real)(heurdata->intnblocks),
1323heurdata->maxintblocksize);
1326 " Twoopt results : " 1327 "%6d %6d %4d %4.2g (runs, binary exchanges, Integer shiftings, matching rate)\n",
1329heurdata->binnexchanges,
1330heurdata->intnexchanges,
1331heurdata->matchingrate);
1334heurdata->binnblockvars = 0;
1335heurdata->binnblocks = 0;
1336heurdata->intnblocks = 0;
1337heurdata->intnblockvars = 0;
1338heurdata->binnexchanges = 0;
1339heurdata->intnexchanges = 0;
1343 if( heurdata->binvars !=
NULL)
1348 if( heurdata->nbinblocks > 0 )
1350assert(heurdata->binblockstart !=
NULL);
1351assert(heurdata->binblockend !=
NULL);
1356heurdata->nbinvars = 0;
1357heurdata->nbinblocks = 0;
1359 if( heurdata->nintblocks > 0 )
1361assert(heurdata->intblockstart !=
NULL);
1362assert(heurdata->intblockend !=
NULL);
1369 if( heurdata->intvars !=
NULL)
1374heurdata->nbinblocks = 0;
1375heurdata->nintblocks = 0;
1376heurdata->nbinvars = 0;
1377heurdata->nintvars = 0;
1379assert(heurdata->binvars ==
NULL);
1380assert(heurdata->intvars ==
NULL);
1395assert(heur !=
NULL);
1402assert(heurdata !=
NULL);
1403assert(heurdata->binvars ==
NULL&& heurdata->intvars ==
NULL);
1404assert(heurdata->binblockstart ==
NULL&& heurdata->binblockend ==
NULL);
1405assert(heurdata->intblockstart ==
NULL&& heurdata->intblockend ==
NULL);
1408heurdata->nbinvars = 0;
1409heurdata->nintvars = 0;
1410heurdata->lastsolindex = -1;
1411heurdata->presolved =
FALSE;
1413#ifdef SCIP_STATISTIC 1414++(heurdata->nruns);
1431assert(heur !=
NULL);
1439assert(heurdata !=
NULL);
1441nbinvars = heurdata->nbinvars;
1442nintvars = heurdata->nintvars;
1445 if( heurdata->binvars !=
NULL)
1449 if( heurdata->binblockstart !=
NULL)
1451assert(heurdata->binblockend !=
NULL);
1456heurdata->nbinvars = 0;
1457heurdata->nbinblocks = 0;
1459 if( heurdata->intblockstart !=
NULL)
1461assert(heurdata->intblockend !=
NULL);
1466heurdata->nintblocks = 0;
1469 if( heurdata->intvars !=
NULL)
1474heurdata->nintvars = 0;
1476assert(heurdata->binvars ==
NULL&& heurdata->intvars ==
NULL);
1477assert(heurdata->binblockstart ==
NULL&& heurdata->binblockend ==
NULL);
1478assert(heurdata->intblockstart ==
NULL&& heurdata->intblockend ==
NULL);
1501 intncolsforsorting;
1506assert(heur !=
NULL);
1508assert(result !=
NULL);
1512assert(heurdata !=
NULL);
1540presolthiscall =
FALSE;
1543ncolsforsorting =
MIN(ncols, ndiscvars);
1546 if( !heurdata->presolved )
1550 for(
inti = 0; i < ncolsforsorting; ++i )
1554presolthiscall =
TRUE;
1557assert(heurdata->presolved);
1559 SCIPdebugMsg(
scip,
" Twoopt heuristic is %sexecuting.\n", heurdata->execute ?
"":
"not ");
1562 if( !heurdata->execute )
1565nbinvars = heurdata->nbinvars;
1566nintvars = heurdata->nintvars;
1567ndiscvars = nbinvars + nintvars;
1587 for(
inti = 0; i < nlprows; ++i )
1592assert(row !=
NULL);
1606 if( !presolthiscall )
1608 for(
inti = 0; i < ncolsforsorting; ++i )
1611 SCIPdebugMsg(
scip,
" Twoopt heuristic has initialized activities and sorted rows! \n");
1614improvement =
FALSE;
1615varboundserr =
FALSE;
1617 if( heurdata->nbinblocks > 0 )
1619 SCIP_CALL(
optimize(
scip, worksol, heurdata->binvars, heurdata->binblockstart, heurdata->binblockend, heurdata->nbinblocks,
1620 OPTTYPE_BINARY, activities, nlprows, &improvement, &varboundserr, heurdata) );
1631 if( heurdata->nintblocks > 0 )
1633assert(heurdata->intopt);
1634 SCIP_CALL(
optimize(
scip, worksol, heurdata->intvars, heurdata->intblockstart, heurdata->intblockend, heurdata->nintblocks,
1635 OPTTYPE_INTEGER, activities, nlprows, &improvement, &varboundserr, heurdata) );
1640 if( ! improvement || varboundserr )
1661#ifdef SCIP_STATISTIC 1676 SCIPdebugMsg(
scip,
"shifted solution should be feasible -> solve LP to fix continuous variables to best values\n");
1683 SCIPdebugMsg(
scip,
" Cont. variable <%s>, status %d with bounds [%g <= %g <= x <= %g <= %g]\n",
1703 for(
inti = 0; i < ndiscvars; ++i )
1717 for(
inti = 0; i < ndiscvars; ++i )
1730 SCIPwarningMessage(
scip,
"Error while solving LP in Twoopt heuristic; LP solve terminated with code <%d>\n",retstat);
1761#ifdef SCIP_STATISTIC 1800assert(heur !=
NULL);
1816 "nodes to wait after last best solution before calling heuristic",
1825 "parameter to determine the percentage of rows two variables have to share before they are considered equal",
#define SCIP_LONGINT_FORMAT
int SCIPgetNIntVars(SCIP *scip)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
int SCIPgetNVars(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNBinVars(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
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 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)
SCIP_RETCODE SCIPincludeHeurTwoopt(SCIP *scip)
int SCIPcolGetNNonz(SCIP_COL *col)
SCIP_Real * SCIPcolGetVals(SCIP_COL *col)
SCIP_ROW ** SCIPcolGetRows(SCIP_COL *col)
void SCIPcolSort(SCIP_COL *col)
SCIP_RETCODE SCIPsetHeurExitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXITSOL((*heurexitsol)))
SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURCOPY((*heurcopy)))
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
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)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree)))
SCIP_RETCODE SCIPsetHeurExit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXIT((*heurexit)))
SCIP_RETCODE SCIPsetHeurInitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINITSOL((*heurinitsol)))
SCIP_RETCODE SCIPsetHeurInit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINIT((*heurinit)))
const char * SCIPheurGetName(SCIP_HEUR *heur)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
SCIP_RETCODE SCIPchgVarLbDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPchgVarUbDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPgetVarLbDive(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPgetVarUbDive(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPstartDive(SCIP *scip)
SCIP_RETCODE SCIPsolveDiveLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPendDive(SCIP *scip)
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
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_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
int SCIProwGetLPPos(SCIP_ROW *row)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
const char * SCIProwGetName(SCIP_ROW *row)
int SCIProwGetIndex(SCIP_ROW *row)
SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_RETCODE SCIPcreateSolCopy(SCIP *scip, SCIP_SOL **sol, SCIP_SOL *sourcesol)
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
SCIP_Longint SCIPsolGetNodenum(SCIP_SOL *sol)
SCIP_HEUR * SCIPsolGetHeur(SCIP_SOL *sol)
SCIP_Bool SCIPsolIsOriginal(SCIP_SOL *sol)
int SCIPsolGetIndex(SCIP_SOL *sol)
SCIP_RETCODE SCIPtrySol(SCIP *scip, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
SCIP_RETCODE SCIPlinkLPSol(SCIP *scip, SCIP_SOL *sol)
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)
void SCIPsolSetHeur(SCIP_SOL *sol, SCIP_HEUR *heur)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
int SCIPrandomGetInt(SCIP_RANDNUMGEN *randnumgen, int minrandval, int maxrandval)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed, SCIP_Bool useglobalseed)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortRealPtrPtrInt(SCIP_Real *realarray, void **ptrarray1, void **ptrarray2, int *intarray, int len)
static SCIP_Real determineBound(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *master, DIRECTION masterdirection, SCIP_VAR *slave, DIRECTION slavedirection, SCIP_Real *activities, int nrows)
static SCIP_DECL_HEURINITSOL(heurInitsolTwoopt)
static void disposeVariable(SCIP_VAR **vars, int *blockend, int varindex)
static SCIP_DECL_HEUREXIT(heurExitTwoopt)
static SCIP_DECL_HEURFREE(heurFreeTwoopt)
#define DEFAULT_MATCHINGRATE
static SCIP_DECL_HEUREXEC(heurExecTwoopt)
#define DEFAULT_WAITINGNODES
static SCIP_Bool checkConstraintMatching(SCIP *scip, SCIP_VAR *var1, SCIP_VAR *var2, SCIP_Real matchingrate)
static SCIP_DECL_SORTPTRCOMP(SCIPvarcolComp)
static SCIP_DECL_HEURCOPY(heurCopyTwoopt)
static int varColCompare(SCIP_VAR *var1, SCIP_VAR *var2)
static SCIP_DECL_HEUREXITSOL(heurExitsolTwoopt)
#define DEFAULT_ARRAYSIZE
#define DEFAULT_MAXNSLAVES
static SCIP_DECL_HEURINIT(heurInitTwoopt)
static SCIP_RETCODE shiftValues(SCIP *scip, SCIP_VAR *master, SCIP_VAR *slave, SCIP_Real mastersolval, DIRECTION masterdir, SCIP_Real slavesolval, DIRECTION slavedir, SCIP_Real shiftval, SCIP_Real *activities, int nrows, SCIP_Bool *feasible)
static SCIP_RETCODE innerPresolve(SCIP *scip, SCIP_VAR **vars, SCIP_VAR ***varspointer, int nvars, int *nblocks, int *maxblocksize, int *nblockvars, int **blockstart, int **blockend, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
static SCIP_RETCODE optimize(SCIP *scip, SCIP_SOL *worksol, SCIP_VAR **vars, int *blockstart, int *blockend, int nblocks, OPTTYPE opttype, SCIP_Real *activities, int nrows, SCIP_Bool *improvement, SCIP_Bool *varboundserr, SCIP_HEURDATA *heurdata)
static SCIP_RETCODE presolveTwoOpt(SCIP *scip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
Primal heuristic to improve incumbent solution by flipping pairs of variables.
memory allocation routines
public methods for primal heuristics
public methods for LP management
public methods for message output
#define SCIPstatisticMessage
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for primal CIP solutions
public methods for problem variables
public methods for primal heuristic plugins and divesets
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for random numbers
public methods for solutions
public methods for querying solving statistics
struct SCIP_HeurData SCIP_HEURDATA
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4