Changeset 1153


Ignore:
Timestamp:
Jan 18, 2008 10:50:10 AM (12 years ago)
Author:
forrest
Message:

modify example

Location:
trunk/Clp
Files:
2 edited

Legend:

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

    r560 r1153  
    143143    printf("Time for 10000 addRow using CoinModel is %g\n",CoinCpuTime()-time1);
    144144    model.dual();
     145    model.writeMps("b.mps");
     146    // Method using least memory - but most complicated
     147    time1 = CoinCpuTime();
     148    // Assumes we know exact size of model and matrix
     149    // Empty model
     150    ClpSimplex  model2;
     151    {
     152      // Create space for 3 columns and 10000 rows
     153      int numberRows=10000;
     154      int numberColumns=3;
     155      // This is fully dense - but would not normally be so
     156      int numberElements = numberRows*numberColumns;
     157      // Arrays will be set to default values
     158      model2.resize(numberRows,numberColumns);
     159      double * elements = new double [numberElements];
     160      CoinBigIndex * starts = new CoinBigIndex [numberColumns+1];
     161      int * rows = new int [numberElements];;
     162      int * lengths = new int[numberColumns];
     163      // Now fill in - totally unsafe but ....
     164      // no need as defaults to 0.0 double * columnLower = model2.columnLower();
     165      double * columnUpper = model2.columnUpper();
     166      double * objective = model2.objective();
     167      double * rowLower = model2.rowLower();
     168      double * rowUpper = model2.rowUpper();
     169      // Columns - objective was packed
     170      for (k=0;k<2;k++) {
     171        int iColumn = objIndex[k];
     172        objective[iColumn]=objValue[k];
     173      }
     174      for (k=0;k<numberColumns;k++)
     175        columnUpper[k]=upper[k];
     176      // Rows
     177      for (k=0;k<numberRows;k++) {
     178        rowLower[k]=1.0;
     179        rowUpper[k]=1.0;
     180      }
     181      // Now elements
     182      double row2Value[]={1.0,-5.0,1.0};
     183      CoinBigIndex put=0;
     184      for (k=0;k<numberColumns;k++) {
     185        starts[k]=put;
     186        lengths[k]=numberRows;
     187        double value=row2Value[k];
     188        for (int i=0;i<numberRows;i++) {
     189          rows[put]=i;
     190          elements[put]=value;
     191          put++;
     192        }
     193      }
     194      starts[numberColumns]=put;
     195      // assign to matrix
     196      CoinPackedMatrix * matrix = new CoinPackedMatrix(true,0.0,0.0);
     197      matrix->assignMatrix(true,numberRows,numberColumns,numberElements,
     198                           elements,rows,starts,lengths);
     199      ClpPackedMatrix * clpMatrix = new ClpPackedMatrix(matrix);
     200      model2.replaceMatrix(clpMatrix,true);
     201      printf("Time for 10000 addRow using hand written code is %g\n",CoinCpuTime()-time1);
     202      // If matrix is really big could switch off creation of row copy
     203      // model2.setSpecialOptions(256);
     204    }
     205    model2.dual();
     206    model2.writeMps("a.mps");
    145207    // Print column solution
    146208    int numberColumns = model.numberColumns();
  • trunk/Clp/src/ClpModel.cpp

    r1152 r1153  
    15181518    }
    15191519#endif
    1520     //if (elements)
    1521     matrix_->appendMatrix(number,0,rowStarts,columns,elements);
     1520    if (rowStarts)
     1521      matrix_->appendMatrix(number,0,rowStarts,columns,elements);
    15221522  }
    15231523}
Note: See TracChangeset for help on using the changeset viewer.