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);
616 assert(primal !=
NULL);
618 assert(solptr !=
NULL);
619 assert(stat !=
NULL);
620 assert(transprob !=
NULL);
621 assert(origprob !=
NULL);
622 assert(0 <= insertpos && insertpos < set->limit_maxsol);
629 SCIPsetDebugMsg(
set,
"insert primal solution %p with obj %g at position %d (replace=%u):\n",
630 (
void*)sol, obj, insertpos, replace);
646 SCIP_CALL(
SCIPsolCheck(sol,
set, messagehdlr, blkmem, stat, transprob,
TRUE,
TRUE,
TRUE,
TRUE, &feasible) );
665 for( pos = set->limit_maxsol; pos < primal->nsols; ++pos )
677 sol = primal->
sols[insertpos];
681 if( primal->
nsols == set->limit_maxsol )
688 assert(primal->
nsols <= set->limit_maxsol);
692 for( pos = primal->
nsols-1; pos > insertpos; --pos )
693 primal->
sols[pos] = primal->
sols[pos-1];
696 assert(0 <= insertpos && insertpos < primal->nsols);
697 primal->
sols[insertpos] = sol;
719 SCIPsetDebugMsg(
set,
"First Solution stored in problem specific statistics.\n");
724 SCIPsetDebugMsg(
set,
" -> stored at position %d of %d solutions, found %" SCIP_LONGINT_FORMAT
" solutions\n",
738 if( obj < primal->upperbound )
767 SCIP_CALL(
SCIPprimalTransformSol(primal, sol, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt,
768 lp, eventqueue, eventfilter,
NULL,
NULL, 0, &added) );
770 SCIPsetDebugMsg(
set,
"original solution %p was successfully transferred to the transformed problem space\n",
791 assert(primal !=
NULL);
793 assert(prob !=
NULL);
795 assert(0 <= insertpos && insertpos < set->limit_maxorigsol);
796 assert(!set->reopt_enable);
806 for( pos = set->limit_maxorigsol-1; pos < primal->nsols; ++pos )
813 for( pos = primal->
nsols-1; pos > insertpos; --pos )
814 primal->
sols[pos] = primal->
sols[pos-1];
816 assert(0 <= insertpos && insertpos < primal->nsols);
817 primal->
sols[insertpos] = sol;
824 SCIPsetDebugMsg(
set,
" -> stored at position %d of %d solutions, found %" SCIP_LONGINT_FORMAT
" solutions\n",
840 assert(primal !=
NULL);
842 assert(prob !=
NULL);
847 SCIPerrorMessage(
"Cannot add partial solution to storage: limit reached.\n");
851 SCIPsetDebugMsg(
set,
"insert partial solution candidate %p:\n", (
void*)sol);
879 assert(primal !=
NULL);
885 right = primal->
nsols;
886 while( left < right-1 )
888 middle = (left+right)/2;
889 assert(left < middle && middle < right);
890 assert(0 <= middle && middle < primal->nsols);
892 middleobj =
SCIPsolGetObj(sols[middle],
set, transprob, origprob);
894 if( obj < middleobj )
899 assert(left == right-1);
925 assert(primal !=
NULL);
930 right = primal->
nsols;
931 while( left < right-1 )
933 middle = (left+right)/2;
934 assert(left < middle && middle < right);
935 assert(0 <= middle && middle < primal->nsols);
937 if( obj < middleobj )
942 assert(left == right-1);
964 assert(primal !=
NULL);
965 assert(insertpos !=
NULL);
966 assert(replace !=
NULL);
967 assert(0 <= (*insertpos) && (*insertpos) <= primal->
nsols);
972 assert(primal->
sols !=
NULL || (*insertpos) == 0);
975 for( i = (*insertpos)-1; i >= 0; --i )
1001 for( i = (*insertpos); i < primal->
nsols; ++i )
1043 assert(primal !=
NULL);
1044 assert(0 <= insertpos && insertpos <= primal->nsols);
1049 for( i = insertpos-1; i >= 0; --i )
1064 for( i = insertpos; i < primal->
nsols; ++i )
1102 if( (!set->misc_improvingsols || obj < primal->cutoffbound) && !
SCIPsetIsInfinity(
set, obj) )
1111 if( (*insertpos) < set->limit_maxsol &&
1112 (!
primalExistsSol(primal,
set, stat, origprob, transprob, sol, insertpos, replace) || (*replace)) )
1135 if( !set->reopt_enable && (*insertpos) < set->limit_maxorigsol && !
primalExistsOrigSol(primal,
set, stat, origprob, sol, *insertpos) )
1162 assert(primal !=
NULL);
1163 assert(blkmem !=
NULL);
1164 assert(
set !=
NULL);
1165 assert(messagehdlr !=
NULL);
1166 assert(stat !=
NULL);
1167 assert(origprob !=
NULL);
1168 assert(transprob !=
NULL);
1169 assert(tree !=
NULL);
1171 assert(eventqueue !=
NULL);
1172 assert(eventfilter !=
NULL);
1173 assert(sol !=
NULL);
1174 assert(stored !=
NULL);
1180 if(
solOfInterest(primal,
set, stat, origprob, transprob, sol, &insertpos, &replace) )
1183 #ifdef SCIP_MORE_DEBUG 1187 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1194 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1195 #ifdef SCIP_MORE_DEBUG 1196 for( i = 0; i < primal->
nsols - 1; ++i )
1230 assert(primal !=
NULL);
1231 assert(transprob !=
NULL);
1232 assert(origprob !=
NULL);
1233 assert(sol !=
NULL);
1234 assert(*sol !=
NULL);
1235 assert(stored !=
NULL);
1239 if(
solOfInterest(primal,
set, stat, origprob, transprob, *sol, &insertpos, &replace) )
1241 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1245 tree, reopt, lp, eventqueue, eventfilter, sol, insertpos, replace) );
1259 assert(*sol ==
NULL);
1277 assert(primal !=
NULL);
1278 assert(blkmem !=
NULL);
1279 assert(
set !=
NULL);
1280 assert(stat !=
NULL);
1281 assert(sol !=
NULL);
1283 assert(stored !=
NULL);
1302 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1303 assert(!set->reopt_enable);
1332 assert(primal !=
NULL);
1333 assert(sol !=
NULL);
1334 assert(*sol !=
NULL);
1336 assert(stored !=
NULL);
1352 assert(insertpos >= 0 && insertpos < set->limit_maxorigsol);
1353 assert(!set->reopt_enable);
1370 assert(*sol ==
NULL);
1388 assert(primal !=
NULL);
1421 assert(primal !=
NULL);
1428 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol, stored) );
1460 assert(primal !=
NULL);
1461 assert(
set !=
NULL);
1462 assert(transprob !=
NULL);
1463 assert(origprob !=
NULL);
1464 assert(tree !=
NULL);
1465 assert(sol !=
NULL);
1466 assert(stored !=
NULL);
1469 checklprows = checklprows ||
set->misc_exactsolve;
1473 if(
solOfInterest(primal,
set, stat, origprob, transprob, sol, &insertpos, &replace) )
1476 SCIP_CALL(
SCIPsolCheck(sol,
set, messagehdlr, blkmem, stat, transprob, printreason, completely, checkbounds,
1477 checkintegrality, checklprows, &feasible) );
1486 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1493 tree, reopt, lp, eventqueue, eventfilter, &solcopy, insertpos, replace) );
1530 assert(primal !=
NULL);
1531 assert(transprob !=
NULL);
1532 assert(origprob !=
NULL);
1533 assert(tree !=
NULL);
1534 assert(sol !=
NULL);
1535 assert(*sol !=
NULL);
1536 assert(stored !=
NULL);
1541 checklprows = checklprows ||
set->misc_exactsolve;
1545 if(
solOfInterest(primal,
set, stat, origprob, transprob, *sol, &insertpos, &replace) )
1548 SCIP_CALL(
SCIPsolCheck(*sol,
set, messagehdlr, blkmem, stat, transprob, printreason, completely, checkbounds,
1549 checkintegrality, checklprows, &feasible) );
1556 assert(insertpos >= 0 && insertpos < set->limit_maxsol);
1560 tree, reopt, lp, eventqueue, eventfilter, sol, insertpos, replace) );
1572 assert(*sol ==
NULL);
1599 assert(primal !=
NULL);
1606 tree, reopt, lp, eventqueue, eventfilter, primal->
currentsol,
1607 printreason, completely,
FALSE, checkintegrality, checklprows, stored) );
1619 assert(primal !=
NULL);
1620 assert(sol !=
NULL);
1642 assert(primal !=
NULL);
1643 assert(sol !=
NULL);
1654 assert(0 <= idx && idx < primal->nexistingsols);
1656 if( idx < primal->nexistingsols-1 )
1674 assert(primal !=
NULL);
1695 assert(primal !=
NULL);
1697 for( i = 0; i < primal->
nsols; ++i )
1749 assert(origprob !=
NULL);
1750 assert(transprob !=
NULL);
1752 assert(solvalssize == 0 || solvals !=
NULL);
1753 assert(solvalssize == 0 || solvalset !=
NULL);
1755 origvars = origprob->
vars;
1756 norigvars = origprob->
nvars;
1757 transvars = transprob->
vars;
1758 ntransvars = transprob->
nvars;
1759 assert(solvalssize == 0 || solvalssize >= ntransvars);
1761 SCIPsetDebugMsg(
set,
"try to transfer original solution %p with objective %g into the transformed problem space\n",
1765 localarrays = (solvalssize == 0);
1773 localsolvals = solvals;
1774 localsolvalset = solvalset;
1788 for( v = 0; v < norigvars && feasible; ++v )
1809 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to fixed variable <%s> (original solval=%g)\n",
1823 SCIPsetDebugMsg(
set,
"original variable <%s> (solval=%g) resolves to active variable <%s> with assigned solval %g (original solval=%g)\n",
1832 assert(scalar != 0.0);
1856 for( v = 0; v < ntransvars; ++v )
1858 if( localsolvalset[v] )
1865 tree, reopt, lp, eventqueue, eventfilter, &transsol,
FALSE,
FALSE,
TRUE,
TRUE,
TRUE, added) );
1867 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