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 00013 #define SUBST_ROW 21 00014 00015 #include "CoinPresolveMatrix.hpp" 00016 00037 class subst_constraint_action : public CoinPresolveAction { 00038 private: 00039 subst_constraint_action(); 00040 subst_constraint_action(const subst_constraint_action& rhs); 00041 subst_constraint_action& operator=(const subst_constraint_action& rhs); 00042 00043 struct action { 00044 double *rlos; 00045 double *rups; 00046 00047 double *coeffxs; 00048 int *rows; 00049 00050 int *ninrowxs; 00051 int *rowcolsxs; 00052 double *rowelsxs; 00053 00054 const double *costsx; 00055 int col; 00056 int rowy; 00057 00058 int nincol; 00059 }; 00060 00061 const int nactions_; 00062 // actions_ is owned by the class and must be deleted at destruction 00063 const action *const actions_; 00064 00065 subst_constraint_action(int nactions, 00066 action *actions, 00067 const CoinPresolveAction *next) : 00068 CoinPresolveAction(next), 00069 nactions_(nactions), actions_(actions) {} 00070 00071 public: 00072 const char *name() const; 00073 00074 static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob, 00075 const int *implied_free, 00076 const int * which, 00077 int numberFree, 00078 const CoinPresolveAction *next, 00079 int fill_level); 00080 static const CoinPresolveAction *presolveX(CoinPresolveMatrix * prob, 00081 const CoinPresolveAction *next, 00082 int fillLevel); 00083 00084 void postsolve(CoinPostsolveMatrix *prob) const; 00085 00086 virtual ~subst_constraint_action(); 00087 }; 00088 00089 00090 00091 00092 00093 /*static*/ void implied_bounds(const double *els, 00094 const double *clo, const double *cup, 00095 const int *hcol, 00096 CoinBigIndex krs, CoinBigIndex kre, 00097 double *maxupp, double *maxdownp, 00098 int jcol, 00099 double rlo, double rup, 00100 double *iclb, double *icub); 00101 #endif