11module GLPKInterfaceBase
22
33using Compat
4+ using Compat. SparseArrays
5+ using Compat. LinearAlgebra
46import GLPK
57
6- importall MathProgBase. SolverInterface
7-
8- export
9- GLPKMathProgModel,
10- loadproblem!,
11- writeproblem,
12- getvarLB,
13- setvarLB!,
14- getvarUB,
15- setvarUB!,
16- getconstrLB,
17- setconstrLB!,
18- getconstrUB,
19- setconstrUB!,
20- getconstrmatrix,
21- getobj,
22- setobj!,
23- addvar!,
24- addconstr!,
25- setsense!,
26- getsense,
27- numvar,
28- numconstr,
29- getrawsolver
30-
31-
32- abstract type GLPKMathProgModel <: AbstractLinearQuadraticModel end
33-
34- function loadproblem! (lpm:: GLPKMathProgModel , filename:: AbstractString )
8+ import MathProgBase
9+ const MPB = MathProgBase
10+
11+ export GLPKMathProgModel
12+
13+
14+ abstract type GLPKMathProgModel <: MPB.AbstractLinearQuadraticModel end
15+
16+ function MPB. loadproblem! (lpm:: GLPKMathProgModel , filename:: AbstractString )
3517 if endswith (filename, " .mps" ) || endswith (filename, " .mps.gz" )
3618 GLPK. read_mps (lpm. inner, GLPK. MPS_FILE, filename)
3719 elseif endswith (filename, " .lp" ) || endswith (filename, " .lp.gz" )
4527
4628nonnull (x) = (x != nothing && ! isempty (x))
4729
48- function loadproblem! (lpm:: GLPKMathProgModel , A:: AbstractMatrix , collb, colub, obj, rowlb, rowub, sense)
30+ function MPB . loadproblem! (lpm:: GLPKMathProgModel , A:: AbstractMatrix , collb, colub, obj, rowlb, rowub, sense)
4931 lp = lpm. inner
5032
5133 m, n = size (A)
@@ -113,17 +95,17 @@ function loadproblem!(lpm::GLPKMathProgModel, A::AbstractMatrix, collb, colub, o
11395 end
11496
11597 m > 0 && n > 0 && GLPK. load_matrix (lp, ia, ja, ar)
116- setsense! (lpm, sense)
98+ MPB . setsense! (lpm, sense)
11799
118100 return lpm
119101end
120102
121103# writeproblem(m, filename::AbstractString)
122104
123- function getvarLB (lpm:: GLPKMathProgModel )
105+ function MPB . getvarLB (lpm:: GLPKMathProgModel )
124106 lp = lpm. inner
125107 n = GLPK. get_num_cols (lp)
126- lb = Array {Float64} (n)
108+ lb = Array {Float64} (undef, n)
127109 for c = 1 : n
128110 l = GLPK. get_col_lb (lp, c)
129111 if l <= - realmax (Float64)
@@ -134,7 +116,7 @@ function getvarLB(lpm::GLPKMathProgModel)
134116 return lb
135117end
136118
137- function setvarLB! (lpm:: GLPKMathProgModel , collb)
119+ function MPB . setvarLB! (lpm:: GLPKMathProgModel , collb)
138120 lp = lpm. inner
139121 n = GLPK. get_num_cols (lp)
140122 if nonnull (collb) && length (collb) != n
@@ -169,10 +151,10 @@ function setvarLB!(lpm::GLPKMathProgModel, collb)
169151 GLPK. jl_set_preemptive_check (prev_preemptive_check)
170152end
171153
172- function getvarUB (lpm:: GLPKMathProgModel )
154+ function MPB . getvarUB (lpm:: GLPKMathProgModel )
173155 lp = lpm. inner
174156 n = GLPK. get_num_cols (lp)
175- ub = Array {Float64} (n)
157+ ub = Array {Float64} (undef, n)
176158 for c = 1 : n
177159 u = GLPK. get_col_ub (lp, c)
178160 if u >= realmax (Float64)
@@ -183,7 +165,7 @@ function getvarUB(lpm::GLPKMathProgModel)
183165 return ub
184166end
185167
186- function setvarUB! (lpm:: GLPKMathProgModel , colub)
168+ function MPB . setvarUB! (lpm:: GLPKMathProgModel , colub)
187169 lp = lpm. inner
188170 n = GLPK. get_num_cols (lp)
189171 if nonnull (colub) && length (colub) != n
@@ -218,10 +200,10 @@ function setvarUB!(lpm::GLPKMathProgModel, colub)
218200 GLPK. jl_set_preemptive_check (prev_preemptive_check)
219201end
220202
221- function getconstrLB (lpm:: GLPKMathProgModel )
203+ function MPB . getconstrLB (lpm:: GLPKMathProgModel )
222204 lp = lpm. inner
223205 m = GLPK. get_num_rows (lp)
224- lb = Array {Float64} (m)
206+ lb = Array {Float64} (undef, m)
225207 for r = 1 : m
226208 l = GLPK. get_row_lb (lp, r)
227209 if l <= - realmax (Float64)
@@ -232,7 +214,7 @@ function getconstrLB(lpm::GLPKMathProgModel)
232214 return lb
233215end
234216
235- function setconstrLB! (lpm:: GLPKMathProgModel , rowlb)
217+ function MPB . setconstrLB! (lpm:: GLPKMathProgModel , rowlb)
236218 lp = lpm. inner
237219 m = GLPK. get_num_rows (lp)
238220 if nonnull (rowlb) && length (rowlb) != m
@@ -267,10 +249,10 @@ function setconstrLB!(lpm::GLPKMathProgModel, rowlb)
267249 GLPK. jl_set_preemptive_check (prev_preemptive_check)
268250end
269251
270- function getconstrUB (lpm:: GLPKMathProgModel )
252+ function MPB . getconstrUB (lpm:: GLPKMathProgModel )
271253 lp = lpm. inner
272254 m = GLPK. get_num_rows (lp)
273- ub = Array {Float64} (m)
255+ ub = zeros (m)
274256 for r = 1 : m
275257 u = GLPK. get_row_ub (lp, r)
276258 if u >= realmax (Float64)
@@ -281,7 +263,7 @@ function getconstrUB(lpm::GLPKMathProgModel)
281263 return ub
282264end
283265
284- function setconstrUB! (lpm:: GLPKMathProgModel , rowub)
266+ function MPB . setconstrUB! (lpm:: GLPKMathProgModel , rowub)
285267 lp = lpm. inner
286268 m = GLPK. get_num_rows (lp)
287269 if nonnull (rowub) && length (rowub) != m
@@ -316,7 +298,7 @@ function setconstrUB!(lpm::GLPKMathProgModel, rowub)
316298 GLPK. jl_set_preemptive_check (prev_preemptive_check)
317299end
318300
319- function getconstrmatrix (lpm:: GLPKMathProgModel )
301+ function MPB . getconstrmatrix (lpm:: GLPKMathProgModel )
320302 lp = lpm. inner
321303 m = GLPK. get_num_rows (lp)
322304 n = GLPK. get_num_cols (lp)
@@ -325,9 +307,9 @@ function getconstrmatrix(lpm::GLPKMathProgModel)
325307 for i in 1 : n
326308 nnz += length (colwise[i][1 ])
327309 end
328- colptr = Array {Int} (n+ 1 )
329- rowval = Array {Int} (nnz)
330- nzval = Array {Float64} (nnz)
310+ colptr = Array {Int} (undef, n+ 1 )
311+ rowval = Array {Int} (undef, nnz)
312+ nzval = Array {Float64} (undef, nnz)
331313 cur_nnz = 1
332314 for i in 1 : n
333315 colptr[i] = cur_nnz
@@ -342,18 +324,13 @@ function getconstrmatrix(lpm::GLPKMathProgModel)
342324end
343325
344326
345- function getobj (lpm:: GLPKMathProgModel )
327+ function MPB . getobj (lpm:: GLPKMathProgModel )
346328 lp = lpm. inner
347329 n = GLPK. get_num_cols (lp)
348- obj = Array {Float64} (n)
349- for c = 1 : n
350- l = GLPK. get_obj_coef (lp, c)
351- obj[c] = l
352- end
353- return obj
330+ return [GLPK. get_obj_coef (lp, i) for i in 1 : n]
354331end
355332
356- function setobj! (lpm:: GLPKMathProgModel , obj)
333+ function MPB . setobj! (lpm:: GLPKMathProgModel , obj)
357334 lp = lpm. inner
358335 n = GLPK. get_num_cols (lp)
359336 if nonnull (obj) && length (obj) != n
@@ -368,7 +345,7 @@ function setobj!(lpm::GLPKMathProgModel, obj)
368345 end
369346end
370347
371- function addvar! (lpm:: GLPKMathProgModel , rowidx:: Vector , rowcoef:: Vector , collb:: Real , colub:: Real , objcoef:: Real )
348+ function MPB . addvar! (lpm:: GLPKMathProgModel , rowidx:: Vector , rowcoef:: Vector , collb:: Real , colub:: Real , objcoef:: Real )
372349 if length (rowidx) != length (rowcoef)
373350 error (" rowidx and rowcoef have different legths" )
374351 end
@@ -394,12 +371,12 @@ function addvar!(lpm::GLPKMathProgModel, rowidx::Vector, rowcoef::Vector, collb:
394371 return
395372end
396373
397- function delvars! (lpm:: GLPKMathProgModel , idx:: Vector )
374+ function MPB . delvars! (lpm:: GLPKMathProgModel , idx:: Vector )
398375 GLPK. std_basis (lpm. inner)
399376 GLPK. del_cols (lpm. inner, length (idx), idx)
400377end
401378
402- function addconstr! (lpm:: GLPKMathProgModel , colidx:: Vector , colcoef:: Vector , rowlb:: Real , rowub:: Real )
379+ function MPB . addconstr! (lpm:: GLPKMathProgModel , colidx:: Vector , colcoef:: Vector , rowlb:: Real , rowub:: Real )
403380 if length (colidx) != length (colcoef)
404381 error (" colidx and colcoef have different legths" )
405382 end
@@ -424,13 +401,13 @@ function addconstr!(lpm::GLPKMathProgModel, colidx::Vector, colcoef::Vector, row
424401 return
425402end
426403
427- function delconstrs! (lpm:: GLPKMathProgModel , idx:: Vector )
404+ function MPB . delconstrs! (lpm:: GLPKMathProgModel , idx:: Vector )
428405 GLPK. std_basis (lpm. inner)
429406 GLPK. del_rows (lpm. inner, length (idx), idx)
430407end
431408
432409
433- function setsense! (lpm:: GLPKMathProgModel , sense)
410+ function MPB . setsense! (lpm:: GLPKMathProgModel , sense)
434411 lp = lpm. inner
435412 if sense == :Min
436413 GLPK. set_obj_dir (lp, GLPK. MIN)
@@ -441,7 +418,7 @@ function setsense!(lpm::GLPKMathProgModel, sense)
441418 end
442419end
443420
444- function getsense (lpm:: GLPKMathProgModel )
421+ function MPB . getsense (lpm:: GLPKMathProgModel )
445422 lp = lpm. inner
446423 s = GLPK. get_obj_dir (lp)
447424 if s == GLPK. MIN
@@ -453,10 +430,9 @@ function getsense(lpm::GLPKMathProgModel)
453430 end
454431end
455432
456- numvar (lpm:: GLPKMathProgModel ) = GLPK. get_num_cols (lpm. inner)
457- numconstr (lpm:: GLPKMathProgModel ) = GLPK. get_num_rows (lpm. inner)
433+ MPB . numvar (lpm:: GLPKMathProgModel ) = GLPK. get_num_cols (lpm. inner)
434+ MPB . numconstr (lpm:: GLPKMathProgModel ) = GLPK. get_num_rows (lpm. inner)
458435
459- getrawsolver (lpm:: GLPKMathProgModel ) = lpm. inner
436+ MPB . getrawsolver (lpm:: GLPKMathProgModel ) = lpm. inner
460437
461438end
462-
0 commit comments