Changeset 857


Ignore:
Timestamp:
Jan 17, 2008 4:21:23 PM (11 years ago)
Author:
forrest
Message:

allow dense solver

Location:
trunk/Cbc/src
Files:
4 edited

Legend:

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

    r854 r857  
    13901390     //if (simplex->numberRows()<50)
    13911391     //simplex->setAlphaAccuracy(1.0);
    1392      clpSolver->setSpecialOptions((clpSolver->specialOptions()&~128)|65536);
     1392     //clpSolver->setSpecialOptions((clpSolver->specialOptions()&~128)|65536);
    13931393     //simplex->setMoreSpecialOptions(simplex->moreSpecialOptions()|4);
    13941394     //simplex->setSpecialOptions(simplex->specialOptions()|65536);
     
    32473247    phase_=5;
    32483248    double increment = getDblParam(CbcModel::CbcCutoffIncrement) ;
    3249     if ((specialOptions_&4)!=0)
     3249    if ((specialOptions_&4)==0)
    32503250      bestObjective_ += 100.0*increment+1.0e-3; // only set if we are going to solve
    32513251    setBestSolution(CBC_END_SOLUTION,bestObjective_,bestSolution_,true) ;
  • trunk/Cbc/src/CbcSolver.cpp

    r854 r857  
    4747#include <exception>
    4848#include <new>
     49#include "stolen_from_ekk_malloc.cpp"
    4950static double malloc_times=0.0;
    5051static double malloc_total=0.0;
     
    5253static int malloc_n=10;
    5354double malloc_counts[10]={0,0,0,0,0,0,0,0,0,0};
     55bool malloc_counts_on=false;
    5456void * operator new (size_t size) throw (std::bad_alloc)
    5557{
     
    6365    }
    6466  }
     67#ifdef DEBUG_MALLOC
     68  void *p;
     69  if (malloc_counts_on)
     70    p =stolen_from_ekk_mallocBase(size);
     71  else
     72    p =malloc(size);
     73#else
    6574  void * p =malloc(size);
     75#endif
    6676  //char * xx = (char *) p;
    6777  //memset(xx,0,size);
     
    7282void operator delete (void *p) throw()
    7383{
     84#ifdef DEBUG_MALLOC
     85  if (malloc_counts_on)
     86    stolen_from_ekk_freeBase(p);
     87  else
     88    free(p);
     89#else
    7490  free(p);
     91#endif
    7592}
    7693static void malloc_stats2()
     
    84101  malloc_total=0.0;
    85102  memset(malloc_counts,0,sizeof(malloc_counts));
     103  // print results
    86104}
     105#else
     106void stolen_from_ekk_memory(void * dummy,int type)
     107{
     108}
     109bool malloc_counts_on=false;
    87110#endif
    88111//#define DMALLOC
     
    34783501  statusUserFunction_ = new int [numberUserFunctions_];
    34793502  int iUser;
    3480 #endif
     3503#endif
     3504  // Statistics
     3505  double statistics_seconds=0.0, statistics_obj=0.0;
     3506  double statistics_continuous=0.0, statistics_tighter=0.0;
     3507  double statistics_cut_time=0.0;
     3508  int statistics_nodes=0, statistics_iterations=0;
     3509  std::string statistics_result;
    34813510  memset(statusUserFunction_,0,numberUserFunctions_*sizeof(int));
    34823511  /* Note
     
    38993928    // set default action (0=off,1=on,2=root)
    39003929    int twomirAction=2;
     3930#ifndef DEBUG_MALLOC
    39013931    CglLandP landpGen;
     3932#endif
    39023933    // set default action (0=off,1=on,2=root)
    39033934    int landpAction=0;
     
    42974328                lpSolver->setDualRowPivotAlgorithm(steep);
    42984329              } else if (action==1) {
    4299                 //ClpDualRowDantzig dantzig;
    4300                 ClpDualRowSteepest dantzig(5);
     4330                ClpDualRowDantzig dantzig;
     4331                //ClpDualRowSteepest dantzig(5);
    43014332                lpSolver->setDualRowPivotAlgorithm(dantzig);
    43024333              } else if (action==2) {
     
    59876018                switches[numberGenerators++]=1;
    59886019              }
     6020#ifndef DEBUG_MALLOC
    59896021              if (landpAction) {
    59906022                babModel_->addCutGenerator(&landpGen,translate[landpAction],"LiftAndProject");
    59916023                switches[numberGenerators++]=1;
    59926024              }
     6025#endif
    59936026              if (residualCapacityAction) {
    59946027                babModel_->addCutGenerator(&residualCapacityGen,translate[residualCapacityAction],"ResidualCapacity");
     
    70597092                  return returnCode;
    70607093                }
     7094                int denseCode = parameters_[whichParam(DENSE,numberParameters_,parameters_)].intValue();
     7095                osiclp = dynamic_cast< OsiClpSolverInterface*> (babModel_->solver());
     7096                lpSolver = osiclp->getModelPtr();
     7097                if (denseCode>=lpSolver->numberRows()) {
     7098                  lpSolver->factorization()->goDense();
     7099                }
    70617100                {
    70627101                  int extra1 = parameters_[whichParam(EXTRA1,numberParameters_,parameters_)].intValue();
     
    71627201                saveSolution(osiclp->getModelPtr(),"debug.file");
    71637202              }
     7203              statistics_cut_time=0.0;
    71647204              if (!noPrinting_) {
    71657205                // Print more statistics
     
    71857225                    sprintf(timing," (%.3f seconds)",generator->timeInCutGenerator());
    71867226                    strcat(generalPrint,timing);
     7227                    statistics_cut_time += generator->timeInCutGenerator();
    71877228                  }
    71887229                  generalMessageHandler->message(CLP_GENERAL,generalMessages)
     
    73117352                int iStat = babModel_->status();
    73127353                int iStat2 = babModel_->secondaryStatus();
     7354                statistics_seconds=time2-time1;
     7355                statistics_obj=babModel_->getObjValue();
     7356                statistics_continuous=babModel_->getContinuousObjective();
     7357                statistics_tighter=babModel_->rootObjectiveAfterCuts();
     7358                statistics_nodes=babModel_->getNodeCount();
     7359                statistics_iterations=babModel_->getIterationCount();;
     7360                statistics_result=statusName[iStat];;
    73137361                if (!noPrinting_) {
    73147362                  sprintf(generalPrint,"Result - %s%s objective %.16g after %d nodes and %d iterations - took %.2f seconds (total time %.2f)",
     
    87578805                    );
    87588806            break;
     8807          case CSVSTATISTICS:
     8808            {
     8809              // get next field
     8810              field = CoinReadGetString(argc,argv);
     8811              if (field=="$") {
     8812                field = parameters_[iParam].stringValue();
     8813              } else if (field=="EOL") {
     8814                parameters_[iParam].printString();
     8815                break;
     8816              } else {
     8817                parameters_[iParam].setStringValue(field);
     8818              }
     8819              std::string fileName;
     8820              if (field[0]=='/'||field[0]=='\\') {
     8821                fileName = field;
     8822              } else if (field[0]=='~') {
     8823                char * environVar = getenv("HOME");
     8824                if (environVar) {
     8825                  std::string home(environVar);
     8826                  field=field.erase(0,1);
     8827                  fileName = home+field;
     8828                } else {
     8829                  fileName=field;
     8830                }
     8831              } else {
     8832                fileName = directory+field;
     8833              }
     8834              int state=0;
     8835              char buffer[1000];
     8836              FILE *fp=fopen(fileName.c_str(),"r");
     8837              if (fp) {
     8838                // file already there
     8839                state=1;
     8840                char * getBuffer = fgets(buffer,1000,fp);
     8841                if (getBuffer) {
     8842                  // assume header there
     8843                  state=2;
     8844                }
     8845                fclose(fp);
     8846              }
     8847              fp=fopen(fileName.c_str(),"a");
     8848              if (fp) {
     8849                // can open - lets go for it
     8850                // first header if needed
     8851                if (state!=2)
     8852                  fputs("Name,result,time,objective,continuous,tightened,cut_time,nodes,iterations\n",fp);
     8853                strcpy(buffer,argv[1]);
     8854                char * slash=buffer;
     8855                for (int i=0;i<(int)strlen(buffer);i++) {
     8856                  if (buffer[i]=='/'||buffer[i]=='\\')
     8857                    slash=buffer+i+1;
     8858                }
     8859                fprintf(fp,"%s,%s,%.2f,%.16g,%g,%g,%.2f,%d,%d\n",
     8860                        slash,statistics_result.c_str(),statistics_seconds,statistics_obj,
     8861                        statistics_continuous,statistics_tighter,statistics_cut_time,statistics_nodes,
     8862                        statistics_iterations);
     8863                fclose(fp);
     8864              } else {
     8865                std::cout<<"Unable to open file "<<fileName<<std::endl;
     8866              }
     8867            }
    87598868          case SOLUTION:
    87608869            if (goodModel) {
  • trunk/Cbc/src/CoinSolve.cpp

    r824 r857  
    246246#include "CbcSolver.hpp"
    247247void addAmplToCbc(CbcSolver *);
     248extern bool malloc_counts_on;
     249extern void stolen_from_ekk_memory(void * info,int type);
    248250int main (int argc, const char *argv[])
    249251{
    250   OsiClpSolverInterface solver1;
    251   CbcSolver control(solver1);
    252   // initialize
    253   control.fillValuesInSolver();
     252  int returnCode;
     253  // Only active if malloc switched on in CbcSolver.cpp
     254  stolen_from_ekk_memory(NULL,0);
     255  malloc_counts_on=true;
     256  {
     257    OsiClpSolverInterface solver1;
     258    CbcSolver control(solver1);
     259    // initialize
     260    control.fillValuesInSolver();
    254261#ifdef COIN_HAS_ASL
    255   addAmplToCbc(&control);
    256 #endif
    257   int returnCode= control.solve (argc, argv, 1);
     262    addAmplToCbc(&control);
     263#endif
     264    returnCode= control.solve (argc, argv, 1);
     265  }
     266  stolen_from_ekk_memory(NULL,1);
     267  malloc_counts_on=false;
    258268  return returnCode;
    259269}
  • trunk/Cbc/src/unitTestClp.cpp

    r854 r857  
    377377        numberFailures++;
    378378        //#ifdef COIN_DEVELOP
    379         abort();
     379        //abort();
    380380        //#endif
    381381      }
Note: See TracChangeset for help on using the changeset viewer.