CoinUtils trunk
|
00001 /* $Id$ */ 00002 // Copyright (C) 2002, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 // This code is licensed under the terms of the Eclipse Public License (EPL). 00005 00006 #ifndef CoinPresolveSubst_H 00007 #define CoinPresolveSubst_H 00008 #define SUBST_ROW 21 00009 00010 #include "CoinPresolveMatrix.hpp" 00011 00012 class subst_constraint_action : public CoinPresolveAction { 00013 private: 00014 subst_constraint_action(); 00015 subst_constraint_action(const subst_constraint_action& rhs); 00016 subst_constraint_action& operator=(const subst_constraint_action& rhs); 00017 00018 struct action { 00019 double *rlos; 00020 double *rups; 00021 00022 double *coeffxs; 00023 int *rows; 00024 00025 int *ninrowxs; 00026 /*const*/ int *rowcolsxs; 00027 /*const*/ double *rowelsxs; 00028 00029 const double *costsx; 00030 int col; 00031 int rowy; 00032 00033 int nincol; 00034 }; 00035 00036 const int nactions_; 00037 // actions_ is owned by the class and must be deleted at destruction 00038 const action *const actions_; 00039 00040 subst_constraint_action(int nactions, 00041 action *actions, 00042 const CoinPresolveAction *next) : 00043 CoinPresolveAction(next), 00044 nactions_(nactions), actions_(actions) {} 00045 00046 public: 00047 const char *name() const; 00048 00049 static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, 00050 const int *implied_free, 00051 const int * which, 00052 int numberFree, 00053 const CoinPresolveAction *next, 00054 int & fill_level); 00055 static const CoinPresolveAction *presolveX(CoinPresolveMatrix * prob, 00056 const CoinPresolveAction *next, 00057 int fillLevel); 00058 00059 void postsolve(CoinPostsolveMatrix *prob) const; 00060 00061 ~subst_constraint_action(); 00062 }; 00063 00064 00065 00066 00067 00068 /*static*/ void implied_bounds(const double *els, 00069 const double *clo, const double *cup, 00070 const int *hcol, 00071 CoinBigIndex krs, CoinBigIndex kre, 00072 double *maxupp, double *maxdownp, 00073 int jcol, 00074 double rlo, double rup, 00075 double *iclb, double *icub); 00076 #endif