internal methods for main solving loop and node processing
Definition in file solve.h.
#include <stdio.h>
#include "scip/def.h"
#include "blockmemshell/memory.h"
#include "scip/type_retcode.h"
#include "scip/type_set.h"
#include "scip/type_stat.h"
#include "scip/type_event.h"
#include "scip/type_lp.h"
#include "scip/type_prob.h"
#include "scip/type_primal.h"
#include "scip/type_tree.h"
#include "scip/type_reopt.h"
#include "scip/type_pricestore.h"
#include "scip/type_sepastore.h"
#include "scip/type_cutpool.h"
#include "scip/type_conflict.h"
#include "scip/type_conflictstore.h"
Go to the source code of this file.
returns whether the solving process will be / was stopped before proving optimality; if the solving process was stopped, stores the reason as status in stat
set | global SCIP settings |
stat | dynamic problem statistics |
checknodelimits | should the node limits be involved in the check? |
Definition at line 71 of file solve.c.
References SCIP_Stat::bestsolnode, SCIP_Stat::externmemestim, FALSE, MAXNCLOCKSKIPS, SCIP_Stat::nclockskipsleft, NINITCALLS, SCIP_Stat::nisstoppedcalls, SCIP_Stat::nnodes, SCIP_Stat::ntotalnodes, NULL, SAFETYFACTOR, SCIP_Real, SCIP_STAGE_PRESOLVED, SCIP_STAGE_SOLVING, SCIP_STATUS_BESTSOLLIMIT, SCIP_STATUS_GAPLIMIT, SCIP_STATUS_MEMLIMIT, SCIP_STATUS_NODELIMIT, SCIP_STATUS_SOLLIMIT, SCIP_STATUS_STALLNODELIMIT, SCIP_STATUS_TIMELIMIT, SCIP_STATUS_TOTALNODELIMIT, SCIP_STATUS_UNKNOWN, SCIP_STATUS_USERINTERRUPT, SCIPclockGetLastTime(), SCIPclockGetTime(), SCIPgetConcurrentMemTotal(), SCIPgetGap(), SCIPgetLowerbound(), SCIPgetNBestSolsFound(), SCIPgetNConcurrentSolvers(), SCIPgetNLimSolsFound(), SCIPgetSyncstore(), SCIPgetUpperbound(), SCIPinterrupted(), SCIPresetInterrupted(), SCIPsetIsLE(), SCIPsetIsLT(), SCIPstatIncrement, SCIPsyncstoreSolveIsStopped(), SCIP_Stat::solvingtime, SCIP_Stat::status, TRUE, and SCIP_Stat::userinterrupt.
Referenced by presolve(), priceAndCutLoop(), propagateDomains(), propAndSolve(), SCIPgetVarsStrongbranchesFrac(), SCIPgetVarsStrongbranchesInt(), SCIPgetVarStrongbranchFrac(), SCIPgetVarStrongbranchInt(), SCIPgetVarStrongbranchWithPropagation(), SCIPisStopped(), SCIPlpSolveAndEval(), SCIPpriceLoop(), SCIPprimalHeuristics(), SCIPprintStage(), SCIPsolve(), SCIPsolveCIP(), separationRoundSol(), solveNode(), and solveNodeLP().
SCIP_RETCODE SCIPpropagateDomains | ( | BMS_BLKMEM * | blkmem, |
SCIP_SET * | set, | ||
SCIP_STAT * | stat, | ||
SCIP_PROB * | transprob, | ||
SCIP_PROB * | origprob, | ||
SCIP_PRIMAL * | primal, | ||
SCIP_TREE * | tree, | ||
SCIP_REOPT * | reopt, | ||
SCIP_LP * | lp, | ||
SCIP_BRANCHCAND * | branchcand, | ||
SCIP_EVENTQUEUE * | eventqueue, | ||
SCIP_CONFLICT * | conflict, | ||
SCIP_CLIQUETABLE * | cliquetable, | ||
int | depth, | ||
int | maxproprounds, | ||
SCIP_PROPTIMING | timingmask, | ||
SCIP_Bool * | cutoff | ||
) |
applies domain propagation on current node and flushes the conflict store afterwards
blkmem | block memory buffers |
set | global SCIP settings |
stat | dynamic problem statistics |
transprob | transformed problem |
origprob | original problem |
primal | primal data |
tree | branch and bound tree |
reopt | reoptimization data structure |
lp | LP data |
branchcand | branching candidate storage |
eventqueue | event queue |
conflict | conflict analysis data |
cliquetable | clique table data structure |
depth | depth level to use for propagator frequency checks |
maxproprounds | maximal number of propagation rounds (-1: no limit, 0: parameter settings) |
timingmask | timing mask to decide which propagators are executed |
cutoff | pointer to store whether the node can be cut off |
Definition at line 606 of file solve.c.
References propagateDomains(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconflictFlushConss(), and TRUE.
Referenced by nodeRepropagate(), and SCIPpropagateProbing().
SCIP_RETCODE SCIPinitConssLP | ( | BMS_BLKMEM * | blkmem, |
SCIP_SET * | set, | ||
SCIP_SEPASTORE * | sepastore, | ||
SCIP_CUTPOOL * | cutpool, | ||
SCIP_STAT * | stat, | ||
SCIP_PROB * | transprob, | ||
SCIP_PROB * | origprob, | ||
SCIP_TREE * | tree, | ||
SCIP_REOPT * | reopt, | ||
SCIP_LP * | lp, | ||
SCIP_BRANCHCAND * | branchcand, | ||
SCIP_EVENTQUEUE * | eventqueue, | ||
SCIP_EVENTFILTER * | eventfilter, | ||
SCIP_CLIQUETABLE * | cliquetable, | ||
SCIP_Bool | root, | ||
SCIP_Bool | firstsubtreeinit, | ||
SCIP_Bool * | cutoff | ||
) |
puts all constraints with initial flag TRUE into the LP
blkmem | block memory buffers |
set | global SCIP settings |
sepastore | separation storage |
cutpool | global cutpool |
stat | dynamic problem statistics |
transprob | transformed problem |
origprob | original problem |
tree | branch and bound tree |
reopt | reoptimization data structure |
lp | LP data |
branchcand | branching candidate storage |
eventqueue | event queue |
eventfilter | global event filter |
cliquetable | clique table data structure |
root | is this the initial root LP? |
firstsubtreeinit | is this the first call in the current subtree after jumping through the tree? |
cutoff | pointer to store whether the node can be cut off |
Definition at line 1074 of file solve.c.
References FALSE, SCIP_Tree::focusnode, NULL, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_OKAY, SCIPconshdlrInitLP(), SCIPreoptApplyCuts(), SCIPsepastoreApplyCuts(), SCIPsepastoreClearCuts(), SCIPsepastoreEndInitialLP(), SCIPsepastoreStartInitialLP(), and SCIPsetDebugMsg.
Referenced by initLP(), priceAndCutLoop(), SCIPconstructCurrentLP(), SCIPpriceLoop(), solveNodeLP(), and solveProbingLP().
SCIP_RETCODE SCIPconstructCurrentLP | ( | BMS_BLKMEM * | blkmem, |
SCIP_SET * | set, | ||
SCIP_STAT * | stat, | ||
SCIP_PROB * | transprob, | ||
SCIP_PROB * | origprob, | ||
SCIP_TREE * | tree, | ||
SCIP_REOPT * | reopt, | ||
SCIP_LP * | lp, | ||
SCIP_PRICESTORE * | pricestore, | ||
SCIP_SEPASTORE * | sepastore, | ||
SCIP_CUTPOOL * | cutpool, | ||
SCIP_BRANCHCAND * | branchcand, | ||
SCIP_EVENTQUEUE * | eventqueue, | ||
SCIP_EVENTFILTER * | eventfilter, | ||
SCIP_CLIQUETABLE * | cliquetable, | ||
SCIP_Bool | newinitconss, | ||
SCIP_Bool * | cutoff | ||
) |
constructs the LP of the current node, but does not load the LP state and warmstart information
blkmem | block memory buffers |
set | global SCIP settings |
stat | dynamic problem statistics |
transprob | transformed problem |
origprob | original problem |
tree | branch and bound tree |
reopt | reoptimization data structure |
lp | LP data |
pricestore | pricing storage |
sepastore | separation storage |
cutpool | global cutpool |
branchcand | branching candidate storage |
eventqueue | event queue |
eventfilter | global event filter |
cliquetable | clique table data structure |
newinitconss | do we have to add new initial constraints? |
cutoff | pointer to store whether the node can be cut off |
Definition at line 1216 of file solve.c.
References FALSE, initLP(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPinitConssLP(), SCIPnodeGetDepth(), SCIPsetDebugMsg, SCIPtreeGetFocusNode(), SCIPtreeIsFocusNodeLPConstructed(), and SCIPtreeLoadLP().
Referenced by SCIPconstructLP(), SCIPwriteLP(), and solveNodeInitialLP().
SCIP_RETCODE SCIPprimalHeuristics | ( | SCIP_SET * | set, |
SCIP_STAT * | stat, | ||
SCIP_PROB * | prob, | ||
SCIP_PRIMAL * | primal, | ||
SCIP_TREE * | tree, | ||
SCIP_LP * | lp, | ||
SCIP_NODE * | nextnode, | ||
SCIP_HEURTIMING | heurtiming, | ||
SCIP_Bool | nodeinfeasible, | ||
SCIP_Bool * | foundsol, | ||
SCIP_Bool * | unbounded | ||
) |
calls primal heuristics
set | global SCIP settings |
stat | dynamic problem statistics |
prob | transformed problem after presolve |
primal | primal data |
tree | branch and bound tree, or NULL if called during presolving |
lp | LP data, or NULL if called during presolving or propagation |
nextnode | next node that will be processed, or NULL if no more nodes left (only needed when calling after node heuristics) |
heurtiming | current point in the node solving process |
nodeinfeasible | was the current node already detected to be infeasible? |
foundsol | pointer to store whether a solution has been found |
unbounded | pointer to store whether an unbounded ray was found in the LP |
Definition at line 172 of file solve.c.
References BMSgetNUsedBufferMemory(), SCIP_Primal::cutoffbound, FALSE, SCIP_Tree::focuslpstatefork, SCIP_Primal::nbestsolsfound, NULL, SCIP_Lp::resolvelperror, SCIP_Bool, SCIP_CALL, SCIP_FOUNDSOL, SCIP_HEURTIMING_AFTERLPLOOP, SCIP_HEURTIMING_AFTERLPNODE, SCIP_HEURTIMING_AFTERLPPLUNGE, SCIP_HEURTIMING_AFTERNODE, SCIP_HEURTIMING_AFTERPROPLOOP, SCIP_HEURTIMING_AFTERPSEUDONODE, SCIP_HEURTIMING_AFTERPSEUDOPLUNGE, SCIP_HEURTIMING_BEFORENODE, SCIP_HEURTIMING_BEFOREPRESOL, SCIP_HEURTIMING_DURINGLPLOOP, SCIP_HEURTIMING_DURINGPRESOLLOOP, SCIP_HEURTIMING_DURINGPRICINGLOOP, SCIP_Longint, SCIP_NODETYPE_CHILD, SCIP_NODETYPE_LEAF, SCIP_NODETYPE_SIBLING, SCIP_OKAY, SCIP_Real, SCIP_UNBOUNDED, SCIPABORT, SCIPbuffer(), SCIPerrorMessage, SCIPheurExec(), SCIPheurGetName(), SCIPheurGetPriority(), SCIPheurShouldBeExecuted(), SCIPlpDiving(), SCIPlpGetPseudoObjval(), SCIPnodeGetDepth(), SCIPnodeGetLowerbound(), SCIPnodeGetType(), SCIPsetDebugMsg, SCIPsetInfinity(), SCIPsetSortHeurs(), SCIPsolveIsStopped(), SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPtreeGetFocusNode(), SCIPtreeGetNNodes(), SCIPtreeHasFocusNodeLP(), SCIPtreeProbing(), and TRUE.
Referenced by presolve(), presolveRound(), priceAndCutLoop(), propAndSolve(), SCIPpriceLoop(), SCIPsolveCIP(), and solveNode().
SCIP_RETCODE SCIPseparationRound | ( | BMS_BLKMEM * | blkmem, |
SCIP_SET * | set, | ||
SCIP_MESSAGEHDLR * | messagehdlr, | ||
SCIP_STAT * | stat, | ||
SCIP_EVENTQUEUE * | eventqueue, | ||
SCIP_EVENTFILTER * | eventfilter, | ||
SCIP_PROB * | prob, | ||
SCIP_PRIMAL * | primal, | ||
SCIP_TREE * | tree, | ||
SCIP_LP * | lp, | ||
SCIP_SEPASTORE * | sepastore, | ||
SCIP_SOL * | sol, | ||
int | actdepth, | ||
SCIP_Bool | onlydelayed, | ||
SCIP_Bool * | delayed, | ||
SCIP_Bool * | cutoff | ||
) |
applies one round of separation on the given primal solution or on the LP solution
blkmem | block memory buffers |
set | global SCIP settings |
messagehdlr | message handler |
stat | dynamic problem statistics |
eventqueue | event queue |
eventfilter | global event filter |
prob | transformed problem after presolve |
primal | primal data |
tree | branch and bound tree |
lp | LP data |
sepastore | separation storage |
sol | primal solution that should be separated, or NULL for LP solution |
actdepth | current depth in the tree |
onlydelayed | should only delayed separators be called? |
delayed | pointer to store whether a separator was delayed |
cutoff | pointer to store whether the node can be cut off |
Definition at line 1855 of file solve.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, separationRoundLP(), and separationRoundSol().
Referenced by SCIPseparateSol().
SCIP_RETCODE SCIPpriceLoop | ( | BMS_BLKMEM * | blkmem, |
SCIP_SET * | set, | ||
SCIP_MESSAGEHDLR * | messagehdlr, | ||
SCIP_STAT * | stat, | ||
SCIP_PROB * | transprob, | ||
SCIP_PROB * | origprob, | ||
SCIP_PRIMAL * | primal, | ||
SCIP_TREE * | tree, | ||
SCIP_REOPT * | reopt, | ||
SCIP_LP * | lp, | ||
SCIP_PRICESTORE * | pricestore, | ||
SCIP_SEPASTORE * | sepastore, | ||
SCIP_CUTPOOL * | cutpool, | ||
SCIP_BRANCHCAND * | branchcand, | ||
SCIP_EVENTQUEUE * | eventqueue, | ||
SCIP_EVENTFILTER * | eventfilter, | ||
SCIP_CLIQUETABLE * | cliquetable, | ||
SCIP_Bool | pretendroot, | ||
SCIP_Bool | displayinfo, | ||
int | maxpricerounds, | ||
int * | npricedcolvars, | ||
SCIP_Bool * | mustsepa, | ||
SCIP_Bool * | lperror, | ||
SCIP_Bool * | aborted | ||
) |
solves the current LP completely with pricing in new variables
blkmem | block memory buffers |
set | global SCIP settings |
messagehdlr | message handler |
stat | dynamic problem statistics |
transprob | transformed problem |
origprob | original problem |
primal | primal data |
tree | branch and bound tree |
reopt | reoptimization data structure |
lp | LP data |
pricestore | pricing storage |
sepastore | separation storage |
cutpool | global cutpool |
branchcand | branching candidate storage |
eventqueue | event queue |
eventfilter | global event filter |
cliquetable | clique table data structure |
pretendroot | should the pricers be called as if we are at the root node? |
displayinfo | should info lines be displayed after each pricing round? |
maxpricerounds | maximal number of pricing rounds (-1: no limit); a finite limit means that the LP might not be solved to optimality! |
npricedcolvars | pointer to store number of column variables after problem vars were priced |
mustsepa | pointer to store TRUE if a separation round should follow |
lperror | pointer to store whether an unresolved error in LP solving occured |
aborted | pointer to store whether the pricing was aborted and the lower bound must not be used |
Definition at line 1906 of file solve.c.
References SCIP_Primal::cutoffbound, FALSE, SCIP_Lp::flushed, SCIP_Prob::ncolvars, SCIP_Stat::npricerounds, NULL, SCIP_Bool, SCIP_CALL, SCIP_DIDNOTRUN, SCIP_HEURTIMING_DURINGPRICINGLOOP, SCIP_LPSOLSTAT_ERROR, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_LPSOLSTAT_NOTSOLVED, SCIP_LPSOLSTAT_OBJLIMIT, SCIP_LPSOLSTAT_OPTIMAL, SCIP_LPSOLSTAT_UNBOUNDEDRAY, SCIP_OKAY, SCIP_Real, SCIP_SUCCESS, SCIP_VERBLEVEL_FULL, SCIP_VERBLEVEL_HIGH, SCIPdispPrintLine(), SCIPgetLowerbound(), SCIPgetUpperbound(), SCIPinitConssLP(), SCIPlpGetSolstat(), SCIPlpSetIsRelax(), SCIPlpSolveAndEval(), SCIPmessagePrintWarning(), SCIPnodeGetLowerbound(), SCIPnodeUpdateLowerbound(), SCIPpricerExec(), SCIPpricerGetName(), SCIPpricestoreAddProbVars(), SCIPpricestoreApplyVars(), SCIPpricestoreGetNBoundResets(), SCIPpricestoreGetNVars(), SCIPpricestoreResetBounds(), SCIPprimalHeuristics(), SCIPprobAllColsInLP(), SCIPsetDebugMsg, SCIPsetGetPriceMaxvars(), SCIPsetIsLE(), SCIPsetIsLT(), SCIPsetSortPricers(), SCIPsolveIsStopped(), SCIPtreeGetCurrentNode(), SCIPtreeGetFocusNode(), SCIPtreeProbing(), SCIP_Lp::solved, TRUE, and updatePrimalRay().
Referenced by priceAndCutLoop(), and solveProbingLP().
SCIP_RETCODE SCIPsolveCIP | ( | BMS_BLKMEM * | blkmem, |
SCIP_SET * | set, | ||
SCIP_MESSAGEHDLR * | messagehdlr, | ||
SCIP_STAT * | stat, | ||
SCIP_MEM * | mem, | ||
SCIP_PROB * | origprob, | ||
SCIP_PROB * | transprob, | ||
SCIP_PRIMAL * | primal, | ||
SCIP_TREE * | tree, | ||
SCIP_REOPT * | reopt, | ||
SCIP_LP * | lp, | ||
SCIP_RELAXATION * | relaxation, | ||
SCIP_PRICESTORE * | pricestore, | ||
SCIP_SEPASTORE * | sepastore, | ||
SCIP_CUTPOOL * | cutpool, | ||
SCIP_CUTPOOL * | delayedcutpool, | ||
SCIP_BRANCHCAND * | branchcand, | ||
SCIP_CONFLICT * | conflict, | ||
SCIP_CONFLICTSTORE * | conflictstore, | ||
SCIP_EVENTFILTER * | eventfilter, | ||
SCIP_EVENTQUEUE * | eventqueue, | ||
SCIP_CLIQUETABLE * | cliquetable, | ||
SCIP_Bool * | restart | ||
) |
main solving loop
blkmem | block memory buffers |
set | global SCIP settings |
messagehdlr | message handler |
stat | dynamic problem statistics |
mem | block memory pools |
origprob | original problem |
transprob | transformed problem after presolve |
primal | primal data |
tree | branch and bound tree |
reopt | reoptimization data structure |
lp | LP data |
relaxation | global relaxation data |
pricestore | pricing storage |
sepastore | separation storage |
cutpool | global cut pool |
delayedcutpool | global delayed cut pool |
branchcand | branching candidate storage |
conflict | conflict analysis data |
conflictstore | conflict store |
eventfilter | event filter for global (not variable dependent) events |
eventqueue | event queue |
cliquetable | clique table data structure |
restart | should solving process be started again with presolving? |
Definition at line 4714 of file solve.c.
References addCurrentSolution(), applyBounding(), BMSgetNUsedBufferMemory(), SCIP_Mem::buffer, SCIP_Primal::cutoffbound, SCIP_Tree::cutoffdelayed, SCIP_Tree::effectiverootdepth, FALSE, SCIP_Lp::flushed, SCIP_Tree::focusnode, SCIP_Stat::lastbranchdir, SCIP_Stat::lastbranchvalue, SCIP_Stat::lastbranchvar, SCIP_Node::lowerbound, MAX, SCIP_Stat::maxdepth, SCIP_Stat::maxtotaldepth, MIN, SCIP_Tree::nchildren, SCIP_Stat::nconfrestarts, SCIP_Prob::ncontvars, SCIP_Stat::ndelayedcutoffs, SCIP_Stat::nfeasleaves, SCIP_Stat::ninfeasleaves, SCIP_Primal::nlimsolsfound, nnodes, SCIP_Stat::nnodes, SCIP_Stat::nnodesaboverefbound, SCIP_Stat::nobjleaves, SCIP_Stat::nodeactivationtime, SCIP_Stat::nrootintfixingsrun, SCIP_Stat::nruns, SCIP_Tree::nsiblings, SCIP_Primal::nsols, SCIP_Stat::ntotalnodes, NULL, SCIP_Prob::nvars, SCIP_Stat::prevrunnvars, SCIP_Stat::referencebound, restartAllowed(), SCIP_Tree::root, SCIP_Bool, SCIP_CALL, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_EVENTTYPE_NODEBRANCHED, SCIP_EVENTTYPE_NODEFEASIBLE, SCIP_EVENTTYPE_NODEFOCUSED, SCIP_EVENTTYPE_NODEINFEASIBLE, SCIP_HEURTIMING_AFTERNODE, SCIP_Longint, SCIP_LPSOLSTAT_OBJLIMIT, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIP_REDUCEDDOM, SCIP_STATUS_INFEASIBLE, SCIP_STATUS_INFORUNBD, SCIP_STATUS_OPTIMAL, SCIP_STATUS_RESTARTLIMIT, SCIP_STATUS_UNBOUNDED, SCIP_STATUS_UNKNOWN, SCIP_VERBLEVEL_HIGH, SCIPbranchcandGetNPseudoCands(), SCIPbranchExecPseudo(), SCIPcheckSolOrig(), SCIPclockStart(), SCIPclockStop(), SCIPconflictGetNBoundexceedingLPSuccess(), SCIPconflictGetNInfeasibleLPSuccess(), SCIPconflictGetNPropSuccess(), SCIPconflictGetNPseudoSuccess(), SCIPconflictGetNStrongbranchSuccess(), SCIPdispPrintLine(), SCIPerrorMessage, SCIPeventChgNode(), SCIPeventChgType(), SCIPeventProcess(), SCIPlpGetObjval(), SCIPlpGetSolstat(), SCIPmessagePrintVerbInfo(), SCIPnodeFocus(), SCIPnodeGetDepth(), SCIPnodeGetLowerbound(), SCIPnodeselSelect(), SCIPprimalHeuristics(), SCIPprobGetObjlim(), SCIPprobInternObjval(), SCIPrelaxationGetBestRelaxSol(), SCIPrelaxationGetBestRelaxSolObj(), SCIPreoptCheckCutoff(), SCIPsetDebugMsg, SCIPsetGetNodesel(), SCIPsetInfinity(), SCIPsetIsFeasGT(), SCIPsetIsGE(), SCIPsetIsGT(), SCIPsetIsInfinity(), SCIPsolCreateLPSol(), SCIPsolCreatePseudoSol(), SCIPsolFree(), SCIPsolGetObj(), SCIPsolveIsStopped(), SCIPstatUpdateMemsaveMode(), SCIPstatUpdatePrimalDualIntegral(), SCIPtreeCutoff(), SCIPtreeGetCurrentDepth(), SCIPtreeGetCurrentNode(), SCIPtreeGetFocusNode(), SCIPtreeGetNLeaves(), SCIPtreeGetNNodes(), SCIPtreeHasCurrentNodeLP(), SCIPtreeHasFocusNodeLP(), SCIPtreeSetNodesel(), SCIPvarIncCutoffSum(), SCIPvisualCutoffNode(), SCIPvisualSolvedNode(), SCIP_Primal::sols, SCIP_Lp::solved, solveNode(), SCIP_Stat::status, TRUE, SCIP_Stat::userrestart, and SCIP_Stat::visual.
Referenced by SCIPsolve().