Changeset 1227


Ignore:
Timestamp:
Jul 9, 2008 1:29:55 PM (12 years ago)
Author:
forrest
Message:

for getting many solutions

File:
1 edited

Legend:

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

    r1226 r1227  
    15941594  //#define COMPUTE_INT_INFEAS
    15951595#ifdef COMPUTE_INT_INFEAS
    1596   if (algorithm_>0&&integerType_&&!nonLinearCost_->numberInfeasibilities()) {
    1597     if (fabs(theta_)>1.0e-6||!numberIterations_) {
    1598       int numberFixed=0;
    1599       int numberUnsat=0;
    1600       int numberSat=0;
    1601       double sumUnsat=0.0;
    1602       double tolerance = 10.0*primalTolerance_;
    1603       double mostAway=0.0;
    1604       int iAway=-1;
    1605       for (int i=0;i<numberColumns_;i++) {
    1606         if (upper_[i]>lower_[i]) {
    1607           double value = solution_[i];
    1608           if (value>lower_[i]+tolerance&&
    1609               value<upper_[i]-tolerance) {
    1610             if (columnScale_)
    1611               value *= columnScale_[i];
    1612             double closest = floor(value+0.5);
    1613             // problem may be perturbed so relax test
    1614             if (fabs(value-closest)>1.0e-4) {
    1615               numberUnsat++;
    1616               sumUnsat += fabs(value-closest);
    1617               if (mostAway<fabs(value-closest)) {
    1618                 mostAway=fabs(value-closest);
    1619                 iAway=i;
     1596  if (userPointer_) {
     1597    if (algorithm_>0&&integerType_&&!nonLinearCost_->numberInfeasibilities()) {
     1598      if (fabs(theta_)>1.0e-6||!numberIterations_) {
     1599        // For saving solutions
     1600        typedef struct {
     1601          int numberSolutions;
     1602          int maximumSolutions;
     1603          int numberColumns;
     1604          double ** solution;
     1605        } clpSolution;
     1606        clpSolution * solution = (clpSolution *) userPointer_;
     1607        if (solution->numberSolutions==solution->maximumSolutions) {
     1608          int n =  solution->maximumSolutions;
     1609          int n2 = (n*3)/2+10;
     1610          solution->maximumSolutions=n2;
     1611          double ** temp = new double * [n2];
     1612          for (int i=0;i<n;i++)
     1613            temp[i]=solution->solution[i];
     1614          delete [] solution->solution;
     1615          solution->solution=temp;
     1616        }
     1617        assert (numberColumns_==solution->numberColumns);
     1618        double * sol = new double [numberColumns_];
     1619        solution->solution[solution->numberSolutions++]=sol;
     1620        int numberFixed=0;
     1621        int numberUnsat=0;
     1622        int numberSat=0;
     1623        double sumUnsat=0.0;
     1624        double tolerance = 10.0*primalTolerance_;
     1625        double mostAway=0.0;
     1626        int iAway=-1;
     1627        for (int i=0;i<numberColumns_;i++) {
     1628          // Save anyway
     1629          sol[i] = columnScale_ ? solution_[i]*columnScale_[i] : solution_[i];
     1630          // rest is optional
     1631          if (upper_[i]>lower_[i]) {
     1632            double value = solution_[i];
     1633            if (value>lower_[i]+tolerance&&
     1634                value<upper_[i]-tolerance&&integerType_[i]) {
     1635              // may have to modify value if scaled
     1636              if (columnScale_)
     1637                value *= columnScale_[i];
     1638              double closest = floor(value+0.5);
     1639              // problem may be perturbed so relax test
     1640              if (fabs(value-closest)>1.0e-4) {
     1641                numberUnsat++;
     1642                sumUnsat += fabs(value-closest);
     1643                if (mostAway<fabs(value-closest)) {
     1644                  mostAway=fabs(value-closest);
     1645                  iAway=i;
     1646                }
     1647              } else {
     1648                numberSat++;
    16201649              }
    16211650            } else {
     
    16231652            }
    16241653          } else {
    1625             numberSat++;
     1654            numberFixed++;
    16261655          }
    1627         } else {
    1628           numberFixed++;
    1629         }
    1630       }
    1631       printf("iteration %d, %d unsatisfied (%g,%g), %d fixed, %d satisfied\n",
    1632              numberIterations_,numberUnsat,sumUnsat,mostAway,numberFixed,numberSat);
     1656        }
     1657        printf("iteration %d, %d unsatisfied (%g,%g), %d fixed, %d satisfied\n",
     1658               numberIterations_,numberUnsat,sumUnsat,mostAway,numberFixed,numberSat);
     1659      }
    16331660    }
    16341661  }
Note: See TracChangeset for help on using the changeset viewer.