00001
00002
00003
00004 #include "ClpSimplex.hpp"
00005 #include "CoinHelperFunctions.hpp"
00006 #include <iomanip>
00007 #include <cassert>
00008
00009 int main (int argc, const char *argv[])
00010 {
00011 ClpSimplex model;
00012 int status;
00013
00014 if (argc<2) {
00015 status=model.readMps("small.mps",true);
00016 } else {
00017 status=model.readMps(argv[1],true);
00018 }
00019 if (status)
00020 exit(10);
00021
00022
00023
00024
00025
00026
00027 ClpSimplex model2(model);
00028
00029 ClpSimplex model3(model);
00030
00031 int originalNumberColumns = model.numberColumns();
00032 int numberRows = model.numberRows();
00033
00034 int * addStarts = new int [numberRows+1];
00035 int * addRow = new int[numberRows];
00036 double * addElement = new double[numberRows];
00037 double * newUpper = new double[numberRows];
00038 double * newLower = new double[numberRows];
00039
00040 double * lower = model2.rowLower();
00041 double * upper = model2.rowUpper();
00042 int iRow;
00043
00044
00045 for (iRow=0;iRow<numberRows;iRow++) {
00046 newUpper[iRow]=upper[iRow];
00047 upper[iRow]=0.0;
00048 newLower[iRow]=lower[iRow];
00049 lower[iRow]=0.0;
00050 addRow[iRow]=iRow;
00051 addElement[iRow]=-1.0;
00052 addStarts[iRow]=iRow;
00053 }
00054 addStarts[numberRows]=numberRows;
00055 model2.addColumns(numberRows,newLower,newUpper,NULL,
00056 addStarts,addRow,addElement);
00057 delete [] addStarts;
00058 delete [] addRow;
00059 delete [] addElement;
00060 delete [] newLower;
00061 delete [] newUpper;
00062
00063
00064 double * randomArray = new double[numberRows];
00065 for (iRow=0;iRow<numberRows;iRow++)
00066 randomArray[iRow]=CoinDrand48();
00067
00068 model2.transposeTimes(1.0,randomArray,model2.objective());
00069 delete [] randomArray;
00070
00071 model2.primal();
00072
00073 memcpy(model.primalColumnSolution(),model2.primalColumnSolution(),
00074 originalNumberColumns*sizeof(double));
00075 memcpy(model.primalRowSolution(),model2.primalRowSolution(),
00076 numberRows*sizeof(double));
00077 int iColumn;
00078 for (iColumn=0;iColumn<originalNumberColumns;iColumn++)
00079 model.setColumnStatus(iColumn,model2.getColumnStatus(iColumn));
00080
00081 for (iRow=0;iRow<numberRows;iRow++)
00082 model.setRowStatus(iRow,model2.getColumnStatus(iRow+originalNumberColumns));
00083 model.primal(0);
00084
00085
00086 for (iColumn=0;iColumn<originalNumberColumns;iColumn++)
00087 model3.setColumnStatus(iColumn,model2.getColumnStatus(iColumn));
00088
00089 for (iRow=0;iRow<numberRows;iRow++)
00090 model3.setRowStatus(iRow,model2.getColumnStatus(iRow+originalNumberColumns));
00091 model3.primal(0);
00092 return 0;
00093 }