Changeset 424


Ignore:
Timestamp:
Sep 4, 2004 5:22:37 AM (15 years ago)
Author:
forrest
Message:

crossover and better base

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ClpCholeskyBase.cpp

    r423 r424  
    14881488    int sizeThis = choleskyStart_[iRow+1]-choleskyStart_[iRow];
    14891489    if (indexStart_[iRow]==indexStart_[iRow-1]+1&&
    1490         sizeThis==sizeLast-1) {
     1490        sizeThis==sizeLast-1&&
     1491        sizeThis) {
    14911492      // in clique
    14921493      if (!inClique) {
     
    15101511    }
    15111512  }
     1513  //for (iRow=0;iRow<numberRows_;iRow++)
     1514  //clique_[iRow]=0;
    15121515}
    15131516/* Factorize - filling in rowsDropped and returning number dropped */
     
    20932096  int iRow;
    20942097  // minimum size before clique done
    2095 #define MINCLIQUE INT_MAX
     2098  //#define MINCLIQUE INT_MAX
     2099#define MINCLIQUE 3
    20962100  longDouble * work = workDouble_;
    20972101  CoinBigIndex * first = workInteger_;
     
    22452249          for (int kkRow=kRow+1;kkRow<last;kkRow++) {
    22462250            CoinBigIndex j=first[kkRow];
     2251            //int iiRow = choleskyRow_[j+indexStart_[kkRow]-choleskyStart_[kkRow]];
    22472252            longDouble a = sparseFactor_[j];
    22482253            longDouble dValue = d[kkRow]*a;
     
    22542259          nextRow = link_[last-1];
    22552260          link_[last-1]=linkSave;
    2256           int length = end-k+1;
     2261          int length = end-k;
    22572262          for (int i=0;i<length;i++) {
    22582263            int lRow = choleskyRow_[currentIndex++];
  • trunk/ClpPredictorCorrector.cpp

    r414 r424  
    256256              <<saveIteration
    257257              <<CoinMessageEol;
     258            problemStatus_=0; // benefit of doubt
    258259            break;
    259260          }
     
    29122913int ClpPredictorCorrector::updateSolution(double nextGap)
    29132914{
     2915  int numberTotal = numberRows_+numberColumns_;
    29142916  //update pi
    29152917  multiplyAdd(deltaY_,numberRows_,actualDualStep_,dual_,1.0);
     
    30103012  // put next primal into deltaSL_
    30113013  int iColumn;
    3012   for (iColumn=0;iColumn<numberRows_+numberColumns_;iColumn++) {
     3014  int iRow;
     3015  for (iColumn=0;iColumn<numberTotal;iColumn++) {
    30133016    double thisWeight=deltaX_[iColumn];
    30143017    double newPrimal=solution_[iColumn]+1.0*actualPrimalStep_*thisWeight;
    30153018    deltaSL_[iColumn]=newPrimal;
    30163019  }
     3020#if 0
     3021  // nice idea but doesn't work
     3022  multiplyAdd(solution_+numberColumns_,numberRows_,-1.0,errorRegion_,0.0);
     3023  matrix_->times(1.0,solution_,errorRegion_);
     3024  multiplyAdd(deltaSL_+numberColumns_,numberRows_,-1.0,rhsFixRegion_,0.0);
     3025  matrix_->times(1.0,deltaSL_,rhsFixRegion_);
     3026  double newNorm =  maximumAbsElement(deltaSL_,numberTotal);
     3027  double tol = newNorm*primalTolerance();
     3028  bool goneInf=false;
     3029  for (iRow=0;iRow<numberRows_;iRow++) {
     3030    double value=errorRegion_[iRow];
     3031    double valueNew=rhsFixRegion_[iRow];
     3032    if (fabs(value)<tol&&fabs(valueNew)>tol) {
     3033      printf("row %d old %g new %g\n",iRow,value,valueNew);
     3034      goneInf=true;
     3035    }
     3036  }
     3037  if (goneInf) {
     3038    actualPrimalStep_ *= 0.5;
     3039    for (iColumn=0;iColumn<numberTotal;iColumn++) {
     3040      double thisWeight=deltaX_[iColumn];
     3041      double newPrimal=solution_[iColumn]+1.0*actualPrimalStep_*thisWeight;
     3042      deltaSL_[iColumn]=newPrimal;
     3043    }
     3044  }
     3045  CoinZeroN(errorRegion_,numberRows_);
     3046  CoinZeroN(rhsFixRegion_,numberRows_);
     3047#endif
    30173048  // do reduced costs
    30183049  CoinMemcpyN(dual_,numberRows_,dj_+numberColumns_);
     
    30243055  double gamma2 = gamma_*gamma_; // gamma*gamma will be added to diagonal
    30253056  double gammaOffset=0.0;
    3026   for (iColumn=0;iColumn<numberRows_+numberColumns_;iColumn++) {
     3057  for (iColumn=0;iColumn<numberTotal;iColumn++) {
    30273058    if (!flagged(iColumn)) {
    30283059      double reducedCost=dj_[iColumn];
     
    33743405  if (largestDiagonal>1.0e17*smallestDiagonal) {
    33753406    double killValue =largestDiagonal*1.0e-17;
    3376     for (int iColumn=0;iColumn<numberRows_+numberColumns_;iColumn++) {
     3407    for (int iColumn=0;iColumn<numberTotal;iColumn++) {
    33773408      if (fabs(diagonal_[iColumn])<killValue)
    33783409        diagonal_[iolumn]=0.0;
     
    34253456  double primalOffset=0.0;
    34263457  char * dropped = cholesky_->rowsDropped();
    3427   int iRow;
    34283458  for (iRow=0;iRow<numberRows_;iRow++) {
    34293459    double value=errorRegion_[iRow];
  • trunk/Test/ClpMain.cpp

    r423 r424  
    17771777              doKKT=action;
    17781778              break;
     1779            case CROSSOVER:
     1780              crossover=action;
     1781              break;
    17791782            default:
    17801783              abort();
Note: See TracChangeset for help on using the changeset viewer.