00001
00002
00003
00004
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 int *rowcolsxs;
00027 double *rowelsxs;
00028
00029 const double *costsx;
00030 int col;
00031 int rowy;
00032
00033 int nincol;
00034 };
00035
00036 const int nactions_;
00037
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 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