Ignore:
Timestamp:
Jan 17, 2009 12:52:20 PM (11 years ago)
Author:
forrest
Message:

bit more safety on fake bound handling

File:
1 edited

Legend:

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

    r1321 r1323  
    28142814          setStatus(iSequence,atUpperBound);
    28152815          solution_[iSequence]=0.5*dualBound_;
     2816        }
     2817      } else if (status==basic) {
     2818        // make sure not at fake bound and bounds correct
     2819        setFakeBound(iSequence,ClpSimplexDual::noFake);
     2820        double gap = upper_[iSequence]-lower_[iSequence];
     2821        if (gap>0.5*dualBound_&&gap<2.0*dualBound_) {
     2822          if (iSequence<numberColumns_) {
     2823            if (columnScale_) {
     2824              double multiplier = rhsScale_/columnScale_[iSequence];
     2825              // lower
     2826              double value = columnLower_[iSequence];
     2827              if (value>-1.0e30) {
     2828                value *= multiplier;
     2829              }
     2830              lower_[iSequence]=value;
     2831              // upper
     2832              value = columnUpper_[iSequence];
     2833              if (value<1.0e30) {
     2834                value *= multiplier;
     2835              }
     2836              upper_[iSequence]=value;
     2837            } else {
     2838              lower_[iSequence]=columnLower_[iSequence];;
     2839              upper_[iSequence]=columnUpper_[iSequence];;
     2840            }
     2841          } else {
     2842            int iRow = iSequence-numberColumns_;
     2843            if (rowScale_) {
     2844              // lower
     2845              double multiplier = rhsScale_*rowScale_[iRow];
     2846              double value = rowLower_[iRow];
     2847              if (value>-1.0e30) {
     2848                value *= multiplier;
     2849              }
     2850              lower_[iSequence]=value;
     2851              // upper
     2852              value = rowUpper_[iRow];
     2853              if (value<1.0e30) {
     2854                value *= multiplier;
     2855              }
     2856              upper_[iSequence]=value;
     2857            } else {
     2858              lower_[iSequence]=rowLower_[iRow];;
     2859              upper_[iSequence]=rowUpper_[iRow];;
     2860            }
     2861          }
    28162862        }
    28172863      }
Note: See TracChangeset for help on using the changeset viewer.