Ignore:
Timestamp:
Aug 21, 2009 12:19:13 PM (10 years ago)
Author:
forrest
Message:

fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cbc/src/CbcSolver.cpp

    r1211 r1212  
    521521  parameters_[whichParam(GREEDY,numberParameters_,parameters_)].setCurrentOption("on");
    522522  parameters_[whichParam(COMBINE,numberParameters_,parameters_)].setCurrentOption("on");
     523  parameters_[whichParam(CROSSOVER2,numberParameters_,parameters_)].setCurrentOption("off");
    523524  parameters_[whichParam(PIVOTANDFIX,numberParameters_,parameters_)].setCurrentOption("off");
    524525  parameters_[whichParam(RANDROUND,numberParameters_,parameters_)].setCurrentOption("off");
     
    867868int CbcOrClpRead_mode=1;
    868869FILE * CbcOrClpReadCommand=stdin;
     870extern int CbcOrClpEnvironmentIndex;
    869871static bool noPrinting=false;
    870872#ifndef CBC_OTHER_SOLVER
     
    32613263  parameters[whichParam(GREEDY,numberParameters,parameters)].setCurrentOption("on");
    32623264  parameters[whichParam(COMBINE,numberParameters,parameters)].setCurrentOption("on");
     3265  parameters[whichParam(CROSSOVER2,numberParameters,parameters)].setCurrentOption("off");
    32633266  parameters[whichParam(PIVOTANDFIX,numberParameters,parameters)].setCurrentOption("off");
    32643267  parameters[whichParam(RANDROUND,numberParameters,parameters)].setCurrentOption("off");
     
    32973300  int useGreedy = parameters_[whichParam(GREEDY,numberParameters_,parameters_)].currentOptionAsInteger();
    32983301  int useCombine = parameters_[whichParam(COMBINE,numberParameters_,parameters_)].currentOptionAsInteger();
     3302  int useCrossover = parameters_[whichParam(CROSSOVER2,numberParameters_,parameters_)].currentOptionAsInteger();
    32993303  int usePivot = parameters_[whichParam(PIVOTANDFIX,numberParameters_,parameters_)].currentOptionAsInteger();
    33003304  int useRand = parameters_[whichParam(RANDROUND,numberParameters_,parameters_)].currentOptionAsInteger();
     
    34753479    anyToDo=true;
    34763480  }
    3477   if (useCombine>=type&&useCombine>=kType&&useCombine<=kType+1) {
    3478     CbcHeuristicLocal heuristic2(*model);
    3479     heuristic2.setHeuristicName("combine solutions");
    3480     heuristic2.setFractionSmall(0.5);
    3481     heuristic2.setSearchType(1);
    3482     model->addHeuristic(&heuristic2);
    3483     anyToDo=true;
    3484   }
    34853481  if (useGreedy>=type&&useGreedy>=kType&&useGreedy<=kType+1) {
    34863482    CbcHeuristicGreedyCover heuristic3(*model);
     
    36383634    anyToDo=true;
    36393635  }
     3636  if (useCombine>=type&&useCombine>=kType&&useCombine<=kType+1) {
     3637    CbcHeuristicLocal heuristic2(*model);
     3638    heuristic2.setHeuristicName("combine solutions");
     3639    heuristic2.setFractionSmall(0.5);
     3640    heuristic2.setSearchType(1);
     3641    model->addHeuristic(&heuristic2);
     3642    anyToDo=true;
     3643  }
     3644  if (useCrossover>=kType&&useCrossover<=kType+1) {
     3645    CbcHeuristicCrossover heuristic2a(*model);
     3646    heuristic2a.setHeuristicName("crossover");
     3647    heuristic2a.setFractionSmall(0.3);
     3648    // just fix at lower
     3649    heuristic2a.setWhen(11);
     3650    model->addHeuristic(&heuristic2a);
     3651    model->setMaximumSavedSolutions(5);
     3652    anyToDo=true;
     3653  }
    36403654  int heurSwitches=parameters_[whichParam(HOPTIONS,numberParameters_,parameters_)].intValue()%100;
    36413655  if (heurSwitches) {
     
    37033717
    37043718int CbcClpUnitTest (const CbcModel & saveModel,
    3705                     std::string& dirMiplib, bool unitTestOnly,
     3719                    std::string& dirMiplib, int testSwitch,
    37063720                    double * stuff);
    37073721#if NEW_STYLE_SOLVER
     
    68346848                if (howOften==-98||howOften==-99)
    68356849                  generator->setSwitchOffIfLessThan(switches[iGenerator]);
     6850                // Use if any at root as more likely later and fairly cheap
     6851                //if (switches[iGenerator]==-2)
     6852                //generator->setWhetherToUse(true);
    68366853                generator->setInaccuracy(accuracyFlag[iGenerator]);
    68376854                generator->setTiming(true);
     
    82388255                   says -miplib
    82398256                */
    8240                 int extra1 = parameters_[whichParam(EXTRA1,numberParameters_,parameters_)].intValue();
     8257                int extra2 = parameters_[whichParam(EXTRA2,numberParameters_,parameters_)].intValue();
    82418258                double stuff[11];
    82428259                stuff[0]=parameters_[whichParam(FAKEINCREMENT,numberParameters_,parameters_)].doubleValue();
     
    82838300                  }
    82848301                }
    8285                 int returnCode=CbcClpUnitTest(model_, dirMiplib, extra1==1,stuff);
     8302                int returnCode=CbcClpUnitTest(model_, dirMiplib, extra2,stuff);
    82868303                babModel_=NULL;
    82878304                return returnCode;
     
    84078424                  for (int i=0;i<numberColumns2;i++) {
    84088425                    int jColumn = originalColumns[i];
    8409                     solution2[jColumn]=solution[i];
    8410                     lower2[jColumn]=columnLower[i];
    8411                     upper2[jColumn]=columnUpper[i];
     8426                    if (jColumn<n) {
     8427                      solution2[jColumn]=solution[i];
     8428                      lower2[jColumn]=columnLower[i];
     8429                      upper2[jColumn]=columnUpper[i];
     8430                    }
    84128431                  }
    84138432#ifndef CBC_OTHER_SOLVER
     
    84168435#endif
    84178436                  process.postProcess(*babModel_->solver());
     8437#ifdef COIN_DEVELOP
     8438                  if (model_.bestSolution()&&fabs(model_.getMinimizationObjValue()-
     8439                                                  babModel_->getMinimizationObjValue())<1.0e-8) {
     8440                    const double * b1 =model_.bestSolution();
     8441                    const double * b2 = saveSolver->getColSolution();
     8442                    const double * columnLower = saveSolver->getColLower() ;
     8443                    const double * columnUpper = saveSolver->getColUpper() ;
     8444                    for (int i=0;i<n;i++) {
     8445                      if (fabs(b1[i]-b2[i])>1.0e-7) {
     8446                        printf("%d %g %g %g %g\n",i,b1[i],b2[i],
     8447                               columnLower[i],columnUpper[i]);
     8448                      }
     8449                    }
     8450                  }
     8451#endif
    84188452                  // Solution now back in saveSolver
    84198453                  // Double check bounds
     
    84238457                  int numberChanged=0;
    84248458                  for (int i=0;i<n;i++) {
     8459                    if (!saveSolver->isInteger(i))
     8460                      continue;
    84258461                    if (lower2[i]!=COIN_DBL_MAX) {
    84268462                      if (lower2[i]!=columnLower[i]||
     
    84438479                          saveSolver->setColLower(i,lower2[i]);
    84448480                          saveSolver->setColUpper(i,upper2[i]);
     8481                        }
     8482                      }
     8483                    }
     8484                  }
     8485                  // See if sos so we can fix
     8486                  OsiClpSolverInterface * osiclp = dynamic_cast< OsiClpSolverInterface*> (saveSolver);
     8487                  if (osiclp&&osiclp->numberSOS()) {
     8488                    // SOS
     8489                    numberSOS = osiclp->numberSOS();
     8490                    const CoinSet * setInfo = osiclp->setInfo();
     8491                    int i;
     8492                    for ( i=0;i<numberSOS;i++) {
     8493                      int type = setInfo[i].setType();
     8494                      int n=setInfo[i].numberEntries();
     8495                      const int * which = setInfo[i].which();
     8496                      int first=-1;
     8497                      int last=-1;
     8498                      for (int j=0;j<n;j++) {
     8499                        int iColumn = which[j];
     8500                        if (fabs(solution[iColumn])>1.0e-7) {
     8501                          last=j;
     8502                          if (first<0)
     8503                            first=j;
     8504                        }
     8505                      }
     8506                      assert (last-first<type);
     8507                      for (int j=0;j<n;j++) {
     8508                        if (j<first||j>last) {
     8509                          int iColumn = which[j];
     8510                          saveSolver->setColLower(iColumn,0.0);
     8511                          saveSolver->setColUpper(iColumn,0.0);
    84458512                        }
    84468513                      }
     
    84728539#ifndef CBC_OTHER_SOLVER
    84738540                  // and original solver
     8541                  originalSolver->setDblParam(OsiDualObjectiveLimit,COIN_DBL_MAX);
    84748542                  assert (n>=originalSolver->getNumCols());
    84758543                  n=originalSolver->getNumCols();
     
    84998567                }
    85008568#if NEW_STYLE_SOLVER==0
    8501                 if (returnMode==1)
     8569                if (returnMode==1) {
     8570                  model_.deleteSolutions();
    85028571                  model_.setBestSolution(bestSolution,n,babModel_->getMinimizationObjValue());
    8503 #endif
     8572                }
     8573#endif
     8574                babModel_->deleteSolutions();
    85048575                babModel_->setBestSolution(bestSolution,n,babModel_->getMinimizationObjValue());
    85058576#if NEW_STYLE_SOLVER==0
     
    85458616                bestSolution = new double [n];
    85468617                // Put solution now back in saveSolver
     8618                saveSolver->setColSolution(model_.bestSolution());
    85478619                babModel_->assignSolver(saveSolver);
    8548                 saveSolver->setColSolution(model_.bestSolution());
     8620                babModel_->setMinimizationObjValue(model_.getMinimizationObjValue());
    85498621                memcpy(bestSolution,babModel_->solver()->getColSolution(),n*sizeof(double));
    85508622#if NEW_STYLE_SOLVER==0
     
    99179989          case UNITTEST:
    99189990            {
    9919               CbcClpUnitTest(model_, dirSample, true,NULL);
     9991              CbcClpUnitTest(model_, dirSample, -2,NULL);
    99209992            }
    99219993            break;
     
    1056410636          case DUMMY:
    1056510637            break;
     10638          case ENVIRONMENT:
     10639            CbcOrClpEnvironmentIndex=0;
     10640            break;
    1056610641          default:
    1056710642            abort();
Note: See TracChangeset for help on using the changeset viewer.