00001 // Copyright (C) 2002, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 00004 #ifndef CoinPresolveTighten_H 00005 #define CoinPresolveTighten_H 00006 00007 #include "CoinPresolveMatrix.hpp" 00008 00009 // This action has no separate class; 00010 // instead, it decides which columns can be made fixed 00011 // and calls make_fixed_action::presolve. 00012 const CoinPresolveAction *tighten_zero_cost(CoinPresolveMatrix *prob, 00013 const CoinPresolveAction *next); 00014 00015 #define DO_TIGHTEN 30 00016 00017 class do_tighten_action : public CoinPresolveAction { 00018 do_tighten_action(); 00019 do_tighten_action(const do_tighten_action& rhs); 00020 do_tighten_action& operator=(const do_tighten_action& rhs); 00021 00022 struct action { 00023 int *rows; 00024 double *lbound; 00025 double *ubound; 00026 int col; 00027 int nrows; 00028 int direction; // just for assertions 00029 }; 00030 00031 const int nactions_; 00032 const action *const actions_; 00033 00034 do_tighten_action(int nactions, 00035 const action *actions, 00036 const CoinPresolveAction *next) : 00037 CoinPresolveAction(next), 00038 nactions_(nactions), actions_(actions) {} 00039 00040 public: 00041 const char *name() const; 00042 00043 static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob, 00044 const CoinPresolveAction *next); 00045 00046 void postsolve(CoinPostsolveMatrix *prob) const; 00047 00048 ~do_tighten_action(); 00049 00050 }; 00051 #endif 00052 00053