Rglpk_solve_lp和glpsol(由pulp glpk solver内部使用)为相同的LP返回不同的值

时间:2013-12-05 10:30:57

标签: r mathematical-optimization glpk pulp

lp问题可以在Portfolio Optimization Problem找到。问题是基于yollins演示文稿R Tools for Portfolio Optimization中的cvar优化。

当我读取R中的lp文件并执行它时,找到了最佳解决方案。然而,当我通过glpsol做同样的事情时,它说“LP没有原始可行的解决方案”。我正在使用glpsol,pulp内部使用glpsol来解决lp,当求解器参数为pulp.GLPK()时。

在R中运行lp的步骤:

library("Rglpk")
problem <- Rglpk_read_file("path/to/problem.lp", "CPLEX_LP")
solution <- Rglpk_solve_LP(problem$objective, problem$constraints[[1]], problem$constraints[[2]], problem$constraints[[3]], problem$bounds, problem$types, problem$maximum, control=list("verbose" = TRUE))
print(solution$status)
print(solution$solution)

在glpsol中运行lp的步骤:

glpsol --cpxlp "path/to/problem.lp" -o output.sol

知道为什么吗?我试着在R中看到Rglpk_solve_lp函数的代码。它似乎是在调用glpk c库的glp_simplex函数。我猜glpsol也在内部调用glp_simplex。

环境细节:
操作系统:Ubuntu 12.04
R版本:3.02
Rglpk版本:0.5-1(GLPK版本4.52随源包一起提供)
glpsol版本:4.52

1 个答案:

答案 0 :(得分:1)

添加选项--nopresol, - noscale, - std到glpsol命令给了我与Rglpk_solve_lp相同的结果。

glpsol --cpxlp ~/Downloads/PortfolioOptimization_minReturns_0.190000.lp -o output.sol --nopresol --noscale --std

我不得不查看glpsol的代码,并将其与Rglpk软件包的代码进行比较,以解决这个问题。