Ignore:
Timestamp:
Jan 21, 2011 1:01:03 PM (10 years ago)
Author:
forrest
Message:

gub

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/ClpSimplexOther.cpp

    r1676 r1677  
    41734173  if (numberGub >= neededGub) {
    41744174    sprintf(message,"%d gub rows", numberGub);
    4175     handler_->message(CLP_GENERAL, messages_)
     4175    handler_->message(CLP_GENERAL2, messages_)
    41764176      << message << CoinMessageEol;
    41774177    int numberNormal = 0;
     
    41834183    if (!numberNormal) {
    41844184      sprintf(message,"Putting back one gub row to make non-empty");
    4185       handler_->message(CLP_GENERAL, messages_)
     4185      handler_->message(CLP_GENERAL2, messages_)
    41864186        << message << CoinMessageEol;
    41874187      rowIsGub[smallestGubRow]=-1;
     
    43994399    sprintf(message,"** Before adding matrix there are %d rows and %d columns",
    44004400           model2->numberRows(), model2->numberColumns());
    4401     handler_->message(CLP_GENERAL, messages_)
     4401    handler_->message(CLP_GENERAL2, messages_)
    44024402      << message << CoinMessageEol;
    44034403    delete [] scaleArray;
     
    44394439            "** While after adding matrix there are %d rows and %d columns",
    44404440            model2->numberRows(), model2->numberColumns());
    4441     handler_->message(CLP_GENERAL, messages_)
     4441    handler_->message(CLP_GENERAL2, messages_)
    44424442      << message << CoinMessageEol;
    44434443    model2->setSpecialOptions(4);    // exactly to bound
     
    44714471  double * solution = primalColumnSolution();
    44724472  const double * originalSolution = original.primalColumnSolution();
     4473  const double * upperSet = gubMatrix->upperSet();
    44734474  int numberSets = gubMatrix->numberSets();
    44744475  const int * startSet = gubMatrix->startSets();
     
    44774478  for (int i=0;i<numberSets;i++) {
    44784479    for (int j=startSet[i];j<startSet[i+1];j++) {
     4480      gubMatrix->setDynamicStatus(j,ClpDynamicMatrix::atLowerBound);
    44794481      int iColumn = whichColumns[j+numberNormal];
    44804482      if (iColumn<numberColumns)
     
    45434545    int iRow = whichRows[numberNonGub+i];
    45444546    if (!numberKey[iRow]) {
    4545       if (original.getRowStatus(iRow)==ClpSimplex::basic) {
     4547      double upper = upperSet[i]-1.0e-7;
     4548      if (original.getRowStatus(iRow)==ClpSimplex::basic)
    45464549        gubMatrix->setStatus(i,ClpSimplex::basic);
    4547       } else {
    4548         // If not at lb make key otherwise one with smallest number els
    4549         double largest=0.0;
    4550         int fewest=numberRows+1;
    4551         int chosen=-1;
    4552         for (int j=startSet[i];j<startSet[i+1];j++) {
    4553           int length=startColumn[j+1]-startColumn[j];
    4554           int iOrig = whichColumns[j+numberNormal];
    4555           double value;
    4556           if (iOrig<numberColumns) {
    4557             value=originalSolution[iOrig]-columnLower[j];
    4558           } else {
    4559             // slack - take value as 0.0 as will win on length
    4560             value=0.0;
    4561           }
    4562           if (value>largest+1.0e-8) {
    4563             largest=value;
    4564             fewest=length;
    4565             chosen=j;
    4566           } else if (fabs(value-largest)<=1.0e-8&&length<fewest) {
    4567             largest=value;
    4568             fewest=length;
    4569             chosen=j;
    4570           }
     4550      // If not at lb make key otherwise one with smallest number els
     4551      double largest=0.0;
     4552      int fewest=numberRows+1;
     4553      int chosen=-1;
     4554      for (int j=startSet[i];j<startSet[i+1];j++) {
     4555        int length=startColumn[j+1]-startColumn[j];
     4556        int iOrig = whichColumns[j+numberNormal];
     4557        double value;
     4558        if (iOrig<numberColumns) {
     4559          value=originalSolution[iOrig]-columnLower[j];
     4560          if (value>upper)
     4561            gubMatrix->setStatus(i,ClpSimplex::atLowerBound);
     4562        } else {
     4563          // slack - take value as 0.0 as will win on length
     4564          value=0.0;
    45714565        }
    4572         assert(chosen>=0);
     4566        if (value>largest+1.0e-8) {
     4567          largest=value;
     4568          fewest=length;
     4569          chosen=j;
     4570        } else if (fabs(value-largest)<=1.0e-8&&length<fewest) {
     4571          largest=value;
     4572          fewest=length;
     4573          chosen=j;
     4574        }
     4575      }
     4576      assert(chosen>=0);
     4577      if (gubMatrix->getStatus(i)!=ClpSimplex::basic) {
    45734578        // set as key
    45744579        for (int j=startSet[i];j<startSet[i+1];j++) {
Note: See TracChangeset for help on using the changeset viewer.