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