gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Fix (and improve) error message in mip_test.cc (#317)
0 1 0
default
1 file changed with 2 insertions and 1 deletions:
↑ Collapse diff ↑
Show white space 96 line context
... ...
@@ -5,97 +5,98 @@
5 5
 * Copyright (C) 2003-2009
6 6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 8
 *
9 9
 * Permission to use, modify and distribute this software is granted
10 10
 * provided that this copyright notice appears in all copies. For
11 11
 * precise terms see the accompanying LICENSE file.
12 12
 *
13 13
 * This software is provided "AS IS" with no warranty of any kind,
14 14
 * express or implied, and with no claim as to its suitability for any
15 15
 * purpose.
16 16
 *
17 17
 */
18 18

	
19 19
#include "test_tools.h"
20 20

	
21 21
#include <lemon/config.h>
22 22

	
23 23
#ifdef LEMON_HAVE_CPLEX
24 24
#include <lemon/cplex.h>
25 25
#endif
26 26

	
27 27
#ifdef LEMON_HAVE_GLPK
28 28
#include <lemon/glpk.h>
29 29
#endif
30 30

	
31 31
#ifdef LEMON_HAVE_CBC
32 32
#include <lemon/cbc.h>
33 33
#endif
34 34

	
35 35

	
36 36
using namespace lemon;
37 37

	
38 38
void solveAndCheck(MipSolver& mip, MipSolver::ProblemType stat,
39 39
                   double exp_opt) {
40 40
  using std::string;
41 41

	
42 42
  mip.solve();
43 43
  //int decimal,sign;
44 44
  std::ostringstream buf;
45 45
  buf << "Type should be: " << int(stat)<<" and it is "<<int(mip.type());
46 46

	
47 47

	
48 48
  //  itoa(stat,buf1, 10);
49 49
  check(mip.type()==stat, buf.str());
50 50

	
51 51
  if (stat ==  MipSolver::OPTIMAL) {
52 52
    std::ostringstream sbuf;
53
    buf << "Wrong optimal value: the right optimum is " << exp_opt;
53
    sbuf << "Wrong optimal value ("<< mip.solValue()
54
         <<" instead of " << exp_opt << ")";
54 55
    check(std::abs(mip.solValue()-exp_opt) < 1e-3, sbuf.str());
55 56
    //+ecvt(exp_opt,2)
56 57
  }
57 58
}
58 59

	
59 60
void aTest(MipSolver& mip)
60 61
{
61 62
  //The following example is very simple
62 63

	
63 64

	
64 65
  typedef MipSolver::Row Row;
65 66
  typedef MipSolver::Col Col;
66 67

	
67 68

	
68 69
  Col x1 = mip.addCol();
69 70
  Col x2 = mip.addCol();
70 71

	
71 72

	
72 73
  //Objective function
73 74
  mip.obj(x1);
74 75

	
75 76
  mip.max();
76 77

	
77 78
  //Unconstrained optimization
78 79
  mip.solve();
79 80
  //Check it out!
80 81

	
81 82
  //Constraints
82 83
  mip.addRow(2 * x1 + x2 <= 2);
83 84
  Row y2 = mip.addRow(x1 - 2 * x2 <= 0);
84 85

	
85 86
  //Nonnegativity of the variable x1
86 87
  mip.colLowerBound(x1, 0);
87 88

	
88 89

	
89 90
  //Maximization of x1
90 91
  //over the triangle with vertices (0,0),(4/5,2/5),(0,2)
91 92
  double expected_opt=4.0/5.0;
92 93
  solveAndCheck(mip, MipSolver::OPTIMAL, expected_opt);
93 94

	
94 95

	
95 96
  //Restrict x2 to integer
96 97
  mip.colType(x2,MipSolver::INTEGER);
97 98
  expected_opt=1.0/2.0;
98 99
  solveAndCheck(mip, MipSolver::OPTIMAL, expected_opt);
99 100

	
100 101

	
101 102
  //Restrict both to integer
0 comments (0 inline)