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 rowy;
00025
00026 int nincol;
00027 };
00028
00029 const int nactions_;
00030 const action *const actions_;
00031
00032 subst_constraint_action(int nactions,
00033 action *actions,
00034 const CoinPresolveAction *next) :
00035 CoinPresolveAction(next),
00036 nactions_(nactions), actions_(actions) {};
00037
00038 public:
00039 const char *name() const;
00040
00041 static const CoinPresolveAction *presolve(CoinPresolveMatrix * prob,
00042 int *implied_free,
00043 const CoinPresolveAction *next,
00044 int & fill_level);
00045 static const CoinPresolveAction *presolveX(CoinPresolveMatrix * prob,
00046 const CoinPresolveAction *next,
00047 int fillLevel);
00048
00049 void postsolve(CoinPostsolveMatrix *prob) const;
00050
00051 ~subst_constraint_action();
00052 };
00053
00054
00055
00056
00057
00058 void implied_bounds(const double *els,
00059 const double *clo, const double *cup,
00060 const int *hcol,
00061 CoinBigIndex krs, CoinBigIndex kre,
00062 double *maxupp, double *maxdownp,
00063 int jcol,
00064 double rlo, double rup,
00065 double *iclb, double *icub);
00066 #endif