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
702#ifdef SCIP_DISABLED_CODE
715 SCIP_CALL(
SCIPsolCheck(
sol,
set, messagehdlr, blkmem, stat, transprob,
TRUE,
TRUE,
TRUE,
TRUE, &feasible) );
734 for( pos =
set->limit_maxsol; pos < primal->nsols; ++pos )
750 if( primal->
nsols ==
set->limit_maxsol )
761 for( pos = primal->
nsols-1; pos > insertpos; --pos )
762 primal->
sols[pos] = primal->
sols[pos-1];
765 assert(0 <= insertpos && insertpos < primal->nsols);
777 SCIP_Real primalsolval;
800 (SCIP_Real)(primal->
nsols - insertpos)/(SCIP_Real)(2.0*primal->
nsols - 1.0));
815 SCIP_CALL(
SCIPprimalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp,
obj) );
840 SCIP_CALL(
SCIPprimalTransformSol(primal,
sol, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt,
841 lp, eventqueue, eventfilter,
NULL,
NULL, 0, &added) );
843 SCIPsetDebugMsg(
set,
"original solution %p was successfully transferred to the transformed problem space\n",
867 assert(0 <= insertpos && insertpos < set->limit_maxorigsol);
878 for( pos =
set->limit_maxorigsol-1; pos < primal->nsols; ++pos )
885 for( pos = primal->
nsols-1; pos > insertpos; --pos )
886 primal->
sols[pos] = primal->
sols[pos-1];
888 assert(0 <= insertpos && insertpos < primal->nsols);
918 SCIPerrorMessage(
"Cannot add partial solution to storage: limit reached.\n");
956 right = primal->
nsols;
957 while( left < right-1 )
959 middle = (left+right)/2;
960 assert(left < middle && middle < right);
961 assert(0 <= middle && middle < primal->nsols);
965 if(
obj < middleobj )
1001 right = primal->
nsols;
1002 while( left < right-1 )
1004 middle = (left+right)/2;
1005 assert(left < middle && middle < right);
1006 assert(0 <= middle && middle < primal->nsols);
1008 if(
obj < middleobj )
1038 assert(0 <= (*insertpos) && (*insertpos) <= primal->
nsols);
1046 for(
i = (*insertpos)-1;
i >= 0; --
i )
1072 for(
i = (*insertpos);
i < primal->
nsols; ++
i )
1115 assert(0 <= insertpos && insertpos <= primal->nsols);
1120 for(
i = insertpos-1;
i >= 0; --
i )
1135 for(
i = insertpos;
i < primal->
nsols; ++
i )
1182 if( (*insertpos) <
set->limit_maxsol &&
1254#ifdef SCIP_MORE_DEBUG
1258 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1265 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1266#ifdef SCIP_MORE_DEBUG
1267 for(
i = 0;
i < primal->
nsols - 1; ++
i )
1312 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1316 tree, reopt, lp, eventqueue, eventfilter,
sol, insertpos, replace) );
1373 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1423 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1499 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol, stored) );
1519 SCIP_Bool printreason,
1520 SCIP_Bool completely,
1521 SCIP_Bool checkbounds,
1522 SCIP_Bool checkintegrality,
1523 SCIP_Bool checklprows,
1540 checklprows = checklprows ||
set->misc_exactsolve;
1548 checkintegrality, checklprows, &feasible) );
1557 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1564 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1589 SCIP_Bool printreason,
1590 SCIP_Bool completely,
1591 SCIP_Bool checkbounds,
1592 SCIP_Bool checkintegrality,
1593 SCIP_Bool checklprows,
1612 checklprows = checklprows ||
set->misc_exactsolve;
1620 checkintegrality, checklprows, &feasible) );
1627 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1631 tree, reopt, lp, eventqueue, eventfilter,
sol, insertpos, replace) );
1663 SCIP_Bool printreason,
1664 SCIP_Bool completely,
1665 SCIP_Bool checkintegrality,
1666 SCIP_Bool checklprows,
1677 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol,
1678 printreason, completely,
FALSE, checkintegrality, checklprows, stored) );
1725 assert(0 <= idx && idx < primal->nexistingsols);
1727 if( idx < primal->nexistingsols-1 )
1773 SCIP_Bool hasinfval;
1778 for(
i = 0;
i < primal->
nsols; ++
i )
1792 if( primal->
nsols > 0 )
1800 SCIP_CALL(
SCIPprimalSetUpperbound(primal, blkmem,
set, stat, eventfilter, eventqueue, transprob, tree, reopt, lp,
obj) );
1825 SCIP_Bool* solvalset,
1836 SCIP_Real* localsolvals;
1837 SCIP_Bool* localsolvalset;
1841 SCIP_Bool localarrays;
1852 assert(solvalssize == 0 || solvalset !=
NULL);
1854 origvars = origprob->
vars;
1855 norigvars = origprob->
nvars;
1856 transvars = transprob->
vars;
1857 ntransvars = transprob->
nvars;
1858 assert(solvalssize == 0 || solvalssize >= ntransvars);
1860 SCIPsetDebugMsg(
set,
"try to transfer original solution %p with objective %g into the transformed problem space\n",
1864 localarrays = (solvalssize == 0);
1872 localsolvals = solvals;
1873 localsolvalset = solvalset;
1887 for( v = 0; v < norigvars && feasible; ++v )
1908 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to fixed variable <%s> (original solval=%g)\n",
1922 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to active variable <%s> with assigned solval %g (original solval=%g)\n",
1955 for( v = 0; v < ntransvars; ++v )
1957 if( localsolvalset[v] )
1964 tree, reopt, lp, eventqueue, eventfilter, &transsol,
FALSE,
FALSE,
TRUE,
TRUE,
TRUE, added) );
1966 SCIPsetDebugMsg(
set,
"solution transferred, %d/%d active variables set (stored=%u)\n", nvarsset, ntransvars, *added);
1995 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)