Changeset 2283 for trunk


Ignore:
Timestamp:
Oct 16, 2017 10:03:10 AM (2 years ago)
Author:
forrest
Message:

more plausible stopping criterion

File:
1 edited

Legend:

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

    r2271 r2283  
    14271427                         }
    14281428                         if (infeasibilityCost_ < MAX_INFEASIBILITY_COST) {
     1429                           double testValue = MAX_INFEASIBILITY_COST;
     1430                           if (testValue == 1.0e18) {
     1431                             // Check it is not just noise
     1432                             const double * obj = objective();
     1433                             double largestCost=0.0;
     1434                             if (columnScale_) {
     1435                               for (int i=0; i<numberColumns_;i++) {
     1436                                 largestCost =
     1437                                   CoinMax(largestCost,fabs(obj[i]*columnScale_[i]));
     1438                               }
     1439                             } else {
     1440                               for (int i=0; i<numberColumns_;i++) {
     1441                                 largestCost =
     1442                                   CoinMax(largestCost,fabs(obj[i]));
     1443                               }
     1444                             }
     1445                             testValue = 1.0e12*(largestCost+1.0e-6);
     1446                             testValue =
     1447                               CoinMin(testValue,MAX_INFEASIBILITY_COST);
     1448                           }
     1449                           if (infeasibilityCost_<testValue) {
    14291450                              infeasibilityCost_ *= 5.0;
    14301451                              // reset looping criterion
     
    14401461                              problemStatus_ = -1; //continue
    14411462                              goToDual = false;
     1463                           } else {
     1464                             // say infeasible
     1465                             problemStatus_ = 1;
     1466                           }
    14421467                         } else {
    14431468                              // say infeasible
     
    15521577                    //we need infeasiblity cost changed
    15531578                    if (infeasibilityCost_ < MAX_INFEASIBILITY_COST) {
    1554                          infeasibilityCost_ *= 5.0;
    1555                          // reset looping criterion
     1579                        infeasibilityCost_ *= 5.0;
     1580                        // reset looping criterion
    15561581                         progress->reset();
    15571582                         changeMade_++; // say change made
     
    16721697               factorization_->goSparse();
    16731698          }
     1699     }
     1700     if (problemStatus_==1) {
     1701       // compute true objective value
     1702       computeObjectiveValue(true);
    16741703     }
    16751704     // Allow matrices to be sorted etc
Note: See TracChangeset for help on using the changeset viewer.