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