37 #ifndef __SCIP_PARA_SOLVER_H__ 38 #define __SCIP_PARA_SOLVER_H__ 49 #define ENFORCED_THRESHOLD 5 54 class ScipParaObjCommPointHdlr;
55 class ScipParaObjNodesel;
56 class ScipParaObjSelfSplitNodesel;
57 class ScipParaObjProp;
91 #if SCIP_APIVERSION >= 101 92 ScipParaObjSelfSplitNodesel *selfSplitNodesel;
149 virtual void createSubproblem();
150 virtual void freeSubproblem();
151 virtual void solve();
152 long long getNNodesSolved();
154 double getDualBoundValue();
156 void setOriginalNodeSelectionStrategy();
158 void solveToCheckEffectOfRootNodePreprocesses();
159 void saveOrgProblemBounds();
161 void setBakSettings();
163 int lbBoundTightened(
int source,
int tag);
164 int ubBoundTightened(
int source,
int tag);
166 void saveOriginalSettings();
167 void dropSettingsForVariableBoundsExchnage();
168 void recoverOriginalSettings();
170 void saveImprovedSolution();
182 ScipParaSolver(argc, argv, N_SCIP_TAGS, comm, paraParamSet, inParaInstance, detTimer )
187 ScipParaSolver(argc, argv, N_SCIP_TAGS, comm, paraParamSet, inParaInstance, detTimer, timeOffset, thread)
198 else return "ScipParaObjNodesel";
201 return originalPriority;
205 int numnodesels = SCIPgetNNodesels( scip );
206 SCIP_NODESEL** nodesels = SCIPgetNodesels( scip );
207 const char *changeNodeSelName = getChangeNodeSelName();
209 for( i = 0; i < numnodesels; ++i )
211 std::string nodeselname(SCIPnodeselGetName(nodesels[i]));
212 if( std::string(nodeselname) == std::string(changeNodeSelName) )
214 originalPriority = SCIPnodeselGetStdPriority(nodesels[i]);
218 assert( i != numnodesels );
222 int numnodesels = SCIPgetNNodesels( scip );
223 SCIP_NODESEL** nodesels = SCIPgetNodesels( scip );
224 const char *changeNodeSelName = getChangeNodeSelName();
226 for( i = 0; i < numnodesels; ++i )
228 std::string nodeselname(SCIPnodeselGetName(nodesels[i]));
229 if( std::string(nodeselname) == std::string(changeNodeSelName) )
231 SCIP_CALL_ABORT( SCIPsetNodeselStdPriority(scip, nodesels[i], originalPriority ) );
235 assert( i != numnodesels );
239 SCIP_CALL_ABORT( SCIPgetIntParam(scip,
"presolving/maxrestarts", &orgMaxRestart) );
245 void writeCurrentTaskProblem(
const std::string& filename);
247 void setLightWeightRootNodeProcess();
248 void setOriginalRootNodeProcess();
252 if( currentTask->getDiffSubproblem() )
270 return conflictConsList;
273 void writeSubproblem();
278 SCIP_STAGE stage = SCIPgetStage(scip);
279 if( stage == SCIP_STAGE_PRESOLVED || stage == SCIP_STAGE_SOLVING || stage == SCIP_STAGE_SOLVED )
281 return SCIPgetNLPIterations(scip);
291 SCIP_STAGE stage = SCIPgetStage(scip);
292 if( stage != SCIP_STAGE_INIT )
294 return SCIPgetNRuns(scip);
310 (*userPlugins)(inScip);
324 problemFileName = fileName;
330 return collectingModeIsProhibited;
336 collectingModeIsProhibited =
false;
342 collectingModeIsProhibited =
true;
349 assert(mapToOriginalIndecies);
350 return mapToOriginalIndecies[index];
357 assert(mapToProbIndecies);
358 return mapToProbIndecies[index];
376 std::cout <<
"R" << paraComm->getRank() <<
":" <<
string << std::endl;
379 SCIP_CALL_ABORT( SCIPgetOrigVarsData(inScip, &vars, &nVars, NULL, NULL, NULL, NULL) );
380 for(
int i = 0; i < nVars; i++ )
382 std::cout <<
"R" << paraComm->getRank() <<
": idx = " << i <<
": " << SCIPvarGetName(vars[i]) << std::endl;
391 int getNTightenedInt();
395 return copyIncreasedVariables;
400 copyIncreasedVariables =
true;
403 void issueInterruptSolve();
405 bool isInterrupting();
423 #endif // __SCIP_PARA_SOLVER_H__ ScipUserPlugins * userPlugins
ScipParaSolver(int argc, char **argv, UG::ParaComm *comm, UG::ParaParamSet *paraParamSet, UG::ParaInstance *inParaInstance, UG::ParaDeterministicTimer *detTimer)
void setTightenedVarUb(int i, double v)
static const int NodeTransferMode
double getOrgVarLb(int i)
int getOriginalIndex(int index)
SCIP_CONS * addedDualCons
int getProbIndex(int index)
static ScipParaCommTh * comm
unsigned int miscAllowdualreds
static ScipParaParamSet * paraParamSet
ParaInitialStat extension for SCIP solver.
const char * problemFileName
C++ wrapper for propagators.
int processTagInterruptRequest(int source, int tag)
void setOrgVarUb(int i, double v)
void checkVarsAndIndex(const char *string, SCIP *inScip)
void prohibitCollectingMode()
bool isOriginalIndeciesMap()
Interrupt message monitor thread class.
void saveOriginalPriority()
double getOrgVarUb(int i)
void setProblemFileName(const char *fileName)
double getTightenedVarUb(int i)
class for deterministic timer
SCIP * scipToCheckEffectOfRootNodeProcesses
void allowCollectingMode()
ScipParaSolver(int argc, char **argv, UG::ParaComm *comm, UG::ParaParamSet *paraParamSet, UG::ParaInstance *inParaInstance, UG::ParaDeterministicTimer *detTimer, double timeOffset, bool thread)
void setOriginalPriority()
LocalNodeInfo * LocalNodeInfoPtr
SCIP_Real * tightenedVarUbs
SCIP_MESSAGEHDLR * messagehdlr
bool collectingModeIsProhibited
SCIP_Real * tightenedVarLbs
int * mapToSolverLocalIndecies
ScipDiffParamSet * scipDiffParamSetRoot
ScipParaInterruptMsgMonitor * interruptMsgMonitor
interrupt message monitor
std::list< LocalNodeInfoPtr > * conflictConsList
long long getSimplexIter()
struct ParaSCIP::LocalNodeInfo_t LocalNodeInfo
void setUserPlugins(ScipUserPlugins *inUi)
bool wasTerminatedNormally()
ScipParaDiffSubproblem * getParentDiffSubproblem()
int getOriginalMaxRestart()
ScipParaObjCommPointHdlr * commPointHdlr
long long nPreviousNodesLeft
void setTightenedVarLb(int i, double v)
double getTightenedVarLb(int i)
void includeUserPlugins(SCIP *inScip)
SCIP parameter set to be transferred ( Only keep difference between default settings )...
void setOrgVarLb(int i, double v)
void copyIncrasedVariables()
ScipParaObjNodesel * nodesel
std::list< LocalNodeInfoPtr > * getConflictConsList()
ScipParaObjProp * scipPropagator
bool isCollectingModeProhibited()
C++ wrapper for primal heuristics.
int * mapToOriginalIndecies
static void runInterruptMsgMonitorThread(void *threadData)
const char * getChangeNodeSelName()
ScipDiffParamSet * scipDiffParamSet
int getOriginalPriority()
void setNPreviousNodesLeft(long long n)
ScipDiffParamSet * originalParamSet
bool copyIncreasedVariables
bool isCopyIncreasedVariables()
class ParaRacingRampUpParamSet (parameter set for racing ramp-up)
Base class of communicator object.
virtual int processTagInterruptRequest(int source, int tag)
process TagInterruptRequest
long long getNPreviousNodesLeft()
void setOriginalMaxRestart()