Changeset 39 for branches


Ignore:
Timestamp:
Oct 10, 2002 1:12:17 PM (17 years ago)
Author:
forrest
Message:

Messing about with presolve

Location:
branches/devel-1
Files:
10 edited

Legend:

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

    r37 r39  
    5858}
    5959
     60#if 0
    6061void Presolve::presolve(ClpSimplex& si)
    6162{
     
    163164  delete[]sol;
    164165}
     166#endif
    165167/* This version of presolve returns a pointer to a new presolved
    166168   model.  NULL if infeasible
     
    203205                        *presolvedModel_,
    204206                        nrows_, nelems_,true);
    205     prob.originalModel_ = originalModel_;
     207    prob.handler_ = presolvedModel_->messageHandler();
     208    prob.messages_ = presolvedModel_->messages();
    206209
    207210    // move across feasibility tolerance
     
    254257        if (lowerValue>upperValue) {
    255258          numberChanges++;
    256           originalModel_->messageHandler()->message(CLP_PRESOLVE_COLINFEAS,
    257                                              originalModel_->messages())
     259          presolvedModel_->messageHandler()->message(CLP_PRESOLVE_COLINFEAS,
     260                                             presolvedModel_->messages())
    258261                                               <<iOriginal
    259262                                               <<lowerValue
     
    273276      }
    274277      if (numberChanges) {
    275           originalModel_->messageHandler()->message(CLP_PRESOLVE_INTEGERMODS,
    276                                              originalModel_->messages())
     278          presolvedModel_->messageHandler()->message(CLP_PRESOLVE_INTEGERMODS,
     279                                             presolvedModel_->messages())
    277280                                               <<numberChanges
    278281                                               <<CoinMessageEol;
     
    286289  int ncolsAfter = presolvedModel_->getNumCols();
    287290  int nelsAfter = presolvedModel_->getNumElements();
    288   originalModel_->messageHandler()->message(CLP_PRESOLVE_STATS,
    289                                      originalModel_->messages())
     291  presolvedModel_->messageHandler()->message(CLP_PRESOLVE_STATS,
     292                                     presolvedModel_->messages())
    290293                                       <<nrowsAfter<< -(nrows_ - nrowsAfter)
    291294                                       << ncolsAfter<< -(ncols_ - ncolsAfter)
     
    312315{
    313316  if (!presolvedModel_->isProvenOptimal()) {
    314     originalModel_->messageHandler()->message(CLP_PRESOLVE_NONOPTIMAL,
    315                                              originalModel_->messages())
     317    presolvedModel_->messageHandler()->message(CLP_PRESOLVE_NONOPTIMAL,
     318                                             presolvedModel_->messages())
    316319                                               <<CoinMessageEol;
    317320  }
     
    353356                       sol, acts,
    354357                       colstat, rowstat);
    355   prob.originalModel_ = originalModel_;
    356358   
    357359  postsolve(prob);
     
    364366{
    365367  return originalColumn_;
     368}
     369// Set pointer to original model
     370void
     371Presolve::setOriginalModel(ClpSimplex * model)
     372{
     373  originalModel_=model;
    366374}
    367375
     
    584592  if (prob->status_) {
    585593    if (prob->status_==1)
    586           originalModel_->messageHandler()->message(CLP_PRESOLVE_INFEAS,
    587                                              originalModel_->messages())
     594          presolvedModel_->messageHandler()->message(CLP_PRESOLVE_INFEAS,
     595                                             presolvedModel_->messages())
    588596                                               <<prob->feasibilityTolerance_
    589597                                               <<CoinMessageEol;
    590598    else if (prob->status_==2)
    591           originalModel_->messageHandler()->message(CLP_PRESOLVE_UNBOUND,
    592                                              originalModel_->messages())
     599          presolvedModel_->messageHandler()->message(CLP_PRESOLVE_UNBOUND,
     600                                             presolvedModel_->messages())
    593601                                               <<CoinMessageEol;
    594602    else
    595           originalModel_->messageHandler()->message(CLP_PRESOLVE_INFEASUNBOUND,
    596                                              originalModel_->messages())
     603          presolvedModel_->messageHandler()->message(CLP_PRESOLVE_INFEASUNBOUND,
     604                                             presolvedModel_->messages())
    597605                                               <<CoinMessageEol;
    598606    delete paction_;
     
    711719                        originalModel_->primalRowSolution());
    712720  originalModel_->checkSolution();
    713   originalModel_->messageHandler()->message(CLP_PRESOLVE_POSTSOLVE,
    714                                             originalModel_->messages())
     721  presolvedModel_->messageHandler()->message(CLP_PRESOLVE_POSTSOLVE,
     722                                            presolvedModel_->messages())
    715723                                              <<originalModel_->objectiveValue()
    716724                                              <<originalModel_->sumDualInfeasibilities()
     
    728736    } else {
    729737      originalModel_->setProblemStatus( -1);
    730       originalModel_->messageHandler()->message(CLP_PRESOLVE_NEEDS_CLEANING,
    731                                             originalModel_->messages())
     738      presolvedModel_->messageHandler()->message(CLP_PRESOLVE_NEEDS_CLEANING,
     739                                            presolvedModel_->messages())
    732740                                              <<CoinMessageEol;
    733741    }
  • branches/devel-1/PresolveDoubleton.cpp

    r35 r39  
    671671              } else {
    672672                prob->status_ |= 1;
    673                 prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_COLINFEAS,
    674                                                          prob->originalModel_->messages())
     673                prob->messageHandler()->message(CLP_PRESOLVE_COLINFEAS,
     674                                                         prob->messages())
    675675                                                           <<icolx
    676676                                                           <<lo2
  • branches/devel-1/PresolveDual.cpp

    r29 r39  
    171171          // dj>0 at optimality ==> must be at lower bound
    172172          if (clo[j] <= -ekkinf) {
    173             prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDB,
    174                                              prob->originalModel_->messages())
     173            prob->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDB,
     174                                             prob->messages())
    175175                                               <<j
    176176                                               <<CoinMessageEol;
     
    183183          // dj<0 at optimality ==> must be at upper bound
    184184          if (cup[j] >= ekkinf) {
    185             prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDA,
    186                                              prob->originalModel_->messages())
     185            prob->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDA,
     186                                             prob->messages())
    187187                                               <<j
    188188                                               <<CoinMessageEol;
  • branches/devel-1/PresolveEmpty.cpp

    r31 r39  
    7171        e.sol = clo[jcol];
    7272      else {
    73           prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDB,
    74                                              prob->originalModel_->messages())
     73          prob->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDB,
     74                                             prob->messages())
    7575                                               <<jcol
    7676                                               <<CoinMessageEol;
     
    8282        e.sol = cup[jcol];
    8383      else {
    84           prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDA,
    85                                              prob->originalModel_->messages())
     84          prob->messageHandler()->message(CLP_PRESOLVE_COLUMNBOUNDA,
     85                                             prob->messages())
    8686                                               <<jcol
    8787                                               <<CoinMessageEol;
     
    302302          } else {
    303303            prob->status_|= 1;
    304           prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    305                                              prob->originalModel_->messages())
     304          prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     305                                             prob->messages())
    306306                                               <<i
    307307                                               <<rlo[i]
  • branches/devel-1/PresolveForcing.cpp

    r31 r39  
    251251        /* there is an upper bound and it can't be reached */
    252252        prob->status_|= 1;
    253         prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    254                                              prob->originalModel_->messages())
     253        prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     254                                             prob->messages())
    255255                                               <<irow
    256256                                               <<rlo[irow]
     
    261261        /* there is a lower bound and it can't be reached */
    262262        prob->status_|= 1;
    263         prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    264                                              prob->originalModel_->messages())
     263        prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     264                                             prob->messages())
    265265                                               <<irow
    266266                                               <<rlo[irow]
     
    579579      /* infeasible */
    580580        prob->status_|= 1;
    581         prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    582                                              prob->originalModel_->messages())
     581        prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     582                                             prob->messages())
    583583                                               <<irow
    584584                                               <<rlo[irow]
     
    589589      /* infeasible */
    590590        prob->status_|= 1;
    591         prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    592                                              prob->originalModel_->messages())
     591        prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     592                                             prob->messages())
    593593                                               <<irow
    594594                                               <<rlo[irow]
  • branches/devel-1/PresolveImpliedFree.cpp

    r33 r39  
    170170            /* there is an upper bound and it can't be reached */
    171171            prob->status_|= 1;
    172             prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    173                                              prob->originalModel_->messages())
     172            prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     173                                             prob->messages())
    174174                                               <<row
    175175                                               <<rlo[row]
     
    180180            /* there is a lower bound and it can't be reached */
    181181            prob->status_|= 1;
    182             prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    183                                              prob->originalModel_->messages())
     182            prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     183                                             prob->messages())
    184184                                               <<row
    185185                                               <<rlo[row]
  • branches/devel-1/PresolveSingleton.cpp

    r35 r39  
    149149        } else {
    150150          prob->status_ |= 1;
    151           prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_COLINFEAS,
    152                                              prob->originalModel_->messages())
     151          prob->messageHandler()->message(CLP_PRESOLVE_COLINFEAS,
     152                                             prob->messages())
    153153                                               <<jcol
    154154                                               <<lo
  • branches/devel-1/PresolveSubst.cpp

    r31 r39  
    573573          if (maxup < PRESOLVE_INF && maxup + tol < rlo[row]) {
    574574            prob->status_|= 1;
    575             prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    576                                              prob->originalModel_->messages())
     575            prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     576                                             prob->messages())
    577577                                               <<row
    578578                                               <<rlo[row]
     
    582582          } else if (-PRESOLVE_INF < maxdown && rup[row] < maxdown - tol) {
    583583            prob->status_|= 1;
    584             prob->originalModel_->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
    585                                              prob->originalModel_->messages())
     584            prob->messageHandler()->message(CLP_PRESOLVE_ROWINFEAS,
     585                                             prob->messages())
    586586                                               <<row
    587587                                               <<rlo[row]
  • branches/devel-1/include/Presolve.hpp

    r33 r39  
    2626  virtual ~Presolve();
    2727  //@}
    28 
     28  // taken out for now
     29#if 0
    2930  /**@name presolve - presolves a model, transforming the model
    3031   * and saving information in the Presolve object needed for postsolving.
     
    5354                         unsigned char *colstat,
    5455                         unsigned char *rowstat);
    55   /** This version of presolve returns a pointer to a new presolved
     56#endif
     57  /**@name presolve - presolves a model, transforming the model
     58   * and saving information in the Presolve object needed for postsolving.
     59   * This is method is virtual; the idea is that in the future,
     60   * one could override this method to customize how the various
     61   * presolve techniques are applied.
     62
     63   This version of presolve returns a pointer to a new presolved
    5664      model.  NULL if infeasible or unbounded. 
    5765      This should be paired with postsolve
     
    7280  /// Return pointer to original model
    7381  ClpSimplex * originalModel() const;
     82  /// Set pointer to original model
     83  void setOriginalModel(ClpSimplex * model);
     84   
    7485  /// return pointer to original columns
    7586  const int * originalColumns() const;
    7687
    7788
    78   /** This version updates original*/
     89  /**@name postsolve - postsolve the problem.  If the problem
     90    has not been solved to optimality, there are no guarantees.
     91   If you are using an algorithm like simplex that has a concept
     92   of "basic" rows/cols, then set updateStatus
     93 
     94   Note that if you modified the original problem after presolving,
     95   then you must ``undo'' these modifications before calling postsolve.
     96  This version updates original*/
    7997  virtual void postsolve(bool updateStatus=true);
    8098
  • branches/devel-1/include/PresolveMatrix.hpp

    r31 r39  
    137137  // Original objective offset
    138138  double originalOffset_;
    139   // Pointer back to model
    140   const ClpSimplex * originalModel_;
     139  // Message handler
     140   CoinMessageHandler *  handler_;
     141   /// Messages
     142   CoinMessages messages_;
     143
     144   inline CoinMessageHandler * messageHandler() const
     145  { return handler_; }
     146   /// Return messages
     147   inline CoinMessages messages() const
     148  { return messages_; }
    141149  // colrep
    142150  int ncols_;
Note: See TracChangeset for help on using the changeset viewer.