您的位置:首页 > 其它

R语言-加快混合整数规划求解速度试验(1)

2017-01-08 16:04 645 查看

R语言中使用哪个求解器比较快

最近尝试了不少的免费最优化求解器,其中包括Rglpk、Rsymphony、 gurobi等求解包进行求解混合整数规划问题。

以windows、8G内存、i7处理器进行方程的求解。

以一个625个变量,481个约束的问题分别进行求解测试。其中gurobi的不调整参数下求解时间最快大约61s,Rglpk和Rsymphony分别为393s,342s 。



相比之下,gurobi对于其他的求解器有着较快的提升,但较为麻烦的是它的验证码申请。gurobi免费版的申请方法和安装方法可以看:

http://blog.csdn.net/qq_27755195/article/details/54018074

R中调整gurobi参数加快求解速度

测试的例子是上次的求解问题0-1规划例子,,添加了上次末尾中提及的几点:

1. 每组的最大最小值尽量的密集

2. 捆绑的人尽量和捆绑的人在一组

http://blog.csdn.net/qq_27755195/article/details/53965379

测试的人数是35人,和起来一共642个变量,491个约束。每次运算10次。

测试1:稀疏矩阵表达约束矩阵

当对约束进行表达时,存在不少的0、1的位置,在gurobi例子中看到不少使用稀疏矩阵进行表达的例子,尝试一下稀疏矩阵是否对求解速度有所帮助。

test1 <- microbenchmark(result <- gurobi(model, params),
times = 10)
test1
# Unit: seconds
#    min    lq       mean    median      uq       max      neval
#  60.96    61.12    61.43    61.32    61.87     61.89      10
library(Matrix)
model$A <- Matrix(model$A, sparse = T)
test2 <- microbenchmark(result <- gurobi(model, params),
times = 10)
test2
# Unit: seconds
#    min        lq     mean   median     uq       max      neval
# 59.52     61.78    60.94     60.81   61.28      61.33     10


总体来说,在R中使用稀疏矩阵进行表达对于求解速度的变化近乎0,总体上没有什么差别,速度上快了1s不到。

测试2:MIP初始解的设置

尝试通过对Model的start参数进行设置,用贪婪算法以分差最小为目标快速构建一个初始解,尝试是否对gurobi的求解速度有所帮助。结果如下:

# Unit: seconds
min    lq     mean     median     uq      max     neval
56.26    56.31   56.50    56.52     56.58    56.81     10


自己尝试了一下,一个不同的初始解构建方式对于求解速度上有着不同的影响,一个好的初始解对于求解速度是有帮助的,试验的结果大概快乐4s中左右。初始解太过粗糙,对于求解速度一般没有影响,但是至少不会变慢。

测试3:其他参数设置

混合整数规划上,param的设置,OutputFlag设置为0,即不输出计算过程,对求解速度大概有2s左右的提升,在Method上设置为2,即Barrir的求解速度是最快的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: