Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members

driver.cpp

00001 // Copyright (C) 2002,2003 International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 
00004 #include "ClpSimplex.hpp"
00005 #include <iomanip>
00006 
00007 int main (int argc, const char *argv[])
00008 {
00009   ClpSimplex  model;
00010   int status;
00011   // Keep names when reading an mps file
00012   if (argc<2)
00013     status=model.readMps("../../Mps/Sample/p0033.mps",true);
00014   else
00015     status=model.readMps(argv[1],true);
00016 
00017   if (status) {
00018     fprintf(stderr,"Bad readMps %s\n",argv[1]);
00019     fprintf(stdout,"Bad readMps %s\n",argv[1]);
00020     exit(1);
00021   }
00022 
00023   if (argc<3 ||!strstr(argv[2],"primal")) {
00024     // Use the dual algorithm unless user said "primal"
00025     model.initialDualSolve();
00026   } else {
00027     model.initialPrimalSolve();
00028   }
00029 
00030   std::string modelName;
00031   model.getStrParam(ClpProbName,modelName);
00032   std::cout<<"Model "<<modelName<<" has "<<model.numberRows()<<" rows and "<<
00033     model.numberColumns()<<" columns"<<std::endl;
00034 
00035   // remove this to print solution
00036 
00037   //exit(0);
00038 
00039   /*
00040     Now to print out solution.  The methods used return modifiable
00041     arrays while the alternative names return const pointers -
00042     which is of course much more virtuous.
00043 
00044     This version just does non-zero columns
00045   
00046    */
00047 #if 0
00048   int numberRows = model.numberRows();
00049 
00050   // Alternatively getRowActivity()
00051   double * rowPrimal = model.primalRowSolution();
00052   // Alternatively getRowPrice()
00053   double * rowDual = model.dualRowSolution();
00054   // Alternatively getRowLower()
00055   double * rowLower = model.rowLower();
00056   // Alternatively getRowUpper()
00057   double * rowUpper = model.rowUpper();
00058   // Alternatively getRowObjCoefficients()
00059   double * rowObjective = model.rowObjective();
00060     
00061   // If we have not kept names (parameter to readMps) this will be 0
00062   assert(model.lengthNames());
00063 
00064   // Row names
00065   const std::vector<std::string> * rowNames = model.rowNames();
00066 
00067 
00068   int iRow;
00069 
00070   std::cout<<"                       Primal          Dual         Lower         Upper        (Cost)"
00071            <<std::endl;
00072 
00073   for (iRow=0;iRow<numberRows;iRow++) {
00074     double value;
00075     std::cout<<std::setw(6)<<iRow<<" "<<std::setw(8)<<(*rowNames)[iRow];
00076     value = rowPrimal[iRow];
00077     if (fabs(value)<1.0e5)
00078       std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00079     else
00080       std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00081     value = rowDual[iRow];
00082     if (fabs(value)<1.0e5)
00083       std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00084     else
00085       std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00086     value = rowLower[iRow];
00087     if (fabs(value)<1.0e5)
00088       std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00089     else
00090       std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00091     value = rowUpper[iRow];
00092     if (fabs(value)<1.0e5)
00093       std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00094     else
00095       std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00096     if (rowObjective) {
00097       value = rowObjective[iRow];
00098       if (fabs(value)<1.0e5)
00099         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00100       else
00101         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00102     }
00103     std::cout<<std::endl;
00104   }
00105 #endif
00106   std::cout<<"--------------------------------------"<<std::endl;
00107 
00108   // Columns
00109 
00110   int numberColumns = model.numberColumns();
00111 
00112   // Alternatively getColSolution()
00113   double * columnPrimal = model.primalColumnSolution();
00114   // Alternatively getReducedCost()
00115   double * columnDual = model.dualColumnSolution();
00116   // Alternatively getColLower()
00117   double * columnLower = model.columnLower();
00118   // Alternatively getColUpper()
00119   double * columnUpper = model.columnUpper();
00120   // Alternatively getObjCoefficients()
00121   double * columnObjective = model.objective();
00122     
00123   // If we have not kept names (parameter to readMps) this will be 0
00124   assert(model.lengthNames());
00125 
00126   // Column names
00127   const std::vector<std::string> * columnNames = model.columnNames();
00128 
00129 
00130   int iColumn;
00131   
00132   std::cout<<"                       Primal          Dual         Lower         Upper          Cost"
00133            <<std::endl;
00134 
00135   for (iColumn=0;iColumn<numberColumns;iColumn++) {
00136     double value;
00137     value = columnPrimal[iColumn];
00138     if (fabs(value)>1.0e-8) {
00139       std::cout<<std::setw(6)<<iColumn<<" "<<std::setw(8)<<(*columnNames)[iColumn];
00140       if (fabs(value)<1.0e5)
00141         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00142       else
00143         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00144       value = columnDual[iColumn];
00145       if (fabs(value)<1.0e5)
00146         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00147       else
00148         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00149       value = columnLower[iColumn];
00150       if (fabs(value)<1.0e5)
00151         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00152       else
00153         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00154       value = columnUpper[iColumn];
00155       if (fabs(value)<1.0e5)
00156         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00157       else
00158         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00159       value = columnObjective[iColumn];
00160       if (fabs(value)<1.0e5)
00161         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
00162       else
00163         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
00164       
00165       std::cout<<std::endl;
00166     }
00167   }
00168   std::cout<<"--------------------------------------"<<std::endl;
00169 
00170   return 0;
00171 }    

Generated on Wed Dec 3 14:37:36 2003 for CLP by doxygen 1.3.5