1/* $Id: CoinPresolveTighten.hpp 1372 2011-01-03 23:31:00Z lou $ */
2// Copyright (C) 2002, International Business Machines
3// Corporation and others. All Rights Reserved.
4// This code is licensed under the terms of the Eclipse Public License (EPL).
5
6#ifndef CoinPresolveTighten_H
7#define CoinPresolveTighten_H
8
9#include "CoinPresolveMatrix.hpp"
10
11// This action has no separate class;
12// instead, it decides which columns can be made fixed
13// and calls make_fixed_action::presolve.
14const CoinPresolveAction *tighten_zero_cost(CoinPresolveMatrix *prob,
15 const CoinPresolveAction *next);
16
17#define DO_TIGHTEN 30
18
19class do_tighten_action : public CoinPresolveAction {
20 do_tighten_action();
21 do_tighten_action(const do_tighten_action& rhs);
22 do_tighten_action& operator=(const do_tighten_action& rhs);
23
24 struct action {
25 int *rows;
26 double *lbound;
27 double *ubound;
28 int col;
29 int nrows;
30 int direction; // just for assertions
31 };
32
33 const int nactions_;
34 const action *const actions_;
35
36 do_tighten_action(int nactions,
37 const action *actions,
38 const CoinPresolveAction *next) :
39 CoinPresolveAction(next),
40 nactions_(nactions), actions_(actions) {}
41
42 public:
43 const char *name() const override;
44
45 static const CoinPresolveAction *presolve(CoinPresolveMatrix *prob,
46 const CoinPresolveAction *next);
47
48 void postsolve(CoinPostsolveMatrix *prob) const override;
49
50 ~do_tighten_action();
51
52};
53#endif
54