00001
00002
00003
00004 #ifndef CoinPresolveSubst_H
00005 #define CoinPresolveSubst_H
00006 #define SUBST_ROW 21
00007
00008
00009 class subst_constraint_action : public CoinPresolveAction {
00010 public:
00011 struct action {
00012 double *rlos;
00013 double *rups;
00014
00015 double *coeffxs;
00016 int *rows;
00017
00018 int *ninrowxs;
00019 int *rowcolsxs;
00020 double *rowelsxs;
00021
00022 const double *costsx;
00023 int col;
00024 int rowx;
00025 int rowy;
00026
00027 int nincol;
00028 };
00029
00030 const int nactions_;
00031 const action *const actions_;
00032
00033 subst_constraint_action(int nactions,
00034 action *actions,
00035 const CoinPresolveAction *next) :
00036 CoinPresolveAction(next),
00037 nactions_(nactions), actions_(actions) {};
00038
00039 public:
00040 const char *name() const;
00041
00042 static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob,
00043 int *implied_free,
00044 const CoinPresolveAction *next,
00045 int & fill_level);
00046 static const CoinPresolveAction *presolveX(CoinPresolveMatrix * prob,
00047 const CoinPresolveAction *next,
00048 int fillLevel);
00049
00050 void postsolve(CoinPostsolveMatrix *prob) const;
00051
00052 ~subst_constraint_action();
00053 };
00054
00055
00056
00057
00058
00059 void implied_bounds(const double *els,
00060 const double *clo, const double *cup,
00061 const int *hcol,
00062 CoinBigIndex krs, CoinBigIndex kre,
00063 double *maxupp, double *maxdownp,
00064 int jcol,
00065 double rlo, double rup,
00066 double *iclb, double *icub);
00067 #endif