//===========================================================================// void GAP_Instance::readBestKnown(string& fileName, string& instanceName) { ifstream is; string instance; double bestUpperBound; bool isProvenOptimal; int status = 0; status = UtilOpenFile(is, fileName); if (status) throw UtilException("Failed to best-known file", "readBestKnown", "GAP_Instance"); while (!is.eof()) { is >> instance >> bestUpperBound >> isProvenOptimal; instance = UtilStrTrim(instance); if (instance == instanceName) { if (isProvenOptimal) { m_bestKnownLB = bestUpperBound; } else { m_bestKnownLB = -COIN_DBL_MAX; } m_bestKnownUB = bestUpperBound; m_isProvenOptimal = isProvenOptimal; break; } } }
// --------------------------------------------------------------------- // void MAD_DecompApp::initializeApp(UtilParameters & utilParam) { UtilPrintFuncBegin(m_osLog, m_classTag, "initializeApp()", m_param.LogDebugLevel, 2); //--- //--- get application parameters //--- m_appParam.getSettings(utilParam); m_appParam.dumpSettings(m_osLog); //use message handler //--- //--- read instance from lp file (from MADLIB) //--- http://elib.zib.de/pub/mp-testdata/madlib/index.html //--- string lpFile = m_appParam.DataDir + UtilDirSlash(); lpFile += m_appParam.Instance; if(m_appParam.DataSubDir == "miplib"){ lpFile += ".p.lp"; } else if(m_appParam.DataSubDir == "netlib"){ lpFile += ".ob4"; } m_instance.readLp(lpFile.c_str()); m_nOrigRows = m_instance.getNumRows(); m_beta = m_appParam.NumBlocks; //--- //--- read best known lb/ub //--- string bestKnownFile = m_appParam.DataDir + UtilDirSlash(); bestKnownFile += "madlib." + m_appParam.DataSubDir + ".opt"; { ifstream is; string instanceName; double bestLB, bestUB; UtilOpenFile(is, bestKnownFile); while(!is.eof()){ //--- //--- these are the number of rows in the border (less is better) //--- is >> instanceName >> bestLB >> bestUB; //printf("Instance = %15s bestLB = %6g bestUB = %6g\n", // instanceName.c_str(), bestLB, bestUB); instanceName = UtilStrTrim(instanceName); if(instanceName == m_appParam.Instance){ //--- //--- the paper solves z = max sum x, //--- where x is an assignment to a block //--- so, nBorder = nRows - z //--- or, z = nRows - nBorder //--- //--- but we only do min, so we solve -z = min sum (-x) //---- so, -z = nBorder - nRows //--- m_bestKnownLB = bestLB - m_nOrigRows; m_bestKnownUB = bestUB - m_nOrigRows; break; } } } //--- //--- set capacity based on MADLIB study (if it is not set): //--- http://elib.zib.de/pub/mp-testdata/madlib/index.en.html //--- if(m_appParam.Capacity != -1){ m_kappa = m_appParam.Capacity; } else{ m_kappa = static_cast<int>(ceil(static_cast<double>(m_nOrigRows)/m_beta)); if(m_appParam.DataSubDir == "netlib" || m_appParam.DataSubDir == "equipart"){ m_kappa = static_cast<int>(ceil(static_cast<double>(m_nOrigRows)/m_beta)); } else if(m_appParam.DataSubDir == "miplib" || m_appParam.DataSubDir == "miplibT"){ m_kappa = static_cast<int>(ceil( 1.05 * m_nOrigRows / m_beta) ); } else if(m_appParam.DataSubDir == "steiner"){ if(m_appParam.Instance[0] == 'g'){ m_kappa = 30; } else if (m_appParam.Instance[0] == 'd'){ m_kappa = 50; } } } UTIL_DEBUG(m_param.LogDebugLevel, 1, (*m_osLog) << "Instance = " << m_appParam.Instance << endl << " nRows = " << m_nOrigRows << endl << " bestLB = " << m_bestKnownLB << endl << " bestUB = " << m_bestKnownUB << endl << " Beta = " << m_beta << endl << " Kappa = " << m_kappa << endl; );