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