Changeset 1596 for trunk/Clp


Ignore:
Timestamp:
Aug 31, 2010 5:38:22 AM (9 years ago)
Author:
forrest
Message:

minor changes for making feasible

Location:
trunk/Clp/src
Files:
2 edited

Legend:

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

    r1525 r1596  
    28802880     parameters[numberParameters-1].append("1000");
    28812881     parameters[numberParameters-1].append("10000");
     2882     parameters[numberParameters-1].append("dj");
     2883     parameters[numberParameters-1].append("djbefore");
    28822884     parameters[numberParameters-1].setLonghelp
    28832885     (
  • trunk/Clp/src/ClpPresolve.cpp

    r1551 r1596  
    15861586          result = 0;
    15871587
    1588           if (prob.status_ == 0 && paction_) {
     1588          bool fixInfeasibility = (prob.presolveOptions_&16384)!=0;
     1589          bool hasSolution = (prob.presolveOptions_&32768)!=0;
     1590          if (prob.status_ == 0 && paction_ && (!hasSolution || !fixInfeasibility)) {
    15891591               // Looks feasible but double check to see if anything slipped through
    15901592               int n            = prob.ncols_;
     
    15951597               for (i = 0; i < n; i++) {
    15961598                    if (up[i] < lo[i]) {
    1597                          if (up[i] < lo[i] - 1.0e-8) {
     1599                         if (up[i] < lo[i] - feasibilityTolerance && !fixInfeasibility) {
    15981600                              // infeasible
    15991601                              prob.status_ = 1;
     
    16101612               for (i = 0; i < n; i++) {
    16111613                    if (up[i] < lo[i]) {
    1612                          if (up[i] < lo[i] - 1.0e-8) {
     1614                         if (up[i] < lo[i] - feasibilityTolerance && !fixInfeasibility) {
    16131615                              // infeasible
    16141616                              prob.status_ = 1;
     
    16281630               CoinMemcpyN(          prob.colstat_, prob.ncols_, presolvedModel_->statusArray());
    16291631               CoinMemcpyN(          prob.rowstat_, prob.nrows_, presolvedModel_->statusArray() + prob.ncols_);
     1632               if (fixInfeasibility && hasSolution) {
     1633                 // Looks feasible but double check to see if anything slipped through
     1634                 int n          = prob.ncols_;
     1635                 double * lo = prob.clo_;
     1636                 double * up = prob.cup_;
     1637                 double * rsol = prob.acts_;
     1638                 //memset(prob.acts_,0,prob.nrows_*sizeof(double));
     1639                 presolvedModel_->matrix()->times(prob.sol_,rsol);
     1640                 int i;
     1641                 
     1642                 for (i = 0; i < n; i++) {
     1643                   double gap=up[i]-lo[i];
     1644                   if (rsol[i]<lo[i]-feasibilityTolerance&&fabs(rsol[i]-lo[i])<1.0e-3) {
     1645                     lo[i]=rsol[i];
     1646                     if (gap<1.0e5)
     1647                       up[i]=lo[i]+gap;
     1648                   } else if (rsol[i]>up[i]+feasibilityTolerance&&fabs(rsol[i]-up[i])<1.0e-3) {
     1649                     up[i]=rsol[i];
     1650                     if (gap<1.0e5)
     1651                       lo[i]=up[i]-gap;
     1652                   }
     1653                   if (up[i] < lo[i]) {
     1654                     up[i] = lo[i];
     1655                   }
     1656                 }
     1657               }
     1658
     1659               int n = prob.nrows_;
     1660               double * lo = prob.rlo_;
     1661               double * up = prob.rup_;
     1662
     1663               for (i = 0; i < n; i++) {
     1664                    if (up[i] < lo[i]) {
     1665                         if (up[i] < lo[i] - feasibilityTolerance && !fixInfeasibility) {
     1666                              // infeasible
     1667                              prob.status_ = 1;
     1668                         } else {
     1669                              up[i] = lo[i];
     1670                         }
     1671                    }
     1672               }
    16301673               delete [] prob.sol_;
    16311674               delete [] prob.acts_;
Note: See TracChangeset for help on using the changeset viewer.