Changeset 2254 for trunk


Ignore:
Timestamp:
Jan 9, 2017 1:17:45 PM (3 years ago)
Author:
forrest
Message:

segfault in primal (and out some messages)

Location:
trunk/Clp/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Clp/src/ClpSimplexPrimal.cpp

    r2235 r2254  
    986986          numberThrownOut = gutsOfSolution(NULL, NULL, sayValuesPass);
    987987          double sumInfeasibility =  nonLinearCost_->sumInfeasibilities();
    988           // have to use single criterion for primal infeasibilities
    989           assert (!sumPrimalInfeasibilities_);
    990           assert (!sumOfRelaxedPrimalInfeasibilities_);
    991           sumPrimalInfeasibilities_=sumInfeasibility;
    992           sumOfRelaxedPrimalInfeasibilities_=sumInfeasibility;
    993988          int reason2 = 0;
    994989#if CLP_CAUTION
     
    12601255          double lastObj3 = progress->lastObjective(3);
    12611256          lastObj3 += infeasibilityCost_ * 2.0 * lastInf3;
     1257          assert (thisObj<=COIN_DBL_MAX);
     1258          assert (lastObj<=COIN_DBL_MAX);
     1259          assert (lastObj3<=COIN_DBL_MAX);
    12621260          if (lastObj < thisObj - 1.0e-5 * CoinMax(fabs(thisObj), fabs(lastObj)) - 1.0e-7
    12631261                    && firstFree_ < 0 && thisInf >= lastInf) {
     
    13001298     if (sumOfRelaxedDualInfeasibilities_ == 0.0 &&
    13011299               sumOfRelaxedPrimalInfeasibilities_ == 0.0 &&
    1302          progress->objective_[CLP_PROGRESS-1]>
     1300         progress->objective_[CLP_PROGRESS-1]>=
    13031301         progress->objective_[CLP_PROGRESS-2]-1.0e-9*(10.0+fabs(objectiveValue_))) {
    13041302          // say optimal (with these bounds etc)
     
    13451343     bool looksOptimal = (!numberDualInfeasibilities_&&!nonLinearCost_->sumInfeasibilities());
    13461344     // had ||(type==3&&problemStatus_!=-5) -- ??? why ????
    1347      if ((dualFeasible() || problemStatus_ == -4) && (!ifValuesPass||looksOptimal)) {
     1345     if ((dualFeasible() || problemStatus_ == -4) && (!ifValuesPass||looksOptimal||firstFree_<0)) {
    13481346          // see if extra helps
    13491347          if (nonLinearCost_->numberInfeasibilities() &&
    13501348                    (nonLinearCost_->sumInfeasibilities() > 1.0e-3 || sumOfRelaxedPrimalInfeasibilities_)
    1351                     && !alwaysOptimal) {
     1349              /*&& alwaysOptimal*/) {
    13521350               //may need infeasiblity cost changed
    13531351               // we can see if we can construct a ray
     
    13551353               double saveWeight = infeasibilityCost_;
    13561354               // save nonlinear cost as we are going to switch off costs
    1357                ClpNonLinearCost * nonLinear = nonLinearCost_;
     1355               //ClpNonLinearCost * nonLinear = nonLinearCost_;
    13581356               // do twice to make sure Primal solution has settled
    13591357               // put non-basics to bounds in case tolerance moved
     
    13631361               gutsOfSolution(NULL, NULL, ifValuesPass != 0);
    13641362
    1365                infeasibilityCost_ = 1.0e100;
     1363               //infeasibilityCost_ = 1.0e100;
    13661364               // put back original costs
    13671365               createRim(4);
     
    13741372                    nonLinearCost_->checkInfeasibilities(primalTolerance_);
    13751373               } else {
    1376                     nonLinearCost_ = NULL;
    1377                     // scale
    1378                     int i;
    1379                     for (i = 0; i < numberRows_ + numberColumns_; i++)
    1380                          cost_[i] *= 1.0e-95;
    1381                     gutsOfSolution(NULL, NULL, ifValuesPass != 0);
    1382                     nonLinearCost_ = nonLinear;
     1374                    infeasibilityCost_ = 1.0e30;
     1375                    gutsOfSolution(NULL, NULL, ifValuesPass != 0 && firstFree_>=0);
    13831376                    infeasibilityCost_ = saveWeight;
    13841377                    if ((infeasibilityCost_ >= 1.0e18 ||
  • trunk/Clp/src/ClpSolver.cpp

    r2235 r2254  
    12301230                                                  //       i,simplex->directionOut(),value);
    12311231                                                  if (value<0.0)
    1232                                                     boundValue=columnLower[i];
     1232                                                    boundValue=CoinMax(columnLower[i],-1.0e20);
    12331233                                                  else
    1234                                                     boundValue=columnUpper[i];
     1234                                                    boundValue=CoinMin(columnUpper[i],1.0e20);
    12351235                                                }
    12361236                                              } else if (fabs(value)>1.0e-10) {
     
    12461246                                            const double * rowLower = simplex->rowLower();
    12471247                                            const double * rowUpper = simplex->rowUpper();
     1248                                            bool printBad=simplex->logLevel()>3;
    12481249                                            //int pivotRow = simplex->spareIntArray_[3];
    12491250                                            //bool badPivot=pivotRow<0;
     
    12721273                                              }
    12731274                                              effectiveRhs[i]=rhsValue;
    1274                                               if (fabs(effectiveRhs[i])>1.0e10)
     1275                                              if (fabs(effectiveRhs[i])>1.0e10&&printBad)
    12751276                                                printf("Large rhs row %d %g\n",
    12761277                                                       i,effectiveRhs[i]);
     
    12801281                                            for (int i=0;i<numberRows;i++) {
    12811282                                              bSum += effectiveRhs[i]*ray[i];
    1282                                               if (fabs(effectiveRhs[i])>1.0e10)
     1283                                              if (fabs(effectiveRhs[i])>1.0e10&&printBad)
    12831284                                                printf("Large rhs row %d %g after\n",
    12841285                                                       i,effectiveRhs[i]);
    12851286                                            }
    1286                                             if (numberBad||bSum>1.0e-6) {
     1287                                            if ((numberBad||bSum>1.0e-6)&&printBad) {
    12871288                                              printf("Bad infeasibility ray %g  - %d bad\n",
    12881289                                                     bSum,numberBad);
Note: See TracChangeset for help on using the changeset viewer.