lpsub.h

Go to the documentation of this file.
00001 
00046 #ifndef ABA_LPSUBH
00047 #define ABA_LPSUBH
00048 
00049 #include "abacus/lp.h"
00050 
00051 class ABA_INFEASCON;
00052 class ABA_SUB;
00053 class ABA_MASTER;
00054 class ABA_FSVARSTAT;
00055 class ABA_CONSTRAINT;
00056 class ABA_VARIABLE;
00057   class  ABA_LPSUB :  public virtual ABA_LP  {
00058     friend class ABA_SUB;
00059     friend class ABA_SETBRANCHRULE;
00060     friend class ABA_BOUNDBRANCHRULE;
00061     friend class ABA_VALBRANCHRULE;
00062     friend class ABA_CONBRANCHRULE;
00063     friend class COPBRANCHRULE;
00064     public: 
00065 
00072       ABA_LPSUB (ABA_MASTER *master, const ABA_SUB *sub);
00073 
00080       virtual ~ABA_LPSUB();
00081       const ABA_SUB * sub() const;
00082 
00087       int trueNCol() const;
00088 
00092       int trueNnz() const;
00093 
00102       double lBound(int i)  const;
00103 
00112       double uBound(int i)  const;
00113 
00120       virtual double value() const;
00121 
00127       virtual double xVal(int i);
00128 
00135       virtual double barXVal(int i);
00136 
00141       virtual double reco(int i);
00142 
00147       virtual ABA_LPVARSTAT::STATUS lpVarStat(int i);
00148 
00149       virtual int getInfeas(int &infeasCon, int &infeasVar, double *bInvRow);
00167 
00176       virtual bool infeasible() const;
00177 
00180       ABA_BUFFER<ABA_INFEASCON*> *infeasCon();
00181 
00190       virtual void loadBasis(ABA_ARRAY<ABA_LPVARSTAT::STATUS> &lpVarStat,
00191                              ABA_ARRAY<ABA_SLACKSTAT::STATUS> &slackStat);
00192     protected: 
00193 
00202       virtual void initialize();
00203       
00204     private:
00205 
00222       virtual OPTSTAT optimize(METHOD method);
00223 
00226       virtual void removeCons(ABA_BUFFER<int> &ind);
00227 
00230       virtual void removeVars(ABA_BUFFER<int> &vars);
00231 
00234       virtual void addCons(ABA_BUFFER<ABA_CONSTRAINT*> &newCons);
00235 
00242       virtual void addVars(ABA_BUFFER<ABA_VARIABLE*> &vars,
00243                            ABA_BUFFER<ABA_FSVARSTAT*> &fsVarStat,
00244                            ABA_BUFFER<double> &lb, ABA_BUFFER<double> &ub);
00245 
00251       virtual void changeLBound(int i, double newLb);
00252 
00258       virtual void changeUBound(int i, double newUb);
00259 
00262       virtual void varRealloc(int newSize);
00263 
00266       virtual void conRealloc(int newSize);
00267 
00270       void constraint2row(ABA_BUFFER<ABA_CONSTRAINT*> &newCons,
00271                           ABA_BUFFER<ABA_ROW*> &newRows);
00272 
00279       bool           eliminable(int i) const;
00280 
00289       bool           eliminated(int i) const;
00290 
00298       virtual double elimVal(int i) const;
00299 
00306       virtual double elimVal(ABA_FSVARSTAT *stat, double lb, double ub) const;
00307       void initialize(ABA_OPTSENSE sense, int nRow, int maxRow,
00308                       int nCol, int maxCol,
00309                       ABA_ARRAY<double> &obj, ABA_ARRAY<double> &lBound,
00310                       ABA_ARRAY<double> &uBound, ABA_ARRAY<ABA_ROW*> &rows);  
00311       void initialize(ABA_OPTSENSE sense, int nRow, int maxRow,
00312                       int nCol, int maxCol,
00313                       ABA_ARRAY<double> &obj, ABA_ARRAY<double> &lBound,
00314                       ABA_ARRAY<double> &uBound, ABA_ARRAY<ABA_ROW*> &rows,
00315                       ABA_ARRAY<ABA_LPVARSTAT::STATUS> &lpVarStat,
00316                       ABA_ARRAY<ABA_SLACKSTAT::STATUS> &slackStat);
00317       int        nCol()   const;      
00318       int        maxCol() const;      
00319       int        nnz()    const;      
00320       double     obj(int i)     const;
00321 
00322       void rowRealloc(int newSize);
00323       void colRealloc(int newSize);
00324 
00327       const ABA_SUB          *sub_;
00328 
00334       ABA_ARRAY<int>         orig2lp_;
00335 
00338       ABA_ARRAY<int>         lp2orig_;
00339 
00342       ABA_BUFFER<ABA_INFEASCON*> infeasCons_;
00343 
00347       double             valueAdd_;
00348 
00351       int                nOrigVar_;
00352       ABA_LPSUB(const ABA_LPSUB &rhs);
00353       const ABA_LPSUB &operator=(const ABA_LPSUB &rhs);
00354   };
00355 
00356 
00357 inline const ABA_SUB *ABA_LPSUB::sub() const
00358 {
00359     return sub_;
00360 }
00361 
00362 inline bool ABA_LPSUB::eliminated(int i) const
00363   {
00364     if (orig2lp_[i] == -1) return true;
00365     else                   return false;
00366   }
00367 
00368 inline int ABA_LPSUB::trueNCol() const
00369   {
00370     return ABA_LP::nCol();
00371   }
00372 
00373 inline int ABA_LPSUB::trueNnz() const
00374   {
00375     return ABA_LP::nnz();
00376   }
00377 
00378 inline double ABA_LPSUB::value() const
00379   {
00380     return ABA_LP::value() + valueAdd_;
00381   }
00382 
00383 inline ABA_BUFFER<ABA_INFEASCON*> *ABA_LPSUB::infeasCon()
00384   {
00385     return &infeasCons_;
00386   }
00387 
00388 
00389 #endif  // ABA_LPSUBH
00390 

Generated on Tue Aug 14 18:09:54 2007 for ABACUS by  doxygen 1.5.1