最近要做卜东波老师线性规划的算法作业,要求用GLPK和Gurobi对结果进行验证
本来想在Windows下安装GLPK的,但是貌似Windows下必须安装VS才能对GLPK进行编译,不想装VS......于是在虚拟机里面的Ubuntu配置GLPK
一、安装
网上有两种方法
方法一:添加源然后更新源并安装,这种方法我试了一下,在添加源后再更新用sudo apt-get update貌似会出错?试了几次之后不行然后用了第二种方法
方法二:
- 到官网下载http://ftp.gnu.org/gnu/glpk/
- 选择一个版本进行下载(划重点!这里有很坑的地方!选择尽量稍微之前一点的版本,新版本可能会出错)这里我选的4.60
- 在Ubuntu里面用火狐下载之后提取到桌面
- GLPK支持使用GMP来计算大数字以及高精度浮点,默认不适用,但是使用GMP的话效率更高,因此本人在配置时添加了对GMP的支持。进入解压安装文件目录,并配置:
/configure –with-gmp
- 之后再输入命令行:
./configure
- 根据配置编译装文件:
make
- 然后就可以进行安装了,安装的默认路径是/usr/local/lib,因此需要取得管理员权限:
sudo make install
- 安装完成
二、配置中可能出现的问题
配置中可能出现:glpsol: error while loading shared libraries: libglpk.so.40: cannot open shared object file: No such file or directory 这种错误
解决方法:
- 在终上打开 gedit /etc/ld.so.conf
- 加入/usr/local/lib一行
- 执行/sbin/ldconfig这生效
三、测试
- 在测试文件目录下输入:
gedit glpsolEx.mod
- 然后编辑以下代码
/* Variables */
var x1 >= 0;
var x2 >= 0;
var x3 >= 0;
/* Object function */
maximize z: x1 + 14*x2 + 6*x3;
/* Constrains */
s.t. con1: x1 + x2 + x3 <= 4;
s.t. con2: x1 <= 2;
s.t. con3: x3 <= 3;
s.t. con4: 3*x2 + x3 <= 6;
end;
- 运行以下命令,这里glpsolEx.mod是上一步编辑的文件,将结果输出到glpsolEx.sol文件中
glpsol -m glpsolEx.mod -o glpsolEx.sol
- 程序运行完之后,在测试文件目录下输入以下命令,就可以查看输出的内容了
gedit glpsolEx.sol
- 输出内容如下
Problem: glpsolEx Rows: 5 Columns: 3 Non-zeros: 10 Status: OPTIMAL Objective: z = 32 (MAXimum) No. Row name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 z B 32 2 con1 NU 4 4 2 3 con2 B 0 2 4 con3 B 3 3 5 con4 NU 6 6 4 No. Column name St Activity Lower bound Upper bound Marginal ------ ------------ -- ------------- ------------- ------------- ------------- 1 x1 NL 0 0 -1 2 x2 B 1 0 3 x3 B 3 0 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 = 4.44e-16 on row 4 max.rel.err = 1.11e-16 on row 4 High quality KKT.DE: max.abs.err = 0.00e+00 on column 0 max.rel.err = 0.00e+00 on column 0 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
参考:
http://blog.sciencenet.cn/home.php?mod=space&uid=3249403&do=blog&id=1019884
https://www.cnblogs.com/jostree/p/4156204.html
http://blog.csdn.net/suibianshen2012/article/details/45788489?locationNum=13&fps=1
如果您觉得解决了您的问题的话,希望能点一下右下角的推荐,谢谢!