Ignore:
Timestamp:
May 24, 2010 9:03:59 PM (8 years ago)
Author:
mjs
Message:

Format examples with 'astyle -A4 -p'.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/examples/addColumns.cpp

    r1370 r1552  
    1515int main (int argc, const char *argv[])
    1616{
    17   {
    18     // Empty model
    19     ClpSimplex  model;
    20    
    21     // Bounds on rows - as dense vector
    22     double lower[]={2.0,1.0};
    23     double upper[]={COIN_DBL_MAX,1.0};
    24    
    25     // Create space for 2 rows
    26     model.resize(2,0);
    27     // Fill in
    28     int i;
    29     // Now row bounds
    30     for (i=0;i<2;i++) {
    31       model.setRowLower(i,lower[i]);
    32       model.setRowUpper(i,upper[i]);
    33     }
    34     // Now add column 1
    35     int column1Index[] = {0,1};
    36     double column1Value[]={1.0,1.0};
    37     model.addColumn(2,column1Index,column1Value,
    38                     0.0,2,1.0);
    39     // Now add column 2
    40     int column2Index[] = {1};
    41     double column2Value[]={-5.0};
    42     model.addColumn(1,column2Index,column2Value,
    43                     0.0,COIN_DBL_MAX,0.0);
    44     // Now add column 3
    45     int column3Index[] = {0,1};
    46     double column3Value[]={1.0,1.0};
    47     model.addColumn(2,column3Index,column3Value,
    48                     0.0,4.0,4.0);
    49     // solve
    50     model.dual();
    51    
    52     /*
    53       Adding one column at a time has a significant overhead so let's
    54       try a more complicated but faster way
    55      
    56       First time adding in 10000 columns one by one
    57      
    58     */
    59     model.allSlackBasis();
    60     ClpSimplex modelSave=model;
    61     double time1 = CoinCpuTime();
    62     int k;
    63     for ( k=0;k<10000;k++) {
    64       int column2Index[] = {0,1};
    65       double column2Value[]={1.0,-5.0};
    66       model.addColumn(2,column2Index,column2Value,
    67                       0.0,1.0,10000.0);
    68     }
    69     printf("Time for 10000 addColumn is %g\n",CoinCpuTime()-time1);
    70     model.dual();
    71     model=modelSave;
    72     // Now use build
    73     CoinBuild buildObject;
    74     time1 = CoinCpuTime();
    75     for ( k=0;k<100000;k++) {
    76       int column2Index[] = {0,1};
    77       double column2Value[]={1.0,-5.0};
    78       buildObject.addColumn(2,column2Index,column2Value,
    79                             0.0,1.0,10000.0);
    80     }
    81     model.addColumns(buildObject);
    82     printf("Time for 100000 addColumn using CoinBuild is %g\n",CoinCpuTime()-time1);
    83     model.dual();
    84     model=modelSave;
    85     // Now use build +-1
    86     int del[]={0,1,2};
    87     model.deleteColumns(3,del);
    88     CoinBuild buildObject2;
    89     time1 = CoinCpuTime();
    90     for ( k=0;k<10000;k++) {
    91       int column2Index[] = {0,1};
    92       double column2Value[]={1.0,1.0,-1.0};
    93       int bias = k&1;
    94       buildObject2.addColumn(2,column2Index,column2Value+bias,
    95                              0.0,1.0,10000.0);
    96     }
    97     model.addColumns(buildObject2,true);
    98     printf("Time for 10000 addColumn using CoinBuild+-1 is %g\n",CoinCpuTime()-time1);
    99     model.dual();
    100     model=modelSave;
    101     // Now use build +-1
    102     model.deleteColumns(3,del);
    103     CoinModel modelObject2;
    104     time1 = CoinCpuTime();
    105     for ( k=0;k<10000;k++) {
    106       int column2Index[] = {0,1};
    107       double column2Value[]={1.0,1.0,-1.0};
    108       int bias = k&1;
    109       modelObject2.addColumn(2,column2Index,column2Value+bias,
    110                              0.0,1.0,10000.0);
    111     }
    112     model.addColumns(modelObject2,true);
    113     printf("Time for 10000 addColumn using CoinModel+-1 is %g\n",CoinCpuTime()-time1);
    114     //model.writeMps("xx.mps");
    115     model.dual();
    116     model=modelSave;
    117     // Now use model
    118     CoinModel modelObject;
    119     time1 = CoinCpuTime();
    120     for ( k=0;k<100000;k++) {
    121       int column2Index[] = {0,1};
    122       double column2Value[]={1.0,-5.0};
    123       modelObject.addColumn(2,column2Index,column2Value,
    124                             0.0,1.0,10000.0);
    125     }
    126     model.addColumns(modelObject);
    127     printf("Time for 100000 addColumn using CoinModel is %g\n",CoinCpuTime()-time1);
    128     model.dual();
    129     // Print column solution Just first 3 columns
    130     int numberColumns = model.numberColumns();
    131     numberColumns = CoinMin(3,numberColumns);
    132    
    133     // Alternatively getColSolution()
    134     double * columnPrimal = model.primalColumnSolution();
    135     // Alternatively getReducedCost()
    136     double * columnDual = model.dualColumnSolution();
    137     // Alternatively getColLower()
    138     double * columnLower = model.columnLower();  // Alternatively getColUpper()
    139     double * columnUpper = model.columnUpper();
    140     // Alternatively getObjCoefficients()
    141     double * columnObjective = model.objective();
    142    
    143     int iColumn;
    144    
    145     std::cout<<"               Primal          Dual         Lower         Upper          Cost"
    146              <<std::endl;
    147    
    148     for (iColumn=0;iColumn<numberColumns;iColumn++) {
    149       double value;
    150       std::cout<<std::setw(6)<<iColumn<<" ";
    151       value = columnPrimal[iColumn];
    152       if (fabs(value)<1.0e5)
    153         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
    154       else
    155         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
    156       value = columnDual[iColumn];
    157       if (fabs(value)<1.0e5)
    158         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
    159       else
    160         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
    161       value = columnLower[iColumn];
    162       if (fabs(value)<1.0e5)
    163         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
    164       else
    165         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
    166       value = columnUpper[iColumn];
    167       if (fabs(value)<1.0e5)
    168         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
    169       else
    170         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
    171       value = columnObjective[iColumn];
    172       if (fabs(value)<1.0e5)
    173         std::cout<<setiosflags(std::ios::fixed|std::ios::showpoint)<<std::setw(14)<<value;
    174       else
    175         std::cout<<setiosflags(std::ios::scientific)<<std::setw(14)<<value;
    176      
    177       std::cout<<std::endl;
    178     }
    179     std::cout<<"--------------------------------------"<<std::endl;
    180   }
    181   {
    182     // Now copy a model
    183     ClpSimplex  model;
    184     int status;
    185     if (argc<2)
    186       status=model.readMps("../../Data/Sample/p0033.mps");
    187     else
    188       status=model.readMps(argv[1]);
    189     if (status) {
    190       printf("errors on input\n");
    191       exit(77);
    192     }
    193     model.initialSolve();
    194     int numberRows = model.numberRows();
    195     int numberColumns = model.numberColumns();
    196     const double * rowLower = model.rowLower();
    197     const double * rowUpper = model.rowUpper();
    198 
    199     // Start off model2
    200     ClpSimplex model2;
    201     model2.addRows(numberRows,rowLower,rowUpper,NULL);
    202 
    203     // Build object
    204     CoinBuild buildObject;
    205     // Add columns
    206     const double * columnLower = model.columnLower();
    207     const double * columnUpper = model.columnUpper();
    208     const double * objective = model.objective();
    209     CoinPackedMatrix * matrix = model.matrix();
    210     const int * row = matrix->getIndices();
    211     const int * columnLength = matrix->getVectorLengths();
    212     const CoinBigIndex * columnStart = matrix->getVectorStarts();
    213     const double * elementByColumn = matrix->getElements();
    214     for (int iColumn=0;iColumn<numberColumns;iColumn++) {
    215       CoinBigIndex start = columnStart[iColumn];
    216       buildObject.addColumn(columnLength[iColumn],row+start,elementByColumn+start,
    217                             columnLower[iColumn],columnUpper[iColumn],
    218                             objective[iColumn]);
    219     }
    220 
    221     // add in
    222     model2.addColumns(buildObject);
    223     model2.initialSolve();
    224   }
    225   {
    226     // and again
    227     ClpSimplex  model;
    228     int status;
    229     if (argc<2)
    230       status=model.readMps("../../Data/Sample/p0033.mps");
    231     else
    232       status=model.readMps(argv[1]);
    233     if (status) {
    234       printf("errors on input\n");
    235       exit(77);
    236     }
    237     model.initialSolve();
    238     int numberRows = model.numberRows();
    239     int numberColumns = model.numberColumns();
    240     const double * rowLower = model.rowLower();
    241     const double * rowUpper = model.rowUpper();
    242 
    243     // Build object
    244     CoinModel buildObject;
    245     for (int iRow=0;iRow<numberRows;iRow++)
    246       buildObject.setRowBounds(iRow,rowLower[iRow],rowUpper[iRow]);
    247 
    248     // Add columns
    249     const double * columnLower = model.columnLower();
    250     const double * columnUpper = model.columnUpper();
    251     const double * objective = model.objective();
    252     CoinPackedMatrix * matrix = model.matrix();
    253     const int * row = matrix->getIndices();
    254     const int * columnLength = matrix->getVectorLengths();
    255     const CoinBigIndex * columnStart = matrix->getVectorStarts();
    256     const double * elementByColumn = matrix->getElements();
    257     for (int iColumn=0;iColumn<numberColumns;iColumn++) {
    258       CoinBigIndex start = columnStart[iColumn];
    259       buildObject.addColumn(columnLength[iColumn],row+start,elementByColumn+start,
    260                             columnLower[iColumn],columnUpper[iColumn],
    261                             objective[iColumn]);
    262     }
    263 
    264     // add in
    265     ClpSimplex model2;
    266     model2.loadProblem(buildObject);
    267     model2.initialSolve();
    268   }
    269   return 0;
    270 }   
     17     {
     18          // Empty model
     19          ClpSimplex  model;
     20
     21          // Bounds on rows - as dense vector
     22          double lower[] = {2.0, 1.0};
     23          double upper[] = {COIN_DBL_MAX, 1.0};
     24
     25          // Create space for 2 rows
     26          model.resize(2, 0);
     27          // Fill in
     28          int i;
     29          // Now row bounds
     30          for (i = 0; i < 2; i++) {
     31               model.setRowLower(i, lower[i]);
     32               model.setRowUpper(i, upper[i]);
     33          }
     34          // Now add column 1
     35          int column1Index[] = {0, 1};
     36          double column1Value[] = {1.0, 1.0};
     37          model.addColumn(2, column1Index, column1Value,
     38                          0.0, 2, 1.0);
     39          // Now add column 2
     40          int column2Index[] = {1};
     41          double column2Value[] = { -5.0};
     42          model.addColumn(1, column2Index, column2Value,
     43                          0.0, COIN_DBL_MAX, 0.0);
     44          // Now add column 3
     45          int column3Index[] = {0, 1};
     46          double column3Value[] = {1.0, 1.0};
     47          model.addColumn(2, column3Index, column3Value,
     48                          0.0, 4.0, 4.0);
     49          // solve
     50          model.dual();
     51
     52          /*
     53            Adding one column at a time has a significant overhead so let's
     54            try a more complicated but faster way
     55
     56            First time adding in 10000 columns one by one
     57
     58          */
     59          model.allSlackBasis();
     60          ClpSimplex modelSave = model;
     61          double time1 = CoinCpuTime();
     62          int k;
     63          for ( k = 0; k < 10000; k++) {
     64               int column2Index[] = {0, 1};
     65               double column2Value[] = {1.0, -5.0};
     66               model.addColumn(2, column2Index, column2Value,
     67                               0.0, 1.0, 10000.0);
     68          }
     69          printf("Time for 10000 addColumn is %g\n", CoinCpuTime() - time1);
     70          model.dual();
     71          model = modelSave;
     72          // Now use build
     73          CoinBuild buildObject;
     74          time1 = CoinCpuTime();
     75          for ( k = 0; k < 100000; k++) {
     76               int column2Index[] = {0, 1};
     77               double column2Value[] = {1.0, -5.0};
     78               buildObject.addColumn(2, column2Index, column2Value,
     79                                     0.0, 1.0, 10000.0);
     80          }
     81          model.addColumns(buildObject);
     82          printf("Time for 100000 addColumn using CoinBuild is %g\n", CoinCpuTime() - time1);
     83          model.dual();
     84          model = modelSave;
     85          // Now use build +-1
     86          int del[] = {0, 1, 2};
     87          model.deleteColumns(3, del);
     88          CoinBuild buildObject2;
     89          time1 = CoinCpuTime();
     90          for ( k = 0; k < 10000; k++) {
     91               int column2Index[] = {0, 1};
     92               double column2Value[] = {1.0, 1.0, -1.0};
     93               int bias = k & 1;
     94               buildObject2.addColumn(2, column2Index, column2Value + bias,
     95                                      0.0, 1.0, 10000.0);
     96          }
     97          model.addColumns(buildObject2, true);
     98          printf("Time for 10000 addColumn using CoinBuild+-1 is %g\n", CoinCpuTime() - time1);
     99          model.dual();
     100          model = modelSave;
     101          // Now use build +-1
     102          model.deleteColumns(3, del);
     103          CoinModel modelObject2;
     104          time1 = CoinCpuTime();
     105          for ( k = 0; k < 10000; k++) {
     106               int column2Index[] = {0, 1};
     107               double column2Value[] = {1.0, 1.0, -1.0};
     108               int bias = k & 1;
     109               modelObject2.addColumn(2, column2Index, column2Value + bias,
     110                                      0.0, 1.0, 10000.0);
     111          }
     112          model.addColumns(modelObject2, true);
     113          printf("Time for 10000 addColumn using CoinModel+-1 is %g\n", CoinCpuTime() - time1);
     114          //model.writeMps("xx.mps");
     115          model.dual();
     116          model = modelSave;
     117          // Now use model
     118          CoinModel modelObject;
     119          time1 = CoinCpuTime();
     120          for ( k = 0; k < 100000; k++) {
     121               int column2Index[] = {0, 1};
     122               double column2Value[] = {1.0, -5.0};
     123               modelObject.addColumn(2, column2Index, column2Value,
     124                                     0.0, 1.0, 10000.0);
     125          }
     126          model.addColumns(modelObject);
     127          printf("Time for 100000 addColumn using CoinModel is %g\n", CoinCpuTime() - time1);
     128          model.dual();
     129          // Print column solution Just first 3 columns
     130          int numberColumns = model.numberColumns();
     131          numberColumns = CoinMin(3, numberColumns);
     132
     133          // Alternatively getColSolution()
     134          double * columnPrimal = model.primalColumnSolution();
     135          // Alternatively getReducedCost()
     136          double * columnDual = model.dualColumnSolution();
     137          // Alternatively getColLower()
     138          double * columnLower = model.columnLower();  // Alternatively getColUpper()
     139          double * columnUpper = model.columnUpper();
     140          // Alternatively getObjCoefficients()
     141          double * columnObjective = model.objective();
     142
     143          int iColumn;
     144
     145          std::cout << "               Primal          Dual         Lower         Upper          Cost"
     146                    << std::endl;
     147
     148          for (iColumn = 0; iColumn < numberColumns; iColumn++) {
     149               double value;
     150               std::cout << std::setw(6) << iColumn << " ";
     151               value = columnPrimal[iColumn];
     152               if (fabs(value) < 1.0e5)
     153                    std::cout << setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(14) << value;
     154               else
     155                    std::cout << setiosflags(std::ios::scientific) << std::setw(14) << value;
     156               value = columnDual[iColumn];
     157               if (fabs(value) < 1.0e5)
     158                    std::cout << setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(14) << value;
     159               else
     160                    std::cout << setiosflags(std::ios::scientific) << std::setw(14) << value;
     161               value = columnLower[iColumn];
     162               if (fabs(value) < 1.0e5)
     163                    std::cout << setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(14) << value;
     164               else
     165                    std::cout << setiosflags(std::ios::scientific) << std::setw(14) << value;
     166               value = columnUpper[iColumn];
     167               if (fabs(value) < 1.0e5)
     168                    std::cout << setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(14) << value;
     169               else
     170                    std::cout << setiosflags(std::ios::scientific) << std::setw(14) << value;
     171               value = columnObjective[iColumn];
     172               if (fabs(value) < 1.0e5)
     173                    std::cout << setiosflags(std::ios::fixed | std::ios::showpoint) << std::setw(14) << value;
     174               else
     175                    std::cout << setiosflags(std::ios::scientific) << std::setw(14) << value;
     176
     177               std::cout << std::endl;
     178          }
     179          std::cout << "--------------------------------------" << std::endl;
     180     }
     181     {
     182          // Now copy a model
     183          ClpSimplex  model;
     184          int status;
     185          if (argc < 2)
     186               status = model.readMps("../../Data/Sample/p0033.mps");
     187          else
     188               status = model.readMps(argv[1]);
     189          if (status) {
     190               printf("errors on input\n");
     191               exit(77);
     192          }
     193          model.initialSolve();
     194          int numberRows = model.numberRows();
     195          int numberColumns = model.numberColumns();
     196          const double * rowLower = model.rowLower();
     197          const double * rowUpper = model.rowUpper();
     198
     199          // Start off model2
     200          ClpSimplex model2;
     201          model2.addRows(numberRows, rowLower, rowUpper, NULL);
     202
     203          // Build object
     204          CoinBuild buildObject;
     205          // Add columns
     206          const double * columnLower = model.columnLower();
     207          const double * columnUpper = model.columnUpper();
     208          const double * objective = model.objective();
     209          CoinPackedMatrix * matrix = model.matrix();
     210          const int * row = matrix->getIndices();
     211          const int * columnLength = matrix->getVectorLengths();
     212          const CoinBigIndex * columnStart = matrix->getVectorStarts();
     213          const double * elementByColumn = matrix->getElements();
     214          for (int iColumn = 0; iColumn < numberColumns; iColumn++) {
     215               CoinBigIndex start = columnStart[iColumn];
     216               buildObject.addColumn(columnLength[iColumn], row + start, elementByColumn + start,
     217                                     columnLower[iColumn], columnUpper[iColumn],
     218                                     objective[iColumn]);
     219          }
     220
     221          // add in
     222          model2.addColumns(buildObject);
     223          model2.initialSolve();
     224     }
     225     {
     226          // and again
     227          ClpSimplex  model;
     228          int status;
     229          if (argc < 2)
     230               status = model.readMps("../../Data/Sample/p0033.mps");
     231          else
     232               status = model.readMps(argv[1]);
     233          if (status) {
     234               printf("errors on input\n");
     235               exit(77);
     236          }
     237          model.initialSolve();
     238          int numberRows = model.numberRows();
     239          int numberColumns = model.numberColumns();
     240          const double * rowLower = model.rowLower();
     241          const double * rowUpper = model.rowUpper();
     242
     243          // Build object
     244          CoinModel buildObject;
     245          for (int iRow = 0; iRow < numberRows; iRow++)
     246               buildObject.setRowBounds(iRow, rowLower[iRow], rowUpper[iRow]);
     247
     248          // Add columns
     249          const double * columnLower = model.columnLower();
     250          const double * columnUpper = model.columnUpper();
     251          const double * objective = model.objective();
     252          CoinPackedMatrix * matrix = model.matrix();
     253          const int * row = matrix->getIndices();
     254          const int * columnLength = matrix->getVectorLengths();
     255          const CoinBigIndex * columnStart = matrix->getVectorStarts();
     256          const double * elementByColumn = matrix->getElements();
     257          for (int iColumn = 0; iColumn < numberColumns; iColumn++) {
     258               CoinBigIndex start = columnStart[iColumn];
     259               buildObject.addColumn(columnLength[iColumn], row + start, elementByColumn + start,
     260                                     columnLower[iColumn], columnUpper[iColumn],
     261                                     objective[iColumn]);
     262          }
     263
     264          // add in
     265          ClpSimplex model2;
     266          model2.loadProblem(buildObject);
     267          model2.initialSolve();
     268     }
     269     return 0;
     270}
Note: See TracChangeset for help on using the changeset viewer.