线性规划工具 GLPK 的安装及基本使用
1 概述
GLPK 全称GNU Linear Programming Kit.顾名思义,这是GNU计划下一个用于解线性规 划(Linear Programming)的工具包。它可以方便的描述线性规划问题,并给出相应解。
GLPK 的主页为:http://www.gnu.org/software/glpk/
2 安装
Ubuntu下一条命令即可: sudo apt-get install glpk
3 基本使用
- 线性规划问题描述 首先需要一个文件glpsolEx.mod来描述你的线性规划问题,示例如下
/* 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;
- 使用glpk解此问题 glpsol -m glpsolEx.mod -o glpsolEx.sol
-m filename: 指定描述问题的文件
-o filename: 指定输出结果保存在哪个文件 - 结果
Problem: glpsolEx 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 output
结果中x1 x2 x3对应的activity就是他们最终的结果,即取此结果,目标值最大。z的Activity为28,即最大值为28。
4 用途
glpk的用途是可以快速验证一个新建立的线性规划模型是否正确。在我们对一类实际问题进行抽象后,准备用线性规划来解,可以先做一些小的case,写出相应的线性规划方程,然后用glpk来快速得到结果,以便验证我们的想法,并给我们一些新的想法和直觉。一旦这些直觉得以证明。我们就可以用线性规划解决更大规模的问题,并用glpk来求出结果。