Changeset 44 for branches


Ignore:
Timestamp:
Oct 28, 2002 10:10:17 AM (17 years ago)
Author:
forrest
Message:

After more IBM Burlington tests

Location:
branches/devel-1
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/devel-1/ClpSimplex.cpp

    r43 r44  
    27692769      numberMatched++;
    27702770    }
    2771     if (numberMatched||numberTimes_>50)
    2772       printf("%d %d %d %d\n",numberMatched,
    2773              matchedOnObjective,matchedOnInfeasibility,
    2774              matchedOnInfeasibilities);
    27752771    if (i) {
    27762772      objective_[i-1] = objective_[i];
     
    27792775    }
    27802776  }
     2777  if (numberMatched)
     2778    printf("%d loop check\n",numberMatched);
    27812779  objective_[CLP_PROGRESS-1] = objective;
    27822780  infeasibility_[CLP_PROGRESS-1] = infeasibility;
     
    28012799        // dual - change tolerance
    28022800        model_->setCurrentDualTolerance(model_->currentDualTolerance()*1.05);
     2801        // if infeasible increase dual bound
     2802        if (model_->dualBound()<1.0e19) {
     2803          model_->setDualBound(model_->dualBound()*1.1);
     2804        }
    28032805      } else {
    28042806        // primal - change tolerance
    28052807        model_->setCurrentPrimalTolerance(model_->currentPrimalTolerance()*1.05);
     2808        // if infeasible increase infeasibility cost
     2809        if (model_->infeasibilityCost()<1.0e19) {
     2810          model_->setInfeasibilityCost(model_->infeasibilityCost()*1.1);
     2811        }
    28062812      }
    28072813    } else {
  • branches/devel-1/ClpSimplexDual.cpp

    r35 r44  
    18311831
    18321832  while (problemStatus_<=-3) {
    1833     bool cleanDuals=false;
     1833    bool cleanDuals=situationChanged;
    18341834    int numberChangedBounds=0;
    18351835    int doOriginalTolerance=0;
  • branches/devel-1/Presolve.cpp

    r43 r44  
    532532    const bool duprow = ATOI("off");
    533533    const bool dual = ATOI("off");
    534 
     534   
    535535    // some things are expensive so just do once (normally)
    536536
     
    665665      printf("Starting expensive\n");
    666666#endif
     667
    667668      if (dual) {
    668669        int itry;
     
    682683        }
    683684      }
    684 
     685#if     DEBUG_PRESOLVE
     686      check_sol(prob,1.0e0);
     687#endif
    685688      if (dupcol) {
    686689        paction_ = dupcol_action::presolve(prob, paction_);
  • branches/devel-1/PresolveDupcol.cpp

    r29 r44  
    275275            // delete ithis
    276276            dcost[ithis] = 0.0;
     277            sol[ithis]=clo2;
    277278            {
    278279              int kcs = mcstrt[ithis];
     
    327328                // both have an lb, both have no ub
    328329                // the more expensive one would end up at its lb
    329                 fixed_down[nfixed_down++] = (dcost1<dcost2 ? ithis : ilast);
    330                 sort[jj]                  = (dcost1<dcost2 ? ilast : ithis);
     330                if (dcost1>dcost2) {
     331                  swap(ilast, ithis);
     332                  swap(clo1, clo2);
     333                  swap(cup1, cup2);
     334                  swap(dcost1, dcost2);
     335                }
     336                sol[ilast] = newSolution;
     337                if (prob->getColumnStatus(ilast)==PrePostsolveMatrix::basic||
     338                    prob->getColumnStatus(ithis)==PrePostsolveMatrix::basic)
     339                  prob->setColumnStatus(ilast,PrePostsolveMatrix::basic);
     340               
     341                sol[ithis]=clo2;
     342                fixed_down[nfixed_down++] = ithis ;
     343                sort[jj]                  = ilast;
    331344              } else {
    332345                /* ithis ranged - last not */
     
    336349                  fixed_down[nfixed_down++] = ithis;
    337350                  sort[jj] = ilast;
     351                  sol[ilast] = newSolution;
     352                  if (prob->getColumnStatus(ilast)==PrePostsolveMatrix::basic||
     353                      prob->getColumnStatus(ithis)==PrePostsolveMatrix::basic)
     354                    prob->setColumnStatus(ilast,PrePostsolveMatrix::basic);
     355                 
     356                  sol[ithis]=clo2;
    338357                } else {
    339358                  /* no good */
     
    350369                  fixed_up[nfixed_up++] = ilast;
    351370                  sort[jj] = ithis;
     371                  sol[ithis] = newSolution;
     372                  if (prob->getColumnStatus(ithis)==PrePostsolveMatrix::basic||
     373                      prob->getColumnStatus(ilast)==PrePostsolveMatrix::basic)
     374                    prob->setColumnStatus(ithis,PrePostsolveMatrix::basic);
     375                 
     376                  sol[ilast]=clo1;
    352377                } else {
    353378                  /* need both */
     
    361386                  fixed_down[nfixed_down++] = ilast;
    362387                  sort[jj] = ithis;
     388                  sol[ithis] = newSolution;
     389                  if (prob->getColumnStatus(ithis)==PrePostsolveMatrix::basic||
     390                      prob->getColumnStatus(ilast)==PrePostsolveMatrix::basic)
     391                    prob->setColumnStatus(ithis,PrePostsolveMatrix::basic);
     392                 
     393                  sol[ilast]=clo1;
    363394                } else {
    364395                  /* need both */
  • branches/devel-1/PresolveFixed.cpp

    r41 r44  
    276276  double *clo   = prob->clo_;
    277277  double *cup   = prob->cup_;
     278  double *csol = prob->sol_;
     279
     280  double *colels        = prob->colels_;
     281  int *hrow     = prob->hrow_;
     282  int *mcstrt   = prob->mcstrt_;
     283  int *hincol   = prob->hincol_;
     284
     285  double *acts  = prob->acts_;
     286
    278287
    279288  action *actions       = new  action[nfcols];
     
    281290  for (int ckc=0; ckc<nfcols; ckc++) {
    282291    int j = fcols[ckc];
     292    double movement;
    283293
    284294    action &f = actions[ckc];
     
    287297      f.bound = cup[j];
    288298      cup[j] = clo[j];
     299      movement = clo[j]-csol[j];
     300      csol[j] = clo[j];
    289301    } else {
    290302      f.bound = clo[j];
    291303      clo[j] = cup[j];
     304      movement = cup[j]-csol[j];
     305      csol[j] = cup[j];
     306    }
     307    if (movement) {
     308      int k;
     309      for (k=mcstrt[j];k<mcstrt[j]+hincol[j];k++) {
     310        int row = hrow[k];
     311        acts[row] += movement*colels[k];
     312      }
    292313    }
    293314  }
  • branches/devel-1/Test/ClpMain.cpp

    r41 r44  
    10831083              Presolve pinfo;
    10841084              if (preSolve) {
    1085                 model2 = pinfo.presolvedModel(models[iModel],1.0e-8,preSolve);
     1085                model2 = pinfo.presolvedModel(models[iModel],1.0e-8,false,preSolve);
    10861086                model2->checkSolution();
    10871087#ifdef CLP_DEBUG
Note: See TracChangeset for help on using the changeset viewer.