Ignore:
Timestamp:
Mar 16, 2009 6:30:25 AM (10 years ago)
Author:
forrest
Message:

chnages to try and make faster

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cbc/src/CbcCutGenerator.cpp

    r1121 r1132  
    4141    timing_(false),
    4242    timeInCutGenerator_(0.0),
     43    inaccuracy_(0),
    4344    numberTimes_(0),
    4445    numberCuts_(0),
     
    6465    timing_(false),
    6566    timeInCutGenerator_(0.0),
     67    inaccuracy_(0),
    6668    numberTimes_(0),
    6769    numberCuts_(0),
     
    110112  timing_ = rhs.timing_;
    111113  timeInCutGenerator_ = rhs.timeInCutGenerator_;
     114  inaccuracy_ = rhs.inaccuracy_;
    112115  numberTimes_ = rhs.numberTimes_;
    113116  numberCuts_ = rhs.numberCuts_;
     
    142145    timing_ = rhs.timing_;
    143146    timeInCutGenerator_ = rhs.timeInCutGenerator_;
     147    inaccuracy_ = rhs.inaccuracy_;
    144148    numberTimes_ = rhs.numberTimes_;
    145149    numberCuts_ = rhs.numberCuts_;
     
    566570      //     nCuts,nEls);
    567571      int nElsNow = solver->getMatrixByCol()->getNumElements();
    568       int nAdd = model_->parentModel() ? 200 : 10000;
    569572      int numberColumns = solver->getNumCols();
    570       int nAdd2 = model_->parentModel() ? 2*numberColumns : 5*numberColumns;
     573      int numberRows = solver->getNumRows();
     574      //double averagePerRow = static_cast<double>(nElsNow)/
     575      //static_cast<double>(numberRows);
     576      int nAdd;
     577      int nAdd2;
     578      int nReasonable;
     579      if (!model_->parentModel()&&depth<2) {
     580        if (inaccuracy_<3) {
     581          nAdd=10000;
     582          if (pass>0&&numberColumns>-500)
     583            nAdd = CoinMin(nAdd,nElsNow+2*numberRows);
     584        } else {
     585          nAdd=10000;
     586          if (pass>0)
     587            nAdd = CoinMin(nAdd,nElsNow+2*numberRows);
     588        }
     589        nAdd2 = 5*numberColumns;
     590        nReasonable = CoinMax(nAdd2,nElsNow/8+nAdd);
     591      } else {
     592        nAdd = 200;
     593        nAdd2 = 2*numberColumns;
     594        nReasonable = CoinMax(nAdd2,nElsNow/8+nAdd);
     595      }
     596      //#define UNS_WEIGHT 0.1
     597#ifdef UNS_WEIGHT
     598      const double * colLower = solver->getColLower();
     599      const double * colUpper = solver->getColUpper();
     600#endif
    571601      if (/*nEls>CoinMax(nAdd2,nElsNow/8+nAdd)*/nCuts&&feasible) {
    572602        //printf("need to remove cuts\n");
    573603        // just add most effective
    574         int nReasonable = CoinMax(nAdd2,nElsNow/8+nAdd);
    575604        int nDelete = nEls - nReasonable;
    576605       
     
    589618            const double * element = thisCut->row().getElements();
    590619            assert (n);
    591             double norm=0.0;
     620#ifdef UNS_WEIGHT
     621            double normU=0.0;
     622            double norm=1.0e-3;
     623            int nU=0;
     624            for (int i=0;i<n;i++) {
     625              double value = element[i];
     626              int iColumn = column[i];
     627              double solValue = solution[iColumn];
     628              sum += value*solValue;
     629              value *= value;
     630              norm += value;
     631              if (solValue>colLower[iColumn]+1.0e-6&&
     632                  solValue<colUpper[iColumn]-1.0e-6) {
     633                normU += value;
     634                nU++;
     635              }
     636            }
     637#if 0
     638            int nS=n-nU;
     639            if (numberColumns>20000) {
     640              if (nS>50) {
     641                double ratio = 50.0/nS;
     642                normU /= ratio;
     643              }
     644            }
     645#endif
     646            norm += UNS_WEIGHT*(normU-norm);
     647#else
     648            double norm=1.0e-3;
    592649            for (int i=0;i<n;i++) {
    593650              double value = element[i];
     
    595652              norm += value*value;
    596653            }
     654#endif
    597655            if (sum>thisCut->ub()) {
    598656              sum= sum-thisCut->ub();
     
    604662            // normalize
    605663            sum /= sqrt(norm);
     664            //sum /= pow(norm,0.3);
    606665            // adjust for length
     666            //sum /= pow(reinterpret_cast<double>(n),0.2);
    607667            //sum /= sqrt((double) n);
    608668            // randomize
Note: See TracChangeset for help on using the changeset viewer.