45 #include "scip/scip.h" 68 std::cout << std::endl;
69 std::cout <<
"syntax: " << argv[0] <<
" #MPI_processes(#solvers + 1) 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;
90 std::ofstream ofsParamsOutputFile;
102 ofsParamsOutputFile.open(s.str().c_str());
103 if( !ofsParamsOutputFile ){
104 std::cout <<
"Cannot open ParaParams output file: file name = " << s.str() << std::endl;
107 paraParamSet->
write(&ofsParamsOutputFile);
108 ofsParamsOutputFile.close();
120 std::ofstream ofsSolverParamsOutputFile;
121 std::ostringstream s;
132 ofsSolverParamsOutputFile.open(s.str().c_str());
133 if( !ofsSolverParamsOutputFile ){
134 std::cout <<
"Cannot open Solver parameters output file: file name = " << s.str() << std::endl;
138 ofsSolverParamsOutputFile.close();
154 static const int solverOrigin = 1;
156 bool racingSolversExist =
false;
163 char *configFileName = 0;
164 for(
int i = 1; i < argc; ++i )
166 if ( strcmp(argv[i],
"-ugsc") == 0 )
171 configFileName = argv[i];
176 std::cerr <<
"missing file name after parameter '-ugsc" << std::endl;
183 UGS::UgsParaCommMpi *commUgs = 0;
186 commUgs =
new UGS::UgsParaCommMpi();
187 commUgs->init(argc,argv);
189 comm->setUgsComm(commUgs);
200 comm->
init(argc,argv);
203 paraTimer->
init(comm);
207 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS 208 SCIP_CALL_ABORT( SCIPcreateMesshdlrPThreads(1) );
209 SCIPmessageSetDefaultHandler();
219 paraParamSet->
read(comm, argv[1]);
221 paraParamSet->
bcast(comm, 0);
222 comm->
lcInit(paraParamSet);
225 if( paraInitiator->
init(paraParamSet, argc, argv) )
227 if( dynamic_cast<ScipParaInitiator *>(paraInitiator)->isSolvedAtInit() )
233 if( detTimer )
delete detTimer;
240 if( commUgs )
delete commUgs;
245 std::cout <<
"** Initiatior was initilized after " << paraTimer->
getElapsedTime() <<
" sec." << std::endl;
254 std::cout <<
"** Instance data were sent to all solvers after " << paraTimer->
getElapsedTime() <<
" sec." << std::endl;
260 if( dynamic_cast<ScipParaInitiator *>(paraInitiator)->isSolvedAtInit() )
263 paraLc =
new ScipParaLoadCoordinator(commUgs, comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
265 paraLc =
new ScipParaLoadCoordinator(comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
271 if( detTimer )
delete detTimer;
280 if( commUgs )
delete commUgs;
287 paraLc =
new ScipParaLoadCoordinator(commUgs, comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
289 paraLc =
new ScipParaLoadCoordinator(comm, paraParamSet, paraInitiator, &racingSolversExist, paraTimer, detTimer);
305 dynamic_cast<ScipParaInitiator *>(paraInitiator)->makeRootNodeDiffSubproblem());
306 paraLc->
run(rootNode);
313 for(
int i = 1; i < comm->
getSize(); i++ )
320 racingRampUpParams[i-solverOrigin]->send(comm, i)
325 dynamic_cast<ScipParaInitiator *>(paraInitiator)->makeRootNodeDiffSubproblem());
326 paraLc->
run(rootNode, (comm->
getSize()-1), racingRampUpParams );
327 for(
int i = 1; i < comm->
getSize(); i++ )
329 if( racingRampUpParams[i-solverOrigin] )
delete racingRampUpParams[i-solverOrigin];
331 delete [] racingRampUpParams;
347 paraParamSet->
bcast(comm, 0);
349 int nNonLinearConsHdlrs = 0;
355 if( nNonLinearConsHdlrs > 0 )
371 dynamic_cast<ScipParaSolver *
>(paraSolver)->setProblemFileName(argv[2]);
383 (void)comm->
probe(&source, &tag);
392 dynamic_cast<BbParaSolver *
>(paraSolver)->setKeepRacing(
false);
396 dynamic_cast<BbParaSolver *
>(paraSolver)->setKeepRacing(
true);
398 (void)comm->
probe(&source, &tag);
401 racingRampUpParamSet->
receive(comm, 0)
403 paraSolver->
run( racingRampUpParamSet );
436 #ifndef SCIP_THREADSAFE_MESSAGEHDLRS 437 SCIPfreeMesshdlrPThreads();
441 if( detTimer )
delete detTimer;
443 if( racingSolversExist ) comm->
abort();
448 if( commUgs )
delete commUgs;
virtual void generateRacingRampUpParameterSets(int nParamSets, ParaRacingRampUpParamSet **racingRampUpParamSets)=0
generate racing ramp-up parameter sets TODO: this function may be in inherited class ...
void outputSolverParams(ParaParamSet *paraParamSet, ParaInitiator *paraInitiator)
void lcInit(ParaParamSet *paraParamSet)
initializer for LoadCoordinator
UG::ParaInstance * createParaInstance()
ParaDeterministicTimer extension for SCIP.
void outputCommandLineMessages(char **argv)
ParaInstance extenstion for SCIP solver.
bool isWarmStarted()
check if the execution is warm started (restarted) or not
static const int LogSolvingStatusFilePath
static ScipParaCommTh * comm
static ScipParaParamSet * paraParamSet
virtual double getElapsedTime()=0
get elapsed time
static const int TagTerminateRequest
static ScipParaInitiator * paraInitiator
void init(int argc, char **argv)
SCIP ParaComm extension for MPI communication.
int getRank()
get rank of caller's thread
virtual int bcast(ParaComm *comm, int rank, int method)=0
broadcast function to all solvers
static const int OutputParaParams
static ScipParaLoadCoordinator * paraLc
void outputParaParamSet(ParaParamSet *paraParamSet, ParaInitiator *paraInitiator)
virtual int bcast(ParaComm *comm, int root)=0
broadcast ParaParams
void setUserPlugins(ParaInitiator *initiator)
void setFileName(const char *inFileName)
class for deterministic timer
virtual void writeSolverParameters(std::ostream *os)=0
write solver runtime parameters
virtual const char * getProbName()=0
get problem name
#define PARA_COMM_CALL(paracommcall)
static const int Deterministic
virtual int init(ParaParamSet *params, int argc, char **argv)=0
initialize initiator
virtual void run()=0
run this Solver
int getSize()
get size of this communicator, which indicates how many threads in a UG process
ParaSolver extension for SCIP: Parallelized solver implementation for SCIP.
class ParaTimerMpi (Timer used in MPI communication)
virtual void outputFinalSolverStatistics(std::ostream *os, double time)=0
output final solver statistics
virtual int send(void *bufer, int count, const int datatypeId, int dest, const int tag)
send function for standard ParaData types
Parameter set for UG framework.
virtual void sendSolverInitializationMessage()=0
send solver initialization message
const char * getPrefixWarm()
get prefix of warm start (restart) files
Base class for racing ramp-up parameter set.
bool probe(int *source, int *tag)
probe function which waits a new message
virtual void run()=0
run function to start main process
Base class for instance data.
int main(int argc, char **argv)
Class for LoadCoordinator.
#define THROW_LOGICAL_ERROR2(msg1, msg2)
virtual void init(ParaComm *paraComm)=0
if you want to set original initial time, you can do it init()
static const int InstanceTransferMethod
Class for LoadCoordinator.
const char * getStringParamValue(int param)
for char parameters
static const int ParaBYTE
virtual void read(ParaComm *comm, const char *filename)
read ParaParams from file
Base class of initiator that maintains original problem and incumbent solution.
UG::ParaParamSet * createParaParamSet()
void start(void)
start timer
static const int RampUpPhaseProcess
int receive(void *bufer, int count, const int datatypeId, int source, const int tag)
receive function for standard ParaData types
int bcast(void *buffer, int count, const int datatypeId, int root)
broadcast function for standard ParaData types
virtual int receive(ParaComm *comm, int source)=0
receive ParaRacingRampUpParamSet
virtual ParaInstance * getParaInstance()=0
get instance object
static const int TagKeepRacing
void abort()
abort. How it works sometimes depends on communicator used
void write(std::ostream *os)
write ParaParams to output stream
int getIntParamValue(int param)
for int parameters
ParaInitiator extension for SCIP solver.
class ParaRacingRampUpParamSet (parameter set for racing ramp-up)
void setIntParamValue(int param, int value)
set int parameter value
void solverInit(ParaParamSet *paraParamSet)
initializer for Solvers
bool getBoolParamValue(int param)
for bool parameters