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  

4  using namespace lemon; 

5  

6  void 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) < 1e3, buf.str()); 

21  //+ecvt(exp_opt,2) 

22  } 

23  } 

24  

25  void 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(x12*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  

74  int 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.