rglpk 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/swig/glpk.i CHANGED
@@ -23,7 +23,7 @@
23
23
  *Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24
24
  */
25
25
 
26
- %module rglpk
26
+ %module glpk_wrapper
27
27
 
28
28
  %{
29
29
  #include "glpk.h"
@@ -34,6 +34,7 @@
34
34
  %array_functions(int, intArray)
35
35
  %array_functions(double, doubleArray)
36
36
 
37
+ %ignore glp_vprintf;
37
38
  %include "glpk.h"
38
39
 
39
40
 
data/test/helper.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ $LOAD_PATH << './ext'
3
+ require 'lib/rglpk'
data/test/test_all.rb CHANGED
@@ -1,188 +1,6 @@
1
- require 'test/unit'
2
- require 'glpk'
1
+ here = File.expand_path(File.dirname(__FILE__))
3
2
 
4
- class TestGLPK < Test::Unit::TestCase
5
-
6
- def test_create
7
- assert_instance_of GLPK::Problem, GLPK::Problem.new
8
- end
9
-
10
- def test_name
11
- p = GLPK::Problem.new
12
- p.name = 'test'
13
- assert_equal 'test', p.name
14
- end
15
-
16
- def test_obj_fun_name
17
- p = GLPK::Problem.new
18
- p.obj.name = 'test'
19
- assert_equal 'test', p.obj.name
20
- end
21
-
22
- def test_obj_fun_dir
23
- p = GLPK::Problem.new
24
- p.obj.dir = GLPK::GLP_MIN
25
- assert_equal GLPK::GLP_MIN, p.obj.dir
26
- p.obj.dir = GLPK::GLP_MAX
27
- assert_equal GLPK::GLP_MAX, p.obj.dir
28
- assert_raise(ArgumentError){p.obj.dir = 3}
29
- end
30
-
31
- def test_add_rows
32
- p = GLPK::Problem.new
33
- p.add_rows(2)
34
- assert_equal 2, p.rows.length
35
- p.add_rows(2)
36
- assert_equal 4, p.rows.length
37
- end
38
-
39
- def test_add_cols
40
- p = GLPK::Problem.new
41
- p.add_cols(2)
42
- assert_equal 2, p.cols.length
43
- p.add_cols(2)
44
- assert_equal 4, p.cols.length
45
- end
46
-
47
- def test_set_row_name
48
- p = GLPK::Problem.new
49
- p.add_rows(10)
50
- p.rows[1].name = 'test'
51
- assert_equal 'test', p.rows[1].name
52
- assert_nil p.rows[2].name
53
- end
54
-
55
- def test_set_col_name
56
- p = GLPK::Problem.new
57
- p.add_cols(2)
58
- p.cols[1].name = 'test'
59
- assert_equal 'test', p.cols[1].name
60
- assert_nil p.cols[2].name
61
- end
62
-
63
- def test_set_row_bounds
64
- p = GLPK::Problem.new
65
- p.add_rows(2)
66
- p.rows[1].set_bounds(GLPK::GLP_FR,nil,nil)
67
- assert_equal [GLPK::GLP_FR, nil, nil], p.rows[1].bounds
68
- end
69
-
70
- def test_set_col_bounds
71
- p = GLPK::Problem.new
72
- p.add_cols(2)
73
- p.cols[1].set_bounds(GLPK::GLP_FR,nil,nil)
74
- assert_equal [GLPK::GLP_FR, nil, nil], p.cols[1].bounds
75
- end
76
-
77
- def test_obj_coef
78
- p = GLPK::Problem.new
79
- p.add_cols(2)
80
- p.obj.set_coef(1,2)
81
- assert_equal [2,0], p.obj.coefs
82
- p.obj.coefs = [1,2]
83
- assert_equal [1,2], p.obj.coefs
84
- end
85
-
86
- def test_set_row
87
- p = GLPK::Problem.new
88
- p.add_rows(2)
89
- assert_raise(RuntimeError){p.rows[1].set([1,2])}
90
- p.add_cols(2)
91
- p.rows[1].set([1,2])
92
- assert_equal [1,2], p.rows[1].get
93
- end
94
-
95
- def test_set_col
96
- p = GLPK::Problem.new
97
- p.add_cols(2)
98
- assert_raise(RuntimeError){p.cols[1].set([1,2])}
99
- p.add_rows(2)
100
- p.cols[1].set([1,2])
101
- assert_equal [1,2], p.cols[1].get
102
- end
103
-
104
- def test_set_mat
105
- p = GLPK::Problem.new
106
- p.add_cols(2)
107
- p.add_rows(2)
108
- p.set_matrix([1,2,3,4])
109
- assert_equal [1,2], p.rows[1].get
110
- assert_equal [3,4], p.rows[2].get
111
- assert_equal [1,3], p.cols[1].get
112
- assert_equal [2,4], p.cols[2].get
113
- end
114
-
115
- def test_del_row
116
- p = GLPK::Problem.new
117
- p.add_cols(2)
118
- p.add_rows(2)
119
- p.set_matrix([1,2,3,4])
120
- assert_equal [1,2], p.rows[1].get
121
- p.del_rows([1])
122
- assert_equal [3,4], p.rows[1].get
123
- assert_equal [3], p.cols[1].get
124
- end
125
-
126
- def test_del_col
127
- p = GLPK::Problem.new
128
- p.add_cols(2)
129
- p.add_rows(2)
130
- p.set_matrix([1,2,3,4])
131
- assert_equal [1,3], p.cols[1].get
132
- p.del_cols([1])
133
- assert_equal [2,4], p.cols[1].get
134
- assert_equal [2], p.rows[1].get
135
- end
136
-
137
- def test_nz
138
- p = GLPK::Problem.new
139
- p.add_cols(2)
140
- p.add_rows(2)
141
- p.set_matrix([1,2,3,4])
142
- assert_equal 4, p.nz
143
- end
144
-
145
- def test_row_get_by_name
146
- p = GLPK::Problem.new
147
- assert_raises(RuntimeError){ p.rows['test'] }
148
- p.add_cols(2)
149
- p.add_rows(2)
150
- p.set_matrix([1,2,3,4])
151
- assert_raises(ArgumentError){ p.rows['test'] }
152
- p.rows[1].name = 'test'
153
- assert_equal [1,2], p.rows['test'].get
154
- end
155
-
156
- def test_col_get_by_name
157
- p = GLPK::Problem.new
158
- assert_raises(RuntimeError){ p.cols['test'] }
159
- p.add_cols(2)
160
- p.add_rows(2)
161
- p.set_matrix([1,2,3,4])
162
- assert_raises(ArgumentError){ p.cols['test'] }
163
- p.cols[1].name = 'test'
164
- assert_equal [1,3], p.cols['test'].get
165
- end
166
-
167
- def test_solve
168
- p = GLPK::Problem.new
169
- assert_raises(RuntimeError){ p.cols['test'] }
170
- p.add_cols(2)
171
- p.add_rows(2)
172
- p.set_matrix([1,2,3,4])
173
- p.simplex({:msg_lev => 1})
174
- end
175
-
176
- class D < GLPK::Problem
177
- attr_accessor :species
178
- def initialize
179
- @species = []
180
- super
181
- end
182
- end
183
-
184
- def test_derived
185
- D.new.add_rows(10)
186
- end
187
-
188
- end
3
+ require here+'/helper'
4
+ require here+'/test_basic'
5
+ require here+'/test_problem_kind'
6
+ require here+'/test_brief_example'
@@ -0,0 +1,186 @@
1
+ require File.expand_path('helper', File.dirname(__FILE__))
2
+
3
+ class TestRglpk < Test::Unit::TestCase
4
+
5
+ def test_create
6
+ assert_instance_of Rglpk::Problem, Rglpk::Problem.new
7
+ end
8
+
9
+ def test_name
10
+ p = Rglpk::Problem.new
11
+ p.name = 'test'
12
+ assert_equal 'test', p.name
13
+ end
14
+
15
+ def test_obj_fun_name
16
+ p = Rglpk::Problem.new
17
+ p.obj.name = 'test'
18
+ assert_equal 'test', p.obj.name
19
+ end
20
+
21
+ def test_obj_fun_dir
22
+ p = Rglpk::Problem.new
23
+ p.obj.dir = Rglpk::GLP_MIN
24
+ assert_equal Rglpk::GLP_MIN, p.obj.dir
25
+ p.obj.dir = Rglpk::GLP_MAX
26
+ assert_equal Rglpk::GLP_MAX, p.obj.dir
27
+ assert_raise(ArgumentError){p.obj.dir = 3}
28
+ end
29
+
30
+ def test_add_rows
31
+ p = Rglpk::Problem.new
32
+ p.add_rows(2)
33
+ assert_equal 2, p.rows.size
34
+ p.add_rows(2)
35
+ assert_equal 4, p.rows.size
36
+ end
37
+
38
+ def test_add_cols
39
+ p = Rglpk::Problem.new
40
+ p.add_cols(2)
41
+ assert_equal 2, p.cols.size
42
+ p.add_cols(2)
43
+ assert_equal 4, p.cols.size
44
+ end
45
+
46
+ def test_set_row_name
47
+ p = Rglpk::Problem.new
48
+ p.add_rows(10)
49
+ p.rows[1].name = 'test'
50
+ assert_equal 'test', p.rows[1].name
51
+ assert_nil p.rows[2].name
52
+ end
53
+
54
+ def test_set_col_name
55
+ p = Rglpk::Problem.new
56
+ p.add_cols(2)
57
+ p.cols[0].name = 'test'
58
+ assert_equal 'test', p.cols[0].name
59
+ assert_nil p.cols[1].name
60
+ end
61
+
62
+ def test_set_row_bounds
63
+ p = Rglpk::Problem.new
64
+ p.add_rows(2)
65
+ p.rows[1].set_bounds(Rglpk::GLP_FR, nil, nil)
66
+ assert_equal [Rglpk::GLP_FR, nil, nil], p.rows[1].bounds
67
+ end
68
+
69
+ def test_set_col_bounds
70
+ p = Rglpk::Problem.new
71
+ p.add_cols(2)
72
+ p.cols[1].set_bounds(Rglpk::GLP_FR, nil, nil)
73
+ assert_equal [Rglpk::GLP_FR, nil, nil], p.cols[1].bounds
74
+ end
75
+
76
+ def test_obj_coef
77
+ p = Rglpk::Problem.new
78
+ p.add_cols(2)
79
+ p.obj.set_coef(1, 2)
80
+ assert_equal [2, 0], p.obj.coefs
81
+ p.obj.coefs = [1, 2]
82
+ assert_equal [1, 2], p.obj.coefs
83
+ end
84
+
85
+ def test_set_row
86
+ p = Rglpk::Problem.new
87
+ p.add_rows(2)
88
+ assert_raise(RuntimeError){p.rows[1].set([1, 2])}
89
+ p.add_cols(2)
90
+ p.rows[1].set([1, 2])
91
+ assert_equal [1, 2], p.rows[1].get
92
+ end
93
+
94
+ def test_set_col
95
+ p = Rglpk::Problem.new
96
+ p.add_cols(2)
97
+ assert_raise(RuntimeError){p.cols[1].set([1, 2])}
98
+ p.add_rows(2)
99
+ p.cols[1].set([1, 2])
100
+ assert_equal [1, 2], p.cols[1].get
101
+ end
102
+
103
+ def test_set_mat
104
+ p = Rglpk::Problem.new
105
+ p.add_cols(2)
106
+ p.add_rows(2)
107
+ p.set_matrix([1, 2, 3, 4])
108
+ assert_equal [1, 2], p.rows[0].get
109
+ assert_equal [3, 4], p.rows[1].get
110
+ assert_equal [1, 3], p.cols[0].get
111
+ assert_equal [2, 4], p.cols[1].get
112
+ end
113
+
114
+ def test_del_row
115
+ p = Rglpk::Problem.new
116
+ p.add_cols(2)
117
+ p.add_rows(2)
118
+ p.set_matrix([1, 2, 3, 4])
119
+ assert_equal [1, 2], p.rows[0].get
120
+ p.del_rows([1])
121
+ assert_equal [3, 4], p.rows[0].get
122
+ assert_equal [3], p.cols[0].get
123
+ end
124
+
125
+ def test_del_col
126
+ p = Rglpk::Problem.new
127
+ p.add_cols(2)
128
+ p.add_rows(2)
129
+ p.set_matrix([1, 2, 3, 4])
130
+ assert_equal [1, 3], p.cols[0].get
131
+ p.del_cols([1])
132
+ assert_equal [2, 4], p.cols[0].get
133
+ assert_equal [2], p.rows[0].get
134
+ end
135
+
136
+ def test_nz
137
+ p = Rglpk::Problem.new
138
+ p.add_cols(2)
139
+ p.add_rows(2)
140
+ p.set_matrix([1, 2, 3, 4])
141
+ assert_equal 4, p.nz
142
+ end
143
+
144
+ def test_row_get_by_name
145
+ p = Rglpk::Problem.new
146
+ assert_raises(RuntimeError){ p.rows['test'] }
147
+ p.add_cols(2)
148
+ p.add_rows(2)
149
+ p.set_matrix([1, 2, 3, 4])
150
+ assert_raises(ArgumentError){ p.rows['test'] }
151
+ p.rows[0].name = 'test'
152
+ assert_equal [1, 2], p.rows['test'].get
153
+ end
154
+
155
+ def test_col_get_by_name
156
+ p = Rglpk::Problem.new
157
+ assert_raises(RuntimeError){ p.cols['test'] }
158
+ p.add_cols(2)
159
+ p.add_rows(2)
160
+ p.set_matrix([1, 2, 3, 4])
161
+ assert_raises(ArgumentError){ p.cols['test'] }
162
+ p.cols[0].name = 'test'
163
+ assert_equal [1, 3], p.cols['test'].get
164
+ end
165
+
166
+ def test_solve
167
+ p = Rglpk::Problem.new
168
+ assert_raises(RuntimeError){ p.cols['test'] }
169
+ p.add_cols(2)
170
+ p.add_rows(2)
171
+ p.set_matrix([1, 2, 3, 4])
172
+ p.simplex({:msg_lev => 1})
173
+ end
174
+
175
+ class D < Rglpk::Problem
176
+ attr_accessor :species
177
+ def initialize
178
+ @species = []
179
+ super
180
+ end
181
+ end
182
+
183
+ def test_derived
184
+ D.new.add_rows(10)
185
+ end
186
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path('helper', File.dirname(__FILE__))
2
+
3
+ class TestExample < Test::Unit::TestCase
4
+ def test_example
5
+ # The same Brief Example as found in section 1.3 of
6
+ # glpk-4.44/doc/glpk.pdf.
7
+ #
8
+ # maximize
9
+ # z = 10 * x1 + 6 * x2 + 4 * x3
10
+ #
11
+ # subject to
12
+ # p: x1 + x2 + x3 <= 100
13
+ # q: 10 * x1 + 4 * x2 + 5 * x3 <= 600
14
+ # r: 2 * x1 + 2 * x2 + 6 * x3 <= 300
15
+ #
16
+ # where all variables are non-negative
17
+ # x1 >= 0, x2 >= 0, x3 >= 0
18
+ #
19
+ p = Rglpk::Problem.new
20
+ p.name = "sample"
21
+ p.obj.dir = Rglpk::GLP_MAX
22
+
23
+ rows = p.add_rows(3)
24
+ rows[0].name = "p"
25
+ rows[0].set_bounds(Rglpk::GLP_UP, 0, 100)
26
+ rows[1].name = "q"
27
+ rows[1].set_bounds(Rglpk::GLP_UP, 0, 600)
28
+ rows[2].name = "r"
29
+ rows[2].set_bounds(Rglpk::GLP_UP, 0, 300)
30
+
31
+ cols = p.add_cols(3)
32
+ cols[0].name = "x1"
33
+ cols[0].set_bounds(Rglpk::GLP_LO, 0.0, 0.0)
34
+ cols[1].name = "x2"
35
+ cols[1].set_bounds(Rglpk::GLP_LO, 0.0, 0.0)
36
+ cols[2].name = "x3"
37
+ cols[2].set_bounds(Rglpk::GLP_LO, 0.0, 0.0)
38
+
39
+ p.obj.coefs = [10, 6, 4]
40
+
41
+ p.set_matrix([
42
+ 1, 1, 1,
43
+ 10, 4, 5,
44
+ 2, 2, 6
45
+ ])
46
+
47
+ p.simplex
48
+ z = p.obj.get
49
+ x1 = cols[0].get_prim
50
+ x2 = cols[1].get_prim
51
+ x3 = cols[2].get_prim
52
+
53
+ result = "z = %g; x1 = %g; x2 = %g; x3 = %g" % [z, x1, x2, x3]
54
+ assert_equal "z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0", result
55
+ end
56
+ end