本文介绍各种运筹优化开源求解器-GLPK的使用
- GLPK是一款完全开源免费的运筹优化求解器,可以任意商用
Ubuntu安装GLPK
据说Ubuntu安装较为方便,所以建议首选Ubuntu
在网站下载文件:https://ftp.gnu.org/gnu/glpk/
- 可以下载任意版本,建议选最新
安装命令
1
2
3
4tar -xzvf glpk-xxx.tar.gz
./configure
make
sudo make install安装后直接执行可能出现错误
1
error while loading shared libraries: libglpk.so.36:...
解决方案(原始解决方案地址):
1
https://github.com/rstudio/renv/issues/1881
Ubuntu下GLPK的使用
下列式子参考了:线性规划工具 GLPK 的安装及基本使用
创建问题描述文件
glpkDemo.mod
1
2
3
4
5
6
7
8
9
10
11
12
13
14/* Variables */
var x1 >= 0;
var x2 >= 0;
var x3 >= 0;
/* Object function */
maximize z: 3*x1 + x2 +2*x3;
/* Constrains */
s.t. con1: x1 + x2 + 3*x3 <= 30;
s.t. con2: 2*x1 +2*x2 + 5*x3 <= 24;
s.t. con3: 4*x1 + x2 + 2*x3 <= 36;
end;执行命令解决问题
1
glpsol -m glpkDemo.mod -o ./output/glpkDemo.sol
输出文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39Problem: glpkDemo
Rows: 4
Columns: 3
Non-zeros: 12
Status: OPTIMAL
Objective: z = 28 (MAXimum)
No. Row name St Activity Lower bound Upper bound Marginal
------ ------------ -- ------------- ------------- ------------- -------------
1 z B 28
2 a B 12 30
3 b NU 24 24 0.166667
4 c NU 36 36 0.666667
No. Column name St Activity Lower bound Upper bound Marginal
------ ------------ -- ------------- ------------- ------------- -------------
1 x1 B 8 0
2 x2 B 4 0
3 x3 NL 0 0 -0.166667
Karush-Kuhn-Tucker optimality conditions:
KKT.PE: max.abs.err = 0.00e+00 on row 0
max.rel.err = 0.00e+00 on row 0
High quality
KKT.PB: max.abs.err = 0.00e+00 on row 0
max.rel.err = 0.00e+00 on row 0
High quality
KKT.DE: max.abs.err = 2.22e-16 on column 1
max.rel.err = 3.17e-17 on column 1
High quality
KKT.DB: max.abs.err = 0.00e+00 on row 0
max.rel.err = 0.00e+00 on row 0
High quality
End of outputActivity这一列就是想要的解
其他输出项如何理解?
自动化生成问题
- 使用shell或者Python自动生成
.mod
文件,然后自然解析.sol
文件,实现自动化测试参数