Changeset 1835


Ignore:
Timestamp:
Dec 13, 2011 11:00:41 AM (8 years ago)
Author:
forrest
Message:

fix if initially infeasible

File:
1 edited

Legend:

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

    r1833 r1835  
    31083108        }
    31093109      }
    3110       assert (!problemStatus_);
    3111       if (nLowerChange||nUpperChange) {
     3110      if (!problemStatus_) {
     3111        if (nLowerChange||nUpperChange) {
    31123112#ifndef ALL_DANTZIG
    3113         // Dantzig
    3114         savePivot = dualRowPivot_;
    3115         dualRowPivot_ = new ClpDualRowDantzig();
    3116         dualRowPivot_->setModel(this);
    3117 #endif
    3118         //for (int i=0;i<numberRows_+numberColumns_;i++)
    3119         //setFakeBound(i, noFake);
    3120         // Now do parametrics
    3121         handler_->message(CLP_PARAMETRICS_STATS, messages_)
    3122           << startingTheta << objectiveValue() << CoinMessageEol;
    3123         bool canSkipFactorization=true;
    3124         while (!returnCode) {
    3125                  paramData.startingTheta=startingTheta;
    3126                  paramData.endingTheta=endingTheta;
    3127                  returnCode = parametricsLoop(paramData,
    3128                                        data,canSkipFactorization);
    3129                  startingTheta=paramData.startingTheta;
    3130                  endingTheta=paramData.endingTheta;
    3131           canSkipFactorization=false;
    3132           if (!returnCode) {
    3133             //startingTheta = endingTheta;
    3134             //endingTheta = saveEndingTheta;
    3135             handler_->message(CLP_PARAMETRICS_STATS, messages_)
    3136               << startingTheta << objectiveValue() << CoinMessageEol;
    3137             if (startingTheta >= endingTheta-primalTolerance_
    3138                 ||problemStatus_==2)
    3139               break;
    3140           } else if (returnCode == -1) {
    3141             // trouble - do external solve
    3142             abort(); //needToDoSomething = true;
    3143           } else if (problemStatus_==1) {
    3144             // can't move any further
    3145             handler_->message(CLP_PARAMETRICS_STATS, messages_)
    3146               << endingTheta << objectiveValue() << CoinMessageEol;
    3147             problemStatus_=0;
     3113          // Dantzig
     3114          savePivot = dualRowPivot_;
     3115          dualRowPivot_ = new ClpDualRowDantzig();
     3116          dualRowPivot_->setModel(this);
     3117#endif
     3118          //for (int i=0;i<numberRows_+numberColumns_;i++)
     3119          //setFakeBound(i, noFake);
     3120          // Now do parametrics
     3121          handler_->message(CLP_PARAMETRICS_STATS, messages_)
     3122            << startingTheta << objectiveValue() << CoinMessageEol;
     3123          bool canSkipFactorization=true;
     3124          while (!returnCode) {
     3125            paramData.startingTheta=startingTheta;
     3126            paramData.endingTheta=endingTheta;
     3127            returnCode = parametricsLoop(paramData,
     3128                                         data,canSkipFactorization);
     3129            startingTheta=paramData.startingTheta;
     3130            endingTheta=paramData.endingTheta;
     3131            canSkipFactorization=false;
     3132            if (!returnCode) {
     3133              //startingTheta = endingTheta;
     3134              //endingTheta = saveEndingTheta;
     3135              handler_->message(CLP_PARAMETRICS_STATS, messages_)
     3136                << startingTheta << objectiveValue() << CoinMessageEol;
     3137              if (startingTheta >= endingTheta-primalTolerance_
     3138                  ||problemStatus_==2)
     3139                break;
     3140            } else if (returnCode == -1) {
     3141              // trouble - do external solve
     3142              abort(); //needToDoSomething = true;
     3143            } else if (problemStatus_==1) {
     3144              // can't move any further
     3145              handler_->message(CLP_PARAMETRICS_STATS, messages_)
     3146                << endingTheta << objectiveValue() << CoinMessageEol;
     3147              problemStatus_=0;
     3148            }
    31483149          }
    31493150        }
    3150       }
    3151       dualBound_ = saveDualBound;
    3152       //reinterpret_cast<ClpSimplexDual *> (this)->gutsOfDual(0, saveDuals, -1, data);
    3153     } else {
    3154       // check if empty
    3155       //if (!numberRows_||!matrix_->getNumElements()) {
     3151        dualBound_ = saveDualBound;
     3152        //reinterpret_cast<ClpSimplexDual *> (this)->gutsOfDual(0, saveDuals, -1, data);
     3153      } else {
     3154        // check if empty
     3155        //if (!numberRows_||!matrix_->getNumElements()) {
    31563156        // success
    31573157#ifdef CLP_USER_DRIVEN
    3158       //theta_ = endingTheta;
    3159       //eventHandler_->event(ClpEventHandler::theta);
    3160 #endif
    3161       //}
     3158        //theta_ = endingTheta;
     3159        //eventHandler_->event(ClpEventHandler::theta);
     3160#endif
     3161        //}
     3162      }
    31623163    }
    31633164    if (problemStatus_==2) {
Note: See TracChangeset for help on using the changeset viewer.