76 assert(num <= primal->solssize);
96 newsize =
MIN(newsize,
set->limit_maxorigsol);
101 assert(num <= primal->partialsolssize);
124 assert(num <= primal->existingsolssize);
137 (*primal)->sols =
NULL;
138 (*primal)->partialsols =
NULL;
139 (*primal)->existingsols =
NULL;
140 (*primal)->currentsol =
NULL;
141 (*primal)->primalray =
NULL;
142 (*primal)->solssize = 0;
143 (*primal)->partialsolssize = 0;
144 (*primal)->nsols = 0;
145 (*primal)->npartialsols = 0;
146 (*primal)->existingsolssize = 0;
147 (*primal)->nexistingsols = 0;
148 (*primal)->nsolsfound = 0;
149 (*primal)->nlimsolsfound = 0;
150 (*primal)->nbestsolsfound = 0;
151 (*primal)->nlimbestsolsfound = 0;
154 (*primal)->updateviolations =
TRUE;
171 if( (*primal)->currentsol !=
NULL )
177 if( (*primal)->primalray !=
NULL )
183 for( s = 0; s < (*primal)->nsols; ++s )
188 for( s = 0; s < (*primal)->npartialsols; ++s )
192 assert((*primal)->nexistingsols == 0);
214 if( (*primal)->currentsol !=
NULL )
220 if( (*primal)->primalray !=
NULL )
226 for( s = 0; s < (*primal)->nsols; ++s )
231 (*primal)->currentsol =
NULL;
232 (*primal)->primalray =
NULL;
233 (*primal)->nsols = 0;
234 (*primal)->nsolsfound = 0;
235 (*primal)->nlimsolsfound = 0;
236 (*primal)->nbestsolsfound = 0;
237 (*primal)->nlimbestsolsfound = 0;
240 (*primal)->updateviolations =
TRUE;
256 for(
i = 1;
i < primal->
nsols; ++
i )
265 primal->
sols[j] = primal->
sols[j-1];
285 SCIP_Real cutoffbound
319 SCIP_Real cutoffbound,
320 SCIP_Bool useforobjlimit
326 assert(cutoffbound <= primal->upperbound);
330 if( cutoffbound < primal->cutoffbound )
340 SCIPsetDebugMsg(
set,
"changing cutoff bound from %g to %g changes objective limit from %g to %g\n",
348 SCIP_CALL(
primalSetCutoffbound(primal, blkmem,
set, stat, transprob, eventfilter, eventqueue, tree, reopt, lp, cutoffbound) );
375 SCIP_Real cutoffbound;
380 assert(upperbound <= primal->upperbound || stat->
nnodes == 0);
394 cutoffbound =
MIN(cutoffbound, upperbound);
398 cutoffbound = upperbound;
401 if( cutoffbound < primal->cutoffbound )
403 SCIP_CALL(
primalSetCutoffbound(primal, blkmem,
set, stat, prob, eventfilter, eventqueue, tree, reopt, lp, cutoffbound) );
433 if( upperbound < primal->upperbound )
436 SCIP_CALL(
primalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, prob, tree, reopt, lp, upperbound) );
470 objlimit =
MIN(objlimit, inf);
473 if( objlimit < primal->cutoffbound )
475 SCIP_CALL(
primalSetCutoffbound(primal, blkmem,
set, stat, transprob, eventfilter, eventqueue, tree, reopt, lp, objlimit) );
479 if( objlimit < primal->upperbound )
481 SCIP_CALL(
primalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp, objlimit) );
502 SCIP_Real upperbound;
511 upperbound =
MIN(upperbound, inf);
517 if( primal->
nsols > 0 )
524 upperbound =
MIN(upperbound,
obj);
528 SCIP_CALL(
primalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp,
SCIPsetInfinity(
set)) );
535 SCIP_CALL(
primalSetCutoffbound(primal, blkmem,
set, stat, transprob, eventfilter, eventqueue, tree, reopt, lp, upperbound) );
538 SCIP_CALL(
primalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp, upperbound) );
560 for(
i = 1;
i < primal->
nsols; ++
i )
660 assert(0 <= insertpos && insertpos < set->limit_maxsol);
679 SCIPsetDebugMsg(
set,
"insert primal solution %p with obj %g at position %d (replace=%u):\n",
680 (
void*)
sol,
obj, insertpos, replace);
687 SCIPmessagePrintWarning(messagehdlr,
"Dual bound %g is larger than the objective of the primal solution %g. The solution might not be optimal.\n",
692 SCIPmessagePrintWarning(messagehdlr,
"Dual bound %g is smaller than the objective of the primal solution %g. The solution might not be optimal.\n",
695#ifdef WITH_DEBUG_SOLUTION
714 SCIP_CALL(
SCIPsolCheck(
sol,
set, messagehdlr, blkmem, stat, transprob,
TRUE,
TRUE,
TRUE,
TRUE, &feasible) );
733 for( pos =
set->limit_maxsol; pos < primal->
nsols; ++pos )
749 if( primal->
nsols ==
set->limit_maxsol )
760 for( pos = primal->
nsols-1; pos > insertpos; --pos )
761 primal->
sols[pos] = primal->
sols[pos-1];
764 assert(0 <= insertpos && insertpos < primal->nsols);
776 SCIP_Real primalsolval;
799 (SCIP_Real)(primal->
nsols - insertpos)/(SCIP_Real)(2.0*primal->
nsols - 1.0));
809 SCIP_CALL(
SCIPprimalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp,
obj) );
835 SCIP_CALL(
SCIPprimalTransformSol(primal,
sol, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt,
836 lp, eventqueue, eventfilter,
NULL,
NULL, 0, &added) );
838 SCIPsetDebugMsg(
set,
"original solution %p was successfully transferred to the transformed problem space\n",
862 assert(0 <= insertpos && insertpos < set->limit_maxorigsol);
873 for( pos =
set->limit_maxorigsol-1; pos < primal->
nsols; ++pos )
880 for( pos = primal->
nsols-1; pos > insertpos; --pos )
881 primal->
sols[pos] = primal->
sols[pos-1];
883 assert(0 <= insertpos && insertpos < primal->nsols);
913 SCIPerrorMessage(
"Cannot add partial solution to storage: limit reached.\n");
951 right = primal->
nsols;
952 while( left < right-1 )
954 middle = (left+right)/2;
955 assert(left < middle && middle < right);
956 assert(0 <= middle && middle < primal->nsols);
960 if(
obj < middleobj )
996 right = primal->
nsols;
997 while( left < right-1 )
999 middle = (left+right)/2;
1000 assert(left < middle && middle < right);
1001 assert(0 <= middle && middle < primal->nsols);
1003 if(
obj < middleobj )
1033 assert(0 <= (*insertpos) && (*insertpos) <= primal->
nsols);
1041 for(
i = (*insertpos)-1;
i >= 0; --
i )
1067 for(
i = (*insertpos);
i < primal->
nsols; ++
i )
1110 assert(0 <= insertpos && insertpos <= primal->nsols);
1115 for(
i = insertpos-1;
i >= 0; --
i )
1130 for(
i = insertpos;
i < primal->
nsols; ++
i )
1177 if( (*insertpos) <
set->limit_maxsol &&
1249#ifdef SCIP_MORE_DEBUG
1253 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1260 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1261#ifdef SCIP_MORE_DEBUG
1262 for(
i = 0;
i < primal->
nsols - 1; ++
i )
1307 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1311 tree, reopt, lp, eventqueue, eventfilter,
sol, insertpos, replace) );
1368 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1418 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1494 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol, stored) );
1514 SCIP_Bool printreason,
1515 SCIP_Bool completely,
1516 SCIP_Bool checkbounds,
1517 SCIP_Bool checkintegrality,
1518 SCIP_Bool checklprows,
1535 checklprows = checklprows ||
set->misc_exactsolve;
1543 checkintegrality, checklprows, &feasible) );
1552 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1559 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1584 SCIP_Bool printreason,
1585 SCIP_Bool completely,
1586 SCIP_Bool checkbounds,
1587 SCIP_Bool checkintegrality,
1588 SCIP_Bool checklprows,
1607 checklprows = checklprows ||
set->misc_exactsolve;
1615 checkintegrality, checklprows, &feasible) );
1622 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1626 tree, reopt, lp, eventqueue, eventfilter,
sol, insertpos, replace) );
1658 SCIP_Bool printreason,
1659 SCIP_Bool completely,
1660 SCIP_Bool checkintegrality,
1661 SCIP_Bool checklprows,
1672 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol,
1673 printreason, completely,
FALSE, checkintegrality, checklprows, stored) );
1720 assert(0 <= idx && idx < primal->nexistingsols);
1722 if( idx < primal->nexistingsols-1 )
1768 SCIP_Bool hasinfval;
1773 for(
i = 0;
i < primal->
nsols; ++
i )
1787 if( primal->
nsols > 0 )
1795 SCIP_CALL(
SCIPprimalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp,
obj) );
1820 SCIP_Bool* solvalset,
1831 SCIP_Real* localsolvals;
1832 SCIP_Bool* localsolvalset;
1836 SCIP_Bool localarrays;
1847 assert(solvalssize == 0 || solvalset !=
NULL);
1849 origvars = origprob->
vars;
1850 norigvars = origprob->
nvars;
1851 transvars = transprob->
vars;
1852 ntransvars = transprob->
nvars;
1853 assert(solvalssize == 0 || solvalssize >= ntransvars);
1855 SCIPsetDebugMsg(
set,
"try to transfer original solution %p with objective %g into the transformed problem space\n",
1859 localarrays = (solvalssize == 0);
1867 localsolvals = solvals;
1868 localsolvalset = solvalset;
1882 for( v = 0; v < norigvars && feasible; ++v )
1903 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to fixed variable <%s> (original solval=%g)\n",
1917 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to active variable <%s> with assigned solval %g (original solval=%g)\n",
1950 for( v = 0; v < ntransvars; ++v )
1952 if( localsolvalset[v] )
1959 tree, reopt, lp, eventqueue, eventfilter, &transsol,
FALSE,
FALSE,
TRUE,
TRUE,
TRUE, added) );
1961 SCIPsetDebugMsg(
set,
"solution transferred, %d/%d active variables set (stored=%u)\n", nvarsset, ntransvars, *added);
1990 SCIP_Bool updateviolations
common defines and data types used in all packages of SCIP
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPdispPrintLine(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, FILE *file, SCIP_Bool forcedisplay, SCIP_Bool endline)
internal methods for displaying runtime statistics
SCIP_RETCODE SCIPeventChgSol(SCIP_EVENT *event, SCIP_SOL *sol)
SCIP_RETCODE SCIPeventProcess(SCIP_EVENT *event, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPeventChgType(SCIP_EVENT *event, SCIP_EVENTTYPE eventtype)
internal methods for managing events
SCIP_SOLORIGIN SCIPsolGetOrigin(SCIP_SOL *sol)
SCIP_Real SCIPsolGetOrigObj(SCIP_SOL *sol)
SCIP_Real SCIPsolGetTime(SCIP_SOL *sol)
SCIP_Longint SCIPsolGetNodenum(SCIP_SOL *sol)
SCIP_HEUR * SCIPsolGetHeur(SCIP_SOL *sol)
SCIP_Bool SCIPsolIsOriginal(SCIP_SOL *sol)
int SCIPsolGetDepth(SCIP_SOL *sol)
SCIP_Bool SCIPsolIsPartial(SCIP_SOL *sol)
int SCIPsolGetRunnum(SCIP_SOL *sol)
void SCIPsolSetHeur(SCIP_SOL *sol, SCIP_HEUR *heur)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
assert(minobj< SCIPgetCutoffbound(scip))
SCIP_RETCODE SCIPlpSetCutoffbound(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real cutoffbound)
internal methods for LP management
#define BMSfreeMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSclearMemoryArray(ptr, num)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
SCIP_RETCODE SCIPprimalAddCurrentSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_HEUR *heur, SCIP_Bool *stored)
void SCIPprimalSetUpdateViolations(SCIP_PRIMAL *primal, SCIP_Bool updateviolations)
SCIP_RETCODE SCIPprimalUpdateRay(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *primalray, BMS_BLKMEM *blkmem)
void SCIPprimalSolFreed(SCIP_PRIMAL *primal, SCIP_SOL *sol)
static SCIP_RETCODE primalAddSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL **solptr, int insertpos, SCIP_Bool replace)
static SCIP_Bool origsolOfInterest(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_SOL *sol, int *insertpos)
SCIP_RETCODE SCIPprimalSetUpperbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real upperbound)
static int primalSearchSolPos(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SOL *sol)
SCIP_RETCODE SCIPprimalAddOrigSolFree(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL **sol, SCIP_Bool *stored)
SCIP_RETCODE SCIPprimalTryCurrentSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_HEUR *heur, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
static SCIP_RETCODE ensureExistingsolsSize(SCIP_PRIMAL *primal, SCIP_SET *set, int num)
SCIP_RETCODE SCIPprimalClear(SCIP_PRIMAL **primal, BMS_BLKMEM *blkmem)
void SCIPprimalAddOrigObjoffset(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_Real addval)
SCIP_RETCODE SCIPprimalFree(SCIP_PRIMAL **primal, BMS_BLKMEM *blkmem)
static SCIP_Bool primalExistsOrigSol(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, int insertpos)
static SCIP_RETCODE primalAddOrigSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_SOL *sol, int insertpos)
SCIP_SOL * SCIPprimalGetRay(SCIP_PRIMAL *primal)
SCIP_RETCODE SCIPprimalTrySolFree(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL **sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
SCIP_Bool SCIPprimalUpdateViolations(SCIP_PRIMAL *primal)
SCIP_Bool SCIPprimalUpperboundIsSol(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
static SCIP_RETCODE ensureSolsSize(SCIP_PRIMAL *primal, SCIP_SET *set, int num)
static void sortPrimalSols(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_PROB *origprob, SCIP_PROB *transprob)
SCIP_RETCODE SCIPprimalAddOrigSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, SCIP_Bool *stored)
static SCIP_RETCODE primalSetCutoffbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real cutoffbound)
void SCIPprimalUpdateVarObj(SCIP_PRIMAL *primal, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
SCIP_RETCODE SCIPprimalCreate(SCIP_PRIMAL **primal)
SCIP_RETCODE SCIPprimalUpdateObjoffset(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
static SCIP_RETCODE primalLinkCurrentSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
SCIP_RETCODE SCIPprimalTrySol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
SCIP_RETCODE SCIPprimalTransformSol(SCIP_PRIMAL *primal, SCIP_SOL *sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_Real *solvals, SCIP_Bool *solvalset, int solvalssize, SCIP_Bool *added)
SCIP_RETCODE SCIPprimalUpdateObjlimit(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
SCIP_RETCODE SCIPprimalAddSolFree(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL **sol, SCIP_Bool *stored)
static SCIP_RETCODE primalSetUpperbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real upperbound)
SCIP_RETCODE SCIPprimalAddSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL *sol, SCIP_Bool *stored)
static int primalSearchOrigSolPos(SCIP_PRIMAL *primal, SCIP_SOL *sol)
SCIP_RETCODE SCIPprimalSetCutoffbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real cutoffbound, SCIP_Bool useforobjlimit)
static SCIP_Bool solOfInterest(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_SOL *sol, int *insertpos, SCIP_Bool *replace)
SCIP_RETCODE SCIPprimalSolCreated(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_SOL *sol)
SCIP_RETCODE SCIPprimalRetransformSolutions(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
static SCIP_Bool primalExistsSol(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_SOL *sol, int *insertpos, SCIP_Bool *replace)
static SCIP_RETCODE ensurePartialsolsSize(SCIP_PRIMAL *primal, SCIP_SET *set, int num)
static SCIP_RETCODE primalAddOrigPartialSol(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_PROB *prob, SCIP_SOL *sol)
internal methods for collecting primal CIP solutions and primal informations
SCIP_Real SCIPprobGetObjlim(SCIP_PROB *prob, SCIP_SET *set)
void SCIPprobSetObjlim(SCIP_PROB *prob, SCIP_Real objlim)
SCIP_Bool SCIPprobIsObjIntegral(SCIP_PROB *prob)
SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
internal methods for storing and manipulating the main problem
public methods for message output
public methods for problem variables
data structures and methods for collecting reoptimization information
public methods for querying solving statistics
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetFeasCeil(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetEpsilon(SCIP_SET *set)
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_STAGE SCIPsetGetStage(SCIP_SET *set)
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetCutoffbounddelta(SCIP_SET *set)
SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
internal methods for global SCIP settings
#define SCIPsetFreeBufferArray(set, ptr)
#define SCIPsetAllocBufferArray(set, ptr, num)
void SCIPsolUpdateVarObj(SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
void SCIPsolSetPrimalIndex(SCIP_SOL *sol, int primalindex)
int SCIPsolGetPrimalIndex(SCIP_SOL *sol)
SCIP_RETCODE SCIPsolLinkCurrentSol(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp)
SCIP_RETCODE SCIPsolCheck(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *feasible)
SCIP_RETCODE SCIPsolFree(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_PRIMAL *primal)
SCIP_RETCODE SCIPsolRetransform(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_Bool *hasinfval)
SCIP_RETCODE SCIPsolCreateCurrentSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
SCIP_RETCODE SCIPsolTransform(SCIP_SOL *sol, SCIP_SOL **transsol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal)
SCIP_RETCODE SCIPsolSetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_VAR *var, SCIP_Real val)
SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
SCIP_RETCODE SCIPsolUnlink(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *prob)
SCIP_Bool SCIPsolsAreEqual(SCIP_SOL *sol1, SCIP_SOL *sol2, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob)
SCIP_Real SCIPsolGetObj(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
SCIP_RETCODE SCIPsolPrint(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PROB *transprob, FILE *file, SCIP_Bool mipstart, SCIP_Bool printzeros)
void SCIPsolUpdateVarsum(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Real weight)
SCIP_RETCODE SCIPsolCopy(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_SOL *sourcesol)
SCIP_RETCODE SCIPsolCreate(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
void SCIPsolOrigAddObjval(SCIP_SOL *sol, SCIP_Real addval)
internal methods for storing primal CIP solutions
internal methods for problem statistics
SCIP_Longint nbestsolsfound
SCIP_Bool updateviolations
SCIP_Longint nlimsolsfound
SCIP_Real firstprimaltime
SCIP_HEUR * firstprimalheur
SCIP_Longint nnodesbeforefirst
SCIP_Real firstprimalbound
datastructures for managing events
SCIP_NODE * SCIPtreeGetCurrentNode(SCIP_TREE *tree)
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
SCIP_RETCODE SCIPtreeCutoff(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real cutoffbound)
SCIP_Bool SCIPtreeInRepropagation(SCIP_TREE *tree)
internal methods for branch and bound tree
#define SCIP_EVENTTYPE_POORSOLFOUND
#define SCIP_EVENTTYPE_BESTSOLFOUND
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_SOLORIGIN_ORIGINAL
@ SCIP_VARSTATUS_MULTAGGR
SCIP_RETCODE SCIPvarGetProbvarSum(SCIP_VAR **var, SCIP_SET *set, SCIP_Real *scalar, SCIP_Real *constant)
internal methods for problem variables
void SCIPvisualUpperbound(SCIP_VISUAL *visual, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real upperbound)
void SCIPvisualFoundSolution(SCIP_VISUAL *visual, SCIP_SET *set, SCIP_STAT *stat, SCIP_NODE *node, SCIP_Bool bettersol, SCIP_SOL *sol)
methods for creating output for visualization tools (VBC, BAK)