68 std::cout << std::endl;
69 std::cout <<
"syntax: mpirun(command provided by MPI) #MPI_processes(#solvers + 1) " << argv[0] <<
" parascip_param_file problem_file_name "
70 <<
"[-l <logfile>] [-q] [-sl <settings>] [-s <settings>] [-sr <root_settings>] [-w <prefix_warm>] [-sth <number>] [-fsol <solution_file>] [-isol <initial solution file]" << std::endl;
71 std::cout <<
" -l <logfile> : copy output into log file" << std::endl;
72 std::cout <<
" -q : suppress screen messages" << std::endl;
73 std::cout <<
" -sl <settings> : load parameter settings (.set) file for LC presolving" << std::endl;
74 std::cout <<
" -s <settings> : load parameter settings (.set) file for solvers" << std::endl;
75 std::cout <<
" -sr <root_settings> : load parameter settings (.set) file for root" << std::endl;
76 std::cout <<
" -w <prefix_warm> : warm start file prefix ( prefix_warm_nodes.gz and prefix_warm_solution.txt are read )" << std::endl;
77 std::cout <<
" -fsol <solution file> : specify output solution file" << std::endl;
78 std::cout <<
" -isol <intial solution file> : specify initial solution file" << std::endl;
79 std::cout <<
"File names need to be specified by full path form." << std::endl;
94 std::ofstream ofsParamsOutputFile;
106 ofsParamsOutputFile.open(s.str().c_str());
107 if( !ofsParamsOutputFile ){
108 std::cout <<
"Cannot open ParaParams output file: file name = " << s.str() << std::endl;
112 ofsParamsOutputFile.close();
124 std::ofstream ofsSolverParamsOutputFile;
125 std::ostringstream s;
136 ofsSolverParamsOutputFile.open(s.str().c_str());
137 if( !ofsSolverParamsOutputFile ){
138 std::cout <<
"Cannot open Solver parameters output file: file name = " << s.str() << std::endl;
142 ofsSolverParamsOutputFile.close();
158 static const int solverOrigin = 1;
160 bool racingSolversExist =
false;
167 char *configFileName = 0;
168 for(
int i = 1; i < argc; ++i )
170 if ( strcmp(argv[i],
"-ugsc") == 0 )
175 configFileName = argv[i];
180 std::cerr <<
"missing file name after parameter '-ugsc" << std::endl;
187 UGS::UgsParaCommMpi *commUgs = 0;
190 commUgs =
new UGS::UgsParaCommMpi();
191 commUgs->init(argc,argv);
193 comm->setUgsComm(commUgs);
211#ifndef SCIP_THREADSAFE_MESSAGEHDLRS
212 SCIP_CALL_ABORT( SCIPcreateMesshdlrPThreads(1) );
213 SCIPmessageSetDefaultHandler();
237 if( detTimer )
delete detTimer;
244 if( commUgs )
delete commUgs;
249 std::cout <<
"** Initiatior was initilized after " << paraTimer->
getElapsedTime() <<
" sec." << std::endl;
258 std::cout <<
"** Instance data were sent to all solvers after " << paraTimer->
getElapsedTime() <<
" sec." << std::endl;
275 if( detTimer )
delete detTimer;
284 if( commUgs )
delete commUgs;
324 racingRampUpParams[i-solverOrigin]->send(
comm, i)
333 if( racingRampUpParams[i-solverOrigin] )
delete racingRampUpParams[i-solverOrigin];
335 delete [] racingRampUpParams;
353 int nNonLinearConsHdlrs = 0;
359 if( nNonLinearConsHdlrs > 0 )
375 dynamic_cast<ScipParaSolver *
>(paraSolver)->setProblemFileName(argv[2]);
396 dynamic_cast<BbParaSolver *
>(paraSolver)->setKeepRacing(
false);
400 dynamic_cast<BbParaSolver *
>(paraSolver)->setKeepRacing(
true);
407 paraSolver->
run( racingRampUpParamSet );
440#ifndef SCIP_THREADSAFE_MESSAGEHDLRS
441 SCIPfreeMesshdlrPThreads();
445 if( detTimer )
delete detTimer;
452 if( commUgs )
delete commUgs;
BbParaNode extension for MIP communication.
UG::ParaInstance * createParaInstance()
UG::ParaParamSet * createParaParamSet()
void sendSolverInitializationMessage()
void outputFinalSolverStatistics(std::ostream *os, double time)
void generateRacingRampUpParameterSets(int nParamSets, UG::ParaRacingRampUpParamSet **racingRampUpParamSets)
void writeSolverParameters(std::ostream *os)
UG::ParaInstance * getParaInstance()
virtual int init(UG::ParaParamSet *paraParams, int argc, char **argv)
void setFileName(const char *inFileName)
Class for LoadCoordinator.
virtual void run()
run function to start main process
virtual void warmStart()
warm start (restart)
void read(ParaComm *comm, const char *filename)
read ParaParams from file
virtual void solverInit(ParaParamSet *paraParamSet)
initializer for Solvers
bool probe(int *source, int *tag)
probe function which waits a new message
int send(void *bufer, int count, const int datatypeId, int dest, const int tag)
send function for standard ParaData types
int receive(void *bufer, int count, const int datatypeId, int source, const int tag)
receive function for standard ParaData types
int getSize()
get size of this communicator, which indicates how many threads in a UG process
int getRank()
get rank of caller's thread
virtual void init(int argc, char **argv)
initializer of this communicator
void abort()
abort. How it works sometimes depends on communicator used
int bcast(void *buffer, int count, const int datatypeId, int root)
broadcast function for standard ParaData types
virtual void lcInit(ParaParamSet *paraParamSet)
initializer for LoadCoordinator
class for deterministic timer
const char * getPrefixWarm()
get prefix of warm start (restart) files
bool isWarmStarted()
check if the execution is warm started (restarted) or not
virtual int bcast(ParaComm *comm, int rank, int method)=0
broadcast function to all solvers
virtual const char * getProbName()=0
get problem name
Class for LoadCoordinator.
int bcast(ParaComm *comm, int root)
broadcast ParaParams
bool getBoolParamValue(int param)
get bool parameter value
void write(std::ostream *os)
write ParaParams to output stream
void setIntParamValue(int param, int value)
set int parameter value
int getIntParamValue(int param)
get int parameter value
const char * getStringParamValue(int param)
get string parameter value
class ParaRacingRampUpParamSet (parameter set for racing ramp-up)
virtual int receive(ParaComm *comm, int source)=0
receive ParaRacingRampUpParamSet
virtual void run()=0
run this Solver
void start(void)
start timer
class ParaTimerMpi (Timer used in MPI communication)
virtual void init(ParaComm *paraComm)=0
initialize timer
virtual double getElapsedTime()=0
get elapsed time
static ScipParaCommTh * comm
static ScipParaLoadCoordinator * paraLc
static ScipParaInitiator * paraInitiator
static ScipParaParamSet * paraParamSet
static const int OutputParaParams
static const int InstanceTransferMethod
static const int LogSolvingStatusFilePath
static const int TagTerminateRequest
static const int ParaBYTE
static const int Deterministic
static const int RampUpPhaseProcess
static const int TagKeepRacing
#define PARA_COMM_CALL(paracommcall)
#define THROW_LOGICAL_ERROR2(msg1, msg2)
Base class of initiator that maintains original problem and incumbent solution.
Base class for instance data.
Parameter set for UG framework.
Base class for racing ramp-up parameter set.
int main(int argc, char **argv)
void outputParaParamSet(ParaParamSet *paraParamSet, ParaInitiator *paraInitiator)
void outputCommandLineMessages(char **argv)
void setUserPlugins(ParaInitiator *initiator)
void outputSolverParams(ParaParamSet *paraParamSet, ParaInitiator *paraInitiator)
SCIP ParaComm extension for MPI communication.
ParaDeterministicTimer extension for SCIP.
ParaInitiator extension for SCIP solver.
ParaInstance extenstion for SCIP solver.
ParaSolver extension for SCIP: Parallelized solver implementation for SCIP.