Changeset 1770 for trunk/Cbc


Ignore:
Timestamp:
Mar 26, 2012 8:10:12 AM (7 years ago)
Author:
forrest
Message:

New mipstart provided by Haroldo Santos

Location:
trunk/Cbc/src
Files:
2 added
3 edited

Legend:

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

    r1769 r1770  
    4949#include "OsiChooseVariable.hpp"
    5050#include "OsiAuxInfo.hpp"
     51#include "CbcMipStartIO.hpp"
    5152
    5253#include "CbcSolverHeuristics.hpp"
     
    551552    std::string importBasisFile = "";
    552553    std::string importPriorityFile = "";
     554    std::string mipStartFile = "";
    553555    std::string debugFile = "";
    554556    std::string printMask = "";
     
    580582    parameters_[whichParam(CLP_PARAM_ACTION_BASISIN, numberParameters_, parameters_)].setStringValue(importBasisFile);
    581583    parameters_[whichParam(CBC_PARAM_ACTION_PRIORITYIN, numberParameters_, parameters_)].setStringValue(importPriorityFile);
     584    parameters_[whichParam(CBC_PARAM_ACTION_MIPSTART, numberParameters_, parameters_)].setStringValue(mipStartFile);
    582585    parameters_[whichParam(CLP_PARAM_ACTION_BASISOUT, numberParameters_, parameters_)].setStringValue(exportBasisFile);
    583586    parameters_[whichParam(CLP_PARAM_ACTION_DEBUG, numberParameters_, parameters_)].setStringValue(debugFile);
     
    12711274        double * solutionIn = NULL;
    12721275        int * prioritiesIn = NULL;
     1276        std::vector< std::pair< std::string, double > > mipStart;
    12731277        int numberSOS = 0;
    12741278        int * sosStart = NULL;
     
    45174521#endif
    45184522                                const int * originalColumns = preProcess ? process.originalColumns() : NULL;
     4523
     4524                                if (mipStart.size())
     4525                                {
     4526                                   if (preProcess)
     4527                                   {
     4528                                      std::vector< std::string > colNames;
     4529                                      for ( int i=0 ; (i<babModel_->solver()->getNumCols()) ; ++i )
     4530                                         colNames.push_back( model_.solver()->getColName( babModel_->originalColumns()[i] ) );
     4531                                      //printf("--- %s %d\n", babModel_->solver()->getColName(0).c_str(), babModel_->solver()->getColNames().size() );
     4532                                      //printf("-- SIZES of models %d %d %d\n", model_.getNumCols(),  babModel_->solver()->getNumCols(), babModel_->solver()->getColNames().size() );
     4533                                      std::vector< double > x( babModel_->getNumCols(), 0.0 );
     4534                                      double obj;
     4535                                      int status = computeCompleteSolution( babModel_, colNames, mipStart, &x[0], obj );
     4536                                      if (!status)
     4537                                         babModel_->setBestSolution( &x[0], x.size(), obj, false );
     4538                                   }
     4539                                }
     4540
    45194541                                if (solutionIn && useSolution >= 0) {
    45204542                                    if (!prioritiesIn) {
     
    71247146                                std::cout << "Unable to open file " << fileName << std::endl;
    71257147                            }
     7148                        } else {
     7149#ifndef DISALLOW_PRINTING
     7150                            std::cout << "** Current model not valid" << std::endl;
     7151#endif
     7152                        }
     7153                        break;
     7154                    case CBC_PARAM_ACTION_MIPSTART:
     7155                        if (goodModel) {
     7156                            // get next field
     7157                            field = CoinReadGetString(argc, argv);
     7158                            if (field == "$") {
     7159                                field = parameters_[iParam].stringValue();
     7160                            } else if (field == "EOL") {
     7161                                parameters_[iParam].printString();
     7162                                break;
     7163                            } else {
     7164                                parameters_[iParam].setStringValue(field);
     7165                            }
     7166                            std::string fileName;
     7167                            if (field[0] == '/' || field[0] == '\\') {
     7168                                fileName = field;
     7169                            } else if (field[0] == '~') {
     7170                                char * environVar = getenv("HOME");
     7171                                if (environVar) {
     7172                                    std::string home(environVar);
     7173                                    field = field.erase(0, 1);
     7174                                    fileName = home + field;
     7175                                } else {
     7176                                    fileName = field;
     7177                                }
     7178                            } else {
     7179                                fileName = directory + field;
     7180                            }
     7181                            sprintf(generalPrint,"will open mipstart file %s.",fileName.c_str() );
     7182                            generalMessageHandler->message(CLP_GENERAL, generalMessages)
     7183                              << generalPrint
     7184                              << CoinMessageEol;
     7185                            double msObj;
     7186                            readMIPStart( &model_, fileName.c_str(), mipStart, msObj );
    71267187                        } else {
    71277188#ifndef DISALLOW_PRINTING
  • trunk/Cbc/src/Makefile.am

    r1713 r1770  
    101101        CbcSolverHeuristics.cpp CbcSolverHeuristics.hpp \
    102102        CbcSolverAnalyze.cpp CbcSolverAnalyze.hpp \
     103        CbcMipStartIO.cpp CbcMipStartIO.hpp \
    103104        CbcSolverExpandKnapsack.cpp CbcSolverExpandKnapsack.hpp
    104105
     
    248249        CbcStrategy.hpp \
    249250        CbcSolver.hpp \
     251        CbcMipStartIO.hpp \
    250252        CbcSOS.hpp \
    251253        CbcSubProblem.hpp \
  • trunk/Cbc/src/Makefile.in

    r1714 r1770  
    119119am_libCbcSolver_la_OBJECTS = CbcCbcParam.lo Cbc_ampl.lo CbcLinked.lo \
    120120        CbcLinkedUtils.lo unitTestClp.lo CbcSolver.lo \
    121         CbcSolverHeuristics.lo CbcSolverAnalyze.lo \
     121        CbcSolverHeuristics.lo CbcSolverAnalyze.lo CbcMipStartIO.lo \
    122122        CbcSolverExpandKnapsack.lo
    123123libCbcSolver_la_OBJECTS = $(am_libCbcSolver_la_OBJECTS)
     
    597597        CbcSolverHeuristics.cpp CbcSolverHeuristics.hpp \
    598598        CbcSolverAnalyze.cpp CbcSolverAnalyze.hpp \
     599        CbcMipStartIO.cpp CbcMipStartIO.hpp \
    599600        CbcSolverExpandKnapsack.cpp CbcSolverExpandKnapsack.hpp
    600601
     
    708709        CbcStrategy.hpp \
    709710        CbcSolver.hpp \
     711        CbcMipStartIO.hpp \
    710712        CbcSOS.hpp \
    711713        CbcSubProblem.hpp \
     
    909911@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CbcLinkedUtils.Plo@am__quote@
    910912@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CbcMessage.Plo@am__quote@
     913@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CbcMipStartIO.Plo@am__quote@
    911914@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CbcModel.Plo@am__quote@
    912915@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CbcNWay.Plo@am__quote@
Note: See TracChangeset for help on using the changeset viewer.