long GenModelCplex::SetDirectParam(int whichparam, genmodel_param value, string type, string message) { int status = 0; if (type == "dbl") status = CPXsetdblparam(static_cast<CplexData*>(solverdata)->env, whichparam, value.dblval); else if (type == "long") status = CPXsetintparam(static_cast<CplexData*>(solverdata)->env, whichparam, value.longval); else if (type == "str") status = CPXsetstrparam(static_cast<CplexData*>(solverdata)->env, whichparam, value.strval); if (status) return ThrowError(getcplexerror(static_cast<CplexData*>(solverdata)->env, status) + string(". ") + message); return 0; }
int CPLEXInitialize() { int Status = 0; //First I open the CPLEX environment if it is not already open if (CPLEXenv == NULL) { CPLEXenv = CPXopenCPLEX (&Status); } if (CPLEXenv == NULL || Status) { FErrorFile() << "Failed to initialize CPLEX environment. Check license server on aterneus." << endl; FlushErrorFile(); return FAIL; } //Now I set any environment variables Status = CPXsetintparam(CPLEXenv, CPX_PARAM_SCRIND, CPX_ON); Status = CPXsetdblparam(CPLEXenv, CPX_PARAM_WORKMEM, 50); Status = CPXsetstrparam(CPLEXenv, CPX_PARAM_WORKDIR, FOutputFilepath().data()); Status = CPXsetintparam(CPLEXenv, CPX_PARAM_NODEFILEIND, 2); Status = CPXsetdblparam(CPLEXenv, CPX_PARAM_TRELIM, 50); if (Status) { FErrorFile() << "Failed to set screen indicators to on." << endl; FlushErrorFile(); return FAIL; } if (GetParameter("CPLEX solver time limit").length() > 0 && GetParameter("CPLEX solver time limit").compare("none") != 0) { Status = CPXsetdblparam (CPLEXenv, CPX_PARAM_TILIM, atof(GetParameter("CPLEX solver time limit").data())); if (Status) { FErrorFile() << "Failed to set CPLEX time limit." << endl; FlushErrorFile(); return FAIL; } } //I set the number of processors to run on if allowed to // SYSTEM_INFO sysinfo; // GetSystemInfo( &sysinfo ); // int numCPU = sysinfo.dwNumberOfProcessors; Status = CPXsetintparam(CPLEXenv, CPX_PARAM_THREADS, 1); Status = CPXsetintparam(CPLEXenv, CPX_PARAM_PARALLELMODE, 0); Status = CPXsetintparam (CPLEXenv, CPX_PARAM_MIPDISPLAY, 0); //Next I clear out any models that currently exist if (CPLEXClearSolver() != SUCCESS) { return FAIL; //error message already printed } //Now I create a new CPLEX model CPLEXModel = CPXcreateprob (CPLEXenv, &Status, "LPProb"); Status = CPXchgprobtype(CPLEXenv, CPLEXModel, CPXPROB_LP); if (Status || CPLEXModel == NULL) { FErrorFile() << "Failed to create new CPLEX model." << endl; FlushErrorFile(); return FAIL; } return SUCCESS; }