Changeset 2419


Ignore:
Timestamp:
Nov 15, 2018 11:15:28 AM (8 months ago)
Author:
forrest
Message:

more string parameters and some sos priorities

Location:
trunk/Cbc/src
Files:
5 edited

Legend:

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

    r2404 r2419  
    36813681#if HOTSTART<0
    36823682        if (bestSolution_ && !parentModel_ && !hotstartSolution_ &&
    3683                 (moreSpecialOptions_&1024) != 0) {
     3683            (moreSpecialOptions_&1024) != 0 && (specialOptions_&2048) == 0) {
    36843684            // Set priorities so only branch on ones we need to
    36853685            // use djs and see if only few branches needed
  • trunk/Cbc/src/CbcNode.cpp

    r2416 r2419  
    16391639    // Go to other choose if hot start
    16401640    if (model->hotstartSolution() &&
    1641             (((model->moreSpecialOptions()&1024) == 0) || false))
     1641            (((model->moreSpecialOptions()&1024) == 0) || true))
    16421642        return -3;
    16431643    delete branch_;
     
    17541754        model->getDblParam(CbcModel::CbcIntegerTolerance);
    17551755    if (hotstartSolution) {
    1756         if ((model->moreSpecialOptions()&1024) != 0) {
     1756        if ((model->moreSpecialOptions()&1024) != 0 || true) {
    17571757            int nBad = 0;
    17581758            int nUnsat = 0;
  • trunk/Cbc/src/CbcSOS.cpp

    r2388 r2419  
    4141          numberMembers_(0),
    4242          sosType_(-1),
     43#ifdef CBC_INVESTIGATE_SOS
     44          setNumber_(-1),
     45#endif
    4346          integerValued_(false),
    4447          oddValues_(false)
     
    5861        numberMembers_(numberMembers),
    5962          sosType_(type),
     63#ifdef CBC_INVESTIGATE_SOS
     64          setNumber_(-1),
     65#endif
    6066          oddValues_(false)
    6167{
     
    127133    numberMembers_ = rhs.numberMembers_;
    128134    sosType_ = rhs.sosType_;
     135#ifdef CBC_INVESTIGATE_SOS
     136    setNumber_ = rhs.setNumber_;
     137#endif
    129138    integerValued_ = rhs.integerValued_;
    130139    oddValues_ = rhs.oddValues_;
     
    163172        numberMembers_ = rhs.numberMembers_;
    164173        sosType_ = rhs.sosType_;
     174#ifdef CBC_INVESTIGATE_SOS
     175        setNumber_ = rhs.setNumber_;
     176#endif
    165177        integerValued_ = rhs.integerValued_;
    166178        oddValues_ = rhs.oddValues_;
     
    920932    const double * lower = solver->getColLower();
    921933    const double * upper = solver->getColUpper();
     934#ifdef CBC_INVESTIGATE_SOS
     935    const double * solution = solver->getColSolution();
     936    printf("Set %d type %d way %d range %g -> %g (%d inset) separator %g tozero ",
     937           set_->whichSet(),set_->sosType(),way_,
     938           weights[0],weights[numberMembers-1],numberMembers,separator_);
     939#endif
    922940    // *** for way - up means fix all those in down section
    923941    if (way_ < 0) {
     
    929947        assert (i < numberMembers);
    930948        for (; i < numberMembers; i++) {
     949#ifdef CBC_INVESTIGATE_SOS
     950          printf("%d (%g,%g) ",which[i],weights[i],solution[which[i]]);
     951#endif
    931952            solver->setColLower(which[i], 0.0);
    932953            solver->setColUpper(which[i], 0.0);
     
    939960                break;
    940961          } else {
     962#ifdef CBC_INVESTIGATE_SOS
     963          printf("%d (%g,%g) ",which[i],weights[i],solution[which[i]]);
     964#endif
    941965                solver->setColLower(which[i], 0.0);
    942966                solver->setColUpper(which[i], 0.0);
     
    946970        way_ = -1;        // Swap direction
    947971    }
     972#ifdef CBC_INVESTIGATE_SOS
     973    printf("\n");
     974#endif
    948975    computeNonzeroRange();
    949976    double predictedChange=0.0;
  • trunk/Cbc/src/CbcSOS.hpp

    r2070 r2419  
    106106        return sosType_;
    107107    }
     108#ifdef CBC_INVESTIGATE_SOS
     109    /// Set which Set
     110    inline void setSet(int number) {
     111      setNumber_=number;
     112    }
     113    /// Which set
     114    inline int whichSet() const {
     115      return setNumber_;
     116    }
     117#endif
    108118    /// Down number times
    109119    inline int numberTimesDown() const {
     
    178188    /// SOS type
    179189    int sosType_;
     190#ifdef CBC_INVESTIGATE_SOS
     191    /// Which set
     192    int setNumber_;
     193#endif
    180194    /// Whether integer valued
    181195    bool integerValued_;
  • trunk/Cbc/src/CbcSolver.cpp

    r2418 r2419  
    13061306  return CbcMain1(argc,argv,model,callBack,staticParameterData);
    13071307}
     1308// Get int value for an option
     1309static int intValueOfOption(CbcSolverUsefulData &parameterData,CbcOrClpParameterType type)
     1310{
     1311  CbcOrClpParam * parameters = parameterData.parameters_;
     1312  int numberParameters = parameterData.numberParameters_;
     1313  int jParam = whichParam(type,numberParameters, parameters);
     1314  return parameters[jParam].currentOptionAsInteger();
     1315}
    13081316static void printGeneralMessage(CbcModel &model,const char * message);
    13091317/*
     
    20362044                    if ((verbose % 4) != 0)
    20372045                        maxAcross = 1;
    2038                     int limits[] = {1, 51, 101, 151, 201, 251, 301, 351, 401};
     2046                    int limits[] = {1, 51, 101, 151, 201, 301, 401, 501, 601};
    20392047                    std::vector<std::string> types;
    20402048                    types.push_back("Double parameters:");
     
    21022110                    std::cout << "Full list of commands is:" << std::endl;
    21032111                    int maxAcross = 5;
    2104                     int limits[] = {1, 51, 101, 151, 201, 251, 301, 351, 401};
     2112                    int limits[] = {1, 51, 101, 151, 201, 301, 401, 501, 601};
    21052113                    std::vector<std::string> types;
    21062114                    types.push_back("Double parameters:");
     
    24292437                                  parameters_[iParam].intValue() << std::endl;
    24302438                    }
    2431                 } else if (type < 301) {
     2439                } else if (type < 401) {
    24322440                    // one of several strings
    24332441                    std::string value = CoinReadGetString(argc, argv);
     
    60596067                                                }
    60606068                                            }
    6061                                             for (iSOS = 0; iSOS < numberSOS; iSOS++) {
     6069                                            int sosPriorityOption =
     6070                                              intValueOfOption(parameterData,
     6071                                                               CBC_PARAM_STR_SOSPRIORITIZE);
     6072                                            if (sosPriorityOption) {
     6073                                              const char * msg[4]={
     6074                                                "high with equal priority",
     6075                                                "low with equal priority",
     6076                                                "high but with decreasing priority",
     6077                                                "low and decreasing priority"};
     6078                                              sprintf(generalPrint, "Setting %d SOS priorities %s", numberSOS,msg[sosPriorityOption-1]);
     6079                                              generalMessageHandler->message(CLP_GENERAL, generalMessages)
     6080                                                << generalPrint
     6081                                                << CoinMessageEol;
     6082                                            }
     6083                                            for (iSOS = 0; iSOS < numberSOS; iSOS++) {
    60626084                                                int iStart = sosStart[iSOS];
    60636085                                                int n = sosStart[iSOS+1] - iStart;
    6064                                                 objects[iSOS] = new CbcSOS(babModel_, n, sosIndices + iStart, sosReference + iStart,
     6086                                                CbcSOS * sosObject = new CbcSOS(babModel_, n, sosIndices + iStart, sosReference + iStart,
    60656087                                                                           iSOS, sosType[iSOS]);
    6066                                                 if (sosPriority)
    6067                                                     objects[iSOS]->setPriority(sosPriority[iSOS]);
    6068                                                 else if (!prioritiesIn)
    6069                                                     objects[iSOS]->setPriority(10);  // rather than 1000
     6088#ifdef CBC_INVESTIGATE_SOS
     6089                                                sosObject->setSet(iSOS);
     6090#endif
     6091                                                if (sosPriority) {
     6092                                                    sosObject->setPriority(sosPriority[iSOS]);
     6093                                                } else if (sosPriorityOption) {
     6094                                                  int priority=10;
     6095                                                  switch (sosPriorityOption) {
     6096                                                  case 2:
     6097                                                    priority=100000;
     6098                                                    break;
     6099                                                  case 3:
     6100                                                    // really should check <990 sets
     6101                                                    priority=10+iSOS;
     6102                                                    break;
     6103                                                  case 4:
     6104                                                    priority=100000+iSOS;
     6105                                                    break;
     6106                                                  }
     6107                                                  sosObject->setPriority(priority);
     6108                                                } else if (!prioritiesIn) {
     6109                                                  sosObject->setPriority(10);  // rather than 1000
     6110                                                }
     6111                                                objects[iSOS] = sosObject;
    60706112                                            }
    60716113                                            // delete any existing SOS objects
Note: See TracChangeset for help on using the changeset viewer.