为什么 lpSolveAPI 求解器在第二次运行时?

问题描述

R 中的 lpSolveAPI 包可让您指定和求解线性程序。然而,在已经求解的 LP 上调用 solve() 比开始求解 LP 慢得多。为什么会发生这种情况,如何避免这个问题?

这是一个显示问题的最小示例:

set.seed(42)

library(lpSolveAPI)


#------------
# Set up LP
#------------

m <- 2 ** 15

lps.model <- make.lp(nrow = m,ncol = 3)

set.column(lps.model,1,rep(1,m))
set.column(lps.model,2,3,rep(-1,m))

set.rhs(lps.model,rnorm(m) + rep(5,m))

set.objfn(lps.model,c(1,0))

set.constr.type(lps.model,rep(">=",m))


#-----------------
# Solve it twice
#-----------------


system.time(solve(lps.model)) # 0.02 elapsed

system.time(solve(lps.model)) # 0.14 elapsed

为什么重要?

我正在做一些连续的统计测试;每个测试都涉及解决一个 LP,每个 LP 与最后一个的不同之处仅在于 O(log m) 约束。从理论上讲,通过求解第一个 LP 并保存解决方案,稍微编辑约束,然后使用该解决方案作为下一个 LP 的热启动,应该可以非常快速地完成此操作。

上述问题扩展到使用 delete.constraint() / add.constraint() 编辑 LP,这使得“高效”解决方案比解决每个 LP 冷的幼稚方法要慢得多。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)