00001
00002
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
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
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
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #if 0
00048 int numberRows = model.numberRows();
00049
00050
00051 double * rowPrimal = model.primalRowSolution();
00052
00053 double * rowDual = model.dualRowSolution();
00054
00055 double * rowLower = model.rowLower();
00056
00057 double * rowUpper = model.rowUpper();
00058
00059 double * rowObjective = model.rowObjective();
00060
00061
00062 assert(model.lengthNames());
00063
00064
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
00109
00110 int numberColumns = model.numberColumns();
00111
00112
00113 double * columnPrimal = model.primalColumnSolution();
00114
00115 double * columnDual = model.dualColumnSolution();
00116
00117 double * columnLower = model.columnLower();
00118
00119 double * columnUpper = model.columnUpper();
00120
00121 double * columnObjective = model.objective();
00122
00123
00124 assert(model.lengthNames());
00125
00126
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 }