0

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

当我在 R 中读取 lp 文件并执行它时,找到了最佳解决方案。而当我通过 glpsol 执行相同操作时,它会显示“LP 没有原始可行的解决方案”。我使用 glpsol 作为纸浆,当求解器参数为纸浆.GLPK() 时,内部使用 glpsol 来求解 lp。

在 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 。

环境详情:
OS:Ubuntu 12.04
R 版本:3.02
Rglpk 版本:0.5-1(GLPK 4.52 版本随源码包提供)
glpsol 版本:4.52

4

1 回答 1

1

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

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

我必须查看 glpsol 的代码并将其与 Rglpk 包的代码进行比较才能弄清楚这一点。

于 2013-12-07T13:06:14.567 回答