COIN-OR::LEMON - Graph Library

source: lemon-0.x/test/mip_test.cc @ 2196:09af6d2b683b

Last change on this file since 2196:09af6d2b683b was 2149:b437bdee6fd0, checked in by athos, 14 years ago

Some tests added to the test file mip_test.cc. One problem is the verbosity of the mip solver in glpk which I couldn't find how to kill.

File size: 1.5 KB
Line 
1#include <lemon/lp.h>
2#include "test_tools.h"
3
4using namespace lemon;
5
6void solveAndCheck(Mip& lp, LpSolverBase::SolutionStatus stat,
7                   double exp_opt) {
8  using std::string;
9  lp.solve();
10  //int decimal,sign;
11  std::ostringstream buf;
12  buf << "Primalstatus should be: " << int(stat)<<" and it is "<<int(lp.primalStatus());
13
14  //  itoa(stat,buf1, 10);
15  check(lp.primalStatus()==stat, buf.str());
16
17  if (stat ==  LpSolverBase::OPTIMAL) {
18    std::ostringstream buf;
19    buf << "Wrong optimal value: the right optimum is " << exp_opt;
20    check(std::abs(lp.primalValue()-exp_opt) < 1e-3, buf.str());
21    //+ecvt(exp_opt,2)
22  }
23}
24
25void aTest(Mip& mip)
26{
27 //The following example is very simple
28
29  typedef Mip::Row Row;
30  typedef Mip::Col Col;
31
32
33  Col x1 = mip.addCol();
34  Col x2 = mip.addCol();
35
36
37
38  //Constraints
39  mip.addRow(2*x1+x2 <=2); 
40  mip.addRow(x1-2*x2 <=0); 
41
42  //Nonnegativity of the variable x1
43  mip.colLowerBound(x1, 0);
44
45
46
47  //Objective function
48  mip.setObj(x1);
49
50  mip.max();
51
52
53  //Maximization of x1
54  //over the triangle with vertices
55  double expected_opt=4.0/5.0;
56  solveAndCheck(mip, Mip::OPTIMAL, expected_opt);
57
58  //Restrict x2 to integer
59  mip.colType(x2,Mip::INTEGER); 
60  expected_opt=1.0/2.0;
61  solveAndCheck(mip, Mip::OPTIMAL, expected_opt);
62
63
64  //Restrict both to integer
65  mip.colType(x1,Mip::INTEGER); 
66  expected_opt=0;
67  solveAndCheck(mip, Mip::OPTIMAL, expected_opt);
68
69 
70
71}
72
73
74int main()
75{
76
77#ifdef HAVE_GLPK
78  MipGlpk mip1;
79  aTest(mip1);
80#endif
81
82  return 0;
83
84}
Note: See TracBrowser for help on using the repository browser.