64 :
ParaSolver(argc, argv, inNHandlers, comm, inParaParamSet, inParaInstance, inParaDetTimer),
65 globalBestDualBoundValueAtWarmStart(-DBL_MAX),
66 globalBestCutOffValue(DBL_MAX),
67 lcBestDualBoundValue(-DBL_MAX),
68 collectingMode(false),
69 aggressiveCollecting(false),
70 nSendInCollectingMode(0),
72 collectingManyNodes(false),
73 collectingInterrupt(false),
74 anotherNodeIsRequested(false),
75 lightWeightRootNodeComputation(false),
78 totalRootNodeTime(0.0),
79 minRootNodeTime(DBL_MAX),
80 maxRootNodeTime(-DBL_MAX),
83 nSolvedWithNoPreprocesses(0),
87 nTransferredLocalCutsFromSolver(0),
88 minTransferredLocalCutsFromSolver(INT_MAX),
89 maxTransferredLocalCutsFromSolver(INT_MIN),
90 nTransferredBendersCutsFromSolver(0),
91 minTransferredBendersCutsFromSolver(INT_MAX),
92 maxTransferredBendersCutsFromSolver(INT_MIN),
97 totalNImprovedIncumbent(0),
98 nParaNodesSolvedAtRoot(0),
99 nParaNodesSolvedAtPreCheck(0),
101 nTransferredLocalCuts(0),
102 minTransferredLocalCuts(INT_MAX),
103 maxTransferredLocalCuts(INT_MIN),
104 nTransferredBendersCuts(0),
105 minTransferredBendersCuts(INT_MAX),
106 maxTransferredBendersCuts(INT_MIN),
113 targetBound(-DBL_MAX),
115 nTransferredNodes(-1),
116 solverDualBound(-DBL_MAX),
117 averageDualBoundGain(0.0),
118 enoughGainObtained(true),
119 givenGapIsReached(false),
120 testDualBoundGain(false),
121 noWaitModeSend(false),
123 restartingRacing(false),
124 localIncumbentIsChecked(false),
183 double detTime = -1.0;
223 delete paraSolverTerminationState;
254 newTask = bbParaComm->createParaTask();
256 if( dynamic_cast<BbParaNode *>(
newTask)->getMergingStatus() == 3 )
265 if( dynamic_cast<BbParaNode *>(
currentTask)->getMergingStatus() == 3 )
308 #ifdef _DEBUG_CHECK_RECEIVE 398 unsigned int notificationId;
442 #ifdef _DEBUG_CHECK_RECEIVE 616 int exitSolverRequest;
626 if( exitSolverRequest == 1 )
635 if( exitSolverRequest == 2 )
991 if( dynamic_cast<BbParaNode *>(
currentTask)->isRootTask() )
1158 std::ostringstream s;
1159 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 1160 << __func__ <<
", line = " << __LINE__ <<
" - " 1161 <<
"process tag = " << tag << std::endl;
1191 #ifdef _DEBUG_CHECK_RECEIVE 1192 static double previousRreceiveCheckTime = DBL_MAX;
1194 if( ( currentTime - previousRreceiveCheckTime ) < -1.0 )
1196 std::cout << currentTime <<
" Solver" <<
paraComm->
getRank() <<
" No check receiving message over 500 (sec.) is logging." << std::endl;
1198 if( ( currentTime - previousRreceiveCheckTime ) > 500.0 )
1200 std::cout << currentTime <<
" Solver" <<
paraComm->
getRank() <<
" did not check receiving message over 500 (sec.)" << std::endl;
1203 previousRreceiveCheckTime = currentTime;
1221 std::ostringstream s;
1222 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 1223 << __func__ <<
", line = " << __LINE__ <<
" - " 1224 <<
"process tag = " << tag << std::endl;
1264 int nSelfSplitNodesLeft
1321 std::ostringstream s;
1322 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 1323 << __func__ <<
", line = " << __LINE__ <<
" - " 1324 <<
"process tag = " << ttag << std::endl;
1342 if( dynamic_cast<BbParaNode *>(
currentTask)->getMergingStatus() == 3 )
1379 double averageSimplexIter = 0.0;
1418 delete paraCalculationState;
1492 double detTime = -1.0;
1546 delete paraSolverTerminationState;
1549 minNSolved = INT_MAX;
1550 maxNSolved = INT_MIN;
1553 totalNImprovedIncumbent = 0;
1558 nParaTasksSolved = 0;
1559 nParaNodesSolvedAtRoot = 0;
1560 nParaNodesSolvedAtPreCheck = 0;
1561 totalRootNodeTime = 0.0;
1562 minRootNodeTime = DBL_MAX;
1563 maxRootNodeTime = -DBL_MAX;
1623 delete paraSolverTerminationState;
1635 int nSelfSplitNodesLeft
1641 double dualBound = DBL_MAX;
1651 compTime, 0, 0 , 0, 0, terminationState, 0,
1655 0, 0, 0, 0, 0, dualBound, nSelfSplitNodesLeft ));
1657 delete paraCalculationState;
1663 double detTime = -1.0;
1707 delete paraSolverTerminationState;
1866 long long nNodesSolved,
1868 double bestDualBoundValue,
1874 int racingStage = 0;
1879 double tempGlobalBestPrimalBound = DBL_MAX;
1886 double dualBound = std::min( std::max( bestDualBoundValue,dynamic_cast<BbParaNode *>(
currentTask)->
getDualBoundValue()), tempGlobalBestPrimalBound );
1896 nNodesSolved, nNodesLeft, dualBound,
1897 tempGlobalBestPrimalBound,
1927 double meanNodeTime = -1.0;
1929 && meanRootNodeTime > 0.0001 )
1933 if( meanNodeTime < 0.0 ) meanNodeTime = 0.0;
1937 if( meanNodeTime < 0.000001 )
1943 if( ( meanRootNodeTime / meanNodeTime ) > 5.0 )
1947 * ( meanRootNodeTime / meanNodeTime ) );
1950 if( meanNodeTime > 1.0 )
1975 double estimateValue,
2012 std::ostringstream s;
2013 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 2014 << __func__ <<
", line = " << __LINE__ <<
" - " 2015 <<
"process tag = " << tag << std::endl;
2027 std::ostringstream s;
2028 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 2029 << __func__ <<
", line = " << __LINE__ <<
" - " 2030 <<
"process tag = " << tag << std::endl;
2048 double estimateValue,
2073 double bestDualBoundValue
2295 std::ostringstream s;
2296 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 2297 << __func__ <<
", line = " << __LINE__ <<
" - " 2298 <<
"process tag = " << tag << std::endl;
2311 std::ostringstream s;
2312 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 2313 << __func__ <<
", line = " << __LINE__ <<
" - " 2314 <<
"process tag = " << tag << std::endl;
2339 std::ostringstream s;
2340 s <<
"[ERROR RETURN form Message Hander]:" << __FILE__ <<
"] func = " 2341 << __func__ <<
", line = " << __LINE__ <<
" - " 2342 <<
"process tag = " << tag << std::endl;
2349 double idleTime = current - inIdleTime;
int minNii
minimum number of integer infeasibility
#define DEF_BB_PARA_COMM(para_comm, comm)
int minTransferredBendersCutsFromSolver
minimum number of benders cuts transferred from this Solver
double rootNodeTime
Times.
virtual void send(ParaComm *comm, int destination)=0
send solution data
virtual void createSubproblem()=0
create subproblem
double minIisum
minimum sum of integer infeasibility
static const int TagNotificationId
int nTransferredBendersCuts
number of benders cuts transferred from a ParaNode
static const int CompTerminatedByInterruptRequest
#define THROW_LOGICAL_ERROR4(msg1, msg2, msg3, msg4)
bool notificationProcessed
if true, notification is issued but not receive the corresponding LCB
static const int TagReassignSelfSplitSubtreeRootNode
int nImprovedIncumbent
Counters related to the current ParaTask.
double idleTimeToFirstParaTask
idle time to start solving the first ParaTask
static const int CompTerminatedByTimeLimit
int getGlobalSubtaskIdInLc()
getter of global subtask id in Solvers managed by LoadCoordinator
static const int TagIncumbentValue
virtual int processTagSolution(int source, int tag)
process TagSolution
static const int TagCutOffValue
bool isBreaking()
check if Solver is in racing stage or not
static ScipParaCommTh * comm
virtual int processTagNoNodes(int source, int tag)
process TagNoNodes
ParaSolution * pendingSolution
solution which is pending to update in case of deterministic runs
virtual int processTagTerminateSolvingToRestart(int source, int tag)
process TagTerminateSolvingToRestart
bool stayAliveAfterInterrupt
indicate that stay alive this solver after interrupt request
#define DEFAULT_NUM_EPSILON
bool memoryLimitIsReached
indicate if memory limit is reached or not, when base solver has memory management feature ...
bool collectingInterrupt
when the solver is interrupted, all nodes are collected to LC
bool racingInterruptIsRequested
indicate a racing interrupt is requested
static const int FinalCheckpointGeneratingTime
static const int CompTerminatedByMemoryLimit
virtual void restartRacing()
restart racing
void terminateRacing()
check if Solver is in racing stage or not
virtual double getElapsedTime()=0
get elapsed time
static const int CompInterruptedInMerging
virtual void waitNotificationIdMessage()
wait notification id message to synchronized with LoadCoordinator
virtual bool probe(int *source, int *tag)=0
No need to take action for fault tolerant, when the functions return. So, they do not rerun status va...
static const int TagTerminateRequest
int nParaTasksSolved
number of ParaTasks solved ( received ) in this ParaSolver
ParaParamSet * paraParams
ParaParamSet object.
virtual int sendSubtreeRootNodeId(ParaComm *comm, int destination, int tag)=0
send subtree root to be removed
virtual double getDualBoundValue()=0
get dual bound value
static const int CompTerminatedByAnotherTask
static const int NoTransferThresholdReductionRatio
static const int TagLightWeightRootNodeProcess
int nParaNodesSolvedAtRoot
number of ParaNodes solved at root node
static const int EnhancedCheckpointStartTime
int nTotalRestarts
number of total restarts
int maxRestarts
maximum number of restarts
virtual ParaRacingRampUpParamSet * createParaRacingRampUpParamSet()=0
create ParaRacingRampUpParamSet object
virtual int processTagUbBoundTightened(int source, int tag)
process TagUbBoundTightened
virtual int processTagWinnerRacingRampUpParamSet(int source, int tag)
process TagWinnerRacingRampUpParamSet
static const int TagRampUp
static const int NormalTerminationMode
static const int TagNoTestDualBoundGain
void setRootNodeSimplexIter(int iter)
set number of simplex iteration at root node
static const int InterruptedTerminationMode
virtual void setToken(int rank, int *token)
set received token to this communicator
virtual void sendCompletionOfCalculation(double stopTime)
send completion of calculation
Base class of Calculation state in a ParaSolver.
int minTransferredBendersCuts
minimum number of benders cuts transferred from a ParaNode
int maxTransferredLocalCuts
maximum number of local cuts (including conflict cuts) transferred from a ParaNode ...
virtual void insert(BbParaNodePtr node)=0
insert BbParaNode to this pool
double globalBestIncumbentValue
global best incumbent value
virtual int bcast(ParaComm *comm, int root)=0
broadcast this object
ParaRacingRampUpParamSet * racingParams
ParaRacingRampUpParamSet object. This is also a flag to indicate running with racing ramp-up...
ParaDeterministicTimer * paraDetTimer
deterministic timer for this ParaSolver
SubtaskId subtaskId
subtree id
double globalBestDualBoundValueAtWarmStart
global best dual bound value which is set when system warm starts
static const int TagLCBestBoundValue
virtual int getNRestarts()
get number of restarts (Derived class for SCIP should override this function)
bool lightWeightRootNodeComputation
indicate that fast root node computation is required
virtual int processTagTestDualBoundGain(int source, int tag)
process TagTestDualBoundGain
double previousIdleTimeToWaitToken
previous idle time to wait token
virtual int processTagNoWaitModeSend(int source, int tag)
process TagNoWaitModeSend
virtual int sendNewSubtreeRoot(ParaComm *comm, int destination)=0
send new subtree root node
BbParaNodePool * selfSplitNodePool
Pool in Solver.
static const int TagGivenGapIsReached
static const int CompInterruptedInRacingStage
virtual int processTagRampUp(int source, int tag)
process TagRampUp
int nTightenedInt
the number of tightened integral variable bounds in racing
virtual int processTagNotificationId(int source, int tag)
process TagNotificationId
virtual int send(ParaComm *comm, int destination)=0
send this object
virtual void issueInterruptSolve()
issue interrupt to solve
int totalNSolved
Counters related to this BbParaSolver.
int nSent
number of ParaNodes sent from this subtree rooted from the current ParaNode
int lcId
LoadCoordinator ID.
virtual void iReceiveMessages()
non-blocking receive messages
virtual long long getSimplexIter()=0
get number of simplex iterations
bool isRacingStage()
check if Solver is in racing stage or not
int maxTransferredLocalCutsFromSolver
maximum number of local cuts transferred from this Solver
int maxNii
maximum number of integer infeasibility
int nSendInCollectingMode
number of nodes need to send in collecting mode
virtual void setRootNodeTime()
set root node computing time
bool subproblemFreed
indicate that subproblem is already freed or not
double pendingIncumbentValue
incumbent value which is pending to update in case of deterministic runs
virtual double getBestDualBoundValue()=0
get best dual bound value of BbParaNode object in this pool
static const int TimeLimitTerminationMode
class for deterministic timer
bool anotherNodeIsRequested
indicate that another node is requested or not
virtual int processTagCutOffValue(int source, int tag)
process TagCutOffValue
static const int ParaUNSIGNED
virtual void waitAckCompletion()
wait ack completion to synchronized with LoadCoordinator
virtual void sendAnotherNodeRequest(double bestDualBoundValue)
send another node request
ParaSolution * localIncumbentSolution
incumbent solution generated in local solver
virtual int processTagLCBestBoundValue(int source, int tag)
process TagLCBestBoundValue
#define PARA_COMM_CALL(paracommcall)
static const int Deterministic
virtual int getRank()=0
get rank of this process or this thread depending on run-time environment
int nTightened
the number of tightened variable bounds in racing
static const int TagCollectAllNodes
int globalSubtaskIdInLc
Global Subtask ID in Solvers managed by LoadCoordinator.
static const int TagSelfSlpitNodeCalcuationState
virtual int getNTightened()
get number of tightened variables during racing
virtual int processTagKeepRacing(int source, int tag)
process TagKeepRacing
static const int TagRestart
virtual void tryNewSolution(ParaSolution *sol)=0
try to enter solution to base solver environment
bool rampUp
indicate whether if ramp-up phase is finished or not: true - finish
virtual long long getNNodesSolved()=0
get number of nodes solved
int nTransferredNodes
keep track number of transferred nodes for breaking
static const int ParaDOUBLE
static const int TagInCollectingMode
double averageDualBoundGain
average dual bound gain
virtual double getElapsedTime()=0
getter of the deterministic time
int nSolved
Counters related to the current ParaNode.
double globalBestCutOffValue
global best cut off value
static const int EnhancedFinalCheckpoint
bool waitingSpecificMessage
indicate that this solver is waiting for a specific message
void passToken(int rank)
pass token to the next process
bool testDualBoundGain
indicate that the dual bound gain needs to test or not
virtual bool updateGlobalBestCutOffValue(double newValue)
update global best cutoff value
virtual int processTagInCollectingMode(int source, int tag)
process TagInCollectingMode
virtual void writeSubproblem()=0
write subproblem
static const int CheckEffectOfRootNodePreprocesses
double targetBound
target bound value for breaking
static const int TagTaskReceived
double solverDualBound
dual bound value achieved for a subproblem
virtual void receive(ParaComm *comm, int source)=0
receive solution data
double getRealParamValue(int param)
for real parameters
static const int TagSolverState
virtual int processTagGlobalBestDualBoundValueAtWarmStart(int source, int tag)
process TagGlobalBestDualBoundValueAtWarmStart
virtual int processTagLightWeightRootNodeProcess(int source, int tag)
process TagLightWeightRootNodeProcess
int nParaNodesSolvedAtPreCheck
number of ParaNodes solved at pre-checking of root node solvability
static const int TagTermStateForInterruption
int nParaTasksReceived
Counters related to this ParaSolver.
virtual void sendCompletionOfCalculationWithoutSolving(double stopTime, int tag, int nSelfSplitNodesLeft)
send completion of calculation with arguments
virtual int processTagToken(int source, int tag)
process TagToken
int nTransferredBendersCutsFromSolver
number of benders cuts transferred from this Solver
virtual size_t getNumOfNodes()=0
get number of BbParaNodes in this pool
int minRestarts
minimum number of restarts
virtual void setOriginalRootNodeProcess()
set original root node process
int nSolvedWithNoPreprocesses
number of nodes solved when it is solved with no preprocesses
double previousStopTime
Idle Times.
virtual int processTagCollectAllNodes(int source, int tag)
process TagCollectAllNodes
virtual int receive(ParaComm *comm, int source)=0
receive this object
static const int TagToken
double idleTimeAfterLastParaTask
idle time after the last ParaTask was solved
virtual void freeSubproblem()=0
free subproblem
virtual int processTagTerminateRequest(int source, int tag)
process TagTerminateRequest
int terminationMode
indicate that termination mode 0: no termination mode 1: normal termination mode 2: interrupted termi...
virtual void waitMessageIfNecessary()
wait a notification id message if it is needed to synchronize with LoadCoordinaor ...
virtual int processTagRetryRampUp(int source, int tag)
process TagRetryRampUp
virtual int getNNodesLeft()=0
get number of nodes left
Base class of communicator for UG Framework.
virtual void sendLocalSolution()
send solution found in this Solver
static const int TagGlobalBestDualBoundValueAtWarmStart
static const int TagAnotherNodeRequest
int maxTransferredBendersCuts
maximum number of benders cuts transferred from a ParaNode
virtual int processTagNoTestDualBoundGain(int source, int tag)
process TagNoTestDualBoundGain
int maxNSolved
maximum number of subtree nodes rooted from ParaNode
ParaTimer * paraTimer
timer for this ParaSolver
virtual void send(ParaComm *comm, int destination, int tag)=0
send this object
virtual int processTagTaskReceived(int source, int tag)
process TagTaskReceived
void resetBreakingInfo()
reset breaking information
bool enoughGainObtained
indicate that the root node process improved dual bound enough or not
virtual void send(ParaComm *comm, int destination, int tag)=0
send this object
double eps
absolute values smaller than this are considered zero esp should be set in the constructor of the der...
virtual void solve()=0
solve (sub)problem
virtual int receive(void *bufer, int count, const int datatypeId, int source, const int tag)=0
receive function for standard ParaData types
Base class for instance data.
static const int TagUbBoundTightenedIndex
virtual int processTagBreaking(int source, int tag)
process TagBreaking
static const int TagRetryRampUp
static const int TagBreaking
double previousCommTime
previous communication time for deterministic execution
static const int TagTestDualBoundGain
virtual ParaSolution * createParaSolution()=0
create ParaSolution object by default constructor
virtual bool updateGlobalBestIncumbentValue(double newValue)
update global best incumbent value
double maxIisum
maximum sum of integer infeasibility
bool globalIncumbnetValueUpdateFlag
indicate that global incumbent value is updated in iReceiveMessages() routine
virtual void setOriginalNodeSelectionStrategy()=0
set original node selection strategy
ParaSolution * globalBestIncumbentSolution
global best solution. However, this is not always feasible for the current sub-MIP ...
double idleTimeBetweenParaTasks
idle time between ParaTasks processing
Class for the difference between instance and subproblem.
virtual int ubBoundTightened(int source, int tag)
upper bound of variable tightened
int nTransferredLocalCuts
number of local cuts (including conflict cuts) transferred from a ParaNode
double minRootNodeTime
minimum time consumed by root node process
static const int NotificationSynchronization
virtual bool isEmpty()=0
check if this pool is empty or not
virtual bool saveIfImprovedSolutionWasFound(ParaSolution *sol)
save improved solution if it was found in this Solver
static const int CompTerminatedNormally
BbParaSolver()
constructor
virtual ParaTask * createParaTask()=0
create ParaTask object by default constructor
virtual bool updateGlobalBestIncumbentSolution(ParaSolution *sol)
update global best incumbent solution
virtual int getThresholdValue(int nNodes)
get threshold value to send ParaNodes to LoadCoordinator
static const int TagTerminateSolvingToRestart
ParaTask * currentTask
solving task
static const int ParaBYTE
static const int MultiplierToDetermineThresholdValue
static const int TagTerminated
virtual int processTagOutCollectingMode(int source, int tag)
process TagOutCollectingMode
int getLcId()
getter of LoadCoordinator id
bool givenGapIsReached
indicate that the given gap is reached or not
virtual bool wasTerminatedNormally()=0
check if Solver was terminated normally or not
static const int CheckpointInterval
virtual bool iProbe(int *source, int *tag)=0
iProbe function which checks if a new message is arrived or not
static const int TagSelfSplitTermStateForInterruption
static const int BgapCollectingMode
static const int SetAllDefaultsAfterRacing
double idleTimeToWaitToken
idle time to wait token
static const int NotificationInterval
static const int NoTerminationMode
termination mode
static const int TagNoNodes
virtual void keepParaNode(long long n, int depth, double dualBound, double estimateValue, ParaDiffSubproblem *diffSubproblem)
keep a branch-and-bound node as ParaNode to LoadCoordinator
double maxRootNodeTime
maximum time consumed by root node process
virtual void updatePendingSolution()
update pending solution
bool collectingManyNodes
indicate that many nodes collecting is requested by LC
void setRealParamValue(int param, double value)
set real parameter value
virtual void notifySelfSplitFinished()
notify Self-Split finished
virtual void send(ParaComm *comm, int destination, int tag)=0
send this object to destination
int nTransferLimit
limit number of transferring nodes for breaking
double idleTimeToWaitNotificationId
idle time to wait a message within collecting mode
static const int RampUpPhaseProcess
static const int TagInterruptRequest
virtual bool notificationIsNecessary()
check if a notification message needs to send or not
bool aggressiveCollecting
indicate that if this solver has two nodes, this solver sends one to LC
ParaRacingRampUpParamSet * winnerRacingParams
Winner ParaRacingRampUpParamSet object.
virtual bool receiveNewTaskAndReactivate()
wait for receiving a new node and reactivate solver
static const int CommunicateTighterBoundsInRacing
virtual int send(void *bufer, int count, const int datatypeId, int dest, const int tag)=0
send function for standard ParaData types
bool racingIsInterrupted
indicate whether if racing phases is interrupted or not: true - interrupted
static const int TagLbBoundTightenedIndex
virtual void setWinnerRacingParams(ParaRacingRampUpParamSet *racingParms)=0
set winner racing parameters
virtual int receive(ParaComm *comm, int source)=0
receive ParaRacingRampUpParamSet
void setSendBackAllNodes()
set counter and flag to indicate that all nodes are sent to LoadCooordinator
static const int TagSubtreeRootNodeStartComputation
static const int TagSelfSplitFinished
virtual BbParaNodePtr extractNode()=0
extract a BbParaNode object from this pool
int maxTransferredBendersCutsFromSolver
maximum number of benders cuts transferred from this Solver
double paraTaskStartTime
start time of current ParaTask
static const int TimeLimit
virtual void reinitialize()
re-initialized instance
static const int TagNoWaitModeSend
unsigned int notificationIdGenerator
ParaTask * newTask
new task to solve
double previousNotificationTime
previous notification time
static const int TagKeepRacing
bool isWarmStarted()
check if current execution is warm start (restart) or not
bool waitToken(int rank)
wait token for deterministic mode
ParaInstance * paraInstance
root problem instance
static const int DynamicAdjustNotificationInterval
double lcBestDualBoundValue
LoadCoordinator best dual bound value.
virtual int processTagWinner(int source, int tag)
process TagWinner
int totalNImprovedIncumbent
accumulated number of improvements of incumbent value in this BbParaSolver
int getIntParamValue(int param)
for int parameters
ParaComm * paraComm
ParaCommunicator object.
virtual int processTagRestart(int source, int tag)
process TagRestart
static const int CompTerminatedInRacingStage
virtual void setLightWeightRootNodeProcess()
set light weight root node process
virtual int processTagLbBoundTightened(int source, int tag)
process TagLbBoundTightened
virtual void sendSolverState(long long nNodesSolved, int nNodesLeft, double bestDualBoundValue, double detTime)
send Solver state to LoadCoordinator
double totalRootNodeTime
accumulated root node process time solved by this solver so far
int nCollectOnce
number of nodes need to collect once
int minTransferredLocalCuts
minimum number of local cuts (including conflict cuts) transferred from a ParaNode ...
virtual bool sendIfImprovedSolutionWasFound(ParaSolution *sol)
send improved solution if it was found in this Solver
TaskId taskId
solving task information
int(BbParaSolver::* BbMessageHandlerFunctionPointer)(int, int)
int totalNSent
accumulated number of nodes sent from this BbParaSolver
virtual void update(double value)=0
update function of the deterministic time. the deterministic time is a kind of counter ...
virtual void sendParaNode(long long n, int depth, double dualBound, double estimateValue, ParaDiffSubproblem *diffSubproblem)
send a branch-and-bound node as ParaNode to LoadCoordinator
int nSimplexIterRoot
number of simplex iteration at root node
int minTransferredLocalCutsFromSolver
minimum number of local cuts transferred from this Solver
virtual int processTagTask(int source, int tag)
Message handlers
bool localIncumbentIsChecked
indicate if a local incumbent solution is checked or not
MessageHandlerFunctionPointer * messageHandler
table for message handlers
static const int TagCompletionOfCalculation
class BbParaSolverState (ParaSolver state object for notification message)
class BbParaSolverTerminationState (Solver termination state in a ParaSolver)
virtual int processTagGivenGapIsReached(int source, int tag)
process TagGivenGapIsReached
virtual double getObjectiveFunctionValue()=0
get objective function value
virtual void sendSolverTerminationState()
send Solver termination state
virtual void solveToCheckEffectOfRootNodePreprocesses()
solve to check effect of root node preprocesses
bool noWaitModeSend
indicate that no wait mode sending is applied
void setIntParamValue(int param, int value)
set int parameter value
Base class of communicator object.
bool keepRacing
indicate if Solver needs to do racing ramp-up repeatedly in case of warm start
virtual int processTagInterruptRequest(int source, int tag)
process TagInterruptRequest
bool racingWinner
indicate racing ramp-up winner or not: true - winner
double idleTimeToWaitAckCompletion
idle time to wait acknowledgment of completion
static const int TagOutCollectingMode
virtual int lbBoundTightened(int source, int tag)
lower bound of variable tightened
bool collectingMode
indicate whether if this solver is in collecting mode or not
int minNSolved
minimum number of subtree nodes rooted from ParaNode
virtual int processTagIncumbentValue(int source, int tag)
process TagIncumbentValue
int nTransferredLocalCutsFromSolver
number of local cuts transferred from this Solver
virtual int getNTightenedInt()
get number of tightened integral variables during racing
virtual void waitSpecTagFromSpecSource(const int source, const int tag, int *receivedTag)=0
wait function for a specific tag from a specific source coming from
static const int TagWinner
#define THROW_LOGICAL_ERROR3(msg1, msg2, msg3)
bool onceBreak
indicate that the sub-MIP is broken down once
static const int TagAckCompletion
bool getBoolParamValue(int param)
for bool parameters
bool restartingRacing
indicate that this solver is restarting racing