Changeset 1075 for branches


Ignore:
Timestamp:
Aug 9, 2007 10:40:30 PM (12 years ago)
Author:
ladanyi
Message:

Got rid of dependency on Data/Netlib?

Location:
branches/BSP/trunk/Clp
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/BSP/trunk/Clp/src/ClpMain.cpp

    r1073 r1075  
    9797    models->messageHandler()->setPrefix(false);
    9898    const char dirsep =  CoinFindDirSeparator();
    99     std::string directory = ".";
     99    std::string directory = (dirsep == '/' ? "./" : ".\\");
    100100    std::string defaultDirectory = directory;
    101101    std::string importFile ="";
     
    13721372            {
    13731373              // create fields for unitTest
    1374               const char * fields[4];
     1374              const char * fields[3];
     1375              std::string dirfield;
     1376              int nFields=2;
    13751377              fields[0]="fake main from unitTest";
    13761378              fields[1]="-netlib";
    1377               fields[2]="-directory";
    1378               fields[3]=directory.c_str();
    1379               int nFields=4;
     1379              if (directory!=defaultDirectory) {
     1380                dirfield = "-netlibDir=";
     1381                dirfield += directory.c_str();
     1382                fields[2]=dirfield.c_str();
     1383                nFields=3;
     1384              }
    13801385              int algorithm;
    13811386              if (type==NETLIB_DUAL) {
     
    14061411            {
    14071412              // create fields for unitTest
    1408               const char * fields[4];
     1413              const char * fields[3];
     1414              int nFields=1;
    14091415              fields[0]="fake main from unitTest";
    1410               fields[1]="-unitTest";
    1411               fields[2]="-directory";
    1412               fields[3]=directory.c_str();
    1413               int nFields=4;
    14141416              int specialOptions = models[iModel].specialOptions();
    14151417              models[iModel].setSpecialOptions(0);
  • branches/BSP/trunk/Clp/src/ClpSimplex.hpp

    r1073 r1075  
    5050
    5151class ClpSimplex : public ClpModel {
    52   friend void ClpSimplexUnitTest(const std::string & directory);
     52   friend void ClpSimplexUnitTest(const std::string & mpsDir,
     53                                  const std::string & netlibDir);
    5354
    5455public:
     
    12801281 */
    12811282void
    1282 ClpSimplexUnitTest(const std::string & directory);
     1283ClpSimplexUnitTest(const std::string & mpsDir,
     1284                   const std::string & netlibDir);
    12831285
    12841286
  • branches/BSP/trunk/Clp/src/unitTest.cpp

    r1074 r1075  
    227227  printf("Computed objective %g\n",objValue);
    228228}
    229 
    230 static void usage()
    231 {
    232   std::cerr <<"Correct usage for running clp in testing mode: \n"
    233             <<"  clp -directory DIR  <-unitTest|-netlib> "
    234             <<"    where:\n"
    235             <<"      -directory: directory containing mps test files\n"
    236             <<"                  Must be specified.\n"
    237             <<"      -unitTest or -netlib specifies whether a small sample should be run\n"
    238             <<"          or the full set pf netlib problems.\n"
    239             <<"          One of them must be specified.\n";
    240 }
    241 
     229//----------------------------------------------------------------
     230// unitTest [-mpsDir=V1] [-netlibDir=V2] [-test]
     231//
     232// where:
     233//   -mpsDir: directory containing mps test files
     234//       Default value V1="../../Data/Sample"   
     235//   -netlibDir: directory containing netlib files
     236//       Default value V2="../../Data/Netlib"
     237//   -test
     238//       If specified, then netlib test set run
     239//
     240// All parameters are optional.
    242241//----------------------------------------------------------------
    243242int mainTest (int argc, const char *argv[],int algorithm,
    244243              ClpSimplex empty, bool doPresolve, int switchOffValue,bool doVector)
    245244{
     245  int i;
     246
    246247  if (switchOffValue>0) {
    247248    // switch off some
     
    255256  }
    256257
    257   bool netlib = false;
    258   bool singleprob = empty.numberRows() > 0;
    259 
    260   if (argc != 4) {
    261     usage();
    262     return 1;
     258  // define valid parameter keywords
     259  std::set<std::string> definedKeyWords;
     260  definedKeyWords.insert("-mpsDir");
     261  definedKeyWords.insert("-netlibDir");
     262  definedKeyWords.insert("-netlib");
     263
     264  // Create a map of parameter keys and associated data
     265  std::map<std::string,std::string> parms;
     266  for ( i=1; i<argc; i++ ) {
     267    std::string parm(argv[i]);
     268    std::string key,value;
     269    std::string::size_type  eqPos = parm.find('=');
     270
     271    // Does parm contain and '='
     272    if ( eqPos==std::string::npos ) {
     273      //Parm does not contain '='
     274      key = parm;
     275    }
     276    else {
     277      key=parm.substr(0,eqPos);
     278      value=parm.substr(eqPos+1);
     279    }
     280
     281    // Is specifed key valid?
     282    if ( definedKeyWords.find(key) == definedKeyWords.end() ) {
     283      // invalid key word.
     284      // Write help text
     285      std::cerr <<"Undefined parameter \"" <<key <<"\".\n";
     286      std::cerr <<"Correct usage: \n";
     287      std::cerr <<"  unitTest [-mpsDir=V1] [-netlibDir=V2] [-test[=V3]]\n";
     288      std::cerr <<"  where:\n";
     289      std::cerr <<"    -mpsDir: directory containing mps test files\n";
     290      std::cerr <<"        Default value V1=\"../../Data/Sample\"\n";
     291      std::cerr <<"    -netlibDir: directory containing netlib files\n";
     292      std::cerr <<"        Default value V2=\"../../Data/Netlib\"\n";
     293      std::cerr <<"    -test\n";
     294      std::cerr <<"        If specified, then netlib testset run.\n";
     295      std::cerr <<"        If V3 then taken as single file\n";
     296      return 1;
     297    }
     298    parms[key]=value;
    263299  }
    264300 
    265   if (strncmp(argv[1], "-unitTest", 9) == 0) {
    266     netlib = false;
    267   } else if (strncmp(argv[1], "-netlib", 7) == 0) {
    268     netlib = true;
    269   } else {
    270     usage();
    271     return 1;
    272   }
    273  
    274   if (strncmp(argv[2], "-directory", 9) != 0) {
    275     usage();
    276     return 1;
    277   }
     301  const char dirsep =  CoinFindDirSeparator();
    278302  // Set directory containing mps data files.
    279   std::string directory(argv[3]);
    280 
    281   if (!netlib) {
    282     testingMessage( "Testing clp -unitTest\n" );
    283     ClpSimplexUnitTest(directory);
    284   }
    285 
    286   if (netlib) {
     303  std::string mpsDir;
     304  if (parms.find("-mpsDir") != parms.end())
     305    mpsDir=parms["-mpsDir"] + dirsep;
     306  else
     307    mpsDir = dirsep == '/' ? "../../Data/Sample/" : "..\\..\\Data\\Sample\\";
     308 
     309  // Set directory containing netlib data files.
     310  std::string netlibDir;
     311  if (parms.find("-netlibDir") != parms.end())
     312    netlibDir=parms["-netlibDir"] + dirsep;
     313  else
     314    netlibDir = dirsep == '/' ? "../../Data/Netlib/" : "..\\..\\Data\\Netlib\\";
     315  if (!empty.numberRows()) {
     316    testingMessage( "Testing ClpSimplex\n" );
     317    ClpSimplexUnitTest(mpsDir,netlibDir);
     318  }
     319  if (parms.find("-netlib") != parms.end()||empty.numberRows())
     320  {
    287321    unsigned int m;
    288322   
     
    300334    // 100 added means no presolve
    301335    std::vector<int> bestStrategy;
    302 
    303     if (singleprob) {
    304       testingMessage( "Testing clp on a single netlib problemx\n" );
    305       // Just testing one
    306       mpsName.push_back(empty.problemName());min.push_back(true);nRows.push_back(-1);
    307       nCols.push_back(-1);objValueTol.push_back(1.e-10);
    308       objValue.push_back(0.0);bestStrategy.push_back(0);
    309       int iTest;
     336    if(empty.numberRows()) {
    310337      std::string alg;
    311       for (iTest=0;iTest<NUMBER_ALGORITHMS;iTest++) {
     338      for (int iTest=0;iTest<NUMBER_ALGORITHMS;iTest++) {
    312339        ClpSolve solveOptions=setupForSolve(iTest,alg,0);
    313340        printf("%d %s ",iTest,alg.c_str());
     
    319346          printf("will be tested\n");
    320347      }
    321     } else {
    322       testingMessage( "Testing clp -netlib\n" );
     348    }
     349    if (!empty.numberRows()) {
    323350      mpsName.push_back("25fv47");
    324351      min.push_back(true);
     
    422449      mpsName.push_back("wood1p");min.push_back(true);nRows.push_back(245);nCols.push_back(2594);objValueTol.push_back(5.e-5);objValue.push_back(1.4429024116e+00);bestStrategy.push_back(3);
    423450      mpsName.push_back("woodw");min.push_back(true);nRows.push_back(1099);nCols.push_back(8405);objValueTol.push_back(1.e-10);objValue.push_back(1.3044763331E+00);bestStrategy.push_back(3);
     451    } else {
     452      // Just testing one
     453      mpsName.push_back(empty.problemName());min.push_back(true);nRows.push_back(-1);
     454      nCols.push_back(-1);objValueTol.push_back(1.e-10);
     455      objValue.push_back(0.0);bestStrategy.push_back(0);
     456      int iTest;
     457      std::string alg;
     458      for (iTest=0;iTest<NUMBER_ALGORITHMS;iTest++) {
     459        ClpSolve solveOptions=setupForSolve(iTest,alg,0);
     460        printf("%d %s ",iTest,alg.c_str());
     461        if (switchOff[iTest])
     462          printf("skipped by user\n");
     463        else if(solveOptions.getSolveType()==ClpSolve::notImplemented)
     464          printf("skipped as not available\n");
     465        else
     466          printf("will be tested\n");
     467      }
    424468    }
    425469
     
    433477
    434478      ClpSimplex solutionBase=empty;
    435       std::string fn = directory+mpsName[m];
     479      std::string fn = netlibDir+mpsName[m];
    436480      if (!empty.numberRows()||algorithm<6) {
    437481        // Read data mps file,
    438482        CoinMpsIO mps;
    439         int nerrors=mps.readMps(fn.c_str(),"mps");
    440         if (nerrors) {
    441                 std::cerr << "Error " << nerrors << " when reading model from " << fn.c_str() << "! "
    442                 << "I'll continue with the next model." << std::endl;
    443                 continue;
    444         }
    445         solutionBase.loadProblem(*mps.getMatrixByCol(),mps.getColLower(),
     483        int nerrors=mps.readMps(fn.c_str(),"mps");
     484        if (nerrors) {
     485          std::cerr << "Error " << nerrors << " when reading model from "
     486                    << fn.c_str() << "! Aborting tests.\n";
     487          return 1;
     488        }
     489        solutionBase.loadProblem(*mps.getMatrixByCol(),mps.getColLower(),
    446490                                 mps.getColUpper(),
    447491                                 mps.getObjCoefficients(),
     
    583627    printf("Total time %g seconds\n",timeTaken);
    584628  }
     629  else {
     630    testingMessage( "***Skipped Testing on netlib    ***\n" );
     631    testingMessage( "***use -netlib to test class***\n" );
     632  }
    585633 
    586634  testingMessage( "All tests completed successfully\n" );
     
    600648// test factorization methods and simplex method and simple barrier
    601649void
    602 ClpSimplexUnitTest(const std::string & directory)
     650ClpSimplexUnitTest(const std::string & mpsDir,
     651                   const std::string & netlibDir)
    603652{
    604653 
     
    721770  {   
    722771    CoinMpsIO m;
    723     std::string fn = directory+"exmip1";
     772    std::string fn = mpsDir+"exmip1";
    724773    m.readMps(fn.c_str(),"mps");
    725774    ClpSimplex solution;
     
    741790  {   
    742791    CoinMpsIO m;
    743     std::string fn = directory+"exmip1";
     792    std::string fn = mpsDir+"exmip1";
    744793    //fn = "Test/subGams4";
    745794    m.readMps(fn.c_str(),"mps");
     
    792841  {   
    793842    CoinMpsIO m;
    794     std::string fn = directory+"exmip1";
     843    std::string fn = mpsDir+"exmip1";
    795844    m.readMps(fn.c_str(),"mps");
    796845    ClpSimplex model;
     
    851900  {   
    852901    CoinMpsIO m;
    853     std::string fn = directory+"exmip1";
     902    std::string fn = mpsDir+"exmip1";
    854903    m.readMps(fn.c_str(),"mps");
    855904    ClpSimplex model;
     
    9541003  {   
    9551004    CoinMpsIO m;
    956     std::string fn = directory+"finnis";
     1005    std::string fn = mpsDir+"finnis";
    9571006    int returnCode = m.readMps(fn.c_str(),"mps");
    9581007    if (returnCode) {
    9591008      // probable cause is that gz not there
    960       fprintf(stderr,"Unable to open finnis.mps in %s!\n", directory.c_str());
     1009      fprintf(stderr,"Unable to open finnis.mps in %s\n", mpsDir.c_str());
    9611010      fprintf(stderr,"Most probable cause is finnis.mps is gzipped i.e. finnis.mps.gz and libz has not been activated\n");
    9621011      fprintf(stderr,"Either gunzip files or edit Makefiles/Makefile.location to get libz\n");
     
    9841033  {   
    9851034    CoinMpsIO m;
    986     std::string fn = directory+"afiro";
     1035    std::string fn = mpsDir+"afiro";
    9871036    m.readMps(fn.c_str(),"mps");
    9881037    ClpSimplex solution;
     
    10711120  {   
    10721121    CoinMpsIO m;
    1073     std::string fn = directory+"brandy";
     1122    std::string fn = mpsDir+"brandy";
    10741123    m.readMps(fn.c_str(),"mps");
    10751124    ClpSimplex solution;
     
    11431192  {   
    11441193    CoinMpsIO m;
    1145     std::string fn = directory+"brandy";
     1194    std::string fn = mpsDir+"brandy";
    11461195    m.readMps(fn.c_str(),"mps");
    11471196    ClpSimplex solution;
     
    12321281  {   
    12331282    CoinMpsIO m;
    1234     std::string fn = directory+"brandy";
     1283    std::string fn = mpsDir+"brandy";
    12351284    m.readMps(fn.c_str(),"mps");
    12361285    ClpSimplex solution;
     
    14111460  {
    14121461    CoinMpsIO m;
    1413     std::string fn = directory+"exmip1";
     1462    std::string fn = mpsDir+"exmip1";
    14141463    m.readMps(fn.c_str(),"mps");
    14151464    ClpInterior solution;
     
    14231472#define QUADRATIC
    14241473  if (1) {   
    1425     std::string fn = directory+"input.130";
     1474    std::string fn = mpsDir+"input.130";
    14261475    int numberColumns;
    14271476    int numberRows;
     
    14291478    FILE * fp = fopen(fn.c_str(),"r");
    14301479    if (!fp) {
    1431       fprintf(stderr,"Unable to open file input.130 in directory %s\n",
    1432               directory.c_str());
     1480      // Try in Data/Sample
     1481      fn = "Data/Sample/input.130";
     1482      fp = fopen(fn.c_str(),"r");
     1483    }
     1484    if (!fp) {
     1485      fprintf(stderr,"Unable to open file input.130 in mpsDir or Data/Sample directory\n");
    14331486    } else {
    14341487      int problem;
     
    15961649  if (1) {   
    15971650    CoinMpsIO m;
    1598     std::string fn = directory+"exmip1";
     1651    std::string fn = mpsDir+"exmip1";
    15991652    m.readMps(fn.c_str(),"mps");
    16001653    ClpSimplex solution;
     
    16411694  if (1) {   
    16421695    CoinMpsIO m;
    1643     std::string fn = directory+"share2qp";
     1696    std::string fn = mpsDir+"share2qp";
    16441697    //fn = "share2qpb";
    16451698    m.readMps(fn.c_str(),"mps");
  • branches/BSP/trunk/Clp/test/Makefile.am

    r1073 r1075  
    1515# We are using the CLP solver executable to do the unit test
    1616test: ../src/clp$(EXEEXT)
    17         ../src/clp$(EXEEXT) -directory ../../Data/Sample -unitTest
    1817        if test x"$(NETLIBDIR)" != x; then \
    19                 ../src/clp$(EXEEXT) -directory $(NETLIBDIR) -netlib -netlibp ; \
     18                ../src/clp$(EXEEXT) -directory $(NETLIBDIR) -unitTest -netlib; \
     19        else \
     20                ../src/clp$(EXEEXT) -unitTest; \
    2021        fi
    2122
  • branches/BSP/trunk/Clp/test/Makefile.in

    r1073 r1075  
    371371# We are using the CLP solver executable to do the unit test
    372372test: ../src/clp$(EXEEXT)
    373         ../src/clp$(EXEEXT) -directory ../../Data/Sample -unitTest
    374373        if test x"$(NETLIBDIR)" != x; then \
    375                 ../src/clp$(EXEEXT) -directory $(NETLIBDIR) -netlib -netlibp ; \
     374                ../src/clp$(EXEEXT) -directory $(NETLIBDIR) -unitTest -netlib; \
     375        else \
     376                ../src/clp$(EXEEXT) -unitTest; \
    376377        fi
    377378
Note: See TracChangeset for help on using the changeset viewer.