1/* $Id: CoinPresolveDoubleton.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 CoinPresolveDoubleton_H
7#define CoinPresolveDoubleton_H
8
9#define DOUBLETON 5
10
11/*! \class doubleton_action
12 \brief Solve ax+by=c for y and substitute y out of the problem.
13
14 This moves the bounds information for y onto x, making y free and allowing
15 us to substitute it away.
16 \verbatim
17 a x + b y = c
18 l1 <= x <= u1
19 l2 <= y <= u2 ==>
20
21 l2 <= (c - a x) / b <= u2
22 b/-a > 0 ==> (b l2 - c) / -a <= x <= (b u2 - c) / -a
23 b/-a < 0 ==> (b u2 - c) / -a <= x <= (b l2 - c) / -a
24 \endverbatim
25*/
26class doubleton_action : public CoinPresolveAction {
27 public:
28 struct action {
29
30 double clox;
31 double cupx;
32 double costx;
33
34 double costy;
35
36 double rlo;
37
38 double coeffx;
39 double coeffy;
40
41 double *colel;
42
43 int icolx;
44 int icoly;
45 int row;
46 int ncolx;
47 int ncoly;
48 };
49
50 const int nactions_;
51 const action *const actions_;
52
53 private:
54 doubleton_action(int nactions,
55 const action *actions,
56 const CoinPresolveAction *next) :
57 CoinPresolveAction(next),
58 nactions_(nactions), actions_(actions)
59{}
60
61 public:
62 const char *name() const { return ("doubleton_action"); }
63
64 static const CoinPresolveAction *presolve(CoinPresolveMatrix *,
65 const CoinPresolveAction *next);
66
67 void postsolve(CoinPostsolveMatrix *prob) const;
68
69 ~doubleton_action();
70};
71#endif
72