37 #ifndef __PARA_SOLVER_H__ 38 #define __PARA_SOLVER_H__ 52 #define ENFORCED_THRESHOLD 5 182 std::cout <<
"*** virtual function ParaSolver::processTagRampUp is called ***" << std::endl;
204 std::cout <<
"*** virtual function ParaSolver::processTagIncumbentValue is called ***" << std::endl;
244 std::cout <<
"*** virtual function ParaSolver::processTagWinnerRacingRampUpParamSet is called ***" << std::endl;
257 std::cout <<
"*** virtual function ParaSolver::processTagWinner is called ***" << std::endl;
270 std::cout <<
"*** virtual function ParaSolver::processTagToken is called ***" << std::endl;
314 std::cout <<
"*** virtual function ParaSolver::updateGlobalBestIncumbentSolution is called ***" << std::endl;
326 std::cout <<
"*** virtual function ParaSolver::updateGlobalBestIncumbentValue is called ***" << std::endl;
338 std::cout <<
"*** virtual function ParaSolver::setRacingParams is called ***" << std::endl;
348 std::cout <<
"*** virtual function ParaSolver::setWinnerRacingParams is called ***" << std::endl;
357 std::cout <<
"*** virtual function ParaSolver::createSubproblem is called ***" << std::endl;
366 std::cout <<
"*** virtual function ParaSolver::freeSubproblem is called ***" << std::endl;
381 std::cout <<
"*** virtual function ParaSolver::reinitializeInstance is called ***" << std::endl;
447 currentTask = paraTask;
458 std::cout <<
"*** virtual function ParaSolver::run(araRacingRampUpParamSet *) is called ***" << std::endl;
543 std::cout <<
"*** virtual function ParaSolver::sendIfImprovedSolutionWasFound is called ***" << std::endl;
554 std::cout <<
"*** virtual function ParaSolver::saveIfImprovedSolutionWasFound is called ***" << std::endl;
564 std::cout <<
"*** virtual function ParaSolver::sendLocalSolution is called ***" << std::endl;
582 return ( terminationMode == InterruptedTerminationMode );
592 return ( terminationMode == NormalTerminationMode );
602 return (newTask != 0);
679 assert(racingParams);
682 racingInterruptIsRequested =
false;
683 racingIsInterrupted =
false;
715 std::cout <<
"*** virtual function ParaSolver::waitToken is called ***" << std::endl;
731 std::cout <<
"*** virtual function ParaSolver::passToken is called ***" << std::endl;
762 if( updatePendingSolutionIsProceeding ==
false )
764 updatePendingSolutionIsProceeding =
true;
765 if( !pendingSolution )
768 pendingIncumbentValue = DBL_MAX;
769 updatePendingSolutionIsProceeding =
false;
780 pendingIncumbentValue = DBL_MAX;
782 updatePendingSolutionIsProceeding =
false;
798 const std::string& filename
821 previousCommTime = detTime;
841 terminationMode = tm;
858 #endif // __PARA_SOLVER_H__ ParaParamSet * getParaParamSet()
get ParaParamSet object
virtual void writeCurrentTaskProblem(const std::string &filename)=0
write current task problem (this method is always useful for debugging, so we should implement this m...
virtual bool sendIfImprovedSolutionWasFound(ParaSolution *sol)
send improved solution if it was found in this Solver
bool notificationProcessed
if true, notification is issued but not receive the corresponding LCB
int nImprovedIncumbent
Counters related to the current ParaTask.
double idleTimeToFirstParaTask
idle time to start solving the first ParaTask
virtual int processTagTaskReceived(int source, int tag)=0
process TagTaskReceived
virtual void createSubproblem()
create subproblem
static ScipParaCommTh * comm
ParaSolution * pendingSolution
solution which is pending to update in case of deterministic runs
bool stayAliveAfterInterrupt
indicate that stay alive this solver after interrupt request
bool memoryLimitIsReached
indicate if memory limit is reached or not, when base solver has memory management feature ...
virtual void setRacingParams(ParaRacingRampUpParamSet *racingParms, bool winnerParam)
set racing parameters
virtual void sendLocalSolution()
send solution found in this Solver
bool racingInterruptIsRequested
indicate a racing interrupt is requested
void terminateRacing()
check if Solver is in racing stage or not
virtual double getElapsedTime()=0
get elapsed time
int nParaTasksSolved
number of ParaTasks solved ( received ) in this ParaSolver
ParaParamSet * paraParams
ParaParamSet object.
virtual int getRank()
get rank of this Solver
virtual bool updateGlobalBestIncumbentSolution(ParaSolution *sol)
update global best incumbent solution
static const int NormalTerminationMode
static const int InterruptedTerminationMode
virtual void sendCompletionOfCalculation(double stopTime)=0
restart racing
virtual int processTagInterruptRequest(int source, int tag)=0
process TagInterruptRequest
double globalBestIncumbentValue
global best incumbent value
virtual bool waitToken(int rank)
wait token for deterministic mode
static const int UgBaseTerminationModeLast
ParaRacingRampUpParamSet * racingParams
ParaRacingRampUpParamSet object. This is also a flag to indicate running with racing ramp-up...
ParaDeterministicTimer * paraDetTimer
deterministic timer for this ParaSolver
double previousIdleTimeToWaitToken
previous idle time to wait token
Base class for deterministic timer.
ParaComm * getParaComm()
get paraParaComm
virtual int processTagNotificationId(int source, int tag)=0
process TagNotificationId
Defines for UG Framework.
virtual bool updateGlobalBestIncumbentValue(double newValue)
update global best incumbent value
virtual int processTagWinnerRacingRampUpParamSet(int source, int tag)
process TagWinnerRacingRampUpParamSet
bool subproblemFreed
indicate that subproblem is already freed or not
double pendingIncumbentValue
incumbent value which is pending to update in case of deterministic runs
ParaDeterministicTimer * getDeterministicTimer()
get deterministic timer object
static const int TimeLimitTerminationMode
class for deterministic timer
double getOffsetTimeToWaitToken()
get offset time to wait token
ParaSolution * localIncumbentSolution
incumbent solution generated in local solver
virtual void waitAckCompletion()=0
wait ack completion to synchronized with LoadCoordinator
virtual void freeSubproblem()
free subproblem
virtual int getRank()=0
get rank of this process or this thread depending on run-time environment
virtual void run()=0
run this Solver
bool isTerminationRequested()
check if termination was requested or not
virtual ~ParaSolver()
destructor
bool rampUp
indicate whether if ramp-up phase is finished or not: true - finish
virtual int processTagIncumbentValue(int source, int tag)
process TagIncumbentValue
double getElapsedTimeOfTaskSolving()
the following functions may be called from callback routines of the target Solver ...
virtual void run(ParaTask *paraTask)
run this Solver with ParaTask object
int nHandlers
number of valid message handlers
bool waitingSpecificMessage
indicate that this solver is waiting for a specific message
void setTerminationMode(int tm)
set termination mode
bool isRacingWinner()
check if this solver is in racing ramp-up or not
int nParaTasksReceived
Counters related to this ParaSolver.
Parameter set for UG framework.
virtual int processTagRampUp(int source, int tag)
process TagRampUp
double previousStopTime
Idle Times.
double idleTimeAfterLastParaTask
idle time after the last ParaTask was solved
#define THROW_LOGICAL_ERROR1(msg1)
int terminationMode
indicate that termination mode 0: no termination mode 1: normal termination mode 2: interrupted termi...
Base class of communicator for UG Framework.
ParaTimer * paraTimer
timer for this ParaSolver
Base class for racing ramp-up parameter set.
double getPreviousCommTime()
get previous communication time for deterministic execution
double eps
absolute values smaller than this are considered zero esp should be set in the constructor of the der...
bool getNotificaionProcessed()
check if Solver is in notification process or not TODO: function name should be changed ...
double previousCommTime
previous communication time for deterministic execution
void setPreviousCommTime(double detTime)
set previous communication time for deterministic execution
virtual void setWinnerRacingParams(ParaRacingRampUpParamSet *racingParms)
set winner racing parameters
ParaTask * getCurrentTask()
get current ParaTask object
virtual bool wasTerminatedNormally()=0
check if Solver was terminated normally or not
bool globalIncumbnetValueUpdateFlag
indicate that global incumbent value is updated in iReceiveMessages() routine
ParaSolution * globalBestIncumbentSolution
global best solution. However, this is not always feasible for the current sub-MIP ...
double idleTimeBetweenParaTasks
idle time between ParaTasks processing
virtual void writeSubproblem()=0
write subproblem
virtual bool receiveNewTaskAndReactivate()=0
wait for receiving a new task and reactivate solver
virtual int processTagTerminateRequest(int source, int tag)=0
process TagTerminateRequest
ParaTask * currentTask
solving task
virtual int processTagSolution(int source, int tag)=0
process TagSolution
double offsetTimeToWaitToken
offset time to wait token
bool isRampUp()
check if this solver is ramp-up or not
double idleTimeToWaitToken
idle time to wait token
static const int NoTerminationMode
termination mode
virtual bool saveIfImprovedSolutionWasFound(ParaSolution *sol)
save improved solution if it was found in this Solver
virtual void updatePendingSolution()
update pending solution
virtual void waitMessageIfNecessary()=0
wait a notification id message if it is needed to synchronize with LoadCoordinaor ...
bool updatePendingSolutionIsProceeding
update pending solution process is proceeding
bool isInterrupting()
check if Solver is in interrupting phase or not
double idleTimeToWaitNotificationId
idle time to wait a message within collecting mode
ParaRacingRampUpParamSet * winnerRacingParams
Winner ParaRacingRampUpParamSet object.
bool racingIsInterrupted
indicate whether if racing phases is interrupted or not: true - interrupted
double paraTaskStartTime
start time of current ParaTask
bool newParaTaskExists()
check if a new ParaTask was received or not
virtual void reinitialize()
re-initialized instance
virtual void waitNotificationIdMessage()=0
wait notification id message to synchronized with LoadCoordinator
bool warmStarted
indicate whether if system is warm started or not
unsigned int notificationIdGenerator
ParaTask * newTask
new task to solve
double previousNotificationTime
previous notification time
bool isWarmStarted()
check if current execution is warm start (restart) or not
ParaInstance * paraInstance
root problem instance
bool isWaitingForSpecificMessage()
check if Solver is waiting for a specific message or not
virtual void iReceiveMessages()=0
non-blocking receive messages
ParaComm * paraComm
ParaCommunicator object.
class ParaRacingRampUpParamSet (parameter set for racing ramp-up)
virtual bool notificationIsNecessary()=0
check if a notification message needs to send or not TODO: function name should be isNotificationNece...
virtual void passToken(int rank)
pass token to the next process
MessageHandlerFunctionPointer * messageHandler
table for message handlers
int(ParaSolver::* MessageHandlerFunctionPointer)(int, int)
virtual void run(ParaRacingRampUpParamSet *inRacingRampUpParamSet)
run this solver with racing parameters
virtual int processTagToken(int source, int tag)
process TagToken
virtual int processTagWinner(int source, int tag)
process TagWinner
ParaInstance * getParaInstance()
get ParaInstance object
Base class of communicator object.
bool racingWinner
indicate racing ramp-up winner or not: true - winner
virtual void solve()=0
solve (sub)problem
double idleTimeToWaitAckCompletion
idle time to wait acknowledgment of completion
int getTerminationMode()
get termination mode
virtual int processTagTask(int source, int tag)=0
Message handlers
virtual void tryNewSolution(ParaSolution *sol)=0
try to enter solution to base solver environment
ParaSolution * getGlobalBestIncumbentSolution()
get global best incumbent solution