Changeset 698


Ignore:
Timestamp:
Nov 30, 2005 10:05:38 AM (15 years ago)
Author:
forrest
Message:

for Pierre

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ClpSimplex.cpp

    r696 r698  
    62776277  bool roundAgain = true;
    62786278  int returnCode=0;
     6279  bool updateSolution=true;
    62796280  while (roundAgain) {
    62806281    roundAgain=false;
     
    63096310      directionIn_ = (movement>0) ? 1 :-1;
    63106311    }
     6312    theta_ = movement;
     6313    double oldValueIn = valueIn_;
    63116314    // update primal solution
    63126315    for (i=0;i<number;i++) {
     
    63146317      // get column
    63156318      int ij = pivotVariable_[ii];
    6316       solution_[ij] -= movement*element[ii];
    6317       element[ii]=0.0;
    6318     }
    6319     rowArray_[1]->setNumElements(0);
     6319      double value=element[ii];
     6320      element[ii]= solution_[ij];
     6321      solution_[ij] -= movement*value;
     6322    }
     6323    //rowArray_[1]->setNumElements(0);
    63206324    // see where something went to
    63216325    if (sequenceOut_<0) {
     
    63826386                                                     alpha_);
    63836387    bool takePivot=true;
     6388    // See if Factorization updated
     6389    if (updateStatus) {
     6390      updateSolution=false;
     6391      returnCode=-1;
     6392    }
    63846393    // if no pivots, bad update but reasonable alpha - take and invert
    63856394    if (updateStatus==2&&
     
    63926401      }
    63936402    } else if (updateStatus==2) {
    6394       // major error
    6395       rowArray_[1]->clear();
     6403      // major error - put back solution
     6404      valueIn_=oldValueIn;
     6405      solution_[sequenceIn_]=valueIn_;
     6406      int * index = rowArray_[1]->getIndices();
     6407      int number = rowArray_[1]->getNumElements();
     6408      double * element = rowArray_[1]->denseVector();
     6409      for (i=0;i<number;i++) {
     6410        int ii = index[i];
     6411        // get column
     6412        int ij = pivotVariable_[ii];
     6413        solution_[ij] = element[ii];
     6414      }
     6415      if (sequenceOut_>=0)
     6416        valueOut_=solution_[sequenceOut_];
    63966417      takePivot=false;
    63976418      if (factorization_->pivots()) {
    63986419        // refactorize here
    6399         statusOfProblem();
     6420        int factorStatus = internalFactorize(1);
     6421        if (factorStatus) {
     6422          printf("help in user pivot\n");
     6423          abort();
     6424        }
     6425        gutsOfSolution(NULL,NULL);
    64006426        roundAgain=true;
    64016427      } else {
     
    64126438      returnCode =-1; // factorize now
    64136439    }
     6440    rowArray_[1]->clear();
    64146441    if (takePivot) {
    64156442      int save = algorithm_;
     
    64226449  if (returnCode == -1) {
    64236450    // refactorize here
    6424     statusOfProblem();
    6425   } else {
     6451    int factorStatus = internalFactorize(1);
     6452    if (factorStatus) {
     6453      printf("help in user pivot\n");
     6454      abort();
     6455    }
     6456    updateSolution=true;
     6457  }
     6458  if (updateSolution) {
    64266459    // just for now - recompute anyway
    64276460    gutsOfSolution(NULL,NULL);
Note: See TracChangeset for help on using the changeset viewer.