Changeset 1003 for branches


Ignore:
Timestamp:
May 8, 2007 11:45:51 AM (12 years ago)
Author:
forrest
Message:

improvements?

Location:
branches/devel/Clp/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/devel/Clp/src/ClpSolve.cpp

    r989 r1003  
    887887#ifndef COIN_HAS_VOL
    888888    // switch off idiot and volume for now
    889     doIdiot=0;
     889    doIdiot=0; 
    890890#endif
    891891    // pick up number passes
     
    11941194          info.setStartingWeight(1.0e3);
    11951195          info.setReduceIterations(6);
     1196          if (nPasses>=5000) {
     1197            int k= nPasses&100;
     1198            nPasses /= 100;
     1199            info.setReduceIterations(3);
     1200            if (k)
     1201              info.setStartingWeight(1.0e2);
     1202          }
    11961203          // also be more lenient on infeasibilities
    11971204          info.setDropEnoughFeasibility(0.5*info.getDropEnoughFeasibility());
  • branches/devel/Clp/src/Idiot.cpp

    r999 r1003  
    775775      djTol=0.01*djExit;
    776776    }
     777    memcpy(saveSol,colsol,ncols*sizeof(double));
    777778    result=IdiSolve(nrows,ncols,rowsol ,colsol,pi,dj,
    778779                     cost,rowlower,rowupper,
     
    837838          break;
    838839        }
    839         memcpy(colsol,saveSol,ncols*sizeof(double));
    840840      } else {
    841         // Save best solution
    842         memcpy(saveSol,colsol,ncols*sizeof(double));
    843841        maxIts=maxIts2;
    844842        checkIteration=0;
     
    846844      }
    847845    } else {
    848       bool save=false;
    849       if (result.infeas<=smallInfeas) {
    850         if (result.objval<bestFeasible)
    851           save=true;
    852       } else if (result.infeas+mu*result.objval<bestWeighted) {
    853         save=true;
    854       }
    855       if (save) {
    856         // Save best solution
    857         memcpy(saveSol,colsol,ncols*sizeof(double));
    858       }
    859846    }
    860847    bestInfeas=CoinMin(bestInfeas,result.infeas);
     
    985972  }
    986973  majorIterations_ = saveMajorIterations;
    987   // put back best solution
    988   memcpy(colsol,saveSol,ncols*sizeof(double));
    989974#ifndef OSI_IDIOT
    990975  if (scaled) {
     
    995980    for (icol=0;icol<ncols;icol++) {
    996981      colsol[icol] *= columnScale[icol];
     982      saveSol[icol] *= columnScale[icol];
    997983      dj[icol] /= columnScale[icol];
    998984    }
     
    10611047  model_->setSumPrimalInfeasibilities(lastResult.infeas);
    10621048#endif
    1063   {
     1049  // Put back more feasible solution
     1050  double saveInfeas[]={0.0,0.0};
     1051  for (int iSol=0;iSol<3;iSol++) {
     1052    const double * solution = iSol ? colsol : saveSol;
     1053    if (iSol==2&&saveInfeas[0]<saveInfeas[1]) {
     1054      // put back best solution
     1055      memcpy(colsol,saveSol,ncols*sizeof(double));
     1056    }
    10641057    double large=0.0;
    10651058    int i;
     
    10671060    for (i=0;i<ncols;i++) {
    10681061      CoinBigIndex j;
    1069       double value=colsol[i];
     1062      double value=solution[i];
    10701063      for (j=columnStart[i];j<columnStart[i]+columnLength[i];j++) {
    10711064        int irow=row[j];
     
    10841077      }
    10851078    }
     1079    if (iSol<2)
     1080      saveInfeas[iSol]=large;
    10861081    if (logLevel>2)
    10871082      printf("largest infeasibility is %g\n",large);
Note: See TracChangeset for help on using the changeset viewer.