Gröbner basis project
Codebase for research into Gröbner basis computation
test_glpk_solver.cxx
1 #include <iostream>
2 using std::cout; using std::endl;
3 
4 #include "system_constants.hpp"
5 
6 #include "glpk_solver.hpp"
7 
8 int main() {
9  NVAR_TYPE n = 5;
10  GLPK_Solver gs(5);
11  CONSTR_TYPE cdata[5] { 1, -1, 0, 0, 0 };
12  constraint c1(5, cdata);
13  cdata[0] = -1; cdata[1] = 4;
14  constraint c2(5, cdata);
15  vector<constraint> cs;
16  cs.push_back(c1); cs.push_back(c2);
17  cout << "adding " << c1 << " , " << c2 << endl;
18  bool success = gs.solve(cs);
19  if (not success)
20  cout << "inconsistent system!\n";
21  else {
22  const set<ray> & rays = gs.get_rays();
23  cout << "consistent system! solutions are:\n";
24  for (const ray & r : rays)
25  cout << '\t' << r << endl;
26  cout << ray_sum(rays) << endl;
27  }
28  cs.clear();
29  cdata[0] = 1; cdata[1] = 0; cdata[2] = -1;
30  constraint c3(5, cdata);
31  cdata[0] = 0; cdata[1] = -1; cdata[2] = 1;
32  constraint c4(5, cdata);
33  cdata[0] = 0; cdata[1] = 3; cdata[2] = -1;
34  constraint c5(5, cdata);
35  cs.push_back(c3); cs.push_back(c4); cs.push_back(c5);
36  cout << "adding " << c3 << " , " << c4 << " , " << c5 << endl;
37  success = gs.solve(cs);
38  if (not success)
39  cout << "inconsistent system!\n";
40  else {
41  const set<ray> & rays = gs.get_rays();
42  cout << "consistent system! solutions are:\n";
43  for (const ray & r : rays)
44  cout << '\t' << r << endl;
45  cout << ray_sum(rays) << endl;
46  }
47  /*cs.clear();
48  cdata[0] = -1; cdata[1] = 0; cdata[2] = 0;
49  for (CONSTR_TYPE i = 102; i > 1; --i) {
50  cdata[3] = i;
51  constraint new_constr(5, cdata);
52  bool success = gs.solve(new_constr);
53  success = not success;
54  }
55  const set<ray> & rays = gs.get_rays();
56  cout << "final solution:\n";
57  for (const ray & r : rays)
58  cout << '\t' << r << endl;
59  cout << ray_sum(rays) << endl;
60  cout << endl;*/
61  cout << "copying original\n";
62  GLPK_Solver gs2(gs);
63  cs.clear();
64  cdata[0] = -1; cdata[1] = 0; cdata[2] = 0; cdata[3] = 0; cdata[4] = 1;
65  constraint another_constr(5, cdata);
66  cout << "adding " << another_constr << endl;
67  success = gs2.solve(another_constr);
68  cout << "success? " << (success ? 'T' : 'F') << endl;
69  const set<ray> new_rays = gs2.get_rays();
70  cout << "new solution:\n";
71  for (const ray & r : new_rays)
72  cout << '\t' << r << endl;
73  cout << ray_sum(new_rays) << endl;
74  cout << endl;
75  cout << "now making it inconsistent...\n";
76  cs.clear();
77  cdata[0] = 1; cdata[1] = -5; cdata[4] = 0;
78  constraint final_constr(5, cdata);
79  cout << "adding " << final_constr << endl;
80  success = gs2.solve(final_constr);
81  cout << "success? " << (success ? 'T' : 'F') << endl;
82 }
ray ray_sum(const set< ray > &rs)
Add all the rays in a set.
Definition: lp_solver.cpp:281
approximate skeleton of a polyhedral cone, using GLPK linear solver
Definition: glpk_solver.hpp:37
a constraint
Definition: lp_solver.hpp:53
a ray defined by nonnegative coordinates
Definition: lp_solver.hpp:190