63 assert(num <= primal->solssize);
83 newsize =
MIN(newsize, set->limit_maxorigsol);
88 assert(num <= primal->partialsolssize);
111 assert(num <= primal->existingsolssize);
121 assert(primal !=
NULL);
124 (*primal)->sols =
NULL;
125 (*primal)->partialsols =
NULL;
126 (*primal)->existingsols =
NULL;
127 (*primal)->currentsol =
NULL;
128 (*primal)->primalray =
NULL;
129 (*primal)->solssize = 0;
130 (*primal)->partialsolssize = 0;
131 (*primal)->nsols = 0;
132 (*primal)->npartialsols = 0;
133 (*primal)->existingsolssize = 0;
134 (*primal)->nexistingsols = 0;
135 (*primal)->nsolsfound = 0;
136 (*primal)->nlimsolsfound = 0;
137 (*primal)->nbestsolsfound = 0;
138 (*primal)->nlimbestsolsfound = 0;
153 assert(primal !=
NULL);
154 assert(*primal !=
NULL);
157 if( (*primal)->currentsol !=
NULL )
163 if( (*primal)->primalray !=
NULL )
169 for( s = 0; s < (*primal)->nsols; ++s )
174 for( s = 0; s < (*primal)->npartialsols; ++s )
178 assert((*primal)->nexistingsols == 0);
196 assert(primal !=
NULL);
197 assert(*primal !=
NULL);
200 if( (*primal)->currentsol !=
NULL )
206 if( (*primal)->primalray !=
NULL )
212 for( s = 0; s < (*primal)->nsols; ++s )
217 (*primal)->currentsol =
NULL;
218 (*primal)->primalray =
NULL;
219 (*primal)->nsols = 0;
220 (*primal)->nsolsfound = 0;
221 (*primal)->nlimsolsfound = 0;
222 (*primal)->nbestsolsfound = 0;
223 (*primal)->nlimbestsolsfound = 0;
245 assert(primal !=
NULL);
280 assert(primal !=
NULL);
282 assert(cutoffbound <= primal->upperbound);
283 assert(transprob !=
NULL);
284 assert(origprob !=
NULL);
286 if( cutoffbound < primal->cutoffbound )
296 SCIPsetDebugMsg(
set,
"changing cutoff bound from %g to %g changes objective limit from %g to %g\n",
332 assert(primal !=
NULL);
333 assert(stat !=
NULL);
335 assert(upperbound <= primal->upperbound || stat->
nnodes == 0);
349 cutoffbound =
MIN(cutoffbound, upperbound);
353 cutoffbound = upperbound;
356 if( cutoffbound < primal->cutoffbound )
384 assert(primal !=
NULL);
387 if( upperbound < primal->upperbound )
418 assert(primal !=
NULL);
423 objlimit =
MIN(objlimit, inf);
426 if( objlimit < primal->cutoffbound )
432 if( objlimit < primal->upperbound )
461 assert(primal !=
NULL);
467 upperbound =
MIN(upperbound, inf);
470 for( i = 1; i < primal->
nsols; ++i )
472 sol = primal->
sols[i];
474 for( j = i; j > 0 && objval <
SCIPsolGetObj(primal->
sols[j-1],
set, transprob, origprob); --j )
475 primal->
sols[j] = primal->
sols[j-1];
476 primal->
sols[j] = sol;
480 if( primal->
nsols > 0 )
487 upperbound =
MIN(upperbound, obj);
515 assert(primal !=
NULL);
523 for( i = 1; i < primal->
nsols; ++i )
548 assert(primal !=
NULL);
558 assert(primal !=
NULL);
572 assert(primal !=
NULL);
574 assert(stat !=
NULL);
575 assert(primalray !=
NULL);
576 assert(blkmem !=
NULL);
617 assert(primal !=
NULL);
619 assert(solptr !=
NULL);
620 assert(stat !=
NULL);
621 assert(transprob !=
NULL);
622 assert(origprob !=
NULL);
623 assert(0 <= insertpos && insertpos < set->limit_maxsol);
630 SCIPsetDebugMsg(
set,
"insert primal solution %p with obj %g at position %d (replace=%u):\n",
631 (
void*)sol, obj, insertpos, replace);
647 SCIP_CALL(
SCIPsolCheck(sol,
set, messagehdlr, blkmem, stat, transprob,
TRUE,
TRUE,
TRUE,
TRUE, &feasible) );
666 for( pos = set->limit_maxsol; pos < primal->nsols; ++pos )
678 sol = primal->
sols[insertpos];
682 if( primal->
nsols == set->limit_maxsol )
689 assert(primal->
nsols <= set->limit_maxsol);
693 for( pos = primal->
nsols-1; pos > insertpos; --pos )
694 primal->
sols[pos] = primal->
sols[pos-1];
697 assert(0 <= insertpos && insertpos < primal->nsols);
698 primal->
sols[insertpos] = sol;
720 SCIPsetDebugMsg(
set,
"First Solution stored in problem specific statistics.\n");
725 SCIPsetDebugMsg(
set,
" -> stored at position %d of %d solutions, found %" SCIP_LONGINT_FORMAT
" solutions\n",
739 if( obj < primal->cutoffbound && insertpos == 0 )
768 SCIP_CALL(
SCIPprimalTransformSol(primal, sol, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt,
769 lp, eventqueue, eventfilter,
NULL,
NULL, 0, &added) );
771 SCIPsetDebugMsg(
set,
"original solution %p was successfully transferred to the transformed problem space\n",
792 assert(primal !=
NULL);
794 assert(prob !=
NULL);
796 assert(0 <= insertpos && insertpos < set->limit_maxorigsol);
797 assert(!set->reopt_enable);
807 for( pos = set->limit_maxorigsol-1; pos < primal->nsols; ++pos )
814 for( pos = primal->
nsols-1; pos > insertpos; --pos )
815 primal->
sols[pos] = primal->
sols[pos-1];
817 assert(0 <= insertpos && insertpos < primal->nsols);
818 primal->
sols[insertpos] = sol;
825 SCIPsetDebugMsg(
set,
" -> stored at position %d of %d solutions, found %" SCIP_LONGINT_FORMAT
" solutions\n",
841 assert(primal !=
NULL);
843 assert(prob !=
NULL);
848 SCIPerrorMessage(
"Cannot add partial solution to storage: limit reached.\n");
852 SCIPsetDebugMsg(
set,
"insert partial solution candidate %p:\n", (
void*)sol);
880 assert(primal !=
NULL);
886 right = primal->
nsols;
887 while( left < right-1 )
889 middle = (left+right)/2;
890 assert(left < middle && middle < right);
891 assert(0 <= middle && middle < primal->nsols);
893 middleobj =
SCIPsolGetObj(sols[middle],
set, transprob, origprob);
895 if( obj < middleobj )
900 assert(left == right-1);
926 assert(primal !=
NULL);
931 right = primal->
nsols;
932 while( left < right-1 )
934 middle = (left+right)/2;
935 assert(left < middle && middle < right);
936 assert(0 <= middle && middle < primal->nsols);
938 if( obj < middleobj )
943 assert(left == right-1);
965 assert(primal !=
NULL);
966 assert(insertpos !=
NULL);
967 assert(replace !=
NULL);
968 assert(0 <= (*insertpos) && (*insertpos) <= primal->
nsols);
973 assert(primal->
sols !=
NULL || (*insertpos) == 0);
976 for( i = (*insertpos)-1; i >= 0; --i )
1002 for( i = (*insertpos); i < primal->
nsols; ++i )
1044 assert(primal !=
NULL);
1045 assert(0 <= insertpos && insertpos <= primal->nsols);
1050 for( i = insertpos-1; i >= 0; --i )
1065 for( i = insertpos; i < primal->
nsols; ++i )
1103 if( (!set->misc_improvingsols || obj < primal->cutoffbound) && !
SCIPsetIsInfinity(
set, obj) )
1112 if( (*insertpos) < set->limit_maxsol &&
1113 (!
primalExistsSol(primal,
set, stat, origprob, transprob, sol, insertpos, replace) || (*replace)) )
1136 if( !set->reopt_enable && (*insertpos) < set->limit_maxorigsol && !
primalExistsOrigSol(primal,
set, stat, origprob, sol, *insertpos) )
1163 assert(primal !=
NULL);
1164 assert(blkmem !=
NULL);
1165 assert(
set !=
NULL);
1166 assert(messagehdlr !=
NULL);
1167 assert(stat !=
NULL);
1168 assert(origprob !=
NULL);
1169 assert(transprob !=
NULL);
1170 assert(tree !=
NULL);
1172 assert(eventqueue !=
NULL);
1173 assert(eventfilter !=
NULL);
1174 assert(sol !=
NULL);
1175 assert(stored !=
NULL);
1181 if(
solOfInterest(primal,
set, stat, origprob, transprob, sol, &insertpos, &replace) )
1184 #ifdef SCIP_MORE_DEBUG 1188 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1195 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1196 #ifdef SCIP_MORE_DEBUG 1197 for( i = 0; i < primal->
nsols - 1; ++i )
1231 assert(primal !=
NULL);
1232 assert(transprob !=
NULL);
1233 assert(origprob !=
NULL);
1234 assert(sol !=
NULL);
1235 assert(*sol !=
NULL);
1236 assert(stored !=
NULL);
1240 if(
solOfInterest(primal,
set, stat, origprob, transprob, *sol, &insertpos, &replace) )
1242 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1246 tree, reopt, lp, eventqueue, eventfilter, sol, insertpos, replace) );
1260 assert(*sol ==
NULL);
1278 assert(primal !=
NULL);
1279 assert(blkmem !=
NULL);
1280 assert(
set !=
NULL);
1281 assert(stat !=
NULL);
1282 assert(sol !=
NULL);
1284 assert(stored !=
NULL);
1303 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1304 assert(!set->reopt_enable);
1333 assert(primal !=
NULL);
1334 assert(sol !=
NULL);
1335 assert(*sol !=
NULL);
1337 assert(stored !=
NULL);
1353 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1354 assert(!set->reopt_enable);
1371 assert(*sol ==
NULL);
1389 assert(primal !=
NULL);
1422 assert(primal !=
NULL);
1429 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol, stored) );
1461 assert(primal !=
NULL);
1462 assert(
set !=
NULL);
1463 assert(transprob !=
NULL);
1464 assert(origprob !=
NULL);
1465 assert(tree !=
NULL);
1466 assert(sol !=
NULL);
1467 assert(stored !=
NULL);
1470 checklprows = checklprows ||
set->misc_exactsolve;
1474 if(
solOfInterest(primal,
set, stat, origprob, transprob, sol, &insertpos, &replace) )
1477 SCIP_CALL(
SCIPsolCheck(sol,
set, messagehdlr, blkmem, stat, transprob, printreason, completely, checkbounds,
1478 checkintegrality, checklprows, &feasible) );
1487 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1494 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1531 assert(primal !=
NULL);
1532 assert(transprob !=
NULL);
1533 assert(origprob !=
NULL);
1534 assert(tree !=
NULL);
1535 assert(sol !=
NULL);
1536 assert(*sol !=
NULL);
1537 assert(stored !=
NULL);
1542 checklprows = checklprows ||
set->misc_exactsolve;
1546 if(
solOfInterest(primal,
set, stat, origprob, transprob, *sol, &insertpos, &replace) )
1549 SCIP_CALL(
SCIPsolCheck(*sol,
set, messagehdlr, blkmem, stat, transprob, printreason, completely, checkbounds,
1550 checkintegrality, checklprows, &feasible) );
1557 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1561 tree, reopt, lp, eventqueue, eventfilter, sol, insertpos, replace) );
1573 assert(*sol ==
NULL);
1600 assert(primal !=
NULL);
1607 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol,
1608 printreason, completely,
FALSE, checkintegrality, checklprows, stored) );
1620 assert(primal !=
NULL);
1621 assert(sol !=
NULL);
1643 assert(primal !=
NULL);
1644 assert(sol !=
NULL);
1655 assert(0 <= idx && idx < primal->nexistingsols);
1657 if( idx < primal->nexistingsols-1 )
1675 assert(primal !=
NULL);
1696 assert(primal !=
NULL);
1698 for( i = 0; i < primal->
nsols; ++i )
1750 assert(origprob !=
NULL);
1751 assert(transprob !=
NULL);
1753 assert(solvalssize == 0 || solvals !=
NULL);
1754 assert(solvalssize == 0 || solvalset !=
NULL);
1756 origvars = origprob->
vars;
1757 norigvars = origprob->
nvars;
1758 transvars = transprob->
vars;
1759 ntransvars = transprob->
nvars;
1760 assert(solvalssize == 0 || solvalssize >= ntransvars);
1762 SCIPsetDebugMsg(
set,
"try to transfer original solution %p with objective %g into the transformed problem space\n",
1766 localarrays = (solvalssize == 0);
1774 localsolvals = solvals;
1775 localsolvalset = solvalset;
1789 for( v = 0; v < norigvars && feasible; ++v )
1810 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to fixed variable <%s> (original solval=%g)\n",
1824 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to active variable <%s> with assigned solval %g (original solval=%g)\n",
1833 assert(scalar != 0.0);
1857 for( v = 0; v < ntransvars; ++v )
1859 if( localsolvalset[v] )
1866 tree, reopt, lp, eventqueue, eventfilter, &transsol,
FALSE,
FALSE,
TRUE,
TRUE,
TRUE, added) );
1868 SCIPsetDebugMsg(
set,
"solution transferred, %d/%d active variables set (stored=%u)\n", nvarsset, ntransvars, *added);
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_Bool SCIPsolIsOriginal(SCIP_SOL *sol)
SCIP_RETCODE SCIPsolUnlink(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *prob)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_RETCODE SCIPprimalClear(SCIP_PRIMAL **primal, BMS_BLKMEM *blkmem)
internal methods for managing events
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
internal methods for storing primal CIP solutions
void SCIPprimalSolFreed(SCIP_PRIMAL *primal, SCIP_SOL *sol)
#define BMSfreeMemoryArrayNull(ptr)
internal methods for branch and bound tree
static SCIP_RETCODE primalAddOrigSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_SOL *sol, int insertpos)
static SCIP_RETCODE primalSetUpperbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real upperbound)
SCIP_RETCODE SCIPdispPrintLine(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, FILE *file, SCIP_Bool forcedisplay, SCIP_Bool endline)
SCIP_RETCODE SCIPeventChgType(SCIP_EVENT *event, SCIP_EVENTTYPE eventtype)
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_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_RETCODE SCIPprimalAddOrigSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, SCIP_Bool *stored)
SCIP_RETCODE SCIPsolLinkCurrentSol(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp)
SCIP_RETCODE SCIPeventProcess(SCIP_EVENT *event, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPsolCopy(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_SOL *sourcesol)
enum SCIP_Retcode SCIP_RETCODE
static SCIP_RETCODE ensureSolsSize(SCIP_PRIMAL *primal, SCIP_SET *set, int num)
void SCIPsolSetPrimalIndex(SCIP_SOL *sol, int primalindex)
SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
#define SCIPsetAllocBufferArray(set, ptr, num)
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
int SCIPvarGetProbindex(SCIP_VAR *var)
SCIP_Bool SCIPsolsAreEqual(SCIP_SOL *sol1, SCIP_SOL *sol2, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob)
SCIP_Real SCIPsetCutoffbounddelta(SCIP_SET *set)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
SCIP_Real SCIPsolGetTime(SCIP_SOL *sol)
methods for creating output for visualization tools (VBC, BAK)
#define SCIPsetFreeBufferArray(set, ptr)
#define BMSfreeMemory(ptr)
internal methods for LP management
SCIP_SOL * SCIPprimalGetRay(SCIP_PRIMAL *primal)
SCIP_Real SCIPsolGetOrigObj(SCIP_SOL *sol)
internal methods for collecting primal CIP solutions and primal informations
SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
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)
SCIP_RETCODE SCIPprimalUpdateObjlimit(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
SCIP_Real SCIPprobGetObjlim(SCIP_PROB *prob, SCIP_SET *set)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPeventChgSol(SCIP_EVENT *event, SCIP_SOL *sol)
SCIP_Real SCIPsolGetObj(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
void SCIPsolUpdateVarsum(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Real weight)
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)
internal methods for storing and manipulating the main problem
SCIP_Longint nbestsolsfound
static int primalSearchOrigSolPos(SCIP_PRIMAL *primal, SCIP_SOL *sol)
SCIP_Bool SCIPtreeInRepropagation(SCIP_TREE *tree)
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_HEUR * firstprimalheur
SCIP_RETCODE SCIPsolSetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_VAR *var, SCIP_Real val)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPsetFeasCeil(SCIP_SET *set, SCIP_Real val)
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)
SCIP_HEUR * SCIPsolGetHeur(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)
SCIP_Bool SCIPprobIsObjIntegral(SCIP_PROB *prob)
internal methods for global SCIP settings
SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPprimalRetransformSolutions(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob)
SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPsolTransform(SCIP_SOL *sol, SCIP_SOL **transsol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal)
SCIP_RETCODE SCIPprimalSetCutoffbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real cutoffbound, SCIP_Bool useforobjlimit)
data structures and methods for collecting reoptimization information
internal methods for problem variables
SCIP_RETCODE SCIPprimalSolCreated(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_SOL *sol)
static SCIP_Bool origsolOfInterest(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_SOL *sol, int *insertpos)
void SCIPprimalUpdateVarObj(SCIP_PRIMAL *primal, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
SCIP_Longint SCIPsolGetNodenum(SCIP_SOL *sol)
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 SCIPsolSetHeur(SCIP_SOL *sol, SCIP_HEUR *heur)
SCIP_RETCODE SCIPsolRetransform(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_Bool *hasinfval)
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 SCIPsolOrigAddObjval(SCIP_SOL *sol, SCIP_Real addval)
static SCIP_RETCODE primalAddOrigPartialSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_SOL *sol)
static SCIP_RETCODE primalSetCutoffbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real cutoffbound)
void SCIPprobSetObjlim(SCIP_PROB *prob, SCIP_Real objlim)
SCIP_Longint nnodesbeforefirst
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 SCIPprimalAddOrigSolFree(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL **sol, SCIP_Bool *stored)
SCIP_RETCODE SCIPprimalSetUpperbound(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_Real upperbound)
#define SCIP_EVENTTYPE_BESTSOLFOUND
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)
#define SCIP_EVENTTYPE_POORSOLFOUND
SCIP_RETCODE SCIPlpSetCutoffbound(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob, SCIP_Real cutoffbound)
SCIP_Bool SCIPprimalUpperboundIsSol(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
SCIP_NODE * SCIPtreeGetCurrentNode(SCIP_TREE *tree)
public methods for message output
SCIP_SOLORIGIN SCIPsolGetOrigin(SCIP_SOL *sol)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
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)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPsolGetPrimalIndex(SCIP_SOL *sol)
void SCIPsolUpdateVarObj(SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
internal methods for problem statistics
SCIP_Real firstprimaltime
SCIP_Real firstprimalbound
#define BMSallocMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
static SCIP_RETCODE ensurePartialsolsSize(SCIP_PRIMAL *primal, SCIP_SET *set, int num)
SCIP_RETCODE SCIPprimalUpdateObjoffset(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
int SCIPsolGetDepth(SCIP_SOL *sol)
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_Real SCIPsetEpsilon(SCIP_SET *set)
SCIP_STAGE SCIPsetGetStage(SCIP_SET *set)
SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
static int primalSearchSolPos(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SOL *sol)
void SCIPprimalAddOrigObjoffset(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_Real addval)
SCIP_RETCODE SCIPprimalCreate(SCIP_PRIMAL **primal)
SCIP_RETCODE SCIPtreeCutoff(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real cutoffbound)
#define BMSclearMemoryArray(ptr, num)
SCIP_Bool SCIPsolIsPartial(SCIP_SOL *sol)
common defines and data types used in all packages of SCIP
static SCIP_RETCODE ensureExistingsolsSize(SCIP_PRIMAL *primal, SCIP_SET *set, int num)
static SCIP_Bool primalExistsOrigSol(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_SOL *sol, int insertpos)
int SCIPsolGetRunnum(SCIP_SOL *sol)
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPvarGetProbvarSum(SCIP_VAR **var, SCIP_SET *set, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_RETCODE SCIPprimalFree(SCIP_PRIMAL **primal, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPprimalUpdateRay(SCIP_PRIMAL *primal, SCIP_SET *set, SCIP_STAT *stat, SCIP_SOL *primalray, BMS_BLKMEM *blkmem)
void SCIPvisualUpperbound(SCIP_VISUAL *visual, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real upperbound)
SCIP_Longint nlimsolsfound
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)
void SCIPvisualFoundSolution(SCIP_VISUAL *visual, SCIP_SET *set, SCIP_STAT *stat, SCIP_NODE *node, SCIP_Bool bettersol, SCIP_SOL *sol)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
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)
SCIP_RETCODE SCIPsolFree(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_PRIMAL *primal)
internal methods for displaying runtime statistics